`

ubuntu 编译内核模块过程

 
阅读更多

1、下载内核源文件

 sudo apt-cache search linux-source

 可以看到和当前操作系统统一版本的源码,例linux-source-2.6.32

 安装源码sudo apt-get install linux-source-2.6.32

 然后解压压缩包

 cd /usr/src,可以看到linux-source-2.6.32.tar.bz2

 解压内核源码文件,sudo tar jxf linux-source-2.6.32.tar.bz2 -C .

 解压完成,在/usr/src/目录下,产生linux-source-2.6.32文件夹

 

2、初始化内核文件部分脚本

 

 

 2.1 sudo make prepare (防止错误 类似include/linux/mmzone.h:18:26: error: linux/bounds.h: 没有该文件或目录)

  

 如果碰到  make: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'.  Stop.

 sudo make localmodconfig 或者 sudo make menuconfig 或 sudo make oldconfig

 

 2.2 sudo make scripts   (防止错误  /bin/sh: scripts/mod/modpost: not found )

 

 

 

3、添加模块源文件

 3.1 添加.c文件

  

#include <linux/init.h>

#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)

{

printk(KERN_ALERT " Hello World enter\n");

return 0;

}

static void hello_exit(void)

{

printk(KERN_ALERT " Hello World exit\n");

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_AUTHOR("test-author");

MODULE_DESCRIPTION("A simple Hello World Module");

MODULE_ALIAS("a simplest module");

 

3.2 添加Makefile

   

obj-m := hello.o

 

4、进行编译

   make -C /usr/src/linux-source-2.6.32/ M=$(pwd) modules

 

5、加载内核模块

   sudo insmod hello.ko

 

如果发生错误:   insmod: error inserting 'hello.ko': -1 Invalid module format  

说明使用的版本是不正确的

 

不妨试试 make -C /lib/modules/`uname -r`/build M=$(pwd) modules

 

 

 

  

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics