博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在OpenWrt下构造自己的内核模块
阅读量:5941 次
发布时间:2019-06-19

本文共 2877 字,大约阅读时间需要 9 分钟。

hot3.png

开门见山。

首先,在主目录的package目录下创建一个模块目录mymodule:

$ mkdir mymodule$ pwdxxx/package/mymodule

注意到,在package目录下有一个button-hotplug模块,其结构非常轻便,本文后续描述的内容都是参照该模块完成的。

在mymodule目录下创建一个Makefile文件和一个src目录:

$ touch Makefile$ mkdir src$ lsMakefile  src

其中Makefile文件的内容为:

  1 #  2 # Copyright (C) 2008-2010 OpenWrt.org  3 #  4 # This is free software, licensed under the GNU General Public License v2.  5 # See /LICENSE for more information.  6 #  7   8 include $(TOPDIR)/rules.mk  9 include $(INCLUDE_DIR)/kernel.mk 10  11 PKG_NAME:=mymodule 12 PKG_RELEASE:=1 13  14 include $(INCLUDE_DIR)/package.mk 15  16 define KernelPackage/mymodule 17   SUBMENU:=Other modules 18   TITLE:=My Test Module 19   FILES:=$(PKG_BUILD_DIR)/mymodule.ko 20   AUTOLOAD:=$(call AutoLoad,81,mymodule) 21   KCONFIG:= 22 endef 23  24 define KernelPackage/mymodule/description 25     Kernel module to do some test 26 endef 27  28 EXTRA_KCONFIG:= \ 29     CONFIG_MYMODULE=m 30  31 EXTRA_CFLAGS:= \ 32     $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \ 33     $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \ 34  35 MAKE_OPTS:= \ 36     ARCH="$(LINUX_KARCH)" \ 37     CROSS_COMPILE="$(KERNEL_CROSS)" \ 38     SUBDIRS="$(PKG_BUILD_DIR)" \ 39     EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ 40     $(EXTRA_KCONFIG) 41  42 define Build/Prepare 43     mkdir -p $(PKG_BUILD_DIR) 44     $(CP) ./src/* $(PKG_BUILD_DIR)/ 45 endef 46  47 define Build/Compile 48     $(MAKE) -C "$(LINUX_DIR)" \ 49         $(MAKE_OPTS) \ 50         modules 51 endef 52  53 $(eval $(call KernelPackage,mymodule))

其内容是在button-hotplug模块的Makefile文件基础上做了修改,以生成我们自己的测试模块。

src目录下的内容如下:

$ Kconfig  Makefile  mymodule.c

其中Kconfig:

 1 config MYMODULE                                                                                                                                                                                           2     tristate "My Module For Test"

Makefile:

obj-${CONFIG_MYMODULE} := mymodule.o

这两个文件的内容也是参考button-hotplug模块的对应内容生成的。

mymodule.c文件的内容就不贴了,网上有很多编写helloworld内核模块的文章,可以直接拿来做实验用。

上面的内容都完成后,回到主目录进行内核编译选项配置:

make menuconfig    Kernel modules        Other modules        /*模块Makefile中的SUBMENU指定*/            kmod-mymodule    /*设置为 M */

保存后退出。

编译我们的mymodule模块:

$ make package/mymodule/compile

生成的模块文件可在主目录下找到:

$ find ./ -name mymodule.ko./build_dir/ ... /linux/mymodule/mymodule.ko./build_dir/ ... /kmod-mymodule/lib/modules/2.6.36/mymodule.ko./staging_dir/ ... /lib/modules/2.6.36/mymodule.ko

我们使用 ./build_dir/ ... /linux/mymodule/mymodule.ko,上传到OpenWrt系统就可以通过insmod和rmmod命令来进行测试啦。

PS.

一开时我insmod mymodule.ko会报错:

insmod: can't insert 'mymodule.ko': Operation not permitted

但其实我已经是在root权限下执行了,google了一阵没有找到解答,突然想起我的module是带参数的,于是在insmod时加上了参数就能够成功执行模块了。

周末加班,终于系统学习了向往已久的OpenWrt环境下内核模块制作的方法,以后就可以在此基础上做些小东西玩玩了,蛮开心,棒棒哒!

转载于:https://my.oschina.net/u/2310891/blog/486527

你可能感兴趣的文章
linux 压缩与解压总结
查看>>
mysql脚本1064 - You have an error in your SQL syntax; check the manual
查看>>
nessus 本地扫描(一)
查看>>
linux服务器磁盘陈列
查看>>
交换机配置模式
查看>>
python----tcp/ip http
查看>>
我的友情链接
查看>>
第一本docker书学习笔记1-3章
查看>>
一個典型僵尸網絡淺析
查看>>
vmware克隆Centos6.4虚拟机网卡无法启动问题
查看>>
dba学习
查看>>
asterisk配置
查看>>
GA操作步骤和技巧(二)——用户行为分析
查看>>
shell中while循环里使用ssh的注意事项
查看>>
SHELL获取计算机外网ip的几种写法
查看>>
博客正在搬迁中
查看>>
触发器与存储过程的区别
查看>>
我的友情链接
查看>>
centos搭建supervisor
查看>>
linux日志分割
查看>>