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

Arm处理器与Linux的完美结合

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
嵌入式系统的定义应当是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。; @/ S$ ^6 p# M8 K  |' c
比如现在ATM取款机就是一个典型RTOS,embedded os主要包括两部分,一部分是处理器,比如ARM,POWERPC,MIPC,一部分是OS,比如Linux,wince,vxworks,us/os,etc.我现在主要学习的路线是arm+linux,选择arm主要是因为arm技术已经比较成熟,选择linux是因为linux是开源的,免费的,另外如果学好了linux就算将来不搞嵌入式系统开发这块,也可以专供linux服务器这一方面。
  P. I# x5 \  Y: l7 a5 `' _
4 e1 k% O2 ^( b3 p- w" ?
学习嵌入式linux,主要做的就是四点,一点就是写bootloader,并移植到到nand flash上,第二点,编译kernel,并通过bootloader下载到nand flash上,第三点,在基于nand flash上建立文件系统,第四点,把写好的应用程序下载到target上。基本流程就是这么下来的,具体到开发板上时可能就有所差别了,下边就以深圳优龙公司的fs2410为目标板具体的上述一下开发的流程,以及在开发中应注意的问题。想交流了解33066075413 }! o6 `0 R4 i* }  J
第一步:交叉编译环境的建立
# t0 c" {( k$ n+ ^/ Q% V  U
+ y# c& O) |% ^6 F) `8 {0 l9 |& p, e" E6 {
A: 基于linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主pc机所构成。目标硬件开发板用于运行操作系统和系统应用软件。而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主pc机来完成(所以称为交叉编译)。双方之间一般通过串口,并口以太网接口建立连接关系。安装linux os,比如redhao linux 9.0,可以采用默认安装(但要包含ftp服务),将该linux服务器接入局域网,其他的pc机可以用windows,需要的软件工具包括。" z8 h" D! ^% u1 i+ \% R" s8 b
4 F! ^: i* d# ^5 L, m6 Y! {
1)ftp客户端程序: Q2 D; }+ n7 v! H+ y1 U- L  [
9 y. P5 r6 ]' [4 D6 v
2)telnet工具: j1 D& @3 e! w7 s; U0 N  ?

8 t$ U+ h8 t3 @' b( a
3)移植到某一特定arm平台的linux操作系统内核源码
( j# f2 J" z. p% S
8 V* v9 b9 i1 G! d
4)gnu编译工具,可由相关网站下载/ X2 }5 A8 [  k9 ~- n3 p
* [% n$ s$ G- A# q1 H- V) {
在某工作站pc上安装ftp客户端程序和telnet工具,linux os kernel的编译一般有一个比较固定的步骤,会根据Makefiel文件的不同而略有差异,可参考相关文档,按固定的步骤编译内核完成以后,会在相应目录生成可执行的二进制文件,通过ftp传到pc机上,热后通过串口或网络下载到开发板上。
/ i' ^9 p; F: B; w0 c
3 U9 K9 T" n8 U; m, P& `
B:(1) 创建编译环境,在这个过程中,将设置一些环境变量,创建安装目录,安装内核源代码和头文件等。
3 a! m# ]. a- d/ `, j
. P7 J, `4 \5 _- ^; f& w
2) 创建binutils.在这个过程结束后,会创建类似arm-linux-ld等工具。
: z$ f9 h4 c! j) X

0 k& l3 [4 j% o
3) 创建一个交叉编译版本的gcc,注意:在这个过程中,只能编译c程序,而不能编译c++程序。/ B+ c% |3 \: G  u" f% k5 n

: e) }- r# D# n  ?! m
4) 创建一个交叉编译版本的glibc,这里最容易出问题。. N) t, O. L* j7 N- M9 _) K
. l5 }& i' \5 G, h
5) 创建一个交叉编译版本的gdb。这个过程结束后,会创建arm-linux_gdb, U5 v2 F; L* V: d

4 l: D) O; J' t
6) 重新创建gcc。前面创建gcc的过程没有编译c++编译器,现在glibc已经准备好了,所以这个步骤将完善gcc的交叉编译。# R- [9 k% |1 L; Z% V, p1 _6 h

3 Y+ R3 o0 b' ]1 b# F% k' _9 K
7) 重新创建glibc.
9 u3 S0 I1 d" g. S
& X( k# _) F" W9 k
如果在交叉编译过程中出现错误,那么请检查:2 e5 o6 s5 C  k" J! O9 c

" E7 u: p1 Y" D! o. u  N. v
版本选择是否正确,以及是否安装了相应的补丁;& _1 J. n1 d6 N, ?7 _5 s0 \8 w( B8 A
3 C7 U0 C3 l: p+ ]# T5 X7 [
库文件路径设置是否正确;
5 z: E- s" r; Y- M6 ~5 G

8 O+ j. X7 L5 |$ ?4 Y/ q
系统环境变量是否设置正确。
6 K" e+ Z! u# w+ B$ |! F. \
: t8 W4 R! U) }
第二步:编写bootloader并移植到开发板上
( o1 U9 K, F& q- {5 }; s
2 ~& L+ ^3 K1 D6 C8 h6 {% z3 ?- g# H
A:bootloader(引导加载程序)是系统加电后运行的第一段代码。嵌入式系统中的bootloader相当于pc机中的bios。大多数bootloader都包含两种不同的操作模式,一种是启动加载(bootloading)模式,在这种模式下,bootloader从目标机上的某个固态存储器设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是bootloader的正常工作模式,另一种是下载(downloading)模式。在这种模式下,目标机上的bootloader将通过串口或网络等通信手段从开发主机(host)上下载内核映像和根文件系统映像等到RAM中。然后可以再被bootloader写到目标机上的固态存储介质上。  h( o+ S$ x- q) G, B; Q; q" N' p

7 q( A4 Q1 Q9 l3 r2 h. h# x
B:bootloader启动大多数都分为两个阶段
/ _% n# L7 |0 B; D& i- S

# L9 P& I1 T3 u0 w1 W. S; \+ H
1):基本的硬件初始化(屏蔽所有的中断,关闭处理器内部指令/数据cache等)。4 f# L$ l/ R6 y

) V$ R) d3 p  p% y) X0 f
为第二阶段准备RAM空间,如果是从某个固态存储媒质中,则复制bootlodaer的第二阶段代码到RAM。  l) @9 |+ G( f

( U8 r+ i1 \" @
设置堆栈。
4 Z& \: z$ q# Y
5 }4 Z# X% s7 b+ ^9 Z0 C
跳转到第二阶段的C程序入口点。, g$ W7 I/ c1 ^9 j( T

1 r7 ?9 U  {' O# y* T- [
2):初始化本阶段要使用的硬件设备。
* M3 i' Q+ c2 b3 W9 |7 ~. I

- ~3 n( V7 q( z1 `5 t
检查系统内存映射。
5 d% S$ M! _/ A( `' k
4 S1 H" @  A( n  g3 N8 O
将内核映像和根文件系统映像从flash读到RAM。
$ S9 G- O/ u* _. G$ P" K" h1 {$ c

" ~2 i' q) G7 E4 i& p9 H2 F
为内核设置启动参数调用内核。

, ?0 q/ e' l7 M0 g) A# W) c1 R

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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