摘要:前面的文章中已经建立起kernel与bootloader的repo,这篇开始,我们将先建立Yocto编译环境,并编译出基本的rootfs。Yocto基本meta的获取我们需要好几个meta与poky首先需要保证至少有65GB的Free磁盘空间或者更多,创建一个目录:mkdir Yocto然后clon 摘要:https://blog.csdn.net/sy373466062/article/details/51424855?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159395425019724839235659%2522%252C% 摘要:在使用之前需要先source env,导入各种环境变量(注意将路径变更成你自己的): source ../qt5_sdk/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi 然后我们可以查看一下bash的env了,下面是多出来的一些env 摘要:Toolchian中静态库的添加 没有静态库,是无法静态编译应用程序的,因此,为了方便,还需要在SDK中添加静态库,例如libc。 这个特性在只需要开启即可,在local.conf中添加一行: SDKIMAGE_FEATURES_append = "staticdev-pkgs" Toolchian 摘要:Yocto中可以配置一个Distrbution的License,然后所有的软件包,都需要符合这个license才可以被shipped到image中,如果我们需要使用违反此license的软件包,那么就需要额外配置。 例如,在bitbake编译vlc的时候出现下面的错误log: $ bitbake v 摘要:Yocto中SDK有两种: 只有Toolchain,或者Toolchain+某类GUI特性 有针对某个Distribution的SDK,即含有Toolchian也含有这个Distrbutition特殊的文件 下面分别说明。 第一类 这类的软件包有如下这些: 其实就是两类: meta-toolchai 摘要:https://blog.csdn.net/sy373466062/article/details/50380025?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159395319719724835848262%2522%252C% 摘要:这个在我们自己编译toolchain以及针对不同的硬件自己调整toolchain的时候用得多。变更方法也很简单,只需要在poky对应的配置查找一个合适的即可。 例如针对armv7而言,我们可以到下面文件查找一个合适的来使用 将自己选择好的写入到local.conf中: 摘要:查看一个文件包的依赖,我们可以使用图形化来查看,下面是一些官方说明: 例如我们要查看weston的依赖: bitbake --ui=depexp -g weston 或者 bitbake -g -u depexp weston 这个会列出不同的依赖,例如中间的是编译时候需要依赖的东西,结果如下: 摘要:有很多的硬件需要firmware才能工作,而这些firmware需要不仅仅需要找到,还需要放置到正确的位置,一般这个位置是/lib/firmware下面,但是很多也不尽然。 手动去查找这些固件,容易出现遗漏或者混淆,也有可能是年久不匹配了的固件,例如在我前面的博客中:Yocto i.MX6 (TQI 摘要:在Yocto中如果我们期望在rootfs中添加一些软件,例如可能是bash,可能是lsusb等,那么,我们可以有两种方法: 手动添加,一个个文件的拷贝在bb文件中添加安装项目,让Yocto自动帮助我们添加 第一种方法需要手动将软件包的所有文件以及依赖都一个个添加进去,耗时耗力且易错,因此使用第二中方 摘要:Yocto中一个软件包是放在bb文件中的,然后很多的bb文件集成一个recipe(配方),然后许多的recipe又组成一个meta layer,因此,要添加一个包其实就是在recipe下面添加一个bb(bitbake配置文件)。下面使用helloworld作为一个例子。 clone bb文件首先是进 摘要:一般而言,可以使用Yocto tips (5): Yocto如何更改source code的下载与git clone地址中提到的方法,但是有的时候一些地址是在bb文件include的文件中,而inc文件又可能层层包含,查找比较繁琐,因此直接到env中查找比较快。 例如要找到imx kenrel的fe 摘要:加快下载Yocto中下载是最耗时的,因此我们可以尽可能的开启最多的并行数量。 对此,我们可以在local.conf中将并行数目调大,例如我的CPU 是E3-1230 v2, 8核,所以我可以开启16个线程来下载,因为我们的网速慢,所以其实这些下载操作并非CPU密集型任务,很多包也很小,所以同时IO也 摘要:Yocto中对于不同的Package,有不同的task,即可以执行不同的操作,有一些是所有包共通的,例如clean,build等。 我们可以使用下面命令来查看一个包都有哪些可执行的task: bitbake Package -c listtasks 我们可以从里面看到clean与cleanall以及 摘要:Yocto的下载耗时可能会超过编译的时间,因此大家都希望下载一次后大家都用共用下载好了的文件,而不要再去下载。 Yocto中所有下载了的以及git clone的文件都放在环境变量DL_DIR指示的目录下,这个目录默认在machine build directory下面。 因此要共享下载文件只需要指定 摘要:现象 Yocto中在fetch一些软件包的时候经常出现一天也下载不下来,这种情况极大浪费了我们的时间。 例如,下面有三个Package下载了一天也没有完成: 解决方法 确定下载的地址,手动下载 先确定软件包的下载地址,例如对于opencv与opencv-samples软件包: 可以看到他们的git地 摘要:使用下面命令来却确定: bitbake -s | grep XXX 其中XXX为包的关键字,例如linux或者uboot,这样就可以看到所有带有关键字的包了,如下图,就是为了找到内核: 摘要:编译内核,并生成uImage+dtb,编译的命令如下:bitbake linux-imx -C compile注意这里的-C的C是大写,和小写的c是有区别的。注意这里的linux-imx是针对imx的内核,你的内核名字可能不一样,关于如何确定一个包的名字,请看:Yocto tips (4): Yoc 摘要:内核放在了哪里? 这个是放在了如下位置,我们可以用下面命令来确定: bitbake -e linux-imx | grep ^S= 图示: 还有一种方法,就是展开yocto扩展变量的值,可以通过检查bitbake -e命令的输出来检查变量的值 bitbake -e virtual/kernel |