嵌入式Linux研究及其在ARM上的移植张积红.docx
《嵌入式Linux研究及其在ARM上的移植张积红.docx》由会员分享,可在线阅读,更多相关《嵌入式Linux研究及其在ARM上的移植张积红.docx(32页珍藏版)》请在冰豆网上搜索。
![嵌入式Linux研究及其在ARM上的移植张积红.docx](https://file1.bdocx.com/fileroot1/2022-12/1/3f0a5270-1ca2-42de-b304-b3a91a3b740d/3f0a5270-1ca2-42de-b304-b3a91a3b740d1.gif)
嵌入式Linux研究及其在ARM上的移植张积红
嵌入式Linux研究及其在上的移植
张积红吴强
同济大学软件学院!
上海
电脑知识与技术
!
""#$%
这里应该包含体系结构的
&’()*+
和
-
初始化
!
过
去这个在文件
./012./343.015666433$0
中
"#
以
78!
9:
;<=>?
8@?
开始的一系列宏用来建立机器的配置
#
你所提供的参数会被填入数据结构
3.01’AB=CB+0!
用来
描述机器
$
称为机器描述符
"
中
#&’()*!
"
用来在引导阶
段
!
DEEFF’3B"
调整和分配机器的各种入口
$
在引导阶段
检测各个选项是有用的
#DEEFGE.CB/
检查内存的大小
#
在
这里就不用作该工作了
#
’A0G)CB2.+35./32./01566621./CH./BI1
在这个文件中
$
根据你的机器的特殊情况定义内
存地址
$,-
地址等等以及映射关系
#=>?
8@?
地址是物
理地址
$=J8><
地址是每个内存区域和
-
区域的虚拟
地址
#
限于篇幅
$
这里只介绍
./014./343.0156664./01K0
中的相关代码
L
以我所使用的
为例说明
Q#
下面这个结构中的宏都定义在
’A0G)CB2.+3R./34
./01R66641./CH./BK1
文件中
#
这里是机器的初始化
$
表
明了系统使用的外设的地址及所在的域以及
ST8>:
的情况
#
>F.F’0+F/)0F3.*=CB+0BCDNOP!
=’E=CB+0UV==’A’FC.F.WX
2YZ’/F).G[*1\+’0.G[GBA]F1[CE3.’A[/[H[0[DY4
4Y3B3E/\53.**BCB(F/.^B\DE./C/EH.AC9>%_""8
X<‘NOP!
=a,@?
=<6?
bJM[<‘NOP!
=‘:
c>=<6?
bJM[
7JP[M-78,;=,-[P[P["["d[
X<‘NOP!
=a,@?
=9>%_""8[<‘NOP!
=‘:
c>=9>%_""8[
7JP[M-78,;=,-[P[P["["d[
X<‘NOP!
=a,@?
=9>e[<‘NOP!
=‘:
c>=9>e[7JP[M-!
78,;=,-[P[P["["d[
X<‘NOP!
=a,@?
=ST8>:
[<‘NOP!
=‘:
c>=ST8>:
[7JPY
Pf[M-78,;=b<@;T8>?
=M<>9
dg
ZE’C==’A’FBCDNOP!
=3.*=’ELZE’CQ
X
0G*+NPP(=3.*=’ELQg
22
该函数在
./012./323.01R0G*+NPPP2’/hI0
文件中
’EF.DGB=’A’FLBCDNOP!
=’E=CB+0Qg
22
该函数在
G’A)(2./012./3233233R./3ZI0
文件中
[
建立机器体系结构的存储空间
的映射
#
d
+F.F’0ZE’C==’A’F
&’()*=BCDNOP!
L+F/)0F3.01’AB=CB+0YCB+0[+F/)0F
*./.3=+F/)0FY*./.3+[
01./YY03CG’AB[+F/)0F3B3’A&EY3’Q
X
3’RiA/=D.A^+WPg
3’RiBACW"(0"SSSSSSg22>M@87
的结束地址
3’RiD.A^U"VI+F./FW"(0"""""""g22>M@87
的起始地址
3’RiD.A^U"VI+’jBW"("P""""""g22>M@87
为
Pf7J
3’RiD.A^U"VIAECBW"g
d
22
下面的宏定义于
’A0G)CB2.+3R./323.012./01I1
789:
;<=>?
8@?
L[k9’//)+TE]’0L<‘NOP!
BZ.G).F’EADE./CQkQ78,;?
8,;<@Lk9ECBlBA[
A0KkQ
J--?
=7<7L"(0"""""""["(%"""""""["(&&""""""Q
44>M@87
开始的物理地址
[,4-
的物理地址
[
调试区域的
虚拟地址
J--?
=‘8@87>L"(0""!
"P""Q
44
结构
*./.3=+F/)0F
或者
F.]G’+F
的物理地址
$
给内核提
供不同的关于内核执行环境的参数
S,6m‘L&’()*=BCDNOP!
Q
44
在内存子系统被初始化之前使用
7.01’AB+*B0’&’0&’(!
)*+
78‘,-LBCDNOP!
=3.*=’EQ
44
机器特殊函数来映射
-
区域
!
包含调试区域
"
;,?
@nL0G*+NPP(=’A’F=’/hQ
22
机器特殊函数来初始化中断
789:
;<=<;M
!
结论
嵌入式
T’A)(
的移植是一项艰巨的任务
$
需要读者
对
T’A)(
本身的文件结构
$
文件之间的调用非常清楚
$
同时
$
还要求读者对于自己所用的微处理器的硬件足
够的熟悉
#
本文给出的是一个框架性的介绍
$
按照本文
给出的步骤
$
可以将
8@7T’A)(
移植到
芯片
上
#
针对不同的处理器
$
不同的应用
$
读者还需要编写
相应的硬件驱动程序
#
但将
8@7T’A)(
移植到基于
研究开发
47脑知识与技术
电脑知识与技术
!
""
是
!
#$
的
"
和
"%%
编译器
!
可以配置编译为
多种体系结构的交叉编译器
!
常用的有
&""’()*+),)-./)
&0
以及
&""1,)(
系列
!
一般不要使用
&""1()*2
系列
!
这
个系列的编译器有很多
34&"
5(67894-8:
;
7894-8:
;
中包括
!
<$
的链接器
:
=!
汇编代码编译器
.;>
用来将文件打包重组的
./
以及显示反汇编码的
?
3@!
=4AB
等工具
!
常用的有
3894-8:
;’()CC)()-./)&0
5,DE:
83"
E""
使用的
F
函数库和针对
G894H
的线程库
"
常用
的有
&:
83"’()(),)-./)&0>&:
83"’:
894H-I/J.=;’()(),)-./)&0
把上述文件包进行编译后就可以使用了
"
当然也可以到相关的网站上下载别人打包好的工
具链
"
!
嵌入式
"#$%&
移植需要修改的文件
5CDG894HKJ/9J:
的选择
G894HKJ/9J:
在不断的发展之中
!
目前最新版本是
G894H’()2
系列
"
越新的版本支持的微处理器的种类
!
支
持的硬件的类型越来越多
"
在嵌入式中没有必要使用
最新的版本
!
目前国内使用最多的是
G894H’()L
系列
!
这个系列中使用较多的是
G894H’()L)CM
这个稳定成熟
的版本
"
本文就以这个版本为例
!
详细介绍移植过程中
需要修改的代码
"
5(D
需要修改的文件
5LD#
图
(
所示
$
其实不需要编写大量的新代码
!
只需要从相近的
体系结构选取所需要的代码就可以了
%
首先登记一个
A."I89J’NO&
如
A."I89JP8;PJ=3Q,C(FRPTUFVPWO7Q,C(
XTFVPYZ[WPWO7Q,C(A."I89JPNOPC,C
这些信息需要自己加入
:
894H\./"I\./A\-?
?
:
;\A."I1
-]BJ;
文件
%\\
脚本文件
:
894H\./"I\./A\-?
?
:
;\&J91A."I1
-]BJ;
需要
:
894H\./"I\./A\-?
?
:
;\A."I1-]BJ;
来产生
:
894H\
89":
4=J\.;A1./A\A."I1-]BJ;)I
文件
#
编译的时候产生
$!
这个文件设置了一些定义和宏
%
源代码使用这些宏和
定义来选择合适的代码
%
配置文件
:
894H\./"I\./A\=J^1"?
9^8&;
包含以
_A."I89J19.AJ‘
命名的默认的配置文件
%
应该编辑
:
894H\./"I\./A\"?
9^8&)
89
文件以便
A.aJ"?
9^8&
会支持你的机器
%
这个文件说
明了针对你的机器的新的
FR:
;
以及他们
与其他
FR:
;
之间的依赖关系
%
当你
A.aJ
_A."I89J19.AJ‘P"?
9^8&
建立内核时
!
参数的开始部分
由
:
894H\./"I\./A\=J^1"?
9^8&;\
拷贝到
\:
894H\)"?
9^8&
:
894H\./"I\./A\aJ/9J:
\IJ.=1./Ab)c!
内核的入口代
码
!
这里检查
G894H
内核代码中的相关信息与目标板处
理器中的相关值是否匹配
%/C
指明机器类型
%
d8^=J^89J=eFRA?
b/C>dXTFfPYZ[WPWO7Q,C(
dJ9=8^
其他有关修改的文件的具体信息请参考
L
如果上述文件全部正确
!
就会为你的机器产生可
引导的压缩的内核
!
并且通过调试函数输出调试信息
%
但是
!
还需要添加支持外围设备的程序
%
相关的文件的
修改在
:
894H\=/8bJ;(’(
各种驱动所在的目录
!
:
894H\
^;(((
文件系统目录
!
:
894H\9J-(((
网络协议目录
%
’
实例分析
89":
4=J\.;A1./A\./"I1ggg\I./=h./J)I./"I\./A\
A."I1ggg\./"I)")
老的版本中直接以机器名命名
!
如
J=3Q,C()"$
是两个非常关键的文件
%
./"I\./A\A."I1ggg\./"I)"
图
!
图
"
研究开发
46!
引言
!
"""
年
!
全球有
&"%#
亿个微处理器生产出来应用
于桌面系统和服务器领域
!
与此同时
!
有
’(
亿个微控
制器被应用于嵌入式设备
"
嵌入式领域是一个更广泛
的领域
"
嵌入式软件领域也是一个数十亿的全球性的
产业
!
在这其中的嵌入式操作系统以及相关的开发工
具在
!
"")
年达到了
)&
亿美元的产值
"
传统的嵌入式
操作系统有美国
*+,-.+/01
公司的
23*415678+91464:
;
的
*+,-4<6=>
等等
"
在过去的几年中
!
基于开源组织
#?
@0,A4B190A4:
;的
D+,B3
系统的嵌入式操作系
统得到了长足的发展
%
据估计到
!
""(
年底
!
全球将有
近一半的嵌入式系统中使用基于
D+,B3
的操作系统
"
D+,B3
操作系统虽然不是微内核结构
7
但是其模块化的
的结构使得用户可以对其方便的进行配置
!
去除用户
系统不需要的模块
!
减小系统的开销
!
可以做到只有几
百
E
大小
!
同时
!
D+,B3
在进程管理
!
内存管理
!
网络支
持等方面功能强大
!
可以满足嵌入式系统中绝大多数
应用的复杂性要求
"D+,B3
操作系统免费开源
!
可靠性
高
!
支持绝大多数现有的
&!
位到
’(
位的微处理器
!
例
如
F.87G4<01G=78HGA7AI
等等
"
当前关于嵌入式
D+,B3
的应用主要分为以下两类
&
=4JJ019+CKD+,B3
和
?
@0,A4B190D+,B3%=4JJ019+CK
D+,B3
是一些公司在遵守
LGD
的基础上
!
提供的嵌入式
D+,B3
解决方案
!
包括可以移植好的针对特定硬件平台
的
D+,B3E01,0K
和交叉开发工具
!
有的还包括
D+,B3
的
实时解决方案
%
著名的有
84,;C2+6;CD+,B3
和
MKB0=C;
D+,B3
以及
.ND+,B3
等等
%?
@0,A4B190D+,B3
包括
>JO0--0-P0O+C,@14Q09;R>JP0O+C,SG00*00D+,B3?
@0,!
TCB1B6F.8D+,B3
等等
%F.8D+,B3
是由
.B60KKE+,U
领
导开发的
!
是目前最成功的开源性的嵌入式
D+,B3!
支
持上百种基于
F.8
的微处理器
%
本文将介绍如何把
F.8D+,B3
移植到新的
F.8
系统平台上的通用的方法
!
阐述有关移植过程和
F.8
D+,B3
内核社区的一些惯例
!
F.8
体系结构的文件是如
何在源文件中组织的
!
如何修改
D+,B3
内核以适应特定
的硬件平台
!
以实现内核引导并从串口输出信息
%
"
嵌入式
#$%&’
移植开发环境的建立
嵌入式系统开发环境一般分成主机端
#V46;$
和目
标板
#;C1U0;$%
主机端是开发平台
!
用于运行开发过程中
的各种工具
’
目标板是运行和测试平台
!
是嵌入式系统
的最终驻留环境
%
在主机端和目标板之间需要通过某
种方式进行通信
!
如使用
.A!
&!
串口
!
或者
>;V0,0;%
这
种通信的目的在于发送控制指令和传输数据
!
同时获
得目标板的状态信息
%
软件开发环境是由
LWX=
库
#UK+O9$7LWXO+,B;+K6
以及
LWX
编译器
U99
等一系列交叉开发工具组成
%#
如
图
)
所示
$
R)SL99
摘要
!
本文以
!
"#$%&’
为例
!
讲述了将
()*+,-./
移植到基于
()*
的微处理器的开发板的基本过程
!
首先介
绍了嵌入式
+,-./
的发展情况
!
并简单说明了如何搭建移植环境
!
然后重点讨论了
()*+,-./
内核的移植过程中需
要修改的文件
"
关键词
!
嵌入式
+,-./0
移植
0()*+,-./
中图分类号
!
12%&3#
文献标识码
!
(
()*+,-.+/4-56,7898:
;<56:
5:
=6-,>.:
?
@8?
;5,-A()*+,-./5?
56:
B?
C8;?
=:
77?
;D97:
E?
-()*,7,-5;?
E.=:
EF
#:
A,--,-AG,5656:
E:
7=;,85,?
-?
@56:
E:
H:
I?
8:
;?
@!
JD:
EE:
E+,-./<9-E56:
D.,IE,-A56:
()*E:
H:
I?
8J:
-55?
?
I7@?
;
+,-./<,5@?
=.7:
7?
-6?
G5?
=?
-75;.=556:
K:
;-:
I@?
;78:
=,@,=8;?
=:
77?
;G,56()*+,-./@;?
J?
8:
-7?
.;=:
8;?
L:
=57M
01234,5/!
JD:
EE:
E+,-./08?
;5,-A0()*+,-./
电脑知识与技术
电脑知识与技术
!
"#
核的嵌入式系统芯片上的过程是可以借鉴的
!
参考文献
!
$%&’()*+*,(-)./0(11(1234+(/"5672+(8(94-9
:
:
:
;4(<9<+5-9<=;6-/;<*
>?
%@/0(11(1A59*B2*,8(3C:
:
:
;0=*(/*D;6-/
>E%F*5=159D+’(G"H1(8(=-I/(9++--=4)-,A59*B
>J%K-,+59D+’(A59*BL(,9(=+-!
"HK=<+)-,/
N--7(3<91&<7O2’59D:
:
:
;<=(I’$;6-;*7
>P%Q59*BR(856(R,58(S
第二版
TG=(44<91,-"*0595
<91U-9<+’<96-,0(+
中国电力出版社
>V%G"HA59*B
在
@KWE$?
上的移植李程远等计算
机工程与设计
X*=;?
YYEIWE
收稿日期
"?
YYP
年
?
月
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
在一些脱机运行的
Z2K
系统中
#
用户代码需要在
加电后自动装载运行
!
Z2K
系统的引导装载
$F--+=-<1%
是指在系统加电时
&Z2K
将一段存储在外部的非易失
性存储器的代码移植到内部的高速存储器单元中去执
行
!
这样既利用了外部的存储单元扩展
Z2K
本身有限
的
"[H
资源
&
又充分发挥了
Z2K
内部资源的效能
!
尽
管用户代码在一段时间相对是固定的
&
但是如果直接
将其掩膜到内部
"[H
中去的话
&
一方面受容量以及价
格的限制
&
另一方面则在系统代码级上显得不是很灵
活方便
!
\AG2]
存储器是在
.K"[H
和
..K"[H
的基
础上发展起来的一种高密度
’
非易失性电可擦写存储
器
&
在掉电情况下仍能保证数据不丢失
&
并能够在不离
开电路板或据设备的情况下实施擦除和再编程操作
(
具有结构简单
’
维护便利
’
存取速度快
’
对环境适应能
力强
’
抗振性能好等优点
^
而且单位存储比特的价格比
传统的
.K"[H
要低
&
十分适合于低功耗
’
小尺寸和高
性能的便携式系统
)
除了可以采用专用的硬件编程器
把代码灌入
\AG2]
中之外
&
也可以利用现成的
R2K
通
过软件编程来实现同样的功能
!
!
"#$
对
%&’#(
的操作
我们采用的
\=<4’
存储器型号为
HFH?
_A‘aYYbG&
其主要特点有
"E‘
单电源供电
&
可使内部产生高电压
进行编程和擦除操作
*
支持
X.Z.c
单电源
\=<4’
存储器
标准
*
只需向其命令寄存器写入标准的微处理器指令
&
具体编程
+
擦除操作由内部嵌入的算法实现
&
并且可以
通过查询特定的引脚或数据线监控操作是否完成
*
可以
对任一扇区进行读
’
写或擦除操作
&
而不影响其它部分
的数据
!
本设计中
P$?
L!
$V
位
HbH?
_A‘aYYbG\=<4’
映射为
Z2K
的片外程序存储空间数据
&
总线
$V
位
&
用
于
$V
位方式的并行引导装载和数据保存
!
其中既保存
了用户主程序
’
模拟
b--+=-<1(,
等程序
&
还保存了数据
"
如中英文字库
’Z2[
波形数据
’
设置等
!
表
!
编程命令
摘要
)
本文介绍了一种利用
"#$%&
存储器实现
’()
系统对主程序的上电加载的方法
!
其中
"
重点介绍
*+*,-./01123"#$%&
的使用和编程方法
!
关键词
!
"#$%()#2556#5$789
中图分类号
!
:
);<<#
文献标识码
!
3
*+,-,.,/-0+/12/33450/657178"#$977651:
8-7;%4/.+
<9.6-/06):
&=%68>6=?
6957@A87$B=?
75CD86&576&$6D$B8%@%85C4()6&$6$@65D$6=A$##E#5$7%D$=?
F95G9$DC95D
"#$%&656&8H3*IJ6C5A@%8%5?
6&8@%$G8$?
76&8F95G9$DD=?
GD86&57%5C*2*K-./01123"#$%&I
=,>?
7-2)"#$%&4()2556#5$789
!
"#
的
$%&"’
引导方法研究与实现
电子科技大学自动化工程学院
L
四川成都
M<11NO
研究开发
48
王化叶芃王厚军