linux设备驱动之UART总结
2014-02-19 10:20
197 查看
第一次分析内核源代码,整个内核代码绕来绕去,人比较容易晕,而且深入追踪几次后不知道自己要干什么呢?自己看内核代码,看驱动,上网搜资料也有好一段时间了,大概总结一下自己的一些心得,很简单的,不是写驱动的心得,而是怎么去查看,最近看UART终端设备驱动,就以这个为例吧。
第一,弄清楚主要结构框架
这人是大概弄清楚主要框架,流程,一般linux内核驱动都是封装,分层,抽象,继承的,所以要弄个大概,知道几个关键的结构,当然要完全弄清楚了,那就是高手了,后面肯定都没什么问题了,我是新手,弄个大概就可以啦。以UART终端设备为例,需要大概知道总线,设备,驱动的层次,然后是platform总线,platform设备和platform驱动的关系,以及里面几个重要的结构,像tty_operations tty_driver tty_struct 以及uart核心层的uart_ops , uart_driver ,
uart_port等等一些中重要的结构,这个的话网上有很多很详细的文章。
第二,弄清楚主要流程
像总线,设备,驱动的话,这个大概的流程就是要注册总线,然后注册设备,然后注册驱动(当然这里设备和驱动注册没有先后之分,也可以先注册驱动在注册设备),然后总线就调用驱动去匹配(match)设备与驱动,匹配成功后就调用驱动中的探测(probe)函数初始化设备。
第三,弄清楚驱动在内核中的位置
这个我不知道别人遇到过没有,反正我是遇到了,而且还比较棘手,我不知道相关的驱动的源代码在哪里,都说驱动的话一般只是去修改一些内核中的代码,但是我连这个代码都不知道在哪里,用个source insight在内核代码中找来找去的,内核代码太多无法找啊。现在总结几点,一个要修改的主要几个大的目录就是arch,driver暂时我还只用到这俩个目录,然后一边与硬件相关的基本在arch里面,当然主要看的是arch里面对应的平台和driver里面所对应的驱动里面去查找。
第四,看Makefile与Kconfig文件
看这俩个文件,主要是定位到这个驱动设计到的一些其他核心的文件,比如一些已经抽象好的一些接口等等,都可以在这里找到文件。
第五,UART资源的一些具体的目录
1、首先是UART设备的resource资源分配的文件,这个我觉得比较重要,因为以后这部分可能最需要修改的
arch/arm/plat-s3c24xx/devs.c
这个目录包含了platform设备资源的分配
2、platform设备的注册与s3c2440的配置文件
arch/arm/mach-s3c2440/mach-smdk2440.c
这个文件包含了大部分的platform设备的注册以及很多的设备的配置,比如lcd的一些参数配置
3、arch/arm/plat-samsung/dev-uart.c 定义了串口设备对应的平台设备
4、arch/arm/mach-s3c2440/mach-smdk2440.c中有串口一些寄存器的初始化配置
5、arch/arm/plat-s3c/init.c这个函数里面注册了串口设备,这个文件主要是初始化cpu,时钟,串口等等,串口的初始化放在这里应该也是有道理的。
第一,弄清楚主要结构框架
这人是大概弄清楚主要框架,流程,一般linux内核驱动都是封装,分层,抽象,继承的,所以要弄个大概,知道几个关键的结构,当然要完全弄清楚了,那就是高手了,后面肯定都没什么问题了,我是新手,弄个大概就可以啦。以UART终端设备为例,需要大概知道总线,设备,驱动的层次,然后是platform总线,platform设备和platform驱动的关系,以及里面几个重要的结构,像tty_operations tty_driver tty_struct 以及uart核心层的uart_ops , uart_driver ,
uart_port等等一些中重要的结构,这个的话网上有很多很详细的文章。
第二,弄清楚主要流程
像总线,设备,驱动的话,这个大概的流程就是要注册总线,然后注册设备,然后注册驱动(当然这里设备和驱动注册没有先后之分,也可以先注册驱动在注册设备),然后总线就调用驱动去匹配(match)设备与驱动,匹配成功后就调用驱动中的探测(probe)函数初始化设备。
第三,弄清楚驱动在内核中的位置
这个我不知道别人遇到过没有,反正我是遇到了,而且还比较棘手,我不知道相关的驱动的源代码在哪里,都说驱动的话一般只是去修改一些内核中的代码,但是我连这个代码都不知道在哪里,用个source insight在内核代码中找来找去的,内核代码太多无法找啊。现在总结几点,一个要修改的主要几个大的目录就是arch,driver暂时我还只用到这俩个目录,然后一边与硬件相关的基本在arch里面,当然主要看的是arch里面对应的平台和driver里面所对应的驱动里面去查找。
第四,看Makefile与Kconfig文件
看这俩个文件,主要是定位到这个驱动设计到的一些其他核心的文件,比如一些已经抽象好的一些接口等等,都可以在这里找到文件。
第五,UART资源的一些具体的目录
1、首先是UART设备的resource资源分配的文件,这个我觉得比较重要,因为以后这部分可能最需要修改的
arch/arm/plat-s3c24xx/devs.c
这个目录包含了platform设备资源的分配
2、platform设备的注册与s3c2440的配置文件
arch/arm/mach-s3c2440/mach-smdk2440.c
这个文件包含了大部分的platform设备的注册以及很多的设备的配置,比如lcd的一些参数配置
3、arch/arm/plat-samsung/dev-uart.c 定义了串口设备对应的平台设备
4、arch/arm/mach-s3c2440/mach-smdk2440.c中有串口一些寄存器的初始化配置
5、arch/arm/plat-s3c/init.c这个函数里面注册了串口设备,这个文件主要是初始化cpu,时钟,串口等等,串口的初始化放在这里应该也是有道理的。
相关文章推荐
- linux设备驱动归纳总结(三):2.字符型设备的操作open、close、read、write
- linux设备驱动归纳总结
- linux设备驱动归纳总结(八):1.总线、设备和驱动
- linux设备驱动归纳总结(四):2.进程调度的相关概念
- linux设备驱动归纳总结(三): 2 open.close.read.write
- linux设备驱动归纳总结(五):2.操作硬件——IO内存
- linux设备驱动归纳总结(三):1字符型设备之设备申请
- 【Linux开发】linux设备驱动归纳总结(五):4.写个简单的LED驱动
- 【Linux开发】linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟
- linux设备驱动归纳总结(四):5.SMP下的竞态和并发
- UART, SPI, IIC对比和总结
- Linux设备驱动中的并发控制总结
- linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现
- linux设备驱动归纳总结(六):2.分享中断号
- linux设备驱动归纳总结(十二):简单的数码相框
- linux设备驱动归纳总结(三):7.异步通知fasync
- linux设备驱动归纳总结(八)3设备模型的分层与面向对象
- UART SPI I²C对比总结。
- linux设备驱动归纳总结(七):1.时间管理与内核延时
- 关于linux设备驱动模型,今天做一个简单的理解总结,可能有错误,后面可能会更正