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

Arm处理器与Linux的完美结合

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
嵌入式系统的定义应当是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
  ]4 T4 {: g. f+ d; F# m4 ~) y# T: m
比如现在ATM取款机就是一个典型RTOS,embedded os主要包括两部分,一部分是处理器,比如ARM,POWERPC,MIPC,一部分是OS,比如Linux,wince,vxworks,us/os,etc.我现在主要学习的路线是arm+linux,选择arm主要是因为arm技术已经比较成熟,选择linux是因为linux是开源的,免费的,另外如果学好了linux就算将来不搞嵌入式系统开发这块,也可以专供linux服务器这一方面。/ s/ m/ h# C4 o* q/ X% s( X

+ I, G$ p0 \8 [  x4 D$ o6 J: F0 h
学习嵌入式linux,主要做的就是四点,一点就是写bootloader,并移植到到nand flash上,第二点,编译kernel,并通过bootloader下载到nand flash上,第三点,在基于nand flash上建立文件系统,第四点,把写好的应用程序下载到target上。基本流程就是这么下来的,具体到开发板上时可能就有所差别了,下边就以深圳优龙公司的fs2410为目标板具体的上述一下开发的流程,以及在开发中应注意的问题。想交流了解3306607541* d6 N# S5 Q9 Y" i; M/ E9 ^
第一步:交叉编译环境的建立' G8 g9 N; D) N5 [3 h! R
6 l0 b: G+ u- D5 F- ]3 U( o
A: 基于linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主pc机所构成。目标硬件开发板用于运行操作系统和系统应用软件。而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主pc机来完成(所以称为交叉编译)。双方之间一般通过串口,并口以太网接口建立连接关系。安装linux os,比如redhao linux 9.0,可以采用默认安装(但要包含ftp服务),将该linux服务器接入局域网,其他的pc机可以用windows,需要的软件工具包括。& d$ T7 N6 d& g; h, @: o
) L5 Z' O, d/ _  A+ O/ [& ~9 c4 z
1)ftp客户端程序
, T2 Q9 t2 Z% ~3 u

# m. c. W$ u! \6 k* r( B
2)telnet工具3 Y0 v$ V  P; B0 _. n, L% D

, A  P7 K3 O0 u2 q9 U
3)移植到某一特定arm平台的linux操作系统内核源码
! y6 h' D) \; D( d
8 c+ m' u; H. G; K- \
4)gnu编译工具,可由相关网站下载
+ J+ T( @" a* k8 U+ p; `
9 F4 e5 k' E0 S# @2 b7 ]- P! v( r8 _
在某工作站pc上安装ftp客户端程序和telnet工具,linux os kernel的编译一般有一个比较固定的步骤,会根据Makefiel文件的不同而略有差异,可参考相关文档,按固定的步骤编译内核完成以后,会在相应目录生成可执行的二进制文件,通过ftp传到pc机上,热后通过串口或网络下载到开发板上。
7 }6 a' E8 z( l
6 C- q3 ]3 s- I  B
B:(1) 创建编译环境,在这个过程中,将设置一些环境变量,创建安装目录,安装内核源代码和头文件等。
: c" z$ D4 O7 U0 @- j
( u, f# j9 U6 c' X, v" T
2) 创建binutils.在这个过程结束后,会创建类似arm-linux-ld等工具。
* z0 G& }$ ]" i0 j
4 O5 g0 ~$ u9 H. I9 }& u$ |3 L1 i, B
3) 创建一个交叉编译版本的gcc,注意:在这个过程中,只能编译c程序,而不能编译c++程序。; G8 r' F+ u1 e1 h8 z# O

6 j: W$ @" v  B4 v
4) 创建一个交叉编译版本的glibc,这里最容易出问题。
. r0 w/ q. t# x; h: C

# g' Q5 Q& O9 k& L8 u( q
5) 创建一个交叉编译版本的gdb。这个过程结束后,会创建arm-linux_gdb3 s, e, N+ Z! V' ?( f# |" D6 W

, K  |8 Y/ F4 T6 U
6) 重新创建gcc。前面创建gcc的过程没有编译c++编译器,现在glibc已经准备好了,所以这个步骤将完善gcc的交叉编译。7 x! d8 b9 c4 E* P8 v. R# y9 k% U" Q& s

9 l3 [8 T1 r  I
7) 重新创建glibc.
, b/ E% v* t; w) J% Z
; @4 z+ E# m. q+ b5 _
如果在交叉编译过程中出现错误,那么请检查:$ W, Q! Y* ^. s/ A0 r: @

. P. u/ v+ ~7 t$ q6 r- ~2 J. u; m  e
版本选择是否正确,以及是否安装了相应的补丁;
& l; j6 p/ V/ J, J
, ^" Q. ^- g: H! `
库文件路径设置是否正确;3 Z. h  K' M5 S. Y6 g# y
1 a0 v+ a+ y1 K* t( b9 z7 l/ A1 F) n
系统环境变量是否设置正确。
+ A8 t8 N7 Z" c, n

# E) L& g6 w; q3 x
第二步:编写bootloader并移植到开发板上
9 }0 m- ?# F$ Y) J& m0 [7 _

  f+ r- x5 ^( w: W
A:bootloader(引导加载程序)是系统加电后运行的第一段代码。嵌入式系统中的bootloader相当于pc机中的bios。大多数bootloader都包含两种不同的操作模式,一种是启动加载(bootloading)模式,在这种模式下,bootloader从目标机上的某个固态存储器设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是bootloader的正常工作模式,另一种是下载(downloading)模式。在这种模式下,目标机上的bootloader将通过串口或网络等通信手段从开发主机(host)上下载内核映像和根文件系统映像等到RAM中。然后可以再被bootloader写到目标机上的固态存储介质上。0 f6 _+ Y! w! n- K, p) L4 Y  `
% n- o& }  z9 |7 y$ J
B:bootloader启动大多数都分为两个阶段0 u* f' l1 b* ?) N8 t8 ~

7 C" w9 E. y9 V* f4 l
1):基本的硬件初始化(屏蔽所有的中断,关闭处理器内部指令/数据cache等)。
4 g5 ^/ X% D' q% j( ]

$ @5 j1 w9 I  @2 \; q2 m
为第二阶段准备RAM空间,如果是从某个固态存储媒质中,则复制bootlodaer的第二阶段代码到RAM。
" ^7 V4 v/ v0 Q! E& p1 t
- t; Q: j8 Y# y% F" f3 l& Y
设置堆栈。
9 L( q+ P# S! W- w: q7 W) C

5 S0 x3 L5 Z/ ~# ?
跳转到第二阶段的C程序入口点。, N! |) b' `- n8 Q; }

" `) c- b5 x0 `6 V. T: I  H' T: E7 N
2):初始化本阶段要使用的硬件设备。
  M. [2 l" n% v
# |  y% w  p7 R/ B) z
检查系统内存映射。8 z; N% K8 n' r: F6 Z2 n

! z+ x# D3 V3 C+ \2 f
将内核映像和根文件系统映像从flash读到RAM。, i  I' M( k7 K/ h5 W/ X* K

" _1 B7 Z. m# `
为内核设置启动参数调用内核。
+ ~% W3 y3 u/ u' Y% h/ J5 W

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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