开始学习LDD3咯-Hello World

 


作者:Aningsk ,本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。 

嗯嗯,昨天看完了第二章构造和运行模块,虽然主要是学了一个Hello world,但也记录一下吧。

只是个人记录哈~参考价值极为有限。。。

一开始不知道这个hello_mod.c要写在哪里呢~以为要下载一份Linux源代码,然后如书中所说的安装到自己的系统中去,可是没有说明怎么安装Linux源码啊。。。后来发现这其实没有我想象的那么麻烦。在自己的系统中可以不用另外安装一个内核源码的,发行版自己带有“内核构造系统”,书中所说的安装一套源码是因为发行版可能改过东西,原版的内核并不是必须的;即使安装了一套内核,用到的也只是它的“内核构造系统”。

那什么是“内核构造系统”?我个人的理解就是编译内核及其相关的模块时,用到的那一层层的Makefile、Kconfig和茫茫多的内核头文件。前面提到我们自己在用的发行版已经有了这个东西,它所在的路径是/lib/modules/3.13.0-32-generic/build/。里面的样子就是内核源码的样子,但没有C的源码只有一层层的Makefile、Kconfig和茫茫多的内核头文件。(当然“3.13.0-32-generic”不同版本是不同的)

写helloworld模块也不用在特定的目录里写,找个自己喜欢的合适的地方就可以。如~/LDD3study/hello/

开始学习LDD3咯-Hello World

 上面这幅图是我写的(或者说是抄下来的,嘿嘿)。首先是两行头文件,是每个模块基本都要有的。呃……这就不用多说了吧,LDD3上都有说明。

还有Makefile,LDD3刚刚给出helloworld的代码时,没有给Makefile,是后面才提到的。外国人写书不像中国的那样一次性把能用的都塞过来,而是慢慢地引出来;所以就比较容易理解而不像参考答案那般了吧~

开始学习LDD3咯-Hello World

这是我写的Makefile,书上还有个逻辑更复杂点的Makefile。#----------#隔开的两个版本都可以用,$(KVERS)得到的结果就是3.13.0-32-generic

-C 和 M= 在书中有说到,这里不再重复啦。

17行,把注释去掉,则编译出的模块是带有调试信息并且没有编译优化的。

其实编译出一个模块,主要的工作都是“内核构造系统”做的,我们自己写的Makefile只是指出“内核构造系统”在哪里,我们自己写的代码在哪里,并再次调用make使用内核的Makefile来真正构造模块。(目前我是这样理解的)

 

关于/proc

Linux内核提供了一种通过/proc文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统信息,并可以改变内核的某些参数。

 

仅仅是补充了一点点书上没有提的。嗯,暂且写到这里。

Aningsk

2014-09-19