日期:2014-05-16  浏览次数:20561 次

请大家帮我指导下学习规划,谢谢
说来惭愧,小弟28了,想沉下心来作技术,想做一些unix/linux   底层驱动开发方面的学习,苦于无从下手,所以请教大家给小弟指点一下大致的学习步骤和建议,以前有一些浅薄的c语言毛皮基础,最近把《c   primer   plus》精读了几遍,目前正在看《unix环境高级编程》, <ldd   3th> 和《内核情景分析》,看的是似懂非懂,不知道除了这些还需要做哪方面的补充和精进,学习环境的搭建还需要哪些设备?

------解决方案--------------------
做底层驱动说简单也很简单,设置一些寄存器状态什么的,封几个接口加到系统里面就可以了。说难也很难,要真正为什么这么做,可能需要把操作系统原理看透了,

熟悉操作系统工作原理,建议从深处学起,边做项目边研究系统内核,了解操作系统的工作原理,
------解决方案--------------------
《unix环境高级编程》和《内核情景分析》最好完全看懂,似懂非懂没有意义。有问题的话一定要搞清楚。
还有一本书推荐以下:The Art of Unix Programming
------解决方案--------------------
我说说我个人的看法.
就事论事,你想学unix/linux 底层驱动开发。底层驱动并不代表Everything. Linux内核是个巨大的东西,看过understanding Linux Kernel的人知道这本书有多厚,但它的作者却说这本书大部分内容是有关内存管理的,而且只是1/3。你应该只关心Linux的中断响应处理,IO总线管理,模块等。其实作驱动这些甚至都不需要非常了解,只要知道驱动是外部世界同计算机系统的接口就行了。

你需要掌握汇编语言(AT&T)/C语言。
你需要了解这个驱动所代表的硬件的特性,就像楼上讲的,绝大多数时候是了解这个硬件的寄存器功能和如何使用这些寄存器完成数据的输入输出。linux内核源中有大量的例子可以模仿,学习,都以模块形式存在。
如果你做过驱动开发,也许你并不会喜欢它,因为它很枯燥,置寄存器,从IO空间地址读数据,或写数据。然后再封装成文件的基本操作函数形式,read,write,open,close,ioctl,在做几个内核模块所需的标准函数接口 等等等等

《unix环境高级编程》对你的帮助不会太大,它主要是用户空间程序的编程方法。
《内核情景分析》我想你也不必啃了,最多看看IO部分。
有一本 < <Linux设备驱动编程> > 也许会对你有很大帮助。

------解决方案--------------------
理论上底层驱动有C语言基础和ldd3,有阅读英文芯片资料的能力就能够胜任,但是学计算机的都知道,很多知识都是相关的,一些操作系统,汇编,硬件相关的知识对底层驱动的编写都有很大帮助。

一本ldd3足够你入门驱动,可以自己编写上面的scull,只需要pc,不需要其他设备,先熟悉驱动开发的流程,然后再寻找一些简单的设备进行驱动的开发,在实践中检验真理。