imx6ull 采用的yocto的框架来组织代码,项目中需要更换默认的BT/WIFI固件。
yocto架构默认的固件路径看这里:sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-bsp/firmware-imx/firmware-imx.inc
看软件代码,官方代码默认提供了很多的固件,这个SRC_URI就是获取的路径地址
SRC_URI = "${FSL_MIRROR}/firmware-imx-${PV}.bin;fsl-eula=true \
git://git.freescale.com/imx/imx-firmware.git;branch=${SRCBRANCH};destsuffix=${S}/git "
而现在我们想单独创建一个layer层,尽量不去更改系统原始的架构。所以需要单独创建一个layer层
主目录下执行source sources/poky/oe-init-build-env导入系统环境变量
yocto-layer create custom //custom 是我们自己定义的名称
这个recipe文件必须要创建否则编译时会提示找不到,这里也可以都选择n,然后再手动创建一个带后缀为recipe的文件夹,里面配置好bb文件即可。同时还需要将这个meta-demo配置项添加到系统编译开关中,
在../fsl-setup-release.sh 中添加:
echo "BBLAYERS += \" \${BSPDIR}/sources/meta-demo\"" >> $BUILD_DIR/conf/bblayers.conf
进入meta-demo目录文件列表如下:可以看到有个默认的example的后缀名称,不过这个名称我们可以更改,比如我就改成了brcm
最终会生成一个demo-0.1目录与一个demo_0.1.bb,这个demo名称在create_layerg过程可以自定义。
在我的系统中,将wifi固件目录名称改为brcm43456,里面有个files文件夹存放固件相关的文件。
下面再看看brcm43456_0.1.bb配置文件:
#
# This file was derived from the 'Hello World!' example recipe in the
# Yocto Project Development Manual.
#
SUMMARY = "Simple brcm43456 firmware application"
SECTION = "brcm"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://files "
S = "${WORKDIR}/files"
do_compile() {
${CC} brcm_patchram_plus.c -o brcm_patchram_plus
}
do_install() {
install -d ${D}${base_libdir}/firmware/bcm/APM_BCM43456
cp -rfv fw_bcm43456c5_ag_apsta.bin ${D}${base_libdir}/firmware/bcm/APM_BCM43456
cp -rfv fw_bcm43456c5_ag.bin ${D}${base_libdir}/firmware/bcm/APM_BCM43456
cp -rfv bcmdhd.hcd ${D}${base_libdir}/firmware/bcm/APM_BCM43456
cp -rfv nvram.txt ${D}${base_libdir}/firmware/bcm/APM_BCM43456
install -d ${D}${bindir}
install -m 0755 brcm_patchram_plus ${D}${bindir}
}
FILES_${PN} += "${base_libdir}/firmware/bcm/*"
SRC_URI 表示存放源文件的路径
fiels是我们存放wifi固件的文件夹名称
S = "${WORKDIR}/files" 表示bitbake编译时获取的路径
添加完成之后执行bitbake brcm43456,那么在tmp/work/cortexa7hf-neon-poky-linux-gnueabi/brcm43456$目录下能看到生成的brcm43456信息了,但是固件还没有编译到rootfs文件系统,需要在core-image-base.bb中添加如下属性:
IMAGE_INSTALL_append = "brcm43456"
添加过程遇到的问题:
这个需要在brcm43456_0.1.bb添加如下属性:
FILES_${PN} += "${base_libdir}/firmware/bcm/*"
添加开机启动脚本,bt与wifi需要在开机时执行启动,我的脚本如下:bt-wifi-setup.sh
#!/bin/sh
echo 0 > /sys/class/rfkill/rfkill2/state
echo 1 > /sys/class/rfkill/rfkill2/state
brcm_patchram_plus -d --enable_hci --no2bytes --tosleep 200000 --baudrate 3000000 --patchram /lib/firmware/bcm/APM_BCM43456/bcmdhd.hcd /dev/ttymxc2 &
sleep 25
rfkill unblock bluetooth
hciconfig hci0 up
sleep 2
wpa_supplicant -Dnl80211 -i wlan0 -c /etc/wpa_supplicant.conf -d&
然后需要在bb文件添加拷贝:
install -d ${D}${sysconfdir}/init.d/
install -m 0755 bt-wifi-setup.sh ${D}${sysconfdir}/init.d/bt-wifi-setup.sh
update-rc.d -r ${D} bt-wifi-setup.sh start 99 2 3 4 5 .
这个updae-rc.d脚本会将bt-wifi-setup.sh 拷贝到rc2.d~rc5.d目录,并以S99开头
参考链接:https://blog.csdn.net/wince_lover/article/details/51746708
https://wiki.phytec.com/pages/viewpage.action?pageId=69501722