(YOCTO开发)如何配置外部工具链

一、配置外部工具链的意义

在某些场景下,yocto有需要配置下外部工具链的需求,但是很少。我们通常编译还是使用OE或者linaro提供的编译链即可。例如以下情景可以考虑外部工具链:

  • 1)减少编译时间,编译链的编译和生成可以说是最耗时的,使用外部(预制)的工具链,对于单个模块可以减少70%左右的编译时间,对于image也能减少50%的编译时间。但是对于减少编译时间的话,更好的方式是使用cache机制,这个后面有机会进行介绍。
  • 2)此外就是某些模块使用默认的工具链,它不符合格式要求。例如我们一个uboot或者是别的引导image需要一个64位的,但是我们这个kernel是32位的,虽然这种情况很少,但是,当我们想要编出指定指定架构的模块时,可以使用一个对应的外部工具链
  • 3)或者说某些模块默认的工具链编译有错,例如一个QT模块,它有对应的工具链要求。也就是编译要求器,那我们就找个外部的即可。

其实针对单个模块编译时,外部工具链能做的事,我们都可以用SDK更方便的代替,如果是单个模块的编译需求时,更推荐使用SDK!。

二、配置外部工具链的方法

需要注意的是,有些工具链:例如ia32工具链,需要确保您没有让它修改您的PATH,如果修改了,请将其删除。因为ia32 Sourcery G++工具链提供了无前缀的二进制文件(例如,gcc而不是i586-none-linux-gcc),这意味着 bitbake 将无法再直接运行主机的gcc。
具体的配置方法如下:这里暂不考虑具体的版本和工具链的版本(方法大概类似)

1、layer的配置

将meta-sourcery-master/meta-external-toolchain这两个layer添加到bblayer.conf中并使能(BBLAYERS),并保证其优先级高于meta layer(或者OE layer),也就是外部工具链的layer优先级高于默认工具链的优先级。

2、TCMODE和EXTERNAL_TOOLCHAIN的配置

设置TCMODE,为外部source。配置EXTERNAL_TOOLCHAIN为外部工具链的路径

TCMODE ?= "external-sourcery"
EXTERNAL_TOOLCHAIN = "下载的工具链目录"

其中TCMODE会自动进行很多处理,被别的地方所调用。同时也会去检查EXTERNAL_TOOLCHAIN的配置是否准确。

3、配置初始化脚本

当配置好上述后,编译过程中如果有别的环境变量配置项,需要手动执行的话,可以使用个初始化脚本,类似oe-init。

EXTERNAL_TOOLCHAIN_SETUP_SCRIPT = "XXX/setup"

其中setup的脚本,可以是根据编译错误进行的fix操作。

export TARGET_PREFIX = aarch64-none-linux-gnu-

三、编译验证

启动编译后,如果配置的外部工具链生效,对应的Build Configuration的输出中就包含了相应的配置,也可以对编译出来的产物file查看。

四、错误fix

编译过程中,对于部分模块会出现编译错误,根据具体case进行修复即可。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值