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

Arm处理器与Linux的完美结合

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
嵌入式系统的定义应当是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
: l* i/ l6 \6 O
比如现在ATM取款机就是一个典型RTOS,embedded os主要包括两部分,一部分是处理器,比如ARM,POWERPC,MIPC,一部分是OS,比如Linux,wince,vxworks,us/os,etc.我现在主要学习的路线是arm+linux,选择arm主要是因为arm技术已经比较成熟,选择linux是因为linux是开源的,免费的,另外如果学好了linux就算将来不搞嵌入式系统开发这块,也可以专供linux服务器这一方面。
  w+ a0 u  D1 @5 ?5 f9 i

, t+ e  J( o. y- |/ M5 D
学习嵌入式linux,主要做的就是四点,一点就是写bootloader,并移植到到nand flash上,第二点,编译kernel,并通过bootloader下载到nand flash上,第三点,在基于nand flash上建立文件系统,第四点,把写好的应用程序下载到target上。基本流程就是这么下来的,具体到开发板上时可能就有所差别了,下边就以深圳优龙公司的fs2410为目标板具体的上述一下开发的流程,以及在开发中应注意的问题。想交流了解33066075417 F7 j" \6 e: @  R; s2 j
第一步:交叉编译环境的建立
+ @+ @7 j8 `  E. n% o3 _! N+ F5 \

4 m; s4 [& ~: |, f9 g8 P5 j
A: 基于linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主pc机所构成。目标硬件开发板用于运行操作系统和系统应用软件。而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主pc机来完成(所以称为交叉编译)。双方之间一般通过串口,并口以太网接口建立连接关系。安装linux os,比如redhao linux 9.0,可以采用默认安装(但要包含ftp服务),将该linux服务器接入局域网,其他的pc机可以用windows,需要的软件工具包括。2 X" {( o$ b  k% R
; i! i/ s( G6 B, U. s9 c
1)ftp客户端程序$ c5 X4 g% k) [- l" e

5 x$ _5 O$ b- T2 R+ U! l( `: ~6 y
2)telnet工具* r) w$ H" _2 i. R/ r
) X" L1 F, M2 [9 ]1 H: I: ~
3)移植到某一特定arm平台的linux操作系统内核源码( u0 }3 @' Q6 N8 f
( k6 u. D" o7 G! |) b: D
4)gnu编译工具,可由相关网站下载0 ]8 Q, ]% c4 r4 R6 C' Q6 s- ~  O

# H+ U& `7 w: H7 s$ _: b
在某工作站pc上安装ftp客户端程序和telnet工具,linux os kernel的编译一般有一个比较固定的步骤,会根据Makefiel文件的不同而略有差异,可参考相关文档,按固定的步骤编译内核完成以后,会在相应目录生成可执行的二进制文件,通过ftp传到pc机上,热后通过串口或网络下载到开发板上。& M/ _6 B, ?* C. I" [
8 U1 [# t1 T8 o3 _
B:(1) 创建编译环境,在这个过程中,将设置一些环境变量,创建安装目录,安装内核源代码和头文件等。
6 t' d- D* u0 W& R3 ^

# a& S! v0 ?7 O2 E  d$ c& M
2) 创建binutils.在这个过程结束后,会创建类似arm-linux-ld等工具。- i# L/ S# Q, T! w

3 X+ W9 {. q' l6 D: e! U; h
3) 创建一个交叉编译版本的gcc,注意:在这个过程中,只能编译c程序,而不能编译c++程序。' i3 S7 E9 ]1 _8 F" e6 |' R$ }
  P! J+ q4 q5 B2 q/ ]: `
4) 创建一个交叉编译版本的glibc,这里最容易出问题。
: i8 h& j' U; U5 O0 j# f( T
+ ?& @2 t7 X7 g# R) A; N1 O3 c
5) 创建一个交叉编译版本的gdb。这个过程结束后,会创建arm-linux_gdb- I& v6 o9 d) q  O4 J2 ~  v# u
8 n. N+ U. o: T) \# l- ]
6) 重新创建gcc。前面创建gcc的过程没有编译c++编译器,现在glibc已经准备好了,所以这个步骤将完善gcc的交叉编译。
  x% ^; ^8 C9 h4 ^/ Q, b
3 T# m# v; K$ L+ S& ^
7) 重新创建glibc.
. j" X( h# E  e$ l6 S( ^. C

+ y4 N! x7 A$ e; F! K
如果在交叉编译过程中出现错误,那么请检查:
! i3 q& z; B2 M6 H; F  I

* {8 f' P; _' Z, f
版本选择是否正确,以及是否安装了相应的补丁;( j- U4 n& h) T

% D8 j$ o# I- h: I& ~2 ]
库文件路径设置是否正确;" \' P: ?  j* c" v  j' A$ K

. J( j% J% ?/ Z8 t# q( Z
系统环境变量是否设置正确。' U, F2 _7 x) S% `) Z" H0 _
- F0 K  \' o5 q2 i9 n2 J% r
第二步:编写bootloader并移植到开发板上" z# ?9 I) z4 O- U

  u. f) E1 U/ ~8 V0 J8 r
A:bootloader(引导加载程序)是系统加电后运行的第一段代码。嵌入式系统中的bootloader相当于pc机中的bios。大多数bootloader都包含两种不同的操作模式,一种是启动加载(bootloading)模式,在这种模式下,bootloader从目标机上的某个固态存储器设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是bootloader的正常工作模式,另一种是下载(downloading)模式。在这种模式下,目标机上的bootloader将通过串口或网络等通信手段从开发主机(host)上下载内核映像和根文件系统映像等到RAM中。然后可以再被bootloader写到目标机上的固态存储介质上。: F* V: c4 f+ }

3 k+ R0 R" H8 n# B
B:bootloader启动大多数都分为两个阶段/ }! @. M; ~2 T- P6 A
3 O, y* F: m7 i  ?. p& r+ E
1):基本的硬件初始化(屏蔽所有的中断,关闭处理器内部指令/数据cache等)。
/ r$ w# d& i; H, e# N

" d' I6 v& y- I
为第二阶段准备RAM空间,如果是从某个固态存储媒质中,则复制bootlodaer的第二阶段代码到RAM。
! k; ?  _* }4 d2 ?4 B7 B9 }
& n0 J, T6 ]1 b+ M  L0 t, x) v4 t% r
设置堆栈。
: n% c3 ]5 \# `* h7 F& j5 S8 s3 g

5 s, x6 {! j# C
跳转到第二阶段的C程序入口点。! \& ?6 [& t- m" o1 v

6 R2 X8 k) Q* ?* M
2):初始化本阶段要使用的硬件设备。
  v. G0 X8 x* B2 {7 u- `- m7 m- _

6 k' z! }' y+ l+ C+ p* ]
检查系统内存映射。8 ?( \9 j! v" z

1 A* y) q/ c( M$ ]
将内核映像和根文件系统映像从flash读到RAM。
- e: T7 s; p. V% q

  @# P+ j2 X8 C0 _- B
为内核设置启动参数调用内核。
& D/ c2 [" B  O' J$ Y

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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