找回密码
 注册
关于网站域名变更的通知
查看: 333|回复: 1
打印 上一主题 下一主题

Arm处理器与Linux的完美结合

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-11-24 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
嵌入式系统的定义应当是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。9 s, `! l. m8 X( v( q8 w1 }
比如现在ATM取款机就是一个典型RTOS,embedded os主要包括两部分,一部分是处理器,比如ARM,POWERPC,MIPC,一部分是OS,比如Linux,wince,vxworks,us/os,etc.我现在主要学习的路线是arm+linux,选择arm主要是因为arm技术已经比较成熟,选择linux是因为linux是开源的,免费的,另外如果学好了linux就算将来不搞嵌入式系统开发这块,也可以专供linux服务器这一方面。7 T3 K& {8 B# i! f; v* b) \
( m3 w4 m: j0 k. T! y* S1 ?
学习嵌入式linux,主要做的就是四点,一点就是写bootloader,并移植到到nand flash上,第二点,编译kernel,并通过bootloader下载到nand flash上,第三点,在基于nand flash上建立文件系统,第四点,把写好的应用程序下载到target上。基本流程就是这么下来的,具体到开发板上时可能就有所差别了,下边就以深圳优龙公司的fs2410为目标板具体的上述一下开发的流程,以及在开发中应注意的问题。想交流了解3306607541' l( }4 L: f0 I- \6 _
第一步:交叉编译环境的建立
+ H# q- {& M1 E$ M
: P3 |/ F/ `% O9 f6 V& r
A: 基于linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主pc机所构成。目标硬件开发板用于运行操作系统和系统应用软件。而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主pc机来完成(所以称为交叉编译)。双方之间一般通过串口,并口以太网接口建立连接关系。安装linux os,比如redhao linux 9.0,可以采用默认安装(但要包含ftp服务),将该linux服务器接入局域网,其他的pc机可以用windows,需要的软件工具包括。# B- H8 W. G' }% u: Z+ d. M

' R* a7 Y7 E9 I1 M  [& U
1)ftp客户端程序
/ H: M) b3 L0 u+ c% N3 h

7 ^6 s1 ]. y: ?) u$ S' R
2)telnet工具( F, C7 W! f' B. _2 L0 }: q
4 {) ]" f: [( K, H7 @0 g$ y3 z1 [
3)移植到某一特定arm平台的linux操作系统内核源码
3 h6 T, w% b  I$ K

, ~" w3 \9 @  h% {1 D( g  q
4)gnu编译工具,可由相关网站下载: G9 L8 v, k3 f) f, q& R% c

& B% c% q( w0 ]' B" d1 x  m
在某工作站pc上安装ftp客户端程序和telnet工具,linux os kernel的编译一般有一个比较固定的步骤,会根据Makefiel文件的不同而略有差异,可参考相关文档,按固定的步骤编译内核完成以后,会在相应目录生成可执行的二进制文件,通过ftp传到pc机上,热后通过串口或网络下载到开发板上。
! e2 M) z7 O2 H. t, h" t4 g6 W

/ B4 H* X( u7 r+ P
B:(1) 创建编译环境,在这个过程中,将设置一些环境变量,创建安装目录,安装内核源代码和头文件等。5 w! B+ c9 K1 }

+ c; U" X6 a/ _% s. e* N/ |
2) 创建binutils.在这个过程结束后,会创建类似arm-linux-ld等工具。
5 {; y+ j2 [4 x; F4 [

# b! l7 D5 K9 E4 B+ t
3) 创建一个交叉编译版本的gcc,注意:在这个过程中,只能编译c程序,而不能编译c++程序。0 U. a6 s; v, v7 [2 A: `

8 u; I0 x0 K) D, \8 v
4) 创建一个交叉编译版本的glibc,这里最容易出问题。
2 ?4 a  j7 e5 v
/ G! S# x! y( p; u# Z
5) 创建一个交叉编译版本的gdb。这个过程结束后,会创建arm-linux_gdb$ r; [" o( R% s! Z0 w* \6 r
5 N' {3 A, C1 g  i
6) 重新创建gcc。前面创建gcc的过程没有编译c++编译器,现在glibc已经准备好了,所以这个步骤将完善gcc的交叉编译。. t3 t6 j* o& l

3 P# f8 p% o, `: N$ E( ^& e' l
7) 重新创建glibc.0 V2 Y/ q2 l( V1 f/ J3 [+ K+ N' U

$ D- _" w: m& Y0 v* y) {
如果在交叉编译过程中出现错误,那么请检查:
2 y/ G/ I: e$ I2 J3 E  D0 A

" \: F1 g; G5 Y2 ]
版本选择是否正确,以及是否安装了相应的补丁;
. H: q7 ^" ]8 ^$ Z. E

7 Z% i% @4 Y  I
库文件路径设置是否正确;
0 i: Y' ~7 l4 e8 m6 c
% x+ ^( E! T4 N* M
系统环境变量是否设置正确。8 q  k2 V( g8 ^6 I
" ~4 l( Y7 C7 U1 s- v4 ~1 \
第二步:编写bootloader并移植到开发板上
, D6 Z8 E; x1 w, C

% A0 \* |5 S1 |8 O! ~( C! y7 C
A:bootloader(引导加载程序)是系统加电后运行的第一段代码。嵌入式系统中的bootloader相当于pc机中的bios。大多数bootloader都包含两种不同的操作模式,一种是启动加载(bootloading)模式,在这种模式下,bootloader从目标机上的某个固态存储器设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是bootloader的正常工作模式,另一种是下载(downloading)模式。在这种模式下,目标机上的bootloader将通过串口或网络等通信手段从开发主机(host)上下载内核映像和根文件系统映像等到RAM中。然后可以再被bootloader写到目标机上的固态存储介质上。
6 [" l/ y. D, Q. z; w

# z; b! N) {* t" ~  ]; d
B:bootloader启动大多数都分为两个阶段
! B. @* |# T4 _  l% A4 n
' q* R" q2 T1 S4 B$ W
1):基本的硬件初始化(屏蔽所有的中断,关闭处理器内部指令/数据cache等)。
. ]7 T3 i5 Q9 c0 h* H4 h, W

& l6 N$ L8 e& D6 Z5 V
为第二阶段准备RAM空间,如果是从某个固态存储媒质中,则复制bootlodaer的第二阶段代码到RAM。0 q% s! U& V- b" p1 x
# E$ x$ z9 S  _- Q! m2 C( C- B3 l
设置堆栈。5 s5 f0 I+ z# J/ X9 i

$ Y9 D6 i  T* _# o( y* [
跳转到第二阶段的C程序入口点。
8 u' B7 c$ T; m6 [, K
- j7 S7 s4 Z2 J  V" P: x! J% z7 W
2):初始化本阶段要使用的硬件设备。
1 u) t- w, ?1 l7 b5 e2 m/ r
3 B% V. u3 _0 C5 s' h; W9 t0 L. }! _
检查系统内存映射。$ v0 u9 r1 Q' E5 ]0 ~0 S
) [5 m, x8 v- d" Q4 R
将内核映像和根文件系统映像从flash读到RAM。8 x, d, i& B2 ?
& Q/ J9 r3 N' }  {2 r# ~
为内核设置启动参数调用内核。

! x6 a+ o& i& ~% N  d

该用户从未签到

2#
发表于 2020-11-24 13:56 | 只看该作者
Arm处理器与Linux的完美结合
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 21:18 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表