openwrt 环境下编译驱动文件

一,package 内添加 驱动模块

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容