繼OpenEmbedded User Manual - CH3, Writing Meta Data (Adding packages)之後,這一篇是教導如何新增Kernel Module package。 BB檔的寫法與OpenEmbedded User Manual - CH3, Writing Meta Data (Adding packages)雷同,只是我們這次iherit的class是module
/oe-core/meta/recipes-kernel/brook/brook_1.0.bb
inherit module DESCRIPTION = "Brook Out Tree Kernel Module" LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://LICENSE;md5=5ff2bd2dd80c7cc542a6b8de3ee4ff87" PR = "r1-${KERNEL_VERSION}" # This DEPENDS is to serialize kernel module builds DEPENDS = "virtual/kernel" SRC_URI = "file://brook.patch \ " S = "${WORKDIR}/brook-linux-${PV}"
這邊的SRC_URI我是使用patch格式,當然你也可以使用zip格式,但是zip格式需要考慮目錄名稱必須為"${WORKDIR}/brook-linux-${PV}",即bb檔中的S,但是如果是patch就不用管S目錄名稱為何了。
完整檔案結構如下
後面會陸續介紹每個檔案/oe-core/meta/recipes-kernel/brook |-- brook_1.0.bb |-- files | `-- brook.patch `-- git |-- LICENSE |-- Makefile `-- main.c
Makefile
ifneq ($(KERNELRELEASE),) # obj-m := <module_name>.o # <module_name>-y := <src1>.o <src2>.o ... EXTRA_CFLAGS += -DYAFFS_OUT_OF_TREE obj-m := brook.o brook-objs := main.o else PWD := $(shell pwd) modules: $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules modules_install: $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules_install clean: $(MAKE) -C $(KERNEL_SRC) M=$(PWD) clean endif
這是一般的Kernel Module寫法,沒有特別的地方,Out Tree build時KERNELRELEASE為空字串,所以會用下面那段。
License的內容就只有"License: GPL"這個字串
main.c
Module的主程式,只是在init與exit時印出簡單字串而已。#include <linux/module.h> MODULE_AUTHOR("Brook"); MODULE_DESCRIPTION("Kernel module for demo"); MODULE_LICENSE("GPL"); static int __init brook_init(void) { printk(KERN_INFO "Brook Module Init\n"); return 0; } module_init(brook_init); static void __exit brook_exit(void) { printk(KERN_INFO "Brook Module Exit\n"); return; } module_exit(brook_exit);
沒有留言:
張貼留言