On Wed, 2021-11-24 at 19:21 -0500, Mohammed Billoo wrote:
> Hi,
>
> I need to add TI MCU firmware as part of an OE/Yocto build for a
> project that I am working on. Basically, the firmware needs to be
> built during the overall image build and be stored in the RFS. My
> strategy to build the firmware was to set up the TI toolchain as part
> of the image build. Since I have the toolchain components and believe
> it to be unnecessary (if not impossible) to build them from source, I
> have the necessary pre-built components (provided by TI) as tarballs
> uploaded somewhere.
>
> In determining the best way to use a pre-built toolchain, I just
> copied the gcc-linaro-baremetal-arm-native recipe. But, when I go to
> bake my recipe for the toolchain, I get the following error:
>
> ERROR: ti-bios-1.0-r0 do_populate_sysroot: Error executing a python
> function in exec_python_func() autogenerated:
>
> The stack trace of python calls that resulted in this exception/failure was:
> File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
> 0001:
> *** 0002:uninative_changeinterp(d)
> 0003:
> File:
> '/home/mbilloo/yocto-builds/norbert/yocto/build-doris/../layers/poky/meta/classes/uninative.bbclass',
> lineno: 170, function: uninative_changeinterp
> 0166: continue
> 0167: if not elf.isDynamic():
> 0168: continue
> 0169:
> *** 0170: subprocess.check_output(("patchelf-uninative",
> "--set-interpreter", d.getVar("UNINATIVE_LOADER"), f),
> stderr=subprocess.STDOUT)
> 0171:}
> File: '/usr/lib64/python3.8/subprocess.py', lineno: 411, function:
> check_output
> 0407: # Explicitly passing input=None was previously
> equivalent to passing an
> 0408: # empty string. That is maintained here for
> backwards compatibility.
> 0409: kwargs['input'] = '' if
> kwargs.get('universal_newlines', False) else b''
> 0410:
> *** 0411: return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
> 0412: **kwargs).stdout
> 0413:
> 0414:
> 0415:class CompletedProcess(object):
> File: '/usr/lib64/python3.8/subprocess.py', lineno: 512, function: run
> 0508: # We don't call process.wait() as .__exit__ does
> that for us.
> 0509: raise
> 0510: retcode = process.poll()
> 0511: if check and retcode:
> *** 0512: raise CalledProcessError(retcode, process.args,
> 0513: output=stdout, stderr=stderr)
> 0514: return CompletedProcess(process.args, retcode, stdout, stderr)
> 0515:
> 0516:
> Exception: subprocess.CalledProcessError: Command
> '('patchelf-uninative', '--set-interpreter',
> '/home/mbilloo/yocto-builds/norbert/yocto/build-doris/tmp/sysroots-uninative/x86_64-linux/lib/ld-linux-x86-64.so.2',
> '/home/mbilloo/yocto-builds/norbert/yocto/build-doris/tmp/work/x86_64-linux/ti-bios/1.0-r0/sstate-build-populate_sysroot/recipe-sysroot-native/usr/share/bios_6_73_01_01/packages/ti/platforms/sim6xxx/Solaris/kelvin')'
> returned non-zero exit status 1.
>
> Subprocess output:
> patchelf: cannot find section '.gnu.version_r'
>
> It looks like uninative is ultimately being inherited and there are
> some steps taken to eliminate any host-dependencies for the toolchain
> binaries. Is there a way to disable this inheritance only for this
> recipe (if I globally disable uninative in my conf file, the recipe
> bakes just fine, but obviously can't do that)? Or, is there a better
> way of accomplishing my goal?
You could define a new uninative_changeinterp() function in your recipe to
override the core one and make it do nothing. Not a particularly elegant
solution but should work...
Cheers,
Richard
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#55418): https://lists.yoctoproject.org/g/yocto/message/55418
Mute This Topic: https://lists.yoctoproject.org/mt/87293561/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/yocto/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-