Yocto學習筆記

1. 指定SRCREV的例子linux

#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時刻編譯最新代碼,又不會影響編譯舊版本軟件git

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文件時刻因爲git hash值與源文件保持同步shell

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" #這個就是S目錄 EXTERNALSRC_BUILD = "${WORKDIR}/build" #這個就是B目錄,編譯時(run.compile中)首先cd到這個目錄下而後進行編譯! 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目錄是文件系統的根目錄 install -m 644 ${B}/hci_uart.ko ${D}/lib/modules/${KERNEL_VERSION}/extra/ }
View Code

 

4.bb文件中的EXTRA_OEMAKE = "BOARD_NAME=g8s" 會以宏BOARD=g8s的方式傳給Makefileapp

5.有時bitbake時報elf文件"No GNU Hash",使用下面忽略 INSANE_SKIP_${PN} = "ldflags" INSANE_SKIP_${PN}-dev = "ldflags"less

6.kernel-module-m8887-bt/15.44-r4/temp/run.do_compile(使用file看是個shell腳本)裏面導出了各類變量且寫明瞭編譯方法。 (1)能夠在bb文件中重寫module_do_compile(),能夠修改其O指定的路徑 module_do_compile() {  oe_runmake xxxx O=PATH1 } (2)複寫do_compile函數 do_compile() {     cp -r ${S}/* ${B}/     module_do_compile } bb文件中能夠複寫run.do_compile中的函數ssh

7.run.do_configure  run.do_install run.do_package 這些文件在寫bb文件時也能夠參考。ide

相關文章
相關標籤/搜索