Yocto学习笔记
1. 指定SRCREV的例子
#kernel-module-m8887-wlan.bb
DESCRIPTION = "Marvell M8887 Wifi kernel module"
require include/rcar-gen3-modules-common.inc
LICENSE = "GPLv2 & MIT"
LIC_FILES_CHKSUM = "
file://m8887/wlan/gpl-2.0.txt;md5=ab04ac0f249af12befccb94447c08b77
"
inherit module
DEPENDS = "linux-renesas"
PV = "15.44"
PR = "r4"
MARVELL_M8887_URL = "git://xxx/wireless.git"
BRANCH = "master"
BRANCH_board1 = "board1/master"
BRANCH_board2 = "board2/master"
# 若使用SRCREV=${AUTOREV} 使用AUTOREV不能編譯舊版本的軟件! (也就是checkout回去后,${AUTOREV}還是目前最新版的軟件?。?# 使用externalsrc來直接編譯源碼目錄下的代碼,也可以不用每次都煩著更改SRCREV的值
SRCREV = "57341238a98b2752546b4de461f442dc4161f578"
SRC_URI += "${MARVELL_M8887_URL};protocol=ssh;branch=${BRANCH}"
S = "${WORKDIR}/git"
WLAN_SRCDIR = "${S}/m8887/wlan"
module_do_compile() {
# make marvell build-sys happy
cd ${WLAN_SRCDIR}
make
}
module_do_install() {
install -d ${D}/lib/modules/${KERNEL_VERSION}/extra/
install -d ${D}/etc/modprobe.d/
install -m 644 ${WLAN_SRCDIR}/wlan.conf ${D}/etc/modprobe.d/wlan.conf
install -m 644 ${WLAN_SRCDIR}/mlan.ko ${D}/lib/modules/${KERNEL_VERSION}/extra/
install -m 644 ${WLAN_SRCDIR}/sd8xxx.ko ${D}/lib/modules/${KERNEL_VERSION}/extra/
}
PACKAGES += "kernel-module-mlan kernel-module-sd8xxx"
RDEPENDS_kernel-module-mlan_append = " marvell-m8887-fw-cal"
RDEPENDS_kernel-module-sd8xxx_append = " marvell-m8887-fw-cal"
FILES_${PN} += "
/etc/modprobe.d/
"
View Code
2. 使用externalsrc時(shí)刻編譯最新代碼,又不會(huì)影響編譯舊版本軟件
inherit externalsrc
# a dummy local SRC_URI entry, it is used to cheat kernel.class to prepare
# STAGING_KERNEL_DIR so building out-of-tree kernel module runs smoothly
SRC_URI_append = " file://foo"
EXTERNALSRC = "${TOPDIR}/../source_code/linux"
EXTERNALSRC_BUILD = "${WORKDIR}/build"
View Code
3.externalsrc編譯軟件來避免bb文件時(shí)刻由于git hash值與源文件保持同步
SUMMARY = "Marvell M8887 BT Kernel module"
require include/rcar-gen3-modules-common.inc
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f402"
inherit module externalsrc
DEPENDS = "linux-renesas"
PV = "15.44"
PR = "r4"
EXTERNALSRC = "${TOPDIR}/../source/wireless/m8887/muart_bt" #這個(gè)就是S目錄
EXTERNALSRC_BUILD = "${WORKDIR}/build" #這個(gè)就是B目錄,編譯時(shí)(run.compile中)首先cd到這個(gè)目錄下然后進(jìn)行編譯!
EXTRA_OEMAKE += "BOARD=${MACHINE}"
do_compile() {
cp -r ${B}/* ${WORKDIR}/build/ # 也可以寫成 cp -r $(S)/* $(B)
module_do_compile
}
do_install() {
install -d ${D}/lib/modules/${KERNEL_VERSION}/extra/ #D目錄是文件系統(tǒng)的根目錄
install -m 644 ${B}/hci_uart.ko ${D}/lib/modules/${KERNEL_VERSION}/extra/
}
View Code
4.bb文件中的EXTRA_OEMAKE = "BOARD_NAME=g8s" 會(huì)以宏BOARD=g8s的方式傳給Makefile
5.有時(shí)bitbake時(shí)報(bào)elf文件"No GNU Hash",使用下面忽略 INSANE_SKIP_${PN} = "ldflags" INSANE_SKIP_${PN}-dev = "ldflags"
6.kernel-module-m8887-bt/15.44-r4/temp/run.do_compile(使用file看是個(gè)shell腳本)里面導(dǎo)出了各種變量且寫明了編譯方法。 (1)可以在bb文件中重寫module_do_compile(),可以修改其O指定的路徑 module_do_compile() { oe_runmake xxxx O=PATH1 } (2)復(fù)寫do_compile函數(shù) do_compile() { cp -r ${S}/* ${B}/ module_do_compile } bb文件中可以復(fù)寫run.do_compile中的函數(shù)
7.run.do_configure run.do_install run.do_package 這些文件在寫bb文件時(shí)也可以參考。
總結(jié)
- 上一篇: 小米手机6官方刷机包ROM合集
- 下一篇: 网络性能指标及测试方法