0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

六大步骤了解Linux驱动工程师

5RJg_mcuworld 来源:未知 作者:刘勇 2017-11-20 09:05 次阅读

由于很多人总问这个问题,所以这里做一个总结供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。

我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。

在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux进行开发。我读研究生的实验室中也没有使用WinCE的,大都研究linux,也有少部分项目使用vxwork,但是就没有听说过使用WinCE的,原因就是开源!当然现在WinCE6.0听说也开源,不过在成本和资源上linux已经有了无人能挡的优势。与此相对应的是,越来越多的电子厂商已经开始使用linux开发产品

第一

学习基本的裸机编程

对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。我在刚刚开始学ARM的时候是选择ARM7(主意是当时ARM9还很贵),学ARM7的时候还是保持着学51单片机的思维,使用ADS去编程,第一个实验就是控制led。学过一段时间ARM的人都会笑这样很笨,实际上也不是,我倒是觉得有这个过程会好很多,因为无论做多复杂的系统最终都会落实到这些最底层的硬件控制,因此对这些硬件的控制有了感性的认识就好很多了,学习裸机的编程的同时要好好理解这个硬件的构架、控制原理,这些我称他为理解硬件。

所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,norflash内部的每一个单元在这个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?而与norflash相对应的nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行使用?或者简单地说应该怎么用nandflash?

再有,使用ADS进对ARM9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基没打好。不过先声明一下,本人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接就使用ARM9学linux系统的,因此涉及使用ADS对ARM9进行编程的问题我很难回答^_^,自己去研究研究吧。

对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,是我在我们学院实验室拿的,英培特为他们自己的实验箱写的,不过很有借鉴意义,可以作为一份有价值的参考。

第二

使用linux系统进行一些基本的实验

在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。

第三

研究完整的linux系统的的运行过程

所谓完整的linux系统包括哪些部分呢?

3部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。

那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。

第四

开始做系统移植

上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学会制作这些东西。

当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的源代码,但是这个源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就叫移植。在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你完成了这个过程你会发现你已经算是一个初出茅庐的高手了。

在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你怎么阅读linux源代码,我不提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候你觉得你必须去看源代码时再去找几本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。

至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己经验的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我相信能给你一点建议,也许有助你解决问题。

这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码包,然后进行修改,最终运行在板子上。

盗用阿基米德的一句话:“给我一根网线,我能将linux搞定”。

第五

研究linux驱动程序的编写

移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些都要进行驱动程序的开发。

Linux的驱动程序可以说是五花八门,linux2.4和linux2.6的编写有相当大的区别,就是同为linux2.6但是不同版本间的驱动程序也有区别,因此编写linux的驱动程序变都不是那么容易的事情,对于最新版本的驱动程序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新的版本内核,这样到时学驱动的编程就有足够的资料了。

第六

研究应用程序的编写

做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。MiniGUI的编程比较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发ARM7的程序。

不过MiniGUI最大的不好就是没有像qtopia这样的图形操作平台,这大大限制了他的推广,我曾经幻想过与北京飞漫公司(就是MiniGUI的版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的图形操作平台,不过由于水平有限这只能是幻想了,呵呵。完成这一步你基本就学完了嵌入式linux的全部内容了。

还有一个小小的经验想和大家分享。我在学习嵌入式linux的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。记住,问题是学习的最好机会。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4981

    文章

    18281

    浏览量

    288410
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206733
  • 驱动电路
    +关注

    关注

    151

    文章

    1470

    浏览量

    107664

原文标题:Linux工程师传道解惑:嵌入式linux入门六步曲

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    招聘嵌入式LINUX工程师

    工作地点:北京 四通桥工作内容:因原有的产品已成熟稳定,驱动工程师因个人原因离职,入职后需对现有的系统进行维护,在现有的基础上进行一定的修改。1、本科及以上学历,计算机相关专业。2、熟悉linux
    发表于 12-19 15:52

    六大步骤防雷,Hold住雷击不是问题

    导致被雷电损坏的设备量增加、IC随着集成度增加越来越脆弱:雷击似乎越来越显示出它的可怕!雷击确实很有破坏力,但是,采取正确步骤防雷,雷电原本不是问题!这里提出对抗雷击的六大步骤和四大措施,Hold住雷击,远离雷击故障!步骤一:分
    发表于 03-16 17:28

    上海:PC底层驱动工程师

    一家新成立的高科技公司,招聘PC底层驱动工程师1名。公司位于上海市宝山区长江南路,长江软件园,邻近地铁3号线长江南路站。公司将提供有竞争力的待遇。有意者请发简历到
    发表于 03-03 22:26

    招电机驱动工程师 大牛小牛看过来

    技术大神们,帮忙扩散下!诚求电机驱动工程师技术大神,坐标深圳南山。1.2年以上电机驱动设计调试经验,熟悉电机相关构造原理2.精通直流无刷电机(BLDC)驱动控制开发,熟悉方波 /正弦波(FOC)等
    发表于 03-21 11:38

    高薪聘电机驱动工程师2名

    电机驱动工程师(8W~20W税前年薪/双休/五险一金/河南南阳市宛城区) 岗位职责:1、负责永磁同步电机或者异步电机的驱动控制研发;任职资格:1、研究生以上学历,电机与电气、自动化、电力电子、电子
    发表于 05-24 14:22

    高级驱动工程师看这里~~这里~~这里!

    和稳定性3.编写测试用例及相关文档编码4.相关音视频处理5.与硬件工程师紧密合作解决开发和产品优化过程中遇到的各种问题6.参与公司产品线规划,以及硬件平台的选型职位要求:1.计算机、通信、电子信息等
    发表于 11-02 11:43

    【深圳】诚聘Camera驱动工程

    猎头招聘:Camera驱动工程师(薪资:25-50 K/月)工作职责:1、相机稳定性调试;2、相机相关外设硬件驱动开发和调试。岗位要求:1、2年以上相机相关驱动开发经验;2、3年以上Linux
    发表于 11-22 13:20

    嵌入式Linux工程师的成长经历

    Linux开发工程师首先成长为一名Linux开发工程师,这是最基本的目标,他应该具备如下的素质:(1)了解
    发表于 08-21 14:35

    高薪诚聘Linux内核、驱动、虚拟化工程师

    浪潮(北京)高薪诚聘Linux内核、驱动、虚拟化工程师
    发表于 05-29 16:34

    系统工程师是如何借助SDR平台领先一大步的?

    系统工程师是如何借助SDR平台领先一大步的?
    发表于 05-21 06:32

    嵌入式软件工程师笔试面试的相关资料分享

    嵌入式软件笔试,嵌入式软件面试,程序员简历书写,Linux驱动工程师笔试,Linux驱动工程师面试,BSP工程师笔试,BSP
    发表于 12-24 07:46

    开关电源PCB设计六大步骤所需注意的事项进行分析

    开关电源PCB设计六大步骤在任何开关电源设计中,PCB板的物理设计都是最后一个环节,如果设计方法不当,PCB可能会辐射过多的电磁干扰,造成电源工作不稳定,以下针对各个步骤中所需注意的事项进行分析。01原理图到PCB的设计流程02相关参数设置相邻导线间距必须能满足电气安全要
    发表于 12-28 08:28

    中高级【嵌入式驱动工程师】年薪50w内可谈

    中高级【嵌入式驱动工程师】 年薪50w以内可谈 工作​地点:北京市 了解更多 ‼5年以上内核驱动开发经验 ‼​需要有国产化操作系统/芯片平台的驱动开发经验(必须) 交换机/交换芯片
    发表于 11-23 13:35

    提高LED固晶品质六大步骤

    提高LED固晶品质六大步骤  一、严格检测固晶站的LED原物料1.芯片:主要表现为焊垫污染、芯片破损、芯片切割大小不一、芯片切割倾斜等
    发表于 11-13 09:51 1011次阅读

    MES系统实行精细化管理的六大步骤

    本文主要介绍了MES系统实行精细化管理的六大步骤
    发表于 06-04 08:00 4次下载