[linux内核编程入门].1.1.构建自己的内核模块
2010-04-29 08:48
274 查看
http://linux.chinaunix.net/techdoc/beginner/2009/04/12/1107495.shtml [linux内核编程入门].1.1.构建自己的内核模块 | |
[内核编程入门]构建自己的内核模块 虽然Linux是个宏内核系统,但是内核允许在运行时动态地加载或卸载模块。这项特性为Linux内核开发与使用带来了很多方便,比如基本内核映像可以做得足够小,新功能和驱动程序可以以模块的形式提供。同时,这样做也方便调试。本文中将描述如何构造一个最简单的内核模块。 1. 编写一个简单的内核模块 模块文件中需要有入口点和出口点,这是加载与卸载模块时要被调用的。这两个接口在include/linux/init.h定义,相当于模块的“构造”与“析构”函数: module_init(init_func); module_exit(exit_func); 其中,init_func与exit_func分别在模块被加载和卸载时调用,可以在这里执行初始化与清理工作。 在include/linux/module.h文件中,给出了一系列模块相关的接口,包括: MODULE_LICENSE 声明版权 MODULE_AUTHOR 声明作者 MODULE_DESCRIPTION 给出模块的描述 等等 那么,我们可以给出一个最简单的模块: #include #include #include int init_hello() { printk(KERN_INFO "Hello, world!/n"); return 0; } void exit_hello() { printk(KERN_INFO "Goodbye, world!/n"); } module_init(init_hello); module_exit(exit_hello); 2. 如何编译执行这个模块呢? 2.6的内核采用了"kbuild"构建系统。一般情况下,有两种方法来构造一个模块,一是直接放在内核源码树里,另外一个则是直接以模块形式发布 (1) 放入内核源码树 > 在源码子目录中,创建自己的目录,比如 # mkdir net/ipv4/hello 然后把源码hello.c放入其中。 > 修改该目录下的Makefile # vim net/ipv4/Makefile 添加一行 obj-m += hello/ > 如果这个模块是需要有配置选项开启的,比如CONFIG_MY_HELLO,则还需要加入 obj-$(CONFIG_MY_HELLO) += hello/ > 最后,在hello目录下,添加自己的Makefile,一行搞定: # vim net/ipv4/hello/Makefile obj-m += hello.o (2) 单独发布,放在内核代码外 在自己的源码树目录下,可以编写这样的Makefile obj-m := hello.o 如果有多个文件,可以这样写: obj-m := hello.o hello-objs := hello-main.o hello-world.o 那么接下来,需要告诉make如何找到内核源码树和其他的Makefile # make -C <kernel source path SUBDIRS=$PWD modules即可。 如下为一个简单的Makefile样例: ifneq ($(KERNELRELEASE),) obj-m := hello.o else KERNELSRC :=/lib/modules/$(shell uname -r)/build PWD :=$(shell pwd) modules : make -C $(KERNELSRC) SUBDIRS=$(PWD) $@ clean: rm -f *.o *.ko endif |
相关文章推荐
- [linux内核编程入门].1.1.构建自己的内核模块
- 将自己的模块编译进入内核
- linux 内核模块ko入门
- 怎样在内核中添加自己的模块
- 内核模块编译 makefile入门
- 内核模块编程入门总结(1)
- Linux 下内核模块的开发方式的记录 及问题解决(入门的Helloworld)
- 添加内核模块之入门helloworld.ko
- 如何把自己的驱动编译进内核或模块
- 编写自己的内核模块
- 向内核添加自己的模块
- 如何把自己的驱动编译进内核或模块(Kconfig和Makefile)
- 为Cubieboard2构建自己的的Debian Linux的步骤(2)(分色排版)下载cb2的内核==
- 如何把自己的模块编译到内核中
- 实验4 内核驱动设计入门——模块方式驱动实验 实验报告
- 写自己的内核模块——获取一个进程的物理地址
- linux驱动开发内核模块编译——Makefile入门
- 【ASP.NET Core快速入门】(八)Middleware管道介绍、自己动手构建RequestDelegate管道
- 内核模块学习--编译自己的第一个内核模块hello_module
- 编译一个自己的内核模块,并加载进内核