yocto编译linux,Yocto编译流程详细攻略及bitbake实⽤⽅法⽂章⽬录
⼀、yocto
(1): Yocto 编译后⽂件放在了哪⾥ 输出⽂件位置
linux内核文件放在哪(2): Yocto Linux内核编译⽬录在哪?
(3): Yocto 如何重新编译Linux内核与dtb,并放到deploy⽬录?
(4): Yocto 如何确定(到)⼀个包的名字
(5): Yocto如何更改source code的下载与git clone地址
(6): Yocto中如何共享已经下载的⽂件
(7): Yocto Bitbake的clean与cleanall以及cleansstate的区别
(8): Yocto 如何加快软件包的下载 如何只下载所有需要的软件包⽽不编译
(9): Yocto 软件包的下载地址在哪
(10): Yocto hellworld 添加⼀个软件包
(11): Yocto如何往最终的rootfs中添加软件
(12): 使⽤Yocto帮组我们寻难的固件与固件放置路径
(13): Yocto 查看软件包的依赖关系
(14): Yocto中编译链的配置变更(tuning)
(15): Yocto中的包管理器
(16): Yocto 制作SDK分发Toolchain 脱离Yocto环境开发
(17): Yocto License问题:restricted license not whitelisted in LICENSE_FLAGS_WHITELIST
(18): Yocto SDK Toolchian中静态库的添加
(19): Yocto SDK Toolchian的使⽤
⼆、bitbake
简介
下载地址
yocto中的⽬录
功能列表
⼀、yocto
(1): Yocto 编译后⽂件放在了哪⾥ 输出⽂件位置
编译完成后内核以及rootfs,内核,uboot以及dtb会放在相对于build⽬录的tmp/deploy/images/MACHINE/下⾯,这⾥MACHINE需要可能为空(对于⽼版本的poky/yocto),也可能是你的板⼦名字,例如sabresd。
对于toolchain,那么放在mp/deploy/sdk/MACHINE/下。
编译完成后内核以及rootfs以及dtb会放在相对于build⽬录的tmp/deploy/images/imx6qsabresd/下⾯
各个⽂件都有⼀个软连接来指向最新编译产⽣的⽂件,因此如果需要看到最新的⽂件,可以直接使⽤软链接即可:
(2): Yocto Linux内核编译⽬录在哪?
内核放在了哪⾥? 这个是放在了如下位置,我们可以⽤下⾯命令来确定:
bitbake -e linux-imx | grep ^S=
图⽰:
(3): Yocto 如何重新编译Linux内核与dtb,并放到deploy⽬录?
编译内核,并⽣成uImage+dtb,编译的命令如下:
bitbake linux-imx -C compile
注意这⾥的-C的C是⼤写,和⼩写的c是有区别的。
注意这⾥的linux-imx是针对imx的内核,你的内核名字可能不⼀样。
(4): Yocto 如何确定(到)⼀个包的名字
使⽤下⾯命令来却确定:
bitbake -s | grep XXX
其中XXX为包的关键字,例如linux或者uboot,这样就可以看到所有带有关键字的包了,如下图,就是为了到内核:
(5): Yocto如何更改source code的下载与git clone地址
现象
Yocto中在fetch⼀些软件包的时候经常出现⼀天也下载不下来,这种情况极⼤浪费了我们的时间。
例如,下⾯有三个Package下载了⼀天也没有完成:
解决⽅法
确定下载的地址,⼿动下载
先确定软件包的下载地址,例如对于opencv与opencv-samples软件包:
可以看到他们的git地址都是⼀样的,因此,我们可以⼿动来git clone:
可以看到我们只使⽤了⼏⼗分钟⽽已。clone下来以后,我们就可以让软件包使⽤我们本地的这个repo了,⽽不需要忙忙的去远程repo去clone。
让package克隆时使⽤本地的git
到软件包对应的bb⽂件
我们可以使⽤find命令来查
更改bb⽂件
注意⾥⾯添加了⼀个protocol指定。
再⼀次获取
bitbake opencv -c fetch
结果如下:
提⽰不到branch,于是我们到我们本地的repo中将此branch切出来,也可以将其制作成bare repo:
然后再⼀次进⾏fetch就可以了:
对于其他软件也是类似的。
(6): Yocto中如何共享已经下载的⽂件
Yocto的下载耗时可能会超过编译的时间,因此⼤家都希望下载⼀次后⼤家都⽤共⽤下载好了的⽂件,⽽不要再去下载。
Yocto中所有下载了的以及git clone的⽂件都放在环境变量DL_DIR指⽰的⽬录下,这个⽬录默认在machine build directory下⾯。因此要共享下载⽂件只需要指定此变量到下载好了的⽬录即可,可以在f中指定即可:
(7): Yocto Bitbake的clean与cleanall以及cleansstate的区别
Yocto中对于不同的Package,有不同的task,即可以执⾏不同的操作,有⼀些是所有包共通的,例如clean,build等。
我们可以使⽤下⾯命令来查看⼀个包都有哪些可执⾏的task:
bitbake Package -c listtasks
图⽰:
我们可以从⾥⾯看到clean与cleanall以及cleansstate的区别。
(8): Yocto 如何加快软件包的下载 如何只下载所有需要的软件包⽽不编译
加快下载
Yocto中下载是最耗时的,因此我们可以尽可能的开启最多的并⾏数量。
对此,我们可以在f中将并⾏数⽬调⼤,例如我的CPU 是E3-1230 v2, 8核,所以我可以开启16个线程来下载,因为我们的⽹速慢,所以其实这些下载操作并⾮CPU密集型任务,很多包也很⼩,所以同时IO也不密集,因此可以适当调⼤:
效果如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。