全部博文(86)
发布时间:2015-07-23 23:07:02
Linux设备驱动程序学习(12)
-Linux设备模型(底层原理简介)
以《LDD3》的说法:Linux设备模型这部分内容可以认为是高级教材,对于多数程序作者来说是不必要的。但是我个人认为:对于一个嵌入式Linux的底层程序员来说,这部分内容是很重要的。以我学习的ARM9为例,有很多总线(如SPI、IIC、IIS等等)在Linux下已经被编写成了子系统,无需自己写驱动;而这些总线又不像PCI、USB等在《LDD3》上有教程,有时还要自己研究它的子系统构架,甚至要自己添加一个新的总线类型。
对于这方面的学习,我推荐几个网页,这些也是我这部分文章的参考资料:
(1)《 Linux那些事儿 之 我是Sysfs》来源于复旦和交大三个牛人的Linux技术博客:
http://blog.csdn.net/fudan_abc
(复旦_abc)他们还分析了很多Linux的驱动,值得珍藏!
(2)《linux设备模型详解》也是一个牛人的博客文章,博客网址:
http://hi.baidu.com/csdeny/blog
(3)《s3c241......【阅读全文】
发布时间:2015-07-21 18:38:31
What is device/driver register?
Platform device-driver model
I2C device-driver model
Device/Driver register
There are three key entities including bus, device, driver.
Declare there is one special device/driver on the BUS
The name and ID of device/driver must be exclusive
The process of register is only to add the device/driver kobject into the kobject list(kset), not verify whether are the details right or not.
The bus driver will match the device and driver according to......【阅读全文】
发布时间:2015-07-19 17:18:26
一致性DMA可以认为是“同步的”,就是DMA和CPU之间看到的物理内存是一致的。流式DMA则不然。
DMA操作和CPU之间的主要隔阂就是cache,因为一般来说DMA只操作物理内存,不会动cache,但CPU却首先看到的是L1 L2cache,所以设备驱动就需要调用正确的DMA函数来操作cache。拿网卡收发包为例,假如CPU发包给网卡,那CPU填好skb的数据之后,得先把cache里有关这个skb数据的行给刷到物理内存,否则网卡从物理内存拿到的数据不是真正所要的数据。反之,CPU把skb数据装配好DMA rx descriptor的时候,得先invalid掉这个skb数据在cache里的行。这样DMA把收到的包填到物理内存后再中断告知CPU时,CPU就可以避免从cache拿到关于这个skb的老(脏)数据,而会从物理内存取包而重新建立数据cache。dma_map_single dma_unmap_single做的就是这个事情,它会根据数据的方向来判断该是clean cache还是incalid cache。......【阅读全文】
发布时间:2015-07-19 17:05:38
使用大块DMA一致性缓冲区(dma-coherent buffers)
1-2 使用小块DMA一致性缓冲区
1-3 DMA寻址限制
1-4 流式DMA映射dma_map_single......【阅读全文】