当前位置:   article > 正文

Linux-驱动程序(模块加载驱动程序+内核编译时添加驱动)_驱动模块加载

驱动模块加载

驱动程序

18.3以模块的方式加载驱动程序

I 首先创建头文件driver_insmod源文件,并编写代码(需要源码可以私我):

书上代码有三个地方需要修改:

(1)头文件

(2)主设备号要改成系统未使用的,如果不知道那些没有使用,可以执行vim arch/x86/entry/syscalls/syscall_64.tbl(32位系统选择32.tbl,64位系统选择64.tbl)该命令查看,那些未使用,我这里使用的是335

(3)filp->f_dentry->d_inode需要修改成file_inode(filp)

下面是报错:

编译并安装模块

Make

Sudo insmod driver_insmod.ko

可以看到生成的文件:

用lsmod查看安装的模块

执行ls /dev命令查看设备文件是否建立成功,可以看到myalloc就是所建立的设备文件。

II 测试驱动程序:

编写driver_test.c测试函数对内存设备进行测试(测试函数的源码需要可以私我),下面是编译过程:

测试运行过程:

18.4 编译时向内核添加新设备

步骤如下:

(1)首先在/usr/src/inux-5.12.9/drivers/ 目录下建立一个名称为 drivertest  的新目录,并 设计驱动源程序 driver_kernel.c, 为了方便,采用与18.3节相同的源程序(见上文18.3)。

(2)在新建的/usr/src/linux-5.12.9/drivers/drivertest目录下建立一个新的配置文件 Kconfig 和工程管理 Makefile 文件。

工程管理 Makefile 文件根据CONFIG_DRIVER_VMALLOC 宏来决定是否编译源文件, 并输出目标模块文件。脚本内容如下:

在 Kconfig 文件中,主要为内核配置提供选择开关;并定义 DRIVER_VMALLOC宏,作为是否包含myalloc驱动的选项。myalloc的配置文件 Kconfig 内容如下:

(3)把 myalloc设备驱动程序源文件 driver_kernel.c 放到新建的/usr/src/linux-5.12.9/ drivers/drivertest/目录下,使步骤(2)建立的 Kconfig 文件、Makefile 文件和源文件同在一目录下,如图所示。

(4)修改/usr/src/linux-5.12.9/drivers/Kconfig 文件,如图18.7所示,增加一行把 myalloc 配置作为驱动的一个选项,所添加的内容如下:

(5)修改/usr/src/linux-5.12.9/drivers/Makefile文件,在文件的最后,添加如下脚本:

这样使在编译 Linux  内核驱动时,能把 drivertest/ 目 录 包 含 进 去 。 这 里 , 使 用 了 宏 定 义 为 CONFIG_DRIVER_VMALLOC 判断是否包含。

(6)完成以上修改后,make menuconfig 重新配置内核,包括加载新设备myalloc,具体设置方法是:从 Device Drivers 中选择添加 myalloc设备,其中 Device drivers 目录

enter

enter

按Tap键选择*,后save->exit(添加新的设备)

退出后开始编译内核(若出现其他内核编译的问题见

Linux--内核编译流程+系统调用(ubuntu)-CSDN博客

1.make bzImage

2.执行make install将其移动到boot路径下

3.接下来执行命令make modules来编译这些模块

4.最后执行命令make modules_install将内核模块安装到/lib/modules中

5.reboot重启

(7)检测 myalloc 驱动程序的安装

系统重启动后进入系统,通过以下命令ls -l /dev 查看 myalloc 驱动程序安装结果:

(8)测试 myalloc 驱动程序的正确性

编写Driver_test.c测试程序进行测试(该测试函数与18.3的测试函数一致,可见18.3),起初设备文件中没有内容,输出为空,第一次测试输入 Driver_kernel_testing,读Driver_kernel_testing。第二次测试输出 Driver  kernel_testing, 为原始内容,输出 Driver_kernel_testing_ 1, 读取 Driver_kernel_testing_ 1, 说明驱动是正确的。

补充驱动加载编译可能遇到的问题:

1)cat /proc/devices   //查看设备号

2)编译内核不出错但是测试运行error就有可能设备添加失败,建议模块案例18.3先调试一遍,通过后再进行内核编译。

3)注意可能需要把之前模块方式加载的驱动卸载掉。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/744613
推荐阅读
相关标签
  

闽ICP备14008679号