yocto 添加自己的应用程序

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 是我们自己定义的名称

yocto 添加自己的应用程序_第1张图片

这个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

yocto 添加自己的应用程序_第2张图片

最终会生成一个demo-0.1目录与一个demo_0.1.bb,这个demo名称在create_layerg过程可以自定义。

yocto 添加自己的应用程序_第3张图片

在我的系统中,将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"

添加过程遇到的问题:

yocto 添加自己的应用程序_第4张图片

这个需要在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

你可能感兴趣的:(yocto 添加自己的应用程序)