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

  首先,要先知道你的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的源代码

  

 #include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return ;
}
static void hello_exit(void)
{
printk(KERN_ALERT"Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);

  给代码编写Makefile文件

 obj-m := hello.o
KERNELDIR := /lib/modules/3.16.-/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

  运行make

  

  生成相应的hello.ko文件

  

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

  

  卸载模块

  

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

  

Linux内核源码树建立加载hello模块的更多相关文章

  1. 构建linux内核源码树

    编写驱动程序时,需要内核源码树的支持.内核源码树时从内核源代码编译得到的.下面开始构造内核源代码的步骤.以Ubuntu为例子 1. 下载内源代码,位置www.kernel.org. (注意:源码树内核 ...

  2. linux 2.6.xx自动加载kvm模块

    在文件夹/etc/udev/rules.d/中添加文件65-kvm.rules,文件内容如下: KERNEL=="kvm", MODE="0660", GROU ...

  3. Linux内核树的建立-基于ubuntu系统

    刚看 O'REILLY 写的<LINUX 设备驱动程序>时.作者一再强调在编写驱动程序时必须 建立内核树.先前的内核只需要有一套内核头文件就够了,但因为2.6的内核模块吆喝内核源码树中的目 ...

  4. Linux驱动的两种加载方式过程分析

    一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新 ...

  5. linux内核源码注解

    轻松学习Linux操作系统内核源码的方法 针对好多Linux 爱好者对内核很有兴趣却无从下口,本文旨在介绍一种解读linux内核源码的入门方法,而不是解说linux复杂的内核机制:一.核心源程序的文件 ...

  6. 和菜鸟一起学linux内核源码之基础准备篇

    来源:http://blog.csdn.net/eastmoon502136/article/details/8711104 推荐阅读:linux内核源码最初版linux内核源代码,简单易懂,适合初学 ...

  7. Linux内核源码特殊用法

    崇拜并且转载的: http://ilinuxkernel.com/files/5/Linux_Kernel_Source_Code.htm Linux内核源码特殊用法 1 前言 Linux内核源码主要 ...

  8. Linux内核源码阅读记录一之分析存储在不同段中的函数调用过程

    在写驱动的过程中,对于入口函数与出口函数我们会用一句话来修饰他们:module_init与module_exit,那会什么经过修饰后,内核就能狗调用我们编写的入口函数与出口函数呢?下面就来分析内核调用 ...

  9. Linux内核源码分析方法

    一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都 ...

随机推荐

  1. C# Unicode编码

    为了避免在浏览器中传输数据的时候出现中文乱码,我们可以将内容进行URL编码,当然也可以将内容进行UNICODE编码.将汉字进行UNICODE编码,如:"王"编码后就成了" ...

  2. AES .net 、JS 相互加密解密

    /// <summary> /// AES加密 /// </summary> public class AES { /// <summary> /// 加密 /// ...

  3. Error: Error setting TTL index on collection : sessions

    Error: Error setting TTL index on collection : sessions 一.步骤一: 这个问题一般是直接升级 mongodb和connect-mongo的版本为 ...

  4. NavigationBar隐藏后,返回时表现不完美

    是这样的,app首页头部可能要自定义,所以选择把NavigationBar隐藏,所以在viewWillAppear时这样写: self.navigationController?.setNavigat ...

  5. iOS 使用AFNetworking遇到错误 Request failed: unacceptable content-type: text/html

    错误日志: Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacc ...

  6. 为什么要从事BPM开发

    随着互联网的迅猛发展,云计算.大数据由"热点"到落地,软件开发者已不再为数据存储.数据分析而焦头烂额:移动互联时代,Android.iOS平台给予了软件开发者更大的舞台空间:开源环 ...

  7. 用TypeScript开发了一个网页游戏引擎,开放源代码

    最开始学习电脑编程的原动力之一就是想自己编写游戏,一方面很好奇这些游戏是怎么做出来的,另一方面觉得有些地方设计的不合理,希望电脑游戏既能让人玩的有趣,又不浪费时间. 学校五年,毕业十年,学用了十多种编 ...

  8. Android常用设计模式(二)

    Android常用设计模式之观察者模式 观察者设计模式在Android应用中会经常用到,模式原理类似于这样的场景: 用户订报纸,然后在报社登记,报社来统计用户(添加用户),用户也可以取消订阅,报社删除 ...

  9. IOS开发之音频--录音

    前言:本篇介绍录音. 关于录音,这里提供更为详细的讲解网址:http://www.cnblogs.com/kenshincui/p/4186022.html#audioRecord  ,并且该博客有更 ...

  10. 同步时间linux

    针对对时间要求精确度高的服务器 1.安装时间服务器yum install ntp 2.同步时间ntpdate time.nist.gov 3.设置计划任务每隔10分钟同步一次 */10 * * * * ...