linux驱动编写(其他的驱动代码)
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里面的代码linux 驱动, 声卡部分就要搞懂sound/core里面的代码, 搞gpu既要弄懂drivers/gpu/drm里面的通用代码等等。 如果要精通这些驱动的话,那了解这些框架或者协议都是少不了的工作。 7、ko文件是什么文件 就是一个elf文件,如果对驱动有怀疑,直接objdump反汇编好了 8、驱动编译在内核和外面有什么区别 没有区别 9、驱动实在看不懂,怎么办 放在一边,过几个星期再看好了 10、编写驱动的优缺点 优点就是可以接触到soc、os、协议和硬件,缺点就是驱动本身就是八股文,在提高个人软件架构能力方面作用有限 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |