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

Arm处理器与Linux的完美结合

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

5 I+ h+ _. R/ e, ?/ x
1)ftp客户端程序
9 d6 ]6 ?6 N3 S2 j5 \

8 ~0 v1 K3 i+ g+ r1 x
2)telnet工具: s% C% P8 \7 T; [+ b8 V2 L+ W

; a2 w# `- x" L) |
3)移植到某一特定arm平台的linux操作系统内核源码% x, ?! [* H, }/ s1 g% ~2 W
/ ^  p, J/ q0 `
4)gnu编译工具,可由相关网站下载# ^1 Y7 y( k! j# R1 ~

- m2 I6 |4 Z7 ~. p2 Q
在某工作站pc上安装ftp客户端程序和telnet工具,linux os kernel的编译一般有一个比较固定的步骤,会根据Makefiel文件的不同而略有差异,可参考相关文档,按固定的步骤编译内核完成以后,会在相应目录生成可执行的二进制文件,通过ftp传到pc机上,热后通过串口或网络下载到开发板上。/ N0 U; n( M, [

! N" I! t3 S+ b: Q
B:(1) 创建编译环境,在这个过程中,将设置一些环境变量,创建安装目录,安装内核源代码和头文件等。! c+ H9 @$ ?3 u2 V- s

0 F' N4 V5 P; t. H2 g. s, g+ m
2) 创建binutils.在这个过程结束后,会创建类似arm-linux-ld等工具。6 w) S/ R' L5 g
" S* }/ Y5 R3 g9 I+ C, |! o. g6 U
3) 创建一个交叉编译版本的gcc,注意:在这个过程中,只能编译c程序,而不能编译c++程序。
7 o/ L' b0 C. E4 [+ _/ I0 b  ^; ]; e

' P0 q$ ~& Z( B, d
4) 创建一个交叉编译版本的glibc,这里最容易出问题。5 Y' n$ A3 _) o* i) U$ b. \

7 T# l1 G1 T# _, ]) c7 V
5) 创建一个交叉编译版本的gdb。这个过程结束后,会创建arm-linux_gdb
7 D! f  a. q2 d) i) [& f
5 ]* Q. O1 \( T( Z( e5 k! `
6) 重新创建gcc。前面创建gcc的过程没有编译c++编译器,现在glibc已经准备好了,所以这个步骤将完善gcc的交叉编译。7 `% G$ c  u! U6 ^- x* R9 q3 [. w

" X: C1 C9 ?2 j; I% m: H1 J; U
7) 重新创建glibc.8 R. u, @& \  c: G& l( x. Q/ P0 M( `
" I/ o1 \* R* x' C. P
如果在交叉编译过程中出现错误,那么请检查:
7 N1 ]- w: k6 O) g7 I/ T& L% [) }; E

' p+ t: a9 H3 \# q, }3 B* ]
版本选择是否正确,以及是否安装了相应的补丁;
( M' l- {: V3 o* A

( `& S2 `/ A; J! l
库文件路径设置是否正确;2 L3 T' I5 ?" [4 g2 \

* q  S  a6 D9 [+ f' }
系统环境变量是否设置正确。
& c/ u9 M# u( {/ v, S7 p1 P
* k6 P: h7 [9 j* q  d  U. b1 S& }
第二步:编写bootloader并移植到开发板上
( M4 @$ G& ~. z; s6 C
8 \. Q: z7 g5 e& e) n* D
A:bootloader(引导加载程序)是系统加电后运行的第一段代码。嵌入式系统中的bootloader相当于pc机中的bios。大多数bootloader都包含两种不同的操作模式,一种是启动加载(bootloading)模式,在这种模式下,bootloader从目标机上的某个固态存储器设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是bootloader的正常工作模式,另一种是下载(downloading)模式。在这种模式下,目标机上的bootloader将通过串口或网络等通信手段从开发主机(host)上下载内核映像和根文件系统映像等到RAM中。然后可以再被bootloader写到目标机上的固态存储介质上。
* m9 F! D+ {% u2 P

3 c% D7 L$ ^: j! Z) t1 Z/ s
B:bootloader启动大多数都分为两个阶段) I  n( q4 N- h- _; p

- ^1 B0 Y3 V, w! p
1):基本的硬件初始化(屏蔽所有的中断,关闭处理器内部指令/数据cache等)。$ H9 y0 g# R$ E6 Y; N& i
3 G: R3 d) Z. j8 Y4 G, Q, d
为第二阶段准备RAM空间,如果是从某个固态存储媒质中,则复制bootlodaer的第二阶段代码到RAM。
( W# y* H7 X/ W* h5 D$ [3 E

8 e8 H1 Q0 d# W$ a+ Y1 O
设置堆栈。
% M8 `0 Q- K5 K, {* B, [/ \0 a3 j

% f1 R( l4 p' j( H
跳转到第二阶段的C程序入口点。
+ m+ v; ~( M4 B0 l9 m* ^

9 X5 `; Z: X, \- X
2):初始化本阶段要使用的硬件设备。7 H+ O8 o! h% P  J$ o
. i; L! S" ?/ p* E2 k6 C! d
检查系统内存映射。
* z; _1 q. M. P9 z6 s

7 V( r. K- B; v+ z
将内核映像和根文件系统映像从flash读到RAM。
# m- e$ p1 }4 y* B& R% V& {

$ B7 k8 {7 [, b6 K" y, u3 g! T9 [
为内核设置启动参数调用内核。
7 g/ Y' s8 T5 C% z* {6 }

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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