1、嵌入式Linux研究及其在ARM上的移植张积红嵌入式Linux研究及其在上的移植张积红 吴强同济大学软件学院!上海电脑知识与技术!#$%这里应该包含体系结构的&( )*+和,-初始化!过去这个在文件./012./343.015666433$0中#以78!9:,;?8?开始的一系列宏用来建立机器的配置#你所提供的参数会被填入数据结构3.01AB=CB+0!用来描述机器$称为机器描述符中# &()*!用来在引导阶段!DEEF F3B调整和分配机器的各种入口$在引导阶段检测各个选项是有用的#DEEFGE.CB/检查内存的大小#在这里就不用作该工作了#A0G)CB2.+35./32./01566621
2、./CH./BI1在这个文件中$根据你的机器的特殊情况定义内存地址$,-地址等等以及映射关系# =?8?地址是物理地址$=J8地址是每个内存区域和,-区域的虚拟地址#限于篇幅$这里只介绍./014./343.0156664./01K0中的相关代码L以我所使用的:的情况#F.F0 +F/)0F 3.*=CB+0 BCDNOP!=E=CB+0UV =AFC.F. W X2Y Z/F).G *1+0.G GBAF1 CE3.A / H 0 D Y44Y 3B3E/ 53.*BC B(F/. BDE./C /EH .AC 9%_8F1B/ABF 01* Y4XNOP!=a,?=6?bJM=6?bJM7
3、JP M-78,;=,- P P dX%_8=9%_87JP M-78,;=,- P P dX e =9e 7JP M-!78,;=,- P P dX:=ST8: 7JP YPf M-78,;=b;?=M9dgZEC =AF BCDNOP!=3.*=ELZECQX0G*+NPP(=3.*=ELQg22该函数在./012./323.01R0G*+NPPP2/hI0文件中EF.DGB=AFLBCDNOP!=E=CB+0Qg22该函数在GA)(2./012./3233233R./3ZI0文件中建立机器体系结构的存储空间的映射#d+F.F0 ZEC =AF&()*=BCDNOP! L+F/)0F 3.
4、01AB=CB+0 YCB+0 +F/)0F*./.3=+F/)0F Y*./.3+01./ YY03CGAB +F/)0F 3B3A&E Y3QX3RiA/=D.A+WPg3RiBAC W (0SSSSSSg 22M87的结束地址3RiD.AUVI+F./F W (0g 22M87的起始地址3RiD.AUVI+jB W (Pg 22M87为Pf7J3RiD.AUVIAECB W gd22下面的宏定义于A0G)CB2.+3R./323.012./01I1789:,;?8? LMJNOP! k9/)+ TE0 MJNOP!LNOP! BZ.G).FEA DE./CQkQ78,;?8,; Lk9E
5、CBlBA,A0KkQJ-?=7M87开始的物理地址,4-的物理地址调试区域的虚拟地址J-?=887L(0!PQ44结构*./.3=+F/)0F或者F. G+F的物理地址$给内核提供不同的关于内核执行环境的参数S,6mL&()*=BCDNOP!Q44在内存子系统被初始化之前使用7.01AB +*B0&0 &(!)*+78,-LBCDNOP!=3.*=EQ44机器特殊函数来映射,-区域!包含调试区域,;,?,nL0G*+NPP(=AF=/hQ22机器特殊函数来初始化中断789:,;=;M!结论嵌入式TA)(的移植是一项艰巨的任务$需要读者对TA)(本身的文件结构$文件之间的调用非常清楚$同时$还
6、要求读者对于自己所用的微处理器的硬件足够的熟悉#本文给出的是一个框架性的介绍$按照本文给出的步骤$可以将87TA)(移植到MJNOP!芯片上#针对不同的处理器$不同的应用$读者还需要编写相应的硬件驱动程序#但将87TA)(移植到基于研究开发47脑知识与技术电脑知识与技术!是!#$的和%编译器!可以配置编译为多种体系结构的交叉编译器!常用的有&()*+),)-./)&0以及&1,)(系列!一般不要使用&1()*2系列!这个系列的编译器有很多34&5(67894-8:;7894-8:;中包括!用来将文件打包重组的./以及显示反汇编码的?3!=4AB等工具!常用的有3894-8:;()CC)()-.
7、/)&05,DE:83E使用的F函数库和针对G894H的线程库常用的有&:83()(),)-./)&0 &:83:894H-I/J.=;()(),)-./)&0把上述文件包进行编译后就可以使用了当然也可以到相关的网站上下载别人打包好的工具链!嵌入式#$%&移植需要修改的文件5CDG894H KJ/9J:的选择G894H KJ/9J:在不断的发展之中!目前最新版本是G894H()2系列越新的版本支持的微处理器的种类!支持的硬件的类型越来越多在嵌入式中没有必要使用最新的版本!目前国内使用最多的是G894H()L系列!这个系列中使用较多的是G894H()L)CM这个稳定成熟的版本本文就以这个版本为例
8、!详细介绍移植过程中需要修改的代码5(D需要修改的文件5LD #图(所示$其实不需要编写大量的新代码!只需要从相近的体系结构选取所需要的代码就可以了%首先登记一个A.I89JNO&如A.I89JP8;PJ=3Q,C( FRSN!PTUFVPWO7Q,C(XTFVPYZWPWO7Q,C( A.I89JPNOPC,C这些信息需要自己加入:894H./I./A-?:;A.I1-BJ;文件% 脚本文件:894H./I./A-?:;&J91A.I1-BJ;需要:894H./I./A-?:;A.I1-BJ;来产生:894H89:4=J.;A1./AA.I1-BJ;)I文件#编译的时候产生$!这个文件设置了
9、一些定义和宏%源代码使用这些宏和定义来选择合适的代码%配置文件:894H./I./A=J1?98&;包含以_A.I89J19.AJ命名的默认的配置文件%应该编辑:894H./I./A?98&)89文件以便A.aJ ?98&会支持你的机器%这个文件说明了针对你的机器的新的FRSNEP;A3?:;以及他们与其他FRSNEP;A3?:;之间的依赖关系%当你A.aJ_ A.I89J19.AJ P?98&建立内核时!参数的开始部分由:894H./I./A=J1?98&;拷贝到:894H)?98&:894H./I./AaJ/9J:IJ.=1./Ab)c!内核的入口代码!这里检查G894H内核代码中的相关信
10、息与目标板处理器中的相关值是否匹配% /C指明机器类型%d8 =J89J=eFR dXTFfPYZWPWO7Q,C(dJ9=8其他有关修改的文件的具体信息请参考L如果上述文件全部正确!就会为你的机器产生可引导的压缩的内核!并且通过调试函数输出调试信息%但是!还需要添加支持外围设备的程序%相关的文件的修 改 在:894H=/8bJ;(各 种 驱 动 所 在 的 目 录!:894H;(文件系统目录! :894H9J-(网络协议目录%实例分析89:4=J.;A 1./A./I 1gggI./=h./J)I ./I./AA.I1ggg./I) )老的版本中直接以机器名命名!如J=3Q,C()$是两个非
11、常关键的文件%./I./AA.I1ggg./I)图!图研究开发46!引言!年!全球有& %#亿个微处理器生产出来应用于桌面系统和服务器领域!与此同时!有(亿个微控制器被应用于嵌入式设备嵌入式领域是一个更广泛的领域嵌入式软件领域也是一个数十亿的全球性的产业!在这其中的嵌入式操作系统以及相关的开发工具在!)年达到了)&亿美元的产值传统的嵌入式操作系统有美国*+,- .+/01公司的23*415678+91464:;的*+,-4等等在过去的几年中!基于开源组织#?0, A4B190 A4:;C10$的D+,B3系统的嵌入式操作系统得到了长足的发展%据估计到!(年底!全球将有近一半的嵌入式系统中使用基
12、于D+,B3的操作系统D+,B3操作系统虽然不是微内核结构7但是其模块化的的结构使得用户可以对其方便的进行配置!去除用户系统不需要的模块!减小系统的开销!可以做到只有几百E大小!同时!D+,B3在进程管理!内存管理!网络支持等方面功能强大!可以满足嵌入式系统中绝大多数应用的复杂性要求 D+,B3操作系统免费开源!可靠性高!支持绝大多数现有的&!位到(位的微处理器!例如F.87 G4JO0-0-P0O+C,14Q09;RJP0O+C,S G00*00D+,B3 ?0,!TCB1B6 F.8D+,B3等等% F.8D+,B3是由.B60KK E+,U领导开发的!是目前最成功的开源性的嵌入式D+,B
13、3!支持上百种基于F.8的微处理器%本文将介绍如何把F.8D+,B3移植到新的F.8系统平台上的通用的方法!阐述有关移植过程和F.8D+,B3内核社区的一些惯例!F.8体系结构的文件是如何在源文件中组织的!如何修改D+,B3内核以适应特定的硬件平台!以实现内核引导并从串口输出信息%嵌入式#$%&移植开发环境的建立嵌入式系统开发环境一般分成主机端#V46;$和目标板#;C1U0;$%主机端是开发平台!用于运行开发过程中的各种工具目标板是运行和测试平台!是嵌入式系统的最终驻留环境%在主机端和目标板之间需要通过某种方式进行通信!如使用.A!&!串口!或者;V0,0;%这种通信的目的在于发送控制指令和
14、传输数据!同时获得目标板的状态信息%软件开发环境是由LWX =库#UK+O9$7LWX O+,B;+K6以及LWX编译器U99等一系列交叉开发工具组成%#如图)所示$R)SL99摘要!本文以!#$%&为例!讲述了将()*+,-./移植到基于()*的微处理器的开发板的基本过程!首先介绍了嵌入式+,-./的发展情况!并简单说明了如何搭建移植环境!然后重点讨论了()*+,-./内核的移植过程中需要修改的文件关键词!嵌入式+,-./0移植0 ()*+,-./中图分类号!12%&3#文献标识码!()*+,-.+/ 4- 56,7 898:;.: ? 8?;5,-A ()*+,-./ 5? 56: B?C
15、 8;?=:77?; D97:E ?- ()* ,7 ,-5;?E.=:EF#:A,-,-A G,56 56: E:7=;,85,?- ? 56: E:H:I?8:; ? !JD:EE:E +,-./ 9-E 56: D.,IE,-A 56: ()* E:H:I?8J:-5 5?I7 ?;+,-./ ,5 ?=.7:7 ?- 6?G 5? =?-75;.=5 56: K:;-:I ?; 78:=,= 8;?=:77?; G,56 ()*+,-./ ;?J ?8:- 7?.;=: 8;?L:=57M012 34,5/ !JD:EE:E +,-./0 8?;5,-A0 ()*+,-./电脑知识与技
16、术电脑知识与技术!#核的嵌入式系统芯片上的过程是可以借鉴的!参考文献!$%&( )*+*,( -) ./0(11(1 234+(/ 567 2+(8(94-9:;4(9+5-9=;6-/;?%/0(11(1 A59*B 2*,8(3C:;0=*(/*D;6-/E%F*5=159D +( GH 1(8(=-I/(9+ +-=4 )-, A59*BJ%K-,+59D +( A59*B L(,9(= +- M(: !H K=+)-,/N-7(3 91 &7O259D :;P%Q59*B R(856( R,58( S第二版T G=(4491,- *059591 U-9+V%GH A59*B在KWE$?
17、上的移植 李程远等 计算机工程与设计X*=;?YYE IWE收稿日期?YYP年?月!在一些脱机运行的Z2K系统中#用户代码需要在加电后自动装载运行! Z2K系统的引导装载$F-+=-1%是指在系统加电时&Z2K将一段存储在外部的非易失性存储器的代码移植到内部的高速存储器单元中去执行!这样既利用了外部的存储单元扩展Z2K本身有限的H资源&又充分发挥了Z2K内部资源的效能!尽管用户代码在一段时间相对是固定的&但是如果直接将其掩膜到内部H中去的话&一方面受容量以及价格的限制&另一方面则在系统代码级上显得不是很灵活方便! AG2存储器是在.KH和.KH的基础上发展起来的一种高密度非易失性电可擦写存储器
18、&在掉电情况下仍能保证数据不丢失&并能够在不离开电路板或据设备的情况下实施擦除和再编程操作(具有结构简单维护便利存取速度快对环境适应能力强抗振性能好等优点而且单位存储比特的价格比传统的.KH要低&十分适合于低功耗小尺寸和高性能的便携式系统)除了可以采用专用的硬件编程器把代码灌入AG2中之外&也可以利用现成的R2K通过软件编程来实现同样的功能! #$对%(的操作我们采用的=4存储器型号为HFH?_AaYYbG&其主要特点有E 单电源供电&可使内部产生高电压进行编程和擦除操作*支持X.Z.c单电源=4存储器标准*只需向其命令寄存器写入标准的微处理器指令&具体编程+擦除操作由内部嵌入的算法实现&
19、并且可以通过查询特定的引脚或数据线监控操作是否完成*可以对任一扇区进行读写或擦除操作&而不影响其它部分的数据!本设计中P$?L!$V位HbH?_AaYYbG =4映射为Z2K的片外程序存储空间数据&总线$V位&用于$V位方式的并行引导装载和数据保存!其中既保存了用户主程序模拟b-+=-1(,等程序&还保存了数据如中英文字库Z2波形数据设置等!表!编程命令摘要)本文介绍了一种利用#$%&存储器实现()系统对主程序的上电加载的方法!其中重点介绍*+*,-./01123 #$%&的使用和编程方法!关键词!#$%()#2556#5$789中图分类号!:);#文献标识码!3*+, -,.,/-0+
20、 /12 /33450/6571 78 #$ 977651: 8-7; %4/.+6 =?6957A87 $ B=?7 5C D86&57 6&$6 D$B8% %8 5C 4() 6&$6 $65D$6=A$#E #5$7% D$=? F95G9$D C95D#$%& 65 6&8 H3* I J6 C5A%8% 5? 6&8 %$G8 $?7 6&8 F95G9$DD=?G D86&57% 5C *2*K-./01123 #$%&I=, ?7-2) #$%& 4() 2556#5$789!#的$%&引导方法研究与实现电子科技大学自动化工程学院L四川成都M11NO研究开发48王 化 叶 芃 王厚军
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1