简单驱动程序的测试、字符设备驱动的makefile文件分析和驱动代码添加到内核中

1、前言

在我们写完简单的驱动程序之后,实际上就是建立了以下一种连接关系: ** 设备号-设备描述-设备行为描述三者之间建立相应的联系! **
简单驱动程序的测试、字符设备驱动的makefile文件分析和驱动代码添加到内核中_第1张图片

2、如何对已经写好的一个驱动函数进行测试呢? 需要注意哪些地方呢?

对缩写的 驱动程序进行测试,首先 通过insmod加载驱动程序到内核里,然后通过 dmesg 查看内核的输出信息。
==> 将驱动函数insmod到内核中后,可以写一个相对应的测试程序对驱动程序进行验证: (相应的驱动程序)
简单驱动程序的测试、字符设备驱动的makefile文件分析和驱动代码添加到内核中_第2张图片

2.1 将设备号与设备文件建立连接

在终端使用如下指令进行操作:
在这里插入图片描述
示意图:
简单驱动程序的测试、字符设备驱动的makefile文件分析和驱动代码添加到内核中_第3张图片
通过在终端中,执行测试程序生成的目标程序,进一步验证有没有调用到内核中的read write 函数!
(需要具体的事例进行详细的操作来进行理解!)

3、字符设备驱动的makefile分析

(1)、 在编写完相应的驱动程序源码之后,在终端直接执行make指令就能够生成相应的 *.ko 可执行程序文件,这个是怎么做到的呢?
简单驱动程序的测试、字符设备驱动的makefile文件分析和驱动代码添加到内核中_第4张图片
(2)、其实是由于有 Makefile文件的存在,才能使得直接执行一个make 指令就能够编译出可执行文件!

ifneq ($(KERNELRELEASE),)
obj-m :=charDev.o
else
PWD := $(shell pwd)                // 表示取当前的pwd值赋给PWD变量
KDIR := /lib/modules/'uname -r'/build    // 取内核的build目录给KDIR
all:
	make -C $(KDIR) M=$(PWD)      // -C:表示change,change到内核源码里面去编译, M=$( ):指定了要编译驱动的源码目录;因此就该程序会再次进入我们这个makefile文件进行执行,接下来继续去判断 KERNELRELEASE 变量.......
clean:
	rm -rf *.o *.ko *.mod.c *.symvers *.c~ *~
endif

在进行Makefile编写的时候,完全可以根据这里的详细内容进行相应的修改!

4、make menuconfig // make 指令来编译内核的实质:

(1)、 所谓的make menuconfig就是配置Kconfig文件中相应的item的值,另外**配置完的make menuconfig之后,就会生成相应的 .config文件,可以通过 vim .config 来查看刚才通过图像界面进行的相关配置 **, .config文件是动态变化的,反应的是你执行make menuconfig之后进行的一些操作。
(2)、make 的实质: 遍历所有目录下的makefile,并依照makefile的内容编译相关代码。
(3)、对下面的这个进行相关的说明:

obj- $(CONFIG_MINI210_LEDS)  += mini210_leds.o  
  // 在上一部分学到如何写makefile文件的时候,obj-*后面直接跟着的是m,而在这里是"$(CONFIG_MINI210_LEDS)",故这个跟在make menuconfig 中进行的操作有关, 如果你在make menuconfig 中选定了这个,故这里的$(CONFIG_MIN210_LEDS) 就为 Y,若没选定,在这里就为 M。  
  • obj-y : 编译到内核中;
  • obj-m:编译为驱动的形式。

在这里插入图片描述
接下来是整体的知识框图,用来说明整体上 make menuconfig 和 make 操作的实质
简单驱动程序的测试、字符设备驱动的makefile文件分析和驱动代码添加到内核中_第5张图片

5、接下来将进行实践,将自己所编写的字符设备驱动程序,添加到内核里面。

大致的技术思路:
简单驱动程序的测试、字符设备驱动的makefile文件分析和驱动代码添加到内核中_第6张图片
(1)、linux 下,所有的驱动都会按照类型进行分类,比如说你编写的是一个字符设备驱动,其位于 /driver/char/下,所以要想添加charDev驱动到内核中,首先要做的就是为charDev在/drive/char/Kconfig里面添加一个config条目,比如 TEST_CHAR 。
添加config 条目的书写规则

config CONFIG_TEST_CHAR
	tristate "my first char device"
	help                    // 用来对你所写的这个驱动函数进行相应的说明
	   My first char device 
	

(2)、然后需要修改 linux-2.6.32.2/drive/char/Makefile 文件,在这个文件里面添加如下代码:

obj-$(CONFIG_TEST_CHAR) += charDev.o

(3)、需要将 charDev源代码copy到 linux-2.6.32.2/drivers/char下面
实质说明: 其实通过第二步第三步,将内核源码注册到内核源码树中!
(4)、 make menuconfig ,选中 CONFIG_TEST_CHAR项目,设定为 [M] 或者 [Y] .
在这里,通过 make menuconfig 指令进入到配置界面的时候,你刚才所添加的字符设备驱动位于 **”Character devices ----> “**中,就可以找到刚才所添加的配置信息。(编译完之后,可以通过vim .config查看有没有将该设备驱动进行相应的配置)
(5)、重新编译即可。

你可能感兴趣的:(Linux内核相关的学习笔记)