码迷,mamicode.com
首页 > 系统相关 > 详细

Linux内核源码树建立加载hello模块

时间:2015-08-27 18:14:48      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

  在加载模块之前,书中说要先建立内核源码树,那么,如何建立内核源码树呢?

  首先,要先知道你的OS的内核版本,用uname -r可以查得到

  技术分享

  在/url/src/目录下可以看到对应的版本目录

  技术分享

  如果没有可以用apt-cache search linux-source获取内核

  技术分享

  用sudo apt-get install linux-source-3.13.0下载内核

  下载完成后在该文件夹中产生一个对应的压缩文件 linux-source-3.13.0.tar.bz2

  然后解压该文件tar jxvf linux-source-3.13.0.tar.bz2

  进入解压后的目录

 

  然后进入root权限su (这里进入失败提示 Authentication failure),在终端中输入如下命令: 
  sudo passwd 
  Password:你当前的密码 
  Enter new UNIX password:这个是root的密码 
  Retype new UNIX password:重复root的密码 
  然后会提示成功的信息。 

  输入指令make oldconfig开始配置内核。

  之前上网查资料看到配置内核要用一个小时左右,但我输入指令后输出

  技术分享

  资料说配置完成后会在/lib/modules下生成新的目录/lib/modules/3.16.0-30-generic/ 

  在该目录ls一下发现已经存在了这个目录= =!也就是原来系统已经存在内核源码树了

  技术分享

 

  既然内核源码树已经存在,下面我们要做的就是将hello模块加载到内核中。

  下面是hello的源代码

  

 1 #include <linux/init.h> 
 2 #include <linux/module.h> 
 3 MODULE_LICENSE("Dual BSD/GPL"); 
 4 static int hello_init(void) 
 5 { 
 6     printk(KERN_ALERT "Hello, world\n"); 
 7     return 0; 
 8 } 
 9 static void hello_exit(void) 
10 { 
11     printk(KERN_ALERT"Goodbye, cruel world\n"); 
12 } 
13 module_init(hello_init); 
14 module_exit(hello_exit); 

 

  给代码编写Makefile文件

1 obj-m := hello.o 
2 KERNELDIR := /lib/modules/3.16.0-30/build 
3 PWD := $(shell pwd) 
4 modules: 
5     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 
6 modules_install: 
7     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install 

  运行make

  技术分享

  生成相应的hello.ko文件

  技术分享

  然后加载hello.ko模块,注意要在root模式下加载,然后lsmod查看加载的模块(书中说会在控制台输出hello world ,但是我的控制台没有输出)

  技术分享

  卸载模块

  技术分享

  虽然控制台没有进行输出,但是可以在/var/log/syslog下查看hello模块的输出

  技术分享

Linux内核源码树建立加载hello模块

标签:

原文地址:http://www.cnblogs.com/mage-sun/p/4763819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!