gj1987913 发表于 2011-6-24 20:09:55

以我的经历,大家来谈谈linux驱动的学习!!!!!!!!!

我是一名学信息的研究生。 接触电子制作可说有三年之久了。 一路走来感受颇多。下面是我的流水账,不喜请跳过。
   
    大二暑假开始接触电子,那个时候对模拟深感兴趣,花了两个月时间熟读了模拟电路的相关书籍,从三极管到运放一点一点的制作调试。后来找了两个同学参加了电子设计竞赛,我主要负责前端模拟信号的调理。在这一年时间里,我学会了设计参数用三极管搭建简单的放大电路、功放,学会了op的选型还有电路的调试。
    比赛过后我开始对数字电路的学习(学校没有学习模拟的平台和环境)。那个时候心浮气躁觉得单片机什么的很简单就直接上了arm,从老板那边拿了个2440开始了痛苦的修行。现在回想起来那段时间是最不堪回首和迷茫的。首先没有学习过单片机,所以连开发环境都很难的搭建(还有个重要原因就是老板给的板子是个坏的,我晕!),其次连单片机的体系结构都没弄清楚那么arm就更不用谈了,再次虽然有很多的demo可以参考,c语言也忘记的差不多了。大四的一年里我感觉就在一个黑箱子里找不到出路。但不管怎么说还是有一定的收获,这一年我搭建好了2440的开发环境(花了好长时间),对HD5的基本操作有了基本的认识,什么ls啊cd啦tar等常用命令都搞得比较熟了。然后自己买了本<linux C程序设计大全>按照上面的小代码一个一个的调试,这样对linux的应用层编程算是了解了(那个时候也不知道什么驱动层应用层什么的,一头乱麻),再后来按照网上查的资料移植了u-boot,当时就是参照网上的帖子复制粘贴代码,也不知道为什么。然后我连ldd3我也读了一遍!(当时我真是佩服我自己,看这些书比看文言文还难!)我就这样稀里糊涂的学一直到大四毕业。那个时候大家以为我比较牛了,老师好像也认为我比一般的同学强,其实我狗屁都不懂,我自己心里最明白!
    大学毕业和四年同窗告别,我又开始了我的修行之路。这个暑假是我的转折点,因为实验室来了个大牛,最起码他可以解决我们实验室的软硬件任何问题。在他的直营下我开始重新学习单片机,说来也巧,这个时候正好有个单片机的项目,于是我就一点一点的磨,经过了两个月,我接触了pci(具体型号不记得了)和c8051f340两款单片机,这总算是对逻辑器件的编程有了一定的了解。
暑假过后大牛说让我看看ucos操作系统,然后我就天天揣着本ucos看,具体是什么书你们懂的。我是天天看日日看,后来对操作系统的整体构架有了一定的了解,接着又成功在2440上移植。这个时候我才感觉到一年半的时间我总算是小有成就了!(现在关于ucos也忘得差不多了。。)
之后我又参看了usb在单片机上的固件,那个时候感觉代码量好大,有掺杂这usb1.1的协议。读起来各种蛋疼,经过一段的蛋疼蛋碎之后总算是弄懂了,紧接着就放寒假了。
    寒假我就搞了本《我是usb》回去读,那个时候我觉得自己对代码阅读应该很有信心了。可是翻看这本书一下子就被砸地粉碎,一个不算太复杂的usb为什么会在linux下就有这么大的代码量,为什么会有这么多的数据结构?为什么数据经过了一个结构有一个结构,那时也只能说看了个大概,现在也忘记的差不多了。总之,看了等于没看,哈哈!
开学了,也就到了今年3月的样子(时间过了好快),我重新捡起了ldd3,我坚信linux下usb驱动的众多疑问应该能在ldd3中找到答案。可是看完后我失望了。大家说这本书是驱动开发的圣经,可是我读完之后只能说对驱动的编写有了程序化的了解,深入到下面我就完全弄不清了。我感觉尽管我大概读懂了此书,可是缺乏施展经验。可是怎么实战呢?
    3月中下旬我开始u-boot的重新移植,这一次我看懂了程序构架并更换了一些代码,增加了一些功能。内核能够很好的启动起来。我很高兴。这时老板有个自组网的项目来了,我又去看看网络相关的东西,看了下linux下网络协议栈的东西,依旧是各种看不懂(泪),然后,浑浑噩噩的就到现在了。



    以上就是我这3年做的事情,算是做个流水账吧,现在看来,学的东西有不少,可是困惑远比学会的多,没有什么实践经验,除了单片机做了个项目,其他做的都不能算是一个完整的系统。感觉基础很不扎实,而且缺乏实战经验。现在我了解linux下的设备驱动,我也知道怎么去写,可是我不知道什么样的驱动才算是好的驱动,或者说在这一方面有什么值得我们去深究。另外ucos源码我读懂了,linux源码却摸不着头脑,而且读懂这些对于就业有帮助么?想要学好嵌入式驱动层并且找个好工作我需要怎么做呢?

    以上是我的经历和困惑,希望能与大家探讨,谢谢!

youngsh1986 发表于 2011-6-24 20:16:04

回复【楼主位】gj1987913
-----------------------------------------------------------------------

亲身经历感受这么多啊,继续修行吧!

hopeless 发表于 2011-6-24 23:10:40

感觉做linux驱动开发需要懂的:1 linux系统框架,2 硬件知识,3 相关协议

hopeless 发表于 2011-6-24 23:16:01

再者,裸机的驱动(复杂的如USB)都没搞过的话,很难想象怎么去搞带系统的驱动

kenny17 发表于 2011-6-25 00:35:41

矮油,说得感触很深啊

lusson 发表于 2011-6-25 00:44:06

我今年开始重新学的。发现书是08年买的,开发板是09年买的./emotion/em014.gif./emotion/em014.gif./emotion/em014.gif

gj1987913 发表于 2011-6-25 00:56:09

回复【3楼】hopeless LUCKY
-----------------------------------------------------------------------

只搞过单片机的usb固件,呵呵呵,那依你之见我接下来可以怎样去学习驱动编写呢?

gj1987913 发表于 2011-6-25 00:57:01

回复【5楼】lusson
-----------------------------------------------------------------------

哎,明年就要找工作了。毕竟也混了这么多年,谁也不想找不好呀

avrgogo 发表于 2011-6-25 09:08:12

问一句,linux的驱动不是系统里自带的吗?需要自己写的是那些部分呢?

gj1987913 发表于 2011-6-25 11:32:17

回复【8楼】avrgogo
-----------------------------------------------------------------------

linux是自带一些设备驱动,但是驱动是和硬件结合的。一个系统的硬件是由需求分析所决定的,而这些硬件往往linux并不自带,所以需要自己编写,我这么说不知道你明不明白

minglife 发表于 2011-7-5 10:06:21

进来看下,本人也是初学者,刚从单片机转来学linux

TigerChou 发表于 2011-7-6 15:21:11

回复【楼主位】gj1987913
-----------------------------------------------------------------------

学linux内核的都有这种困惑,驱动层是嵌入式系统层里最难的,因为要学的东西实在太多,看懂硬件的电路图、CPLD的逻辑设计、数据结构与算法、linux内核、ARM架构等一样也不能少,坛里有一个牛人说过:没有三五年的功夫,操作系统内核不研究上几遍,是不太容易成功的。对比那些自己买开发板调着玩的人来说你很幸福啦,毕竟你还有项目,还可以实战,还有高人指点,你不应该迷茫,应该偷笑啊。夯实基础,多看项目相关的内核模块代码,积少成多啊,共勉
页: [1]
查看完整版本: 以我的经历,大家来谈谈linux驱动的学习!!!!!!!!!