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

Linux在ARM平台上怎么移植

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2024-12-17 16:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
, p+ A3 X' X0 p

$ n; ?8 A5 z8 {8 w1 Q: RLinux在ARM平台上的移植
6 {. O) s1 B' ?2 [
, D! E$ i  h) f) `; H    1. SBC2410硬件平台介绍+ W/ R5 h1 O& |

& O( b5 [& M8 k6 ~6 }3 o2 `    SBC2410硬件平台是具有基于ARM9处理器SBC2410A,可支持ARM—Linux、WindowsCE等操作系统的嵌入式硬件平台。主要硬件资源有一片64 MB SDRAM,一片64 MBNandFlash,一片1 MB Nor Flash,一个串口COM0,一个USB Host A型接口,一个USB Slave B型接口,以及一个标准的JTAG接口等。
9 k: P7 ~, P9 e
& l. B4 H( |' t, D7 {5 _4 J9 S& B7 v6 r% @    2. Linux在ARM平台上的移植准备
% P* b! _7 Q7 B" f" Z8 N1 @/ x) C; G! N- y. R  j. g
    首先是要建立交叉编译环境。交叉编译环境是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括编译器gCC,二进制工具binutils,目标系统的标准c库glibc和目标系统的Linux内核头文件。宿主机要选好做嵌入式开发的Linux操作系统,配置好网络、NFS服务等。因为目标机没有足够的资源运行开发工具和调试工具,所以要在宿主机上建立交叉编译环境,然后由交叉编译工具生成可执行二进制代码(并不能在宿主机上运行),再下载到目标板上调试和运行。交叉编译标准c环境的生成步骤包括以下四步:' z) C3 n. K9 ?4 u0 R
! |  B# M" g, R
    (1)获得binutils、gcc、glibc的源码;
) `' K2 d% Z2 p- V) a$ x
; t( C% L1 J/ E. s3 S7 h- k    (2)配置编译binutils,得到汇编器和连接器;
" W( O! F* g, \% G% f1 e6 m
/ R/ R; ~2 a6 n. A* e; q& `    (3)配置编译gcc源码,生成gcc编译器;3 \7 @9 ]$ t+ H" g

3 W; F) e8 X( n+ c: q3 e& y    (4)配置glibc编译生成glibc的c库函数。
& T8 W/ h8 q* L& [7 o6 K4 |
! N1 b. h- q. K# O    3. 引导程序移植bootloader
4 w& S9 G' d$ ~& N( ]
: d. E5 J% v& u- s    引导程序bootloader是与体系结构紧密相关的部分,是操作系统内核和应用程序运行之前运行的一小段程序,用于完成系统的启动和加载。它类似于PC机中的BIOS程序。bootloade严重依赖于硬件实现,一般在嵌入式系统中建立一个通用的bootloader是不可能的。用户必须自己编写这一小段程序,从而完成硬件设备的初始化,建立内存空间的映射图,将系统的软硬件带到一个合适的状态,为操作系统内核的运行做准备。. L6 }( i8 C: Y0 z4 \

' w& z4 [$ i2 p! f* j; Y    通常bootloader移植分为两步:
- x) g. l1 X. x5 o
8 E7 `) K: b( t8 c* A+ u    第一步常用汇编语言实现依赖于CPU体系结构的代码。主要包括硬件设备初始化;为加载bootloader准备RAM空间;拷贝bootloader到RAM空间中;设置好堆栈。7 ]7 y- z7 {( a$ r0 ~3 V  B! i* L
; D$ k) }, ~0 }
    第二步常用C语言来实现。即:初始化本阶段要使用到的硬件设备;检测系统内存映射(memory map);将kernel映像和根文件系统映像从flash上读到ram空间中;为内核设置启动参数;调用内核。图1所示是bootloader的工作流程图。
7 e- X) R5 M+ O* O
$ z( l3 J/ R6 `) u2 s+ _/ k) S    4. 内核移植6 s1 g. M$ ~6 W
6 i# R6 A5 O6 p8 B/ n: e! H
    内核移植首先应当启动操作系统,完成内存管理、任务调度、进程管理、加载驱动程序、网络等功能,然后执行应用程序或等待用户命令。虽然各功能之间存在复杂的调度关系,但由于Linux分层结构的特点,已将其中硬件相关的代码独立了出来,因此,移植过程中只需要改动进程管理、内存管理和设备管理中与硬件相关的那部分代码。% w6 F: O2 k0 W' I! h

& u; U9 ~: t3 S/ o- }$ ?, O    一般情况下,从官方网站上下载的内核不能直接在硬件平台上运行,而要跟据具体的硬件平台重新裁剪、编译内核,并根据硬件平台特性编写相应的硬件相关的代码,将Linux移植到硬件平台。对内核代码的修改包括以下部分:& T& Z6 F/ j8 w3 Q3 e4 w1 x

5 a1 p& `8 e0 X9 T+ j( W7 \2 U' u    (1)修改内核目录树根下的Makefile,找到ARCH和CROSS_COMPILE,修改ARCH=arm,CROSS_COMPILE=armlinux,然后设置PATH环境变量,在文件bashrc中添加expor PATH=/usr/LOCal/arm/3.4.4/bin:$PATH,使其可以找到交叉编译工具链,然后重新登陆。# }5 _' N% G# Y* m' K* }, U* o' `
' X) L& C, d' |4 }$ R- b6 p
    (2)设置flash分区,修改arch/arm/machSBC2410/devs.c用以指明分区信息,该文件的内容建立nand flash分区表;修改arch/arm /machSBC2410/machSMDk2410.c文件指定启动时初始化,并在kernel启动时依据对分区的设置进行初始配置。在Linux源文件目录下,执行makemenuconfig命令,配置内核产生config文件,选择处理器类型为SBC2410,选择串口驱动设备,完成后保存config文件。
$ D6 K0 k/ L; \# `$ w& m
% x, G* |3 u! W! p7 B    在完成内核的裁减之后,执行命令make clean,编译内核之前先把环境给清理干净,也可以用makerealclean或makemrproper来彻底清除相关依赖,保证没有不正确的文件存在,最后将zimage下载到开发板。! v% q4 k. {1 \- N3 X. i; A
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-24 05:19 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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