- 论坛徽章:
- 1
|
好吧,我用我的拙见来一番抛砖引玉吧^^.
以下算是我个人的学习经历吧,可能有些啰嗦繁琐,权当抛砖引玉,各位看官多多见谅与指教^^
1. 如何学习Linux kernel,一般需要具备哪些知识点
学习linux kernel,我想应该从使用linux开始吧。最好是从命令行开始,而以此开始,估计你对linux的第一印象便是,
繁多而难记的命令;然而渐渐的你会发现,这繁多而难记的命令其实体现着的是linux对你的关怀与信任,它对你提供了
极为原子的操作,而通过管道、重定向等机制,又给了你展示想象力、满足各种各样需求的平台。当然,此外,你还会慢慢
认识到在linux里"一切皆文件"的观念、文件的权限管理,超级用户和使用者的概念等等....
好了,接下来进入C编程时代,在这里你将领略linux kernel 为用户提供的简洁而实用的系统调用接口,你将学会文件编程,
多线程编程,多进程编程,网络编程;此外,你还将学会gnu tool的使用,包括牛x的gcc,gdb;还有make工具,makefile的编写
等等....
最后呢,你该和CPU等硬件打打交道了,毕竟kernel是这些东东的灵魂^^。而在这里,你将理解原来CPU认识的只有'0'和'1',
原来你认识的main()函数到最后只是一堆'0'和'1',而这个过程中你的.c文件经历了编译、汇编、链接、加载运行的层层磨练才
最后修成正果的;你还将明白CPU能做的事只是:根据PC指针的值从内存取值->译码->执行,而这过程,CPU需要几个搬运工(cache和
register)的帮忙。此外你还将明白,原来物理内存总是那么的稀缺,原来你的那么多进程可以彼此独立互不干扰,你的操作系统不
会被用户程序所破坏,全都依仗了MMU这个保护神,等等等等....
当你凭着你的兴趣与毅力,经过了上面的层层洗礼后,你将开始步入linux kernel的世界;而设备驱动程序将是进入kernel世界的
一扇宽广的门。在kernel的世界里,你将继续凭着你的兴趣与毅力,继续探索这个美妙的世界......
2. 新人如何学习Linux设备驱动程序
对于linux设备驱动的学习,我想这里应该包括几个方面的东西。
第一:熟悉linux kernel为驱动程序的编写提供的种种机制,这包括内核线程的使用、内核内存的使用、内核同步机制、内核定时器、
内核的延时阻塞机制等等......
第二:熟悉linux 设备驱动模型,这包括模块构建、安装;字符设备、块设备、网络设备;usb 、pci、i2c等各种总线模型;等等....
第三:熟悉硬件设备裸驱动, 毕竟你的驱动程序最终目的是要让设备如你所愿的工作,所以你必须能够从设备芯片的datasheet获取足够的
信息去让设备动起来。
而对于这三个方面的学习,其学习方法,怎么说都是:读书->实验->再读书->再实验......
读什么书呢,《linux设备驱动程序(第三版)》 《linux内核设计与实现》这都是不可否认的经典之作,至于实验,最好是手上能有一块
开发板,随时随地的验证你对于一些概念的理解。
3. 阅读完样章后,你认为此书与市场上其他Linux设备驱动类书籍有什么优缺
MagicBoy2010的《深入Linux设备驱动程序内核机制》,读了样章后,我觉得书如其名(书名的名,呵呵)吧,讲的可能更趋向于内核模块机制
实现原理,这本书对于初学者来讲的话读起来应该是有些吃力的,但对于设备程序开发者来讲的话,我想如果真能理解里面提到的概念的话,那
应该能属于稀缺的驱动开发者的行列^^。我个人觉得这不是只是通过代码堆砌充当页数的书,而是一本挺用心的书。
4. 给刚毕业的一些新手进入职场的一些建议(比如求职面试,到外企、国企与私企工作做技术的利弊等等)
对于职场,其实我也是新人;因此我有个问题想请教一下各位前辈,摒弃掉个兴趣因素不说的话,对于一个linux驱动开发者来讲的话,
什么样的职业规划能更加的符合嵌入式行业的发展呢(这里似乎涉及到了嵌入式行业未来的发展问题,呵呵)? |
|