linux设备驱动程序第3版学习笔记(例程1)

参考网页: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信息没有打印在控制台,而是在日志中

原文地址:https://www.cnblogs.com/yangtuzi/p/7545912.html