linux驱动编写(其他的驱动代码)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com


    linux里面的代码很多,要全部说完,那是不现实的。在实际工作中,我们基本上需要什么驱动,就移植什么驱动。linux系统下bus-host-device模式一直没有变过,大家只要抓住这个基本原则就可以了。


1、其他还有什么重要的驱动

gpio驱动,位于drivers/gpio,主要用作键盘输入

leds驱动,位于drivers/leds,常用做开机显示或者是网口显示

uart驱动,位于drivers/tty/serial,这是最基础的驱动,可以没有lcd屏幕,但是不能没有串口

rtc驱动, 位于drivers/rtc,主要用于定时时钟

crypto驱动,位于drivers/crypto,常用于加密、校验或者纠错的驱动框架

i2c驱动,位于drivers/i2c,可用于pmu、时钟等设备

spi驱动,位于drivers/spi,可用于flash设备等


ps:

早期调试的时候,gpio和uart特别重要,除了jtag之外,基本上就剩gpio和uart这两种调试方法了。

如果是总线协议,一般直接到对应drivers/[bus]即可完成适配。

如果是device,一般用对应总线的函数注册一下也行,比如module_platform_driver,module_spi_driver等等。

当然,有的时候也会写成platform_register_driver、scsi_register_driver这种形式。

当然最简单的方法还是 module_init 和 module_exit这两个函数。


2、如果驱动不稳定,应该保存在哪个目录

drivers/staging


3、android特有的一些驱动,放在什么地方

drivers/android


4、一般如何写驱动

a、找相同目录下的一个近似文件

b、删除框架外的一切代码

c、自定义数据结构、注意包含class设备结构体

d、根据芯片手册,填充寄存器内容

e、在驱动中添加打印信息

f、调试驱动,可能使用到示波器和万用表、协议分析仪等等

g、使用第三方软件工具对驱动做压力测试


5、如何阅读驱动代码

a、结合Kconfig和Makefile一起阅读

b、分清驱动和协议,比如v4l2和media设备、alsa和asoc设备等等

c、大多数设备按照bus-host-device都可以快速厘清关系

d、快速寻找设备的接口注册信息

e、找到设备中断信息,搞定中断和接口如何互动

f、注意readl和writel函数,这部分参考spec手册

g、可以利用platform机制编写很多虚拟设备驱动,验证自己的想法


6、复杂的驱动怎么阅读

部分设备驱动的理解不依赖驱动本身,而是依赖于协议,比如

usb就要搞懂drivers/usb/core下面的代码,

media设备就要搞懂drivers/media/v4l2的代码,

sd卡就要搞懂drivers/mmc/core里面的代码,

声卡部分就要搞懂sound/core里面的代码,

搞gpu既要弄懂drivers/gpu/drm里面的通用代码等等。

如果要精通这些驱动的话,那了解这些框架或者协议都是少不了的工作。


7、ko文件是什么文件

就是一个elf文件,如果对驱动有怀疑,直接objdump反汇编好了


8、驱动编译在内核和外面有什么区别

没有区别


9、驱动实在看不懂,怎么办

放在一边,过几个星期再看好了


10、编写驱动的优缺点

优点就是可以接触到soc、os、协议和硬件,缺点就是驱动本身就是八股文,在提高个人软件架构能力方面作用有限


猜你喜欢

转载自blog.csdn.net/feixiaoxing/article/details/79903501
今日推荐