上篇文章介绍了通过yocto编译rpi os的流程,并没有对其进行定制化修改。这篇介绍下在不修改原有项目菜单的情况下,扩展镜像特性定制OS,本篇的OS有以下特性:
环境:
简单介绍下yocto项目组织中几个常用的概念,在本篇也有使用:
yocto包含的几个默认层,可以通过bblayer.conf文件查看到,可以直接修改原有的meta数据进行定制化,这样会破坏元数据,并且在定制化多个OS时都会受到影响,新建layer达到解耦的目的:
通过新建layer作为定制OS的工作目录,通过yocto自带的devtool工具创建layer会自动将该layer追加到bblayer.conf中,也可以通过bitbake创建。
cd ~xxx/poky
source oe-init-build-env rpi-build
cd ..
devtool create-workspace meta-mylayer #在poky根目录下创建meta-mylayer
meta-mylayer文件夹默认会生成conf文件夹,用于配置包含了哪些recipe。当通过devtool来扩展和新增recipe时,会自动在该目录下生成appends和recipe文件夹来保存recipe。
上篇介绍了烧录镜像后可以通过修改cmdline.txt参数root=/dev/sda2来从U盘启动,每次烧录都要修改比较麻烦,这里通过扩展recipe修改默认启动盘:
查看meta-raspberrypi中bootfiles包含了哪些recipe,路径:meta-raspberrypi/recipes-bsp/bootfiles:
rpi-bootfiles.bb
rpi-cmdline.bb # 对应于/etc/cmdline.txt
rpi-config_git.bb #对应于/etc/config.txt
查看rpi-cmdline.bb:
devtool modify -x rpi-cmdline
CMDLINE_ROOTFS = "root=/dev/sda2 ${CMDLINE_ROOT_FSTYPE} rootwait"
bitbake rpi-cmdline -c cleansstate
bitbake rpi-cmdline
之前实验中每次刷镜像都要设置wifi名称和密码,而调试环境中的wifi一般不会变化,为了后续效率更搞,这里需要写入默认的wifi配置,并设置开机后自启,需要修改2个recipe:wpa-supplicant和init-ifupdown:
devtool modify -x wpa-supplicant
修改wpa_supplicant.conf,对应的配置文件路径为:vim meta-mylayer/sources/wpa-supplicant/oe-local-files/wpa_supplicant.conf-sane。
注:这里修改的是wpa_supplicant.conf-sane,而非wpa_supplicant.conf。在wpa-supplicant.bb中可以看到如下命令,即安装的时候会把wpa_supplicant.conf-sane修改成wpa_supplicant.conf:
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1
network={
# key_mgmt=NONE
ssid="xxx" # wifi名
psk="xxx" # 密码
}
devtool modify -x init-ifupdown
auto wlan0
IP地址默认是动态分配不是固定的,经常变化导致原有的ssh配置失效,可以通过配置固定IP地址。修改meta-mylayer/sources/init-ifupdown/interfaces,添加以下语句:
address 192.168.xxx.yyy
netmask 255.255.255.0
gateway 192.168.xxx.1
注意:yyy不要和已有的IP冲突
bitbake init-ifupdown -c cleansstate
bitbake init-ifupdown
查看yocto自带的镜像菜单,基本都是继承自core-image(如core-image-base.bb):
根据上面的语法同样可以自定义image.bb,使用devtool工具创建image.bb:
devtool add core-image-base-rpi
会在meta-mylayer目录下自动生成recipes/core-image-base-rpi/core-image-base-rpi.bb,然后在文件中修改成以下内容,其中FEATURES中打开了ssh并且添加了profile工具包:
SUMMARY = "A custom rpi image that fully supports profile and ssh"
IMAGE_FEATURES += "splash"
LICENSE = "MIT"
inherit core-image
IMAGE_FEATURES += " debug-tweaks ssh-server-openssh tools-profile "
整体的目录结构如下:
poky/meta-mylayer$ tree -L 2 -n
.
├── appends
│ ├── core-image-base-rpi.bbappend
│ ├── init-ifupdown_1.0.bbappend
│ ├── rpi-cmdline.bbappend
│ ├── rpi-config_git.bbappend
│ └── wpa-supplicant_2.10.bbappend
├── conf
│ └── layer.conf
├── README
├── recipes
│ └── core-image-base-rpi
└── sources
├── init-ifupdown
├── rpi-cmdline
├── rpi-config
└── wpa-supplicant
cd xx/poky
source oe-init-build-env rpi-build
bitbake core-image-base-rpi
在路径rpi-build/tmp/deploy/images/raspberrypi4会生成镜像文件,烧录可参考上篇。
可能是image有问题,也可能是U盘分区或者vmware驱动问题。本人在烧录过程中多次遇到烧录后启动失败现象,可以尝试重启vmware、重新格式化U盘、cleansstate重新编译镜像手段。
一般是由于被墙原因,本人编译时发现部分软件中午下载比较快,晚上较慢。另外可以采用离线的方式,本地下载后复杂到对应的下载目录,网上有教程。
修改bb后尽量单独要cleansstate后单独bitbake。非不得已不要cleanall,本人实验中曾cleanall,会把下载好的source删除,导致需要重新下载耗时耗力。
IMAGE_FEATURES用于镜像bb文件中的,可以使用操作符+=进行追加,也可以显示通过IMAGE_FEATURES:append方式,而IMAGE_FEATURES_append写法适用于老版本,新版本不再适用。EXTRA_IMAGE_FEATURES是用于local.conf文件来扩展特性。
页面更新:2024-05-18
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号