ARM与嵌入式linux入门的建议

发布者:码字狂人最新更新时间:2015-04-09 来源: ARM与嵌入式linux入门的建议关键字:ARM  linux 手机看文章 扫描二维码
随时随地手机看文章
由于很多人总问这个问题,所以这里做一个总结文档供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实 WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux进行开发。我读研究生的的实验室中也没有使用WinCE的,大都研究linux,也有少部分项目使用vxwork,但是就没有听说过使用 WinCE的,原因就是开源!当然现在WinCE6.0听说也开源,不过在成本和资源上linux已经有了无人能挡的优势。与此相对应的是,越来越多的电子厂商已经开始使用linux开发产品。举个例子,Google近期开发的智能手机操作系统Android其实就是使用linux-2.6.23内核进行改进得到的。
 
第一,学习基本的裸机编程。
  
对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学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、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的驱动程序变都不是那么容易的事情,对于最新版本的驱动程序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新的版本内核,这样到时学驱动的编程就有足够的资料了。
 
这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式linux的书籍》。
 
第六,研究应用程序的编写。
  
做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。 MiniGUI的编程比较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发ARM7的程序。不过MiniGUI 最大的不好就是没有像qtopia这样的图形操作平台,这大大限制了他的推广,我曾经幻想过与北京飞漫公司(就是MiniGUI的版权拥有者)合作使用 MiniGUI函数库开发像qtopia这样的图形操作平台,不过由于水平有限这只能是幻想了,呵呵。
 
完成这一步你基本就学完了嵌入式linux的全部内容了。
 
还有一个小小的经验想和大家分享。我在学习嵌入式linux的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。
 
记住,问题是学习的最好机会。
关键字:ARM  linux 引用地址:ARM与嵌入式linux入门的建议

上一篇:S3C2440-RTC中断
下一篇:ARM开发板学习经验

推荐阅读最新更新时间:2024-03-16 13:57

ARM首席营销官:市场超区隔是趋势
        ARM行销长Ian Drew2日从市场的角度切入,谈论了科技产业的发展契机:市场超区隔。 Ian Drew表示,物联网(IoT)是现在非常热门的词汇,现在市场中已经有非常多的装置具备上网能力,包括:汽车、马达、洗衣机、穿戴式装置如手表以及医疗设备。目前也已经有数千款半导体矽元件用于前述装置,相较于五年前,仅只有不到千件。 然而目前革命才刚开始,未来还有很多可能发展。 以前大家都说要区隔低、中、高阶市场,如:笔电市场,但现在的趋势是「市场超区隔」(hyper-segmentation),也就是要找出消费者想要的东西,进一步发展出新的产品类型。一开始厂商利用现有的系统单晶片(SoC)、核心处理器CPU,用以开发新的产品
[手机便携]
基于ARM的微波频率自动测量系统设计
1.引言 通常微波所指的是分米波、厘米波和毫米波。关于其频率范围,一种说法是: 300MHz ~ 300GHz(1MHz =106Hz,1GHz =109 )相应的自由空间中的波长约为1m~1mm. 微波技术的兴起和蓬勃发展,使得国内大多数高校都开设微波技术课程。但还存在以下问题:测量时,由手工逐点移动探头并记录各点读数,然后手工计算实验结果并绘图。测量项目单一、精度低、测量周期长,操作也较为繁琐。本文主要研究一种实用的基于Labview的速调管微波频率自动测量系统。 2.系统整体结构 系统的整体结构如图2-1所示。由下位机跟上位机构成。微处理器通过驱动电路来控制步进电机,带动谐振式频率计的套筒转动,处理器采样检波电流,传送到上位
[电源管理]
基于<font color='red'>ARM</font>的微波频率自动测量系统设计
ARM版Windows 8可能要等到2013年
    Digitimes最新消息称,微软下一代ARM版操作系统可能需要比x86/x64版多等一年,也就是2013年的6月左右出现。     预计ARM处理器的厂商例如NVIDIA、TI和高通等公司正策划撼动英特尔和AMD在PC市场的地位,消息称,2013年年中推出的笔记本电脑将开始试水这一领域,如果顺利,一年之后将会有大量基于ARM的产品出现。     使用ARM结构的芯片可以在价格和功耗方面与英特尔、AMD竞争时处于领先地位,但ARM本身并不支持原有的Windows应用程序,这是最大的劣势,如果该问题可以克服,甚至重新生成一个生态环境,那么后两者的真正挑战就会开始。
[手机便携]
ARMarm异常中断处理知识点
ARM处理器7种类型异常   按优先级从高到低的排列如下:   复位异常(Reset)   数据异常(Date Abort)   快速中断异常(FIQ)   外部中断异常(IRQ)   预取异常(Prefetch Abort)   软件中断异常(SWI)   未定义指令异常(Underfined instruction) 当异常发生时   处理器会把PC设置为一个特定的存储器地址。   这一地址放在被称为向量表(vector table)的特定地址范围内。   向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。   当异常发生时,分组寄存器r14和SPSR用于保存处理器状态。 ARM异常处理器模式   每一种异
[单片机]
arm驱动linux内核链表
《 linux内核链表》涉及内核驱动函数五个,内核结构体一个,分析了内核驱动函数二个;可参考的相关应用程序模板或内核驱动模板零个,可参考的相关应用程序模板或内核驱动一个 一、描述   链表是一种常用的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少包含两个域:数据域和指针域,数据域用于存储数据,指针域用于建立与下一个节点的联系。Linux内核中使用了大量的链表结构来组织数据。这些链表大多采用了include/linux/list
[单片机]
ARM裸机开发222440中断原理
1CPU与外设之间的数据传送控制方式(I/O控制方式) 通常有以下三种方式 1.查询方式 2.中断方式 3.DMA方式(在独立开辟的一个空间不由CPU控制,有DMA自己进行管理。实现存储器与外设的高速的数据传输方式) 主要讲中断: 中断请求---- 中断仲裁---- 中断响应---- 中断处理---- 中断返回(要保存现场) 中断处理流程: 1.中断控制器捕获当前外设发出的中断信号,通知SOC(中央处理芯片:片上系统) 2.SOC保存当前程序的运行环境,调用中断服务程序(ISR:一小段代码)进行处理中断 3.在ISR中通过读取中断控制寄存器、外设的相关寄存器来识别那一个中断触发,获取硬件中断号IRQ,跳转到
[单片机]
<font color='red'>ARM</font>裸机开发222440中断原理
快速学Arm(14)--LPC2478的oscillators
在叙述之前,我们先区别一下crystal和oscillator.crystal一般指晶体,是一种无源的器件,而oscillator这是晶振,也就是说基本上是一个震荡电路,这个震荡电路中一般会包括一个crystal. 来自于user.manual.lpc24xx.pdf文档,LPC2400包括3个独立的oscillator.这三个Oscillator分别是:主晶振,内部RC晶振,RTC晶振.每个晶振至少有一个用途. 在LPC2400复位后,首先工作的是内部的晶振,一直工作到被软件切换到其他的晶振.在系统复位后,不需要外部的晶体就能工作,Boot Loader代码可以以内部的已知的频率运行.当Boot Loader切换到用户程序
[单片机]
【揭秘】国产操作系统厂商中科红旗解散清算内幕
    2月10日,中科红旗北京总部的大门上粘贴了一张最新的公告,通知全体员工,公司正式解散,员工劳动合同全部终止,公司进入清算程序。伴随着这张公告,这家成立14年之久的国产操作系统厂商的发展历史可能就此终止。   中科红旗是国内最为知名的国产操作系统厂商,由该公司推出的红旗Linux操作系统在国内外都享有很高的声誉,在服务器和PC领域也有着成功的市场应用。但是自去年4月起,这家公司突然曝出了资金链断裂问题,并一步步走到了解散清算的地步。   中科红旗为什么会走到今天如此不堪的境况?是因为自身经营不善?还是因为相关政府资金没到位?又或者有其他原因? 2014年2月10日,中科红旗贴出公司清算公告。 中科红旗的
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved