一鹿响,package 內(nèi)添加 驅(qū)動模塊
1,添加到 kernel other 分支
2兴想,建立模塊目錄吼具,路徑是 package/kernel/hello
3,? 在 hello 目錄,建立 Makefile 文件
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=hello
PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk
define KernelPackage/hello
??SUBMENU:=Other modules
??TITLE:=This is a hello driver
??FILES:=$(PKG_BUILD_DIR)/hello.ko
??AUTOLOAD:=$(call AutoLoad,30,hello)
??KCONFIG:=
endef
define KernelPackage/hello/description
????This is a hello device.
endef
EXTRA_KCONFIG:= \
????CONFIG_HELLO=m
EXTRA_CFLAGS:= \
????$(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \
????$(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \
MAKE_OPTS:= \
????ARCH="$(LINUX_KARCH)" \
????CROSS_COMPILE="$(TARGET_CROSS)" \
????SUBDIRS="$(PKG_BUILD_DIR)/" \
????EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
????$(EXTRA_KCONFIG)
define Build/Prepare
????mkdir -p $(PKG_BUILD_DIR)
????$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
????$(MAKE) -C "$(LINUX_DIR)" \
????$(MAKE_OPTS) \
????modules
endef
$(eval $(call KernelPackage,hello))
4从橘,在 hello 目錄下, 建立 src 目錄础钠,在 src 目錄建立? hello.c 恰力,Makefile , Kconfig
MODULE_LICENSE ("GPL") 添加 模塊許可,否則提示錯誤 Unknown symbol in module
?#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
????printk("driver hello:HelloWorld!\n");
????return 0;
}
static void hello_exit(void)
{
????printk("driver hello:Goodbye, world!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("wenjin");
MODULE_DESCRIPTION("hello test");
MODULE_ALIAS("hello-wj");
5, Makefile
?? ??? ?obj-${CONFIG_HELLO}+=hello.o
?6, Kconfig
?config HELLO
????tristate "test hello"??
????help??
????This is a example, for debugging kernel model.
????If unsure, say N.??
7旗吁, make menuconfig -> kernel module -> other module -> kmod-hello (M)
8,? ?make package/kernel/hello/compile V=s
二踩萎, 交叉編譯 .ko 文件
1, 編寫 hello.c 文件
?? ??? ?? ? 如上
2很钓, 編寫 makefile 文件?
?? ??? ?? ? ARCH 需要選擇 arm64,? ?如果選擇 arm香府, 會提示?error: unrecognized argument in option '-mabi=apcs-gnu'? ???? ??? ?
obj-m += drv_regopt.o
CROSS_COMPILE="/home/wenjin/OpenwrtLede/lede/staging_dir/toolchain-aarch64_cortex-a72_gcc-8.4.0_musl/bin/aarch64-openwrt-linux-musl-"
KDIR="/home/wenjin/OpenwrtLede/lede/build_dir/target-aarch64_cortex-a72_musl/linux-bcm27xx_bcm2711/linux-5.4.101"
PWD=$(shell pwd)
all:
????????make ARCH=arm64 CROSS_COMPILE=$(CROSS_COMPILE) -C $(KDIR) M=$(PWD) modules
clean:
????????rm -rf *.o