一、新安装内核:
1kernel.org官方网站(http://www.kernel.org/pub/linux/kernel/)下载的标准代码(.tar.bz2)。
2 解压并且进入解压目录(root)
3 #make 编译内核
4 #make modules编译内核模块
5 #make modules_install安装内核模块
6 #reboot
就可以看见新安装的内核了,选择。
二、内核模块
如果您曾经重新编译过 Linux内核,就可能会发现在内核的配置过程中,有很多设备驱动程序和其他内核元素都被编译成了模块。如果一个驱动程序被直接编译到了内核中,那么即使这个驱动程序没有运行,它的代码和静态数据也会占据一部分空间。但是如果这个驱动程序被编译成一个模块,就只有在需要内存并将其加载到内核时才会真正占用内存空间。
hello.c
#include<linux/init.h>
#include<linux/module.h>
static int hello_init(void)
{
printk( KERN_ALERT "Hello,world/\n" );
return 0;
}
static void hello_exit(void)
{
printk( KERN_ALERT "Goodbye,world\n" );
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE( "Dual BSD/GPL" );//如果一个模块没有包含任何许可权,就是不符合规范。
Makefile
obj-m:=hello.o
# make -C /usr/src/linux-`uname -r` M=`pwd` modules生成hello.ko #insmod hello.ko 加载模块(内核的输出进到了内核回环缓冲区中,而不是打印到 stdout
上,这是因为stdout
是进程特有的环境。要查看内核回环缓冲区中的消息,可以使用dmesg
工具) #lsmod 列出已经加载的模块信息 #rmmod 卸载模块