做嵌入式linux驱动的前途何在?
或者说,怎么才能做好这一行?
我做嵌入式驱动开发已经一年多了,感觉没学到多少东西。
从网络驱动到CAN驱动、从dataflash驱动到NAND/NOR FLASH驱动、从CF/IDE驱动到各种嵌入式文件系统、从LCD/VGA驱动到音频驱动、从IAR到ADS再到GCC、Ucos到linux、从I2C总线到SPI再到SSC以及TCP/IP协议,感觉一个字:累!
做了这么多事,很少有驱动是自己动手写的,基本都是找来相近的代码改过来的。
感觉自己现在做什么都是半桶水,对自己超级没信心了现在。对linux也是一知半解,对启动脚本,系统配制,shell、makefile以及应用程序编程,都了解一点点但没有一样精通的;工作主要使用C语言,可是有时候写个测试程序也是一堆错误;英语自我感觉还不错,但是有时候看datasheet也会发懵,唉!
最近驱动一块wm8731花了两个多月了,那东西死活不出一点声音,烦燥死了!
现在好迷惘,不知道大家有没有类似的经历,欢迎各位老大指教!
lz真谦虚
我也在做嵌入式驱动,但并不感觉有难度。你可能是对硬件和datasheet没有弄清楚
回复 1楼 sithui 的帖子
看得出来,你还是做了不少东西的。
我可以给你一些建议:
1) 为了今后的发展,你除了考虑广度以外,更重要的是注意知识的深度。
譬如,做过网络驱动,那么是不是只停留在会写驱动的表层上,有没有对Linux内核的网络结构,TCP/IP协议作过深入的了解。
2) 在Linux下开发很多时候都要利用现成的东西,没必要reinvent the wheel from scratch。关键是变成自己的驱动后是否了解原作者编写时背后的一些东西。 我觉
得不止是简单的让它工作。写驱动的时候就要考虑它的性能问题,并给出测试的方法(当然可以利用现成的许多工具,譬如测试网络性能的netperf等)。
你写过Flash驱动,可能会知道Flash的性能有时候有多重要。
3) C程序的自我修炼,是否考虑到软件工程方面的一些东西,程序的可维护性和扩展性,譬如LCD驱动,是不是从Sharp到NEC的只需要集中修改很少的几个地方?
对于不同品牌的Flash,如果使得Flash的驱动做的更具有灵活性。
4) 如果有时间结余,可以关注Linux内核的发展。譬如LCD的驱动有没有考虑到V4L2通用架构,譬如网络驱动用到了NAPI了吗?当然在此之前,假设已经对LDD3, ULK2理解
的比较熟了。
5) 现在所作的这些驱动还算不得非常核心的东西。如果你想有更好的发展,可以考虑往audio,video,net方面发展(当然你已经在开始看audio了),如果你稍微留意,
会注意到非常多地方都需要这样的人才,主要是因为上述每一项都需要很厚的底蕴,譬如video,需要了解MPEG4, H.264等,怎么也要个1到2年才能算个入行阿,所以我建
议不要只顾闷头做东西,要适当关注目前的一些应用(尽管现在一些名堂很多,什么PMP,V2IP,说到底都与这些有关的,人的世界不就是看和听嘛)。还有一个,这些技能
对以后跳槽也很有利。
6) 对硬件知识的补给,做嵌入式Linux这一行不可能不读硬件的Spec,如果你对硬件的工作机制理解的比较透,会有助你写出性能好的驱动程序。
顺便提一点,适时的提高你的英语水平,对你的职业生涯绝对有帮助(不要等需要的时候再补,来不及)。
7) 如果有时间,平时注意对Linux应用程序编写的了解/积累,也将有助于你写出很好功能很好的驱动程序。
8) 永远不能以为自己做了很多东西,就驱动而言,像TVIN/TVOUT, USB, SDIO等等,好多未知领域呢。
唉,在问题还没有解决之前很难说清是哪里不对了
有时候是datasheet里面的一句话没有注意,还有好几次调不出来最后查到是PCB的问题,所以有时候特别晕
多谢seawolf1Array7Array 大哥的指点
这一年多里我确实只是在埋头做东西,没有好好思考过这个行业
你这么一说我有点拨云见日的感觉了,谢谢!
谢谢大家的关注
我想或许还有些像我这样的新人也希望得到帮助
希望大家发表自己的看法,怎么才能做好这一行
谢谢
楼主真的很谦虚,俺还一直没写过硬件驱动程序呢
[quote]原帖由 [i]albcamus[/i] 于 2006-Array-12 15:24 发表
楼主真的很谦虚,俺还一直没写过硬件驱动程序呢 [/quote]
老大,我都说了,这些都不是我自己写的代码更不用说柜架了,感觉像在混日子!
[quote]原帖由 [i]sithui[/i] 于 2006-Array-12 15:27 发表
老大,我都说了,这些都不是我自己写的代码更不用说柜架了,感觉像在混日子! [/quote]
那就多读代码吧, 国内做kernel的,有几个是给lkml写patch的啊, 不都是修修补补的么:em16::em16:
[quote]原帖由 [i]albcamus[/i] 于 2006-Array-12 15:2Array 发表
那就多读代码吧, 国内做kernel的,有几个是给lkml写patch的啊, 不都是修修补补的么:em16::em16: [/quote]
是啊,现在下班就在读代码,看ldd和情景分析
其实感觉修修补补好累的,完全是在别人做好的框架下面做,被限制得很厉害,但是话说回来,要自己来写一来没这么大的本事,二来老板也不会让我们这么干
seawolf1Array7Array 分析对我们新手来说,挺好的。
斑竹,能加个精不!?
就是别沉了。:)
英语都看不懂,我哭ing
自己心态。
同样的工作,以不同的心态来对待,有的人可以学到很多东西,从中获得很多乐趣,有的人则对付了事。
我在从后者转向前者。
我跟楼主差不多,也都是这个样的
除非你做的是很底层东西,以前没人做过,那要自己写的就多些
或者是公司有自己的特产,这样的公司要求就高些了
再或是公司做的东西很新潮,比如MAX之类的要自己实现的就多了
我现在整天也郁闷的紧
[[i] 本帖最后由 epegasus 于 2006-Array-13 08:02 编辑 [/i]]
有时候觉得压力特别大,尤其是一个项目做了很久的时候
linux内核是个好东西
linux内核值得好好研读,菜鸟上路了。
我在大学里做嵌入式Linux内核以及系统集成开发的,但找不到相关的公司啊!
去我们大学里面招聘的都是一些应用软件开发企业,网上看了一下,都是在招应用软件的,我国究竟有没有Linux内核方面的公司啊,各位说说啊。
找个算命先生算一下
做嵌入式3年多了,感觉没什么意思,真的,没什么前途,改到做纯软件和系统管理上来了!
仁者见仁,智者见智啊!
想当初一心想从事linux的底层驱动开发,可由于偶是半路出家,连续面试了好几个公司,都被拒之门外了!
后来没有办法,只好从事软件的开发工作;唉……
看到各位的陈述,偶还真是有点心寒啊!还不知能不能将来有朝一日再去做那久违的底层驱动工作了!!……
学习一下,我路过,是菜鸟~
我也做过很多驱动,包括:MMI、TCPIP、LIN BUS、UART、USB、篮牙、至少两种ARM MCU、一种8Array51单片机,现在协议和语音应用也做,在两个公司做过。总体感觉是一般公司表面重视技术实际上只是利用而已,没有人真的重视。在用的上的时候利用下,不用的时候很快就忘记你了,中国人太善于搞政治斗争了。
晕呀,我给核心路由器的芯片写驱动的。。。都是专用芯片。出来更没啥混头了。
我个人倒是认为:未来科技的方向应该是集成化和嵌入式的。所有的科技都将被集成到我们的手掌之中,所有的功能都浓缩在我们指尖大小的空间之内。个人很看好嵌入式,问题在于如何做这一块,如果利用这一块的知识。
完全同意seawolf大哥的说法,做东西不能只是埋头苦做,有些时候的想象为什么,得往深处作。
当我们可以将一个功能系统完全在自己的脑海里面拼装组成实现的时候,感觉自己就已经有点上路了。重点在于应用,而不是被迫的去开发。当然,工作上的压力这个是没有办法的,但是我们应该从每一个项目中找到自己的乐趣,找到自己学习的地方。而且我认为,假如我们都觉得一些修改时体力劳动的时候,是不是应该尝试用一些新的自动化的办法来实现它?尽量用科技来偷懒。感觉人类的进步来自于“懒惰” ^_^ 不然就不会有汽车,更不会有火车这种东西了。
听了各位大虾的经历,我正在培训嵌入式软件工程师。
找工作真得很困难,个人觉得驱动到底是改的,没有人有能力写啊。
那嵌入式的工作到底在做什么?改代码?
各位高手帮帮忙
小弟刚读研究生,方向是嵌入式,现在对LINUX还是一窍不通,自学还是一头舞水,哪位高人给我指指路啊
不胜感激!
驱动D?高深!!!!:mrgreen:
肯定有钱途。。。:mrgreen::mrgreen::em11:
正读研,准备走这路。。。:wink::wink::em11:
懂什么东东。。:mrgreen:
C,汇编,内核都懂么。。。。:mrgreen:
我也是刚下水,浅着呢
我看好ARM,嵌入式CPU有垄断的嫌疑了
现在很多做MCU的公司的东西都在向ARM上转移,会ARM大有前途
基于LINUX的嵌入式驱动开发怎么会没有前途?
软硬都有很高要求的,东西很多,我看现在底层驱动都交给高级硬件工程师来做了
启动代码,系统移植精简,器件驱动就是改来改去
在成熟代码的基础上改可以提高效率,也可以减少BUG
至于写出优秀的驱动,高性能,需要对系统底层的深入了解,器件原理的深入理解,高超的编码
真的是需要很多年的功夫的,刚入门的半瓶水,能勉强搞定就不错了
--------说个有意思的事情,昨天有个地方招聘基于LINUX的ARM底层驱动开发人员,居然要求会画高速PCB板,笑死我了
高速PCB板?
国内能做嘛?
教给略通硬件的软件工程师画PCB板,还高速的,玩笑真的开大了
我自己的想法,大家多批评,说的不对的地方,望指教,共同进步
Study
做任何东西都是一样。要专!
只有专才能深才能有所长进。
就算你做同一个东西,你也要不断的进步
其实如楼主做的这些东西,在不懂的人看来,好像很高深,不能逾越,但是任何东西都一样,你要不断的进步,第一次做某个驱动和第二次再做这个驱动,我想你应该获得更多,如果你没有这种感觉,那你就是白做了。
比如,你第一次写Linux驱动和你第十次写linux驱动,我想你应该有不同的感觉,更甚者,也许你有了一套很好的框架,无论任何驱动,你只要套用框架,然后针对不同的datasheet做点修改就可以了。
如果你能自己总结这些框架并把它分享给大家,那么你的价值又高了不少。
你在做驱动的时候,肯定会用到与内核相关的东西,或者需要和内核中的某些模块配合,这样你也要理解内核的某些部分是如何实现的,最后,你应该可以很好的掌握linux的内核整体框架是什么。这些都是进步,都是在你一次又一次的开发中需要总结的东西,如果你不总结,永远都是从头开始(或者说永远都是还没看懂别人代码为什么这么做的时候,就去改它,然后可以工作了),就完事了,这样你永远也不可能提高,最后你就有了现在的这种感觉,觉得自己什么都不是,什么都不懂。
还有一点要说明的,现在有许多人搞linux开发,却不去用linux系统做为自己工作的平台,在这种情况下,你很难理解linux内核的实现机制,以及为什么要采用这种方式实现。就如你到现在还不懂李奴性的启动流程一样。这是很危险的。你都没用过linux系统,就想去实现一个与linux运行机理相符合的项目,我想这是不可能的。就是你这个项目成功了,它也肯定不是最优的,或者是不符合linux的使用习惯的(包括内核的扩展和应用程序的实现)。
所以,最后我想说的是,你一定要定期总结,总结你这段时间做了什么,你从中得到了什么,为了你以后可以更好的做好类似的工作,你应该去看些其它的什么东西;二是你一定至少要在工作的开发环境中使用linux作为你的平时工作平台,而不要使用虚拟机和服务期,因为你只有完全了解了linux的使用,你才可以为它开发符合它规则的项目。
也许我说的不全对,但是我只在linux平台上做了2两年,却可以在很短的时间内胜任任何相关东西的开发,没有什么神秘的,一通而百通。
最后希望所有在linux下做开发的人,可以前程似锦。
[quote]原帖由 [i]snow_insky[/i] 于 2006-Array-24 00:31 发表
其实如楼主做的这些东西,在不懂的人看来,好像很高深,不能逾越,但是任何东西都一样,你要不断的进步,第一次做某个驱动和第二次再做这个驱动,我想你应该获得更多,如果你没有这种感觉,那你就是白做了。
比如 ... [/quote]
一定是真正的牛人!
我还是建议自己去买块开发板过来,一点点从头做起,比如内核编译,驱动,bootloader...一点点地自己弄起来,这样子才会比较明白
44b0的板子现在500块大洋差不多了,弄块来玩玩。
当然,如果电子基础还可以的话,到网上弄块44b0板子的sch 和pcb,自己去做块板子,焊起来,然后跑起来那就更好玩乐
[quote]原帖由 [i]snow_insky[/i] 于 2006-Array-24 00:31 发表
其实如楼主做的这些东西,在不懂的人看来,好像很高深,不能逾越,但是任何东西都一样,你要不断的进步,第一次做某个驱动和第二次再做这个驱动,我想你应该获得更多,如果你没有这种感觉,那你就是白做了。
比如 ... [/quote]
谢谢这位大哥的指教,你的分析确实是入木三分,这一段的思考我也发现了这个非常严重的问题
我确实如你所说的那样,做事只图完成任务,我要好好改正!
谢谢!
其实说白了就是懒,没有主动动脑去想问题----这是很严重的问题
谢谢大家的关心和指正
基础薄弱. 努力学习中.......
一边顶一边思考一下 开始眨眼 1.2.3...
内核.....:mrgreen::em11:
高深....:mrgreen::mrgreen::em11:
呵呵....:em11::em11:
当然有钱途,如果去美国硅谷发展更有前途!!!!!!!!!!!!!:mrgreen::em11:
楼主千万不要想"以现在的技术可以自己独立完成什么"
以后的工程越来越大,不是某个人可以独立完成的了
肯定是"在某基础上再做些什么"
建议帖子加精或者置顶。
闻出了很多开发人员的心里话,也给出了不错的意见。
关于linux kernel开发的出路,我举个例子,国内的某大搜索公司,服务器的前段接入是用linux平台。于是公司里边就有一帮人是做kernel优化的,针对自己的应用。
做嵌入式linux驱动的前途何在?
或者说,怎么才能做好这一行?
---------------------------
作任何有意义的事情都是有前途的
佩服楼主这么丰富的开发经验,本人也是刚从事这个行业,比较的无知:)
觉得seawolf1Array7Array说的很对,我们都应改善于总结,同时要进行深入的研究,不尽要做东西,更要知道它背后更为深入的知识,希望以后能有机会和楼主、seawolf1Array7Array以及论坛里的各位同行们多多交流
[quote]原帖由 [i]Benson_linux[/i] 于 2006-Array-28 17:40 发表
关于linux kernel开发的出路,我举个例子,国内的某大搜索公司,服务器的前段接入是用linux平台。于是公司里边就有一帮人是做kernel优化的,针对自己的应用。 [/quote]
与驱动好像木有多少联系哦....:mrgreen:
做驱动的过程中最痛恨的莫过于最后发现是板子的问题!
所以不想一直搞驱动,我觉得如果想专注于驱动领域最好是去做一下硬件。
回复 4楼 seawolf1Array7Array 的帖子
兄弟真有心呀,如果做这么多,为什么不自己开公司了,还为别人找工?!
驱动肯定8是一般人都可以学的啦。。。:mrgreen::mrgreen::em11:
.
看到这个帖子,感到很温暖 毕竟在嵌入式的路上还有这么多朋友阿
[quote]原帖由 [i]月吻长河[/i] 于 2006-10-6 00:05 发表于 47楼
做驱动的过程中最痛恨的莫过于最后发现是板子的问题!
所以不想一直搞驱动,我觉得如果想专注于驱动领域最好是去做一下硬件。 [/quote]
如果是开发初期,应该有这个思想准备才是 做嵌入式linux驱动的前途何在?
或者说,怎么才能做好这一行?
我做嵌入式驱动开发已经一年多了,感觉没学到多少东西。
从网络驱动到CAN驱动、从dataflash驱动到NAND/NOR FLASH驱动、从CF/IDE驱动到各种嵌入式文件系统、从LCD/VGA驱动到音频驱动、从IAR到ADS再到GCC、Ucos到linux、从I2C总线到SPI再到SSC以及TCP/IP协议,感觉一个字:累!
做了这么多事,很少有驱动是自己动手写的,基本都是找来相近的代码改过来的。
感觉自己现在做什么都是半桶水,对自己超级没信心了现在。对linux也是一知半解,对启动脚本,系统配制,shell、makefile以及应用程序编程,都了解一点点但没有一样精通的;工作主要使用C语言,可是有时候写个测试程序也是一堆错误;英语自我感觉还不错,但是有时候看datasheet也会发懵,唉!
最近驱动一块wm8731花了两个多月了,那东西死活不出一点声音,烦燥死了!