一、驱动开发概述

1.1 驱动形式

驱动代码的形式一般可分为build-in和module两种形式,build-in是在编译linux同时将pcie的驱动代码编译到内核中,启动的时候就载入该驱动代码;module是在linux启动完成后通过终端输入命令insmod/remod进行载入者移除驱动。

1.2 linux设备驱动模型

Linux内核会建立一个统一的设备模型,分别采用总线、设备、驱动三者进行抽象,其中设备与驱动都挂在总线上,当有新的设备注册或者新的驱动注册时,总线会去进行匹配操作(match函数),当发现驱动与设备能进行匹配时,就会执行probe函数的操作;
在这里插入图片描述

二、build-in驱动代码开发

2.1 配置项

在编译linux过程中,需要给特定的驱动添加选项,最后的配置选项结果会生成到.config文件中
以CONFIG_DW9000选项为例,若要在linux中添加DW9000网卡的驱动,就需增加该选项。
该选项存在的文件包括

  1. C源代码
    根据 inlcude/linux/autoconf.h中的宏选择编译的实际代码内容
  2. drivers/net下的Makefile
  3. include/config/auto.conf
    自动生成的文件,该文件被顶层的Makefile包含
  4. inlcude/linux/autoconf.h
    根据.config文件的内容自动生成

三、module驱动代码开发

通常在linux中编写的c程序都是应用程序,运行在用户空间下,但是module驱动程序是运行在内核空间下的,其格式与应用程序有一定不同。

驱动代码一般需要添加如下代码:

	#include <linux/xxx.h>
	
	MODULE_DESCRIPTION("xxx"); //模块描述
	MODULE_LICENSE("GPL"); //声明此模块的许可证,此模块符合GPL协议。否则在加载此模块时,会收到内核被污染 “kernel tainted” 的警告。
	MODULE_AUTHOR("xx"); //作者名称,可以随意命名

四、驱动开发案例

  • xilinx pcie驱动分析
    参考链接:link
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐