历史上的今天
返回首页

历史上的今天

今天是:2025年04月16日(星期三)

正在发生

2021年04月16日 | 总结:我的ARM嵌入式开发的六步学习法

2021-04-16 来源:eefocus

学习ARM嵌入式开发,尤其对于初学者而言,不应该过早地、过多地将精力用在嵌入式系统移植、Linux内核的研究和学习上,这些诱人的“热点”很容易使初学者迷失方向,进而忽视对基础知识的深入学习。以下是针对Linux系统的ARM嵌入式开发学习步骤:


第一,学习基本的裸机编程


对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学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系统包括哪些部分呢?


三部分:bootloader、linuxkernel(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的驱动程序变都不是那么容易的事情,对于最新版本的驱动程序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新的版本内核,这样到时学驱动的编程就有足够的资料了。


这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式linux的书籍》。


第六,研究应用程序的编写


做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。MiniGUI的编程比较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发ARM7的程序。不过MiniGUI最大的不好就是没有像qtopia这样的图形操作平台,这大大限制了他的推广,我曾经幻想过与北京飞漫公司(就是MiniGUI的版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的图形操作平台,不过由于水平有限这只能是幻想了,呵呵。

推荐阅读

史海拾趣

Aptos Technology公司的发展小趣事

随着技术的不断进步,Aptos在微电子封装领域取得了重大突破。公司成功开发出了一系列高效、稳定的封装技术,并成功应用于多个电子产品中。同时,Aptos还积极拓展业务领域,将技术应用于智能穿戴、物联网等新兴领域,进一步提升了公司的市场影响力。

Dresden Elektronik公司的发展小趣事

随着公司的发展壮大,Dresden Elektronik公司越来越意识到合作的重要性。他们积极与产业链上下游的企业开展合作,共同推动整个行业的发展。同时,公司也注重与科研机构、高校等的合作,引进先进的技术和人才,为公司的发展注入新的活力。这种合作共赢的理念使公司在激烈的市场竞争中保持了稳健的发展态势。

Diamond SA公司的发展小趣事

随着技术的不断成熟,Diamond SA公司开始积极拓展市场。他们与全球知名的电子产品制造商建立了合作关系,将自己的芯片技术应用于各种电子设备中。同时,公司还加大了品牌推广力度,通过一系列营销活动提升了品牌知名度和美誉度。随着市场份额的逐步扩大,Diamond SA公司成为了电子行业中的领军企业。

DRS Technologies公司的发展小趣事

DRS Technologies公司成立于1968年,由Leonard Newman和David Gross两位工程师共同创立。当时,他们正在Loral Corporation研究反潜战的信号处理技术。然而,当Loral决定转向其他技术方向时,Newman和Gross决定继续他们的研究,并创立了DRS。他们的努力最终导致了AN/SQR-17无源潜艇探测系统的开发,这一系统至今仍在广泛使用。

CONTEC公司的发展小趣事

1996年,CONTEC公司在秦皇岛经济技术开发区成立,初期便自主掌握了心电、脑电生产技术。这一技术的掌握为公司奠定了坚实的基础,使得其在医疗行业设备领域开始崭露头角。随着技术的不断进步和市场的扩大,公司逐渐发展成为国内领先的医疗设备供应商之一。

ETC公司的发展小趣事

北京速通科技有限公司(以下简称速通科技)作为ETC行业的领军企业,其创立之初就专注于电子不停车收费系统(ETC)的研发与应用。随着国内交通拥堵问题的日益严重,速通科技看到了ETC系统在未来交通管理中的重要地位。公司组建了一支由行业专家和技术精英组成的团队,开始了ETC技术的探索之路。

问答坊 | AI 解惑

同学们,我找到一款功能不错,价格便宜的PCB设计软件

我找到一款功能不错的PCB设计软件,叫EAGLE,是德国一家叫CadSoft的公司研发的,这个软件有四个版本,专业版,标准版,免费试用版和简化版。专业版支持255个绘图层,带有自动布线功能,而且还可以导入其他设计工具或程序的数据,生成Gerber和Excell ...…

查看全部问答>

三星2416在WINCE5.0上的休眠问题,头大了。。高手进来看看。。

能够正常进入休眠模式,但是唤醒后无论有没有操作,过一小会就出现异常并死机,串口打印如下信息: 红色的是没有操作死机的打印信息: Data Abort: Thread=83f7f6d0 Proc=815fb580 \'device.exe\' AKY=00000005 PC=8039bd50(NK.EXE+0x0019bd50) ...…

查看全部问答>

添加的开机运行程序 卡住

写了一个小的应用程序,通过修改注册表,设置成开机自动运行.(我用vs2005远程跑是没问题的) 可是,开机时会卡在log界面上.请问下高手,问题在哪里? 添加注册表如下: [HKEY_LOCAL_MACHINE\\init] \"Launch50\"=\"startup.exe\" \"Depend50\"=hex:14 ...…

查看全部问答>

有关CE上显示字型的问题

现在我的系统中使用的字型文件是一个名叫:mingliu.ttc的字型文件(这个是一个能支持繁体中文的字型文件)。现在我把系统的字体修改为:使用New Times Roman字型,这样就会出现一个问题,在显示中文的地方就会出现口口(框框)不能正常显示。这应该 ...…

查看全部问答>

哪位有BTS7810 BTS723的PDF

哪位有BTS7810   BTS723的PDF 谢谢…

查看全部问答>

急问版主和高手,中断优先级问题

采用定时器1、3的周期中断,两个同时用,两个周期寄存器的设置是一样的,定时器1的周期中断和3的周期中断优先级一样,都是2级,怎么写中断向量表?中断优先级一样的两个中断怎么进行设置?要求1的周期中断高于3的周期中断,谢谢!…

查看全部问答>

真诚请教UBOOT-1.1.4编译问题,谢谢

我用的是CROSS—2.95.3,编译1.1.2没问题,但编译1.1.4老是不能,出现在cc1: invalid option \'abi=apcs-gnu\'错误,把编译系统换成CROSS-3.2也还是同样的问题。今天试了下CROSS-3.3.2也还是同样的问题。   是编译系 ...…

查看全部问答>

果然重赏之下必有勇夫!看着也很给力!

ti的这一系列活动大有全民ti的势头!不说其它的这样跟一段时间再有低功耗或相关的应用,肯定430没的跑了!…

查看全部问答>

论坛里有人准备DIY四轴飞行器电路用STM32F103

https://bbs.eeworld.com.cn/thread-355890-1-1.html…

查看全部问答>