搞嵌入式驱动开发一年多了,项目作的很多:linux
从网络驱动到CAN驱动、从Dataflash驱动到NAND/NOR FLASH驱动、从CF/IDE驱动到各类嵌入式文件系统、从LCD/VGA驱动到音频驱动、从IAR到ADS再到GCC、Ucos到linux、从I2C总线到SPI再到SSC以及TCP/IP协议。shell
但感受并无学到什么东西,除了一个字:累!编程
老实说这些项目,不多有驱动是本身动手写的,基本都是找来相近的代码改过来的。网络
有时候感受本身如今作什么都是半桶水,对本身超没信心了。架构
对linux也是只知其一;不知其二,对启动脚本,系统配制,shell、makefile以及应用程序编程,都了解一点点但没有同样精通的;工做主要使用C语言,但是有时候写个测试程序也是一堆错误;英语自感受还不错,可是有时候看datasheet也会发懵!框架
生活艰难,工资又低,想提高本身却又谜茫不已。ide
建议:工具
1) 为了从此的发展,你除了考虑广度之外,更重要的是注意知识的深度。性能
譬如,作过网络驱动,那么是否是只停留在会写驱动的表层上,有没有对Linux内核的网络结构,TCP/IP协议做过深刻的了解。测试
2) 在Linux下开发不少时候都要利用现成的东西,不必什么都本身搞。关键是变成本身的驱动后是否了解原做者编写时背后的一些东西。 你应该不止是简单的让它工做。写驱动的时候就要考虑它的性能问题,并给出测试的方法(固然能够利用现成的许多工具,譬如测试网络性能的netperf等)。
当你写过Flash驱动,可能会知道Flash的性能有时候有多重要。
3) C程序的自我修炼,是否考虑到软件工程方面的一些东西,程序的可维护性和扩展性,譬如LCD驱动,是否是从Sharp到NEC的只须要集中修改不多的几个地方?
对于不一样品牌的Flash,若是使得Flash的驱动作的更具备灵活性。
4) 若是有时间结余,能够关注Linux内核的发展。譬如LCD的驱动有没有考虑到V4L2通用架构,譬如网络驱动用到了NAPI了吗?固然在此以前,假设已经对LDD3, ULK2理解的比较熟了。
5) 如今所做的这些驱动还算不得很是核心的东西。若是你想有更好的发展,能够考虑往audio,video,net方面发展,你应该多注意这个行业须要什么样的人才,上述每一项都须要很厚的底蕴,譬如video,须要了解MPEG4, H264等,怎么也要个1到2年才能算个入行阿,因此我建议不要只顾闷头作东西,要适当关注目前的一些应用。
6) 对硬件知识的补给,作嵌入式Linux这一行不可能不读硬件的Spec,若是你对硬件的工做机制理解的比较透,会有助你写出性能好的驱动程序。
顺便提一点,适时的提升你的英语水平,对你的职业生涯绝对有帮助(不要等须要的时候再补,来不及)。
7) 若是有时间,平时注意对Linux应用程序编写的了解/积累,也将有助于你写出很好功能很好的驱动程序。
8) 永远不能觉得本身作了不少东西,就驱动而言,像TVIN/TVOUT, USB, SDIO等等,好多未知领域呢。在问题尚未解决以前很难说清是哪里不对了
有时候是datasheet里面的一句话没有注意,还有好几回调不出来最后查到是PCB的问题,因此有时候特别晕。
此外,其实如这位网友作的这些东西,在不懂的人看来,好像很高深,不能逾越,可是任何东西都同样,你要不断的进步,第一次作某个驱动和第二次再作这个驱动,你应该得到更多,若是你没有这种感受,那你就是白作了。
好比,你第一次写Linux驱动和你第十次写Linux驱动,你应该有不一样的感受,更甚者,也许你有了一套很好的框架,不管任何驱动,你只要套用框架,而后针对不一样的datasheet作点修改就能够了。
若是你能本身总结这些框架并把它分享给你们,那么你的价值又高了很多。
你在作驱动的时候,确定会用到与内核相关的东西,或者须要和内核中的某些模块配合,这样你也要理解内核的某些部分是如何实现的,最后,你应该能够很好的掌握linux的内核总体框架是什么。这些都是进步,都是在你一次又一次的开发中须要总结的东西,若是你不总结,永远都是从头开始(或者说永远都是还没看懂别人代码为何这么作的时候,就去改它,而后能够工做了),就完事了,这样你永远也不可能提升,最后你就有了如今的这种感受,以为本身什么都不是,什么都不懂。
还有一点要说明的,如今有许多人搞linux开发,却不去用linux系统作为本身工做的平台,在这种状况下,你很难理解linux内核的实现机制,以及为何要采用这种方式实现。就如你到如今还不懂Linux的启动流程同样。这是很危险的。你都没用过linux系统,就想去实现一个与linux运行机理相符合的项目,这是不可能的。就算你这个项目成功了,它也确定不是最优的,或者是不符合linux的使用习惯的(包括内核的扩展和应用程序的实现)。
因此,最后想说的是,你必定要按期总结,总结你这段时间作了什么,你从中获得了什么,为了你之后能够更好的作好相似的工做,你应该去看些其它的什么东西;二是你必定至少要在工做的开发环境中使用linux做为你的平时工做平台,而不要使用虚拟机和服务期,由于你只有彻底了解了linux的使用,你才能够为它开发符合它规则的项目。