Linux——驱动开发
驱动代码的形式一般可分为build-in和module两种形式,build-in是在编译linux同时将pcie的驱动代码编译到内核中,启动的时候就载入该驱动代码;module是在linux启动完成后通过终端输入命令insmod/remod进行载入者移除驱动。
·
一、驱动开发概述
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网卡的驱动,就需增加该选项。
该选项存在的文件包括
- C源代码
根据 inlcude/linux/autoconf.h中的宏选择编译的实际代码内容 - drivers/net下的Makefile
- include/config/auto.conf
自动生成的文件,该文件被顶层的Makefile包含 - 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
更多推荐
所有评论(0)
您需要登录才能发言
加载更多