构建第一个驱动程序

   标准内核源码是从kernel.org官方网站(lhttp://www.kernel.org/pub/linux/kerne/)下载的标准代码。 标准内核是标准内核源码编译后得到的二进制映像文件。
      厂商内核源码是发行版厂商为了优化内核性能而进行适当修改的源码,将厂商内核源码编译后形成 厂商内核
一、新安装内核:
1kernel.org官方网站(http://www.kernel.org/pub/linux/kernel/)下载的标准代码(.tar.bz2)。
2 解压并且进入解压目录(root)
    #make menuconfig配置内核
    进入Processor type andfeature选项,回车进入Processor family选项,选择586/K5/5x86/6x86MX,保存退出
3 #make 编译内核
4 #make modules编译内核模块
5 #make modules_install安装内核模块
6 #reboot
就可以看见新安装的内核了,选择。
二、内核模块
如果您曾经重新编译过 Linux内核,就可能会发现在内核的配置过程中,有很多设备驱动程序和其他内核元素都被编译成了模块。如果一个驱动程序被直接编译到了内核中,那么即使这个驱动程序没有运行,它的代码和静态数据也会占据一部分空间。但是如果这个驱动程序被编译成一个模块,就只有在需要内存并将其加载到内核时才会真正占用内存空间。
  三、HelloWorld驱动程序:
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 卸载模块


你可能感兴趣的:(优化,Module,工具,X86,linux内核)