参考网页:www.linuxidc.com/Linux/2012-12/75891.htm
参考书22页
1、查看系统内核版本
2、如果系统自动安装了源码。在/usr/src目录下会有对应的使用版本:(需要下载)
3、用非root用户查看下载源码包
4、下载4.8.0的源码包
sudo apt-get install linux-source-4.8.0
5、下载完成会在/usr/src下,有linux-source-4.8.0.tar.bz2
6、解压sudo tar jxvf linux-source-4.8.0.tar.bz2
7、出现文件夹linux-source-4.8.0
8、配置内核(?)三种配置方式(1:make oldconfig 2:make menuconfig 3:make xconfig)(?)
sudo make oldconfig
9、编译内核(一个多小时)
sudo make
10、编译后的景象
11、编译模块
sudo make modules
12、安装模块
sudo make modules_install
13、执行结束,生成新的目录/lib/modules(原系统的/lib 下载的linux_source中没有lib这个文件夹)
14、上面的4个文件夹中都有build这个目录,用的时候就懵1个4.8.17吧(不明原理)
15、在/home/yangty/下写好hello.c程序
(1)linux文件夹在哪里?
(2)MODULE_LICENSE(“yangty BSD/GPL”);//一个特殊宏,用来告诉内核,该模块采用自由许可证;如果没有这样的声明,内核在装载该模块时会产生抱怨。
16、Makefile代码(照着书和网页)
obj-m := hello.o //生成hello.o的目标文件
KERNELDIR := /lib/modules/4.8.17/build //内核路径?如下两个文件夹中的内容好像一致
PWD := $(shell pwd) 这应该是生成目标文件的路径 就是Makefile的路径
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
应该和书里的如下语句相同
make -C ~/kernel-2.6 M=`pwd` modules
为了让上面的Makefile文件能正常工作,必须在大的内核构造系统环境中调用它们。
-C选项指定内核源码目录的位置,其中保存有内核的顶层Makefile文件。M=选项让Makefile在构造modules目标之前返回到模块源代码目录。
17、make
18、加载模块
sudo insmod ./hello.ko
19、查看加载模块
sudo lsmod
或者
sudo lsmod |grep hello
20、删除模块
sudo rmmod hello
21、查看
sudo cat /var/log/syslog |grep world
日志文件清除
待解决:
printk信息没有打印在控制台,而是在日志中