先拿出一份之前牛人的总结:
说明本人使用的内核版本:(red hat) linux 2.6.28
那个自我测试的小实验是不是太繁琐呢?因此做了尝试,而且尝试也成功了。就和大家分享一下新的简单的方法。
提示:此行为会接触到内核编译,有出现内核被污染、被损坏的可能性,因此谨慎操作。
首先是准备好插入的程序。这个编译入的小程序不需要复杂,用上面参考内容中的例子也是可以的。下面是我用的例子,是以前写过的一个,直接拿来就用了。
#include
#include
MODULE_LICENSE("GPL");
int init_s(void)
{
// printk("<0>""this is 0\n");
printk("<1>""this is 1\n");
printk("<2>""this is 2\n");
printk("<3>""this is 3\n");
printk("<4>""this is 4\n");
printk("<5>""this is 5\n");
printk("<6>""this is 6\n");
printk("<7>""this is 7\n");
printk("normal work\n");
return 0;
}
int exit_s(void)
{
printk("bye\n");
}
module_init(init_s);
module_exit(exit_s);
好啦,现在我们就可以将自己编写的函数便如内核啦!!
到底怎么做呢?
参考内容的方式也可以实现,但是大家有木有觉得很麻烦?作为粗心大意的我都觉得很容易出错,不是么?那么我们就用下面的方法!从开始到结束总共分三部:
1、找到目录,将代码保存;
2,、分别在Makefile Kconfig中添加填入项;
3、返回内核根目录,make menuconfig,make modules。
很简单吧!!!!! 具体怎么实现呢?别急。
就以上面的.c为例吧。
因为它是一个字符设备,所以我们的第1 2部需要在内核根目录的driver的char下进行操作,具体可以这样做:
[root@bogon ~]# cd /linux-2.6.28/drivers/char /*进入目录*/
还记得刚刚我们做好的.c嘛?拷贝到这里就可以了!
然后进入Makefile中 添加我们刚刚保存的这项!
FONTMAPFILE = cp437.uni
obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o tty_buff er.o tty_port.o
obj-$(CONFIG_MY_TEST) += pr.o /*这是我添加的内容*/
obj-$(CONFIG_LEGACY_PTYS) += pty.o
obj-$(CONFIG_UNIX98_PTYS) += pty.o
根据测试,你将项目添加的位置将会影响它显示的位置。
修改完Makefile以后呢就是修改Kconfig了,只需按如下方式修改:
menu "Character devices"
config MY_TEST
tristate "MY_TEST"
config VT
bool "Virtual terminal" if EMBEDDED
depends on !S390
3、4行就是新添加进去的,“tristate”可以换为“bool”,至于什么作用,后面说。
这时候都修改完了 我们就要返回内核目录下执行步骤3了。
(1)
[root@bogon linux-2.6.28]# make menuconfig
出现这个对话框以后,因为我们添加的是字符设备,所以选择Device Drivers回车。
有开全屏的朋友注意啦:这个对话框可不能最大化哦!不然会出现问题的。
因为是字符设备的缘故,所以这里当然是
Character devices了!!继续回车!!
看到了吗?我在前面将菜单名称其名为MY_TEST的,所以在这里他显示为MY_TEST了!而刚刚说的选择“bool”还是“tristate”影响就在<>中哦!如果选择前者,选择项只会有< > <*>两种,而后者就会多<M>这个选项哦!
那么我们选择M吧!!用空格改变前面的配置哦!配置好esc一路退出保存就可以了!
(2)make modules
这个不用说啦,上面一步做完了,继续在当前目录下敲make modules就可以了!然后等待。
成功的标志是什么呢?
查看内核版本下的.config文件夹下是否有么有你添加的东西呢?
看1740行!!这就是我们添加成功了!!!
再确认一下
[root@bogon linux-2.6.28]# cd drivers/char/
除了刚开始我们存入的.c文件外多了一个.ko文件,至此,我们添加工作全部完成!!!!
至于其他的东西,那篇文章总结的很详细了,这里也就不多说了。