如何将自己写的程序编译能模块,然后加载到linux内核中,有两种方法,步骤如下:
方法一: //属于临时加载
1. 在你的程序目录下写好C代码, 命名为 My_mod.c 下面是个简单的例子:
/***********************************************************************************************/
#include <linux/module.h> //写驱动等可参照linux源代码中的相应的驱动程序
#include <linux/kernel.h>
MODULE_LICENSE("GPL"); //必须遵循GPL协议
static int __init Mymod_init(void) //初始化函数
{
printk("Hello,my name is xiong feng,initial...\n"); //编译到内核中的程序不能用C中的函数 \
return 0; //只能用EXPORT_SYMBOL声明过的函数,用grep -R EXPORT_SYMBOL * 可以查找 \
} //当然必需在linux-source源码目录下
static void __exit Mymodclean_exit(void) //退出函数
{
printk("Hello,my name is xiong feng,clean...\n"); //
}
module_init(Mymod_init) //这两名当然不能少
module_exit(Mymodclean_exit)
/***********************************************************************************************/
上面程序有5个块:
a. 头文件 b. MODULE_LICENSE("GPL") c. init函数 d. exit函数
e. module_init(Mymod_init) ; module_exit(Mymodclean_exit)
可参考里面的多数C文件写,如:linux-source-2.6.15/sound/drivers/mtpav.c
2. 写Makefile文件:
/***********************************************************************************************/
KERNELDIR = /usr/src/linux-headers-2.6.15-23-386/ 系统的linux头文件
obj-m = My_mod.o //My_mod.o为 下一步make后生成的. o文件
all:
$(MAKE) -C $(KERNELDIR) SUBDIRS=`pwd` modules
/***********************************************************************************************/
其格式可仿照 linux-source-2.6.15/Documentation/kbuild/modules.txt 文件写
3. Mymod.c 和 Makefile两个文件在同一目录下,然后在当前目录下执行:make
4. ls 查看当前目录就有了如下文件:
Makefile My_mod.c My_mod.ko My_mod.mod.c My_mod.mod.o My_mod.o
现在就可以加载你的模块到内核中了:
insmod My_mod.ko //将该模块插入到内核中
lsmod //显示已加载的模块
rmmod My_mod.ko //删除已加载的模块
方法二: //永久性加载
1. 步骤如方法一
2. 将My_mod.c 文件拷到linux-source-2.6.15你想加载到哪个目录中,如我想加载到声卡驱动linux-2.6.11.1/sound中,
将My_mod.c拷到linux-2.6.11.1/sound中。
3. cd linux-2.6.11.1/sound
在Kconfig中加入下面几行:
/****************************************************************************************************/ config BearBeeModules //粗体为变量名,可随便命名
tristate "Bear Bee's Modules" //粗体为你在下面的make menuconfig中看到的模块名
---help---
Let's me tell you! //粗体为你在make menuconfig中看到的帮助信息
/****************************************************************************************************/
4. 在Makefile中加入:
obj-$(CONFIG_BearBeeModules) += My_mod.o
//第一个粗体与第3步的变量名相同,第二个的粗体为make后生成的.o文件,前面与你的C文件名相同.
5. cd linux-2.6.11.1/
make menuconfig
然后在Sound-->中的Open Sound System-->中找到<>Bear Bee's Modules 选中为加载模块的形式,如下
<M>Bear Bee's Modules,然后保存退出。
6. 在linux-2.6.11.1/目录下执行:make ; make install ; make modules ; make modules_install即可
7. 重启就可以在屏幕上看到你加载模块的信息了,或用dmesg | grep M_mod 查看你的模块是否加载进去
--
/**************************************/
Name: Xiong Feng
E-mail:linux0818@gmail.com
MSN:linux0818@hotmail.com
QQ:23562033
Address: GuangZhou.China
/**************************************/
2008年10月14日星期二
添加一个自己的模块到linux内核中
订阅:
博文评论 (Atom)
没有评论:
发表评论