Openwrt 学习记录:openWRT添加内核模块(五)

转载:源没有记住

注意:example/Makefile中的PKG_BUILD_DIR没有定义,不知道是否有影响,但是我添加了一句PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)

注意:如果需要编译多个文件,可以在src下面的Makefile增加"example-y := example2.o",就可以增加一个example2.c
关于内核模块的自动加载:
1  FILES:=$(PKG_BUILD_DIR)/fnsr-i2c$(PKG_MODULE_EXTENSION)    用于将制定的ko文件拷贝到root-fs/lib/modules目录下
2   AUTOLOAD:=$(call AutoLoad,99,fnsr-i2c) 应该是用于自动装载模块,在linux 2.6上工作正常,在linux 3.10不能生效,仍然需要手动输入insmod
可以在Makefile增加下面代码(在files下创建脚本my_module_start.sh)
define KernelPackage/$(PKG_NAME)/install
     $(INSTALL_DIR) $(1)/etc/init.d
     $(INSTALL_BIN) files/my_module_start.sh $(1)/etc/init.d
endef
 
进入package目录,创建模块目录
cd mcp/branches/V1.1-beta1/mcp/package
mkdir example
进入example目录,创建Makefile文件和代码路径
cd example
touch Makefile
mkdir src
 Makefile具体内容如下:

# Kernel module example
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=example
PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk
define KernelPackage/example
  SUBMENU:=Other modules
  DEPENDS:=@TARGET_octeon
  TITLE:=Support Module for example
  AUTOLOAD:=$(call AutoLoad,81,example)
  FILES:=$(PKG_BUILD_DIR)/example/example.$(LINUX_KMOD_SUFFIX)
endef
define Build/Prepare
  mkdir -p $(PKG_BUILD_DIR)
  $(CP) -R ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
  $(MAKE) -C "$(LINUX_DIR)" \
    CROSS_COMPILE="$(TARGET_CROSS)" \
    ARCH="$(LINUX_KARCH)" \
    SUBDIRS="$(PKG_BUILD_DIR)/example" \
    EXTRA_CFLAGS="-g $(BUILDFLAGS)" \
    modules
endef
$(eval $(call KernelPackage,example))

3.进入src目录,创建代码路径和相关源文件

cd src
mkdir example
cd example
touch example.c Kconfig Makefile
  example.c具体内容如下:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
/* hello_init ---- 初始化函数,当模块装载时被调用,如果成功装载返回0 否则返回非0值 */
static int __init hello_init(void)
{
   printk("I bear a charmed life.\n");
   return 0;
}
/ * hello_exit ---- 退出函数,当模块卸载时被调用 */
static void __exit hello_exit(void)
{
   printk("Out, out, brief candle\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("xxxx");
  Kconfig具体内容如下:
config hello
  tristate "Just a example"
  default n
  help
   This is a example, for debugging kernel model.
   If unsure, say N.

  Makefile具体内如如下:
obj-m := example.o
  回到主路径 mcp/branches/V1.1-beta1/mcp/,编译选项配置保存并编译
make menuconfig
  Kernel modules --->
    Other modules --->
      kmod-example
  选项设置为M,保存退出
  然后编译该模块:make package/example/compile




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenWrt内核模块是指在OpenWrt操作系统中用于扩展功能的模块。它可以通过ubox工具箱进行管理。内核模块管理使用kmodloader来管理,包括加载内核模块、移除内核模块以及查看已加载的内核模块状态。\[1\]在编译OpenWrt源码时,可以使用命令"make package/kernel/hello-kernel/compile V=s"来编译驱动模块,并在编译完成后的目录中找到生成的内核模块文件。\[2\]在软件包定义中,可以设置内核模块的一些变量,如SUBMENU、TITLE、FILES、AUTOLOAD和DEPENDS等,以便在make menuconfig中进行配置和管理。\[3\] #### 引用[.reference_title] - *1* [OpenWrt开发必备软件模块——ubox(内核模块、日志管理、UCI配置文件数据类型的验证)](https://blog.csdn.net/qq_41453285/article/details/102621904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [超详细!手把手演示编译OpenWrt内核驱动模块](https://blog.csdn.net/qq_41453285/article/details/102760270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值