openwrt 環(huán)境下編譯驅(qū)動文件

一,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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容