免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: g1e2g3123
打印 上一主题 下一主题

[驱动] 怎样学习linux驱动 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-01-24 20:07 |只看该作者
宋宝华的驱动详解还不错啊 上面的知识点都很基础的 。。

论坛徽章:
0
12 [报告]
发表于 2011-01-24 20:08 |只看该作者
宋宝华的驱动详解还不错啊 上面的知识点都很基础的 。。

论坛徽章:
0
13 [报告]
发表于 2011-01-25 17:18 |只看该作者
本人现在在学习linux驱动,接触过三本书
1、《linux设备驱动程序》,个人觉得很深,看起来没劲。
2、宋宝华那本,主要介绍函数的使用,个人感觉有些东西又讲得不清楚。不过例子比较简单,而且是ARM。
3、《linux内核设计与实现》,我觉得很好的一本书,虽然是讲内核的,但跟驱动也有很大联系,而且我觉得不会太难。

我一般是看《linux内核设计与实现》,尝试自己写驱动,如果不行就看宋宝华的例子,实在有些知识点不明白,那就看《linux设备驱动程序》或者上网找。

论坛徽章:
0
14 [报告]
发表于 2011-01-26 11:31 |只看该作者
驱动在于架构只有了解了驱动的架构,才可以写出好的额驱动。写驱动简单,学架构难啊

论坛徽章:
0
15 [报告]
发表于 2011-01-27 15:53 |只看该作者
同意楼上
我现在还在学bootloader呢。。。

论坛徽章:
0
16 [报告]
发表于 2011-03-24 16:14 |只看该作者
介绍两本书,一本是linux device driver,另一本是understanding the linux kernel。
都是很经典的书籍,建议看英文原版的,中文翻译的太垃圾。
百度文库都有。
我就是看两本开始。
一起加油咯。

论坛徽章:
31
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43CU十二周年纪念徽章
日期:2013-10-24 15:41:34丑牛
日期:2013-12-01 10:11:07水瓶座
日期:2014-01-15 08:47:25
17 [报告]
发表于 2011-03-25 11:45 |只看该作者
《Linux设备驱动开发详解》 怎么样?

论坛徽章:
0
18 [报告]
发表于 2011-03-25 18:32 |只看该作者
Essential Linux Driver
可以结合自己的开发板硬件先写个简单的驱动,如Framebuffer,在rootfs上用module方式进行测试,insmod以及rmmod,等调通了一款驱动,再用build-in方式去调网卡等复杂点的驱动……慢慢来……
不过最好先写写bootloader,这样在熟悉硬件的同时,还能体会Kernel中操作硬件的特殊……

论坛徽章:
0
19 [报告]
发表于 2011-03-25 19:52 |只看该作者
大家好,我现在在一家嵌入式公司做GUI,想向驱动方向转,现在自己在下面学觉得很迷茫,不知道一时该从哪下手 ...
g1e2g3123 发表于 2011-01-02 15:02



个人觉得宋宝华那本书,算是国内少见的,能把问题说得清楚的,但是的确是对于完全的新手,可能觉得说的又有点抽象了。
但是仍然是本不错的学习资料和参考资料。
对于学驱动,写某个设备的驱动,我的感觉是,基本步骤是,了解对应设备的硬件的特性,然后了解到设备所对应的软件协议,然后再了解对应软件平台的架构,然后才只要要实现哪些代码,具体这些代码是做实现了什么功能,最后才搞清楚,除了软件框架之外,你作为驱动开发者,要实现哪些代码,一般都是一些函数接口之类的具体细节硬件操作的部分。

拿我了解的Linux下的Nand flash为例,首先你要去搞懂nand flash的硬件的基本知识,然后有了这些基本知识,才知道要实现数据的读写等操作,软件要发送什么命令以及如何发送等等,接着,要了解Linux的关于nand flash的软件架构MTD的作用和已经实现了哪些通用的操作,最后才能看懂,除了架构中帮你实现了的通用操作部分,你去写驱动,自己要实现哪些底层的细节操作所对应的代码。

总结下就是:
1.了解硬件知识和工作机制
2.了解软件平台(常见的是Linux下的驱动所相关的架构,或者Windows的驱动编程机制)
3.最后你要搞懂你要做哪些工作,实现哪些函数和对应的功能。
4.一般来说,驱动的调试,往往会比你单纯写完了驱动所需要的工作,更加耗精力。

最后才是经过驱动调试,得到一个合格的驱动。
此时,你也才会更加了解相关的硬件以及软件。


对于你如何学驱动:
最好找一个简单的纯软件的例子,这点,宋宝华的书里面就有例子,或者inux下驱动编程的经典书LDD,最新版本是第三版,所以被叫做LDD3,具体去这里下载:
Linux Device Drivers 3rd Edition 中文版+英文版 CHM+PDF
http://bbs2.chinaunix.net/thread-1950198-1-1.html
按照宋宝华的书里面的例子,自己一点点实践,是个不错的学习办法。

等熟悉Linux下面驱动编程的基本框架后,再找一个开发板或者自己选某个硬件,比如nand flash,网卡,usb等等,以去按照最开始说的,先了解硬件知识,再了解Linux下面的软件框架,最后才是去看自己写驱动的话,需要实现哪些部分。这部分,就要靠长期的时间和实践积累了。

总的来说,我的感觉是,你本来只是想要学习某个硬件的驱动,结果发现,在此之前,你要了解的东西,比你所要实现的那点代码来说,要多的太多了,而且不仅仅是要软件框架,还要硬件实现的机制。
而硬件知识方面,很多都要设计看懂基本的时序图,引脚等内容,所以,不是一两句就能说得清楚的。要慢慢积累。

够详细了吧?呵呵。还有疑问,一起讨论。

论坛徽章:
0
20 [报告]
发表于 2011-05-07 05:45 |只看该作者
谢谢大家了,一起加油啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP