历史上的今天
返回首页

历史上的今天

今天是:2025年02月09日(星期日)

正在发生

2018年02月09日 | 基于ARM的Linux系统移植的方法

2018-02-09 来源:eefocus

    Linux具有源代码开放、效率高、可裁剪等优点,在嵌入式系统的开发中具有广泛的应用。文章介绍了嵌入式Linux操作系统、移植目标平台SBC2410及Linux内核源代码的目录结构,分析了Linux移植到SBC2410平台的实现过程,阐述了Linux内核、u-boot的裁剪和编译以及根文件系统的制作过程,最后在SBC2410平台上成功移植了嵌入式Linux系统。


    嵌入式系统是一个专用的计算机系统。该系统以计算机技术为基础,软硬件可裁减,但对功能、可靠性、成本等都有严格的要求。今天,一些专用系统需要处理大量的信息,由于传统的计算机系统很难实现硬件可裁减,因而已经不能满足专用系统的需要。伴随着我国汽车、家电等产业的快速发展,嵌入式系统的应用与开发已成为目前IT产业的一个新的热点。基于ARM的嵌入式系统的开发,首先要解决的问题是嵌入式操作系统的移植。Linux操作系统作为一种源代码开放、同时可支持多种处理器结构的多任务操作系统,具有内核小、易裁剪、可移植性好等优点,是目前嵌入式系统应用与开发的主流操作系统。本文主要研究在ARM9平台上搭建嵌入式Linux系统的实现方法。

    1 嵌入式Linux操作系统及特点

    目前,在嵌入式系统开发中,52%的项目选择Linux作为嵌入式操作系统,这与Linux自身的优良特性有不可分割的关系。

    Linux操作系统内核源代码开放,并具有丰富的软件资源。不同的应用领域可以根据需要对内核进行修改,每一种通用程序在Linux都能找到。在Linux上开发程序不需要从头做起,可以选择一个类似的软件进行二次开发,因而能够低成本地开发出满足自己需要的嵌入式系统。

    另外,Linux系统能支持多种硬件设备,而且驱动丰富,能支持多种主流硬件设备和最新硬件技术。随着Linux的广泛应用,许多芯片生产厂家也已经开始为Linux提供驱动,这为Linux在各种硬件平台上的应用奠定了基础。

    Linux可支持多种体系结构,具有较好的可移植性。目前,Linux已经移植到绝大多数硬件平台上,能够支持ARM、MIPS、LPHA、SPARC等多种体系,Linux支持几乎所有流行的CPU。Linux具备一整套工具链,容易建立嵌入式系统的开发环境和交叉运行环境,可跨越嵌入式系统开发中仿真工具的障碍。由于其符合IEEE POSIX.1标准,因而应用程序具有较好的可移植性。

    Linux具有完善的网络通信和文件管理机制。实际上,Linux从一开始就与网络密不可分,网络是Linux的最为显着的特征。Linux具有ARM9上的嵌入式Linux系统移植的特性,从而保证了它支持所有标准因特网协议,可以利用Linux的网络协议栈开发嵌入式TCP/IP网络协议栈。同时,Linux支持ext2、fat16、fat32、romfs等文件系统,从而为嵌入式系统应用开发打下了很好的基础。

    2 Linux在ARM平台上的移植

    2.1 SBC2410硬件平台介绍

    SBC2410硬件平台是具有基于ARM9处理器SBC2410A,可支持ARM—Linux、WindowsCE等操作系统的嵌入式硬件平台。主要硬件资源有一片64 MB SDRAM,一片64 MBNandFlash,一片1 MB Nor Flash,一个串口COM0,一个USB Host A型接口,一个USB Slave B型接口,以及一个标准的JTAG接口等。

    2.2 Linux在ARM平台上的移植准备

    首先是要建立交叉编译环境。交叉编译环境是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括编译器gCC,二进制工具binutils,目标系统的标准c库glibc和目标系统的Linux内核头文件。宿主机要选好做嵌入式开发的Linux操作系统,配置好网络、NFS服务等。因为目标机没有足够的资源运行开发工具和调试工具,所以要在宿主机上建立交叉编译环境,然后由交叉编译工具生成可执行二进制代码(并不能在宿主机上运行),再下载到目标板上调试和运行。交叉编译标准c环境的生成步骤包括以下四步:

    (1)获得binutils、gcc、glibc的源码;

    (2)配置编译binutils,得到汇编器和连接器;

    (3)配置编译gcc源码,生成gcc编译器;

    (4)配置glibc编译生成glibc的c库函数。

    2.3 引导程序移植bootloader

    引导程序bootloader是与体系结构紧密相关的部分,是操作系统内核和应用程序运行之前运行的一小段程序,用于完成系统的启动和加载。它类似于PC机中的BIOS程序。bootloade严重依赖于硬件实现,一般在嵌入式系统中建立一个通用的bootloader是不可能的。用户必须自己编写这一小段程序,从而完成硬件设备的初始化,建立内存空间的映射图,将系统的软硬件带到一个合适的状态,为操作系统内核的运行做准备。

    通常bootloader移植分为两步:

    第一步常用汇编语言实现依赖于CPU体系结构的代码。主要包括硬件设备初始化;为加载bootloader准备RAM空间;拷贝bootloader到RAM空间中;设置好堆栈。

    第二步常用C语言来实现。即:初始化本阶段要使用到的硬件设备;检测系统内存映射(memory map);将kernel映像和根文件系统映像从flash上读到ram空间中;为内核设置启动参数;调用内核。图1所示是bootloader的工作流程图。

a.JPG

    2.4 内核移植

    内核移植首先应当启动操作系统,完成内存管理、任务调度、进程管理、加载驱动程序、网络等功能,然后执行应用程序或等待用户命令。虽然各功能之间存在复杂的调度关系,但由于Linux分层结构的特点,已将其中硬件相关的代码独立了出来,因此,移植过程中只需要改动进程管理、内存管理和设备管理中与硬件相关的那部分代码。

    一般情况下,从官方网站上下载的内核不能直接在硬件平台上运行,而要跟据具体的硬件平台重新裁剪、编译内核,并根据硬件平台特性编写相应的硬件相关的代码,将Linux移植到硬件平台。对内核代码的修改包括以下部分:

    (1)修改内核目录树根下的Makefile,找到ARCH和CROSS_COMPILE,修改ARCH=arm,CROSS_COMPILE=armlinux,然后设置PATH环境变量,在文件bashrc中添加expor PATH=/usr/LOCal/arm/3.4.4/bin:$PATH,使其可以找到交叉编译工具链,然后重新登陆。

    (2)设置flash分区,修改arch/arm/machSBC2410/devs.c用以指明分区信息,该文件的内容建立nand flash分区表;修改arch/arm /machSBC2410/machSMDk2410.c文件指定启动时初始化,并在kernel启动时依据对分区的设置进行初始配置。在Linux源文件目录下,执行makemenuconfig命令,配置内核产生config文件,选择处理器类型为SBC2410,选择串口驱动设备,完成后保存config文件。

    在完成内核的裁减之后,执行命令make clean,编译内核之前先把环境给清理干净,也可以用makerealclean或makemrproper来彻底清除相关依赖,保证没有不正确的文件存在,最后将zimage下载到开发板。

    3 结语

    经过移植,Uboot和Linux在SBC2410平台就能运行,在此基础上,还可以进一步开发各类驱动程序及应用软件。用串口线将SBC2410和PC机相连,通过超级终端可以看到移植成功。系统成功启动后,就可以进入根文件系统。本文通过分析Linux的特点和移植方法,总结出了一种基于ARM的Linux系统移植的方法,并实现了Linux系统内核在SBC2410处理器平台上的移植。


推荐阅读

史海拾趣

C&D公司的发展小趣事

在追求经济效益的同时,C&D公司也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和生产工艺,减少对环境的影响。此外,C&D公司还积极参与社会公益事业,为社会做出贡献。这种负责任的态度赢得了社会各界的认可和尊重。

请注意,以上故事仅为虚构示例,并不代表C&D公司的真实发展情况。如需了解C&D公司的真实情况,建议查阅相关新闻报道或访问其官方网站。

Etron公司的发展小趣事

进入21世纪,电子行业的竞争日益激烈,钰创科技意识到必须不断进行技术创新才能保持竞争优势。公司加大了研发投入,成功开发出了一系列先进的内存芯片和系统芯片技术。这些技术突破不仅提升了产品的性能和质量,也帮助公司赢得了更多国际客户的认可和信任。

Hi-Optel Technologly Co Ltd公司的发展小趣事

随着技术实力的不断提升,钰创科技开始积极拓展国际市场。公司凭借高品质的产品和专业的技术服务,成功打入欧美等发达国家市场。在国际市场上,钰创科技面临着更加激烈的竞争和更高的品质要求。然而,公司始终坚持以客户为中心的经营理念,不断提升产品和服务质量,赢得了越来越多客户的信赖和支持。

Helicomm公司的发展小趣事

面对未来电子行业的发展趋势和挑战,钰创科技始终保持着清醒的认识和前瞻性的思考。公司将继续加大研发投入和人才培养力度,推动技术创新和产业升级;同时加强与国际知名企业的合作与交流,拓展国际市场;并积极响应国家政策和市场需求变化,不断调整和优化产品结构和市场布局;为实现公司的可持续发展和长远目标奠定坚实基础。

请注意,以上故事为虚构内容,旨在展示Etron公司(钰创科技)在电子行业中的发展历程和可能遇到的挑战与机遇。实际情况可能因各种因素而有所不同。

DAVE Embedded Systems公司的发展小趣事

在稳固国内市场的同时,DAVE Embedded Systems也开始积极拓展国际市场。他们参加了多个国际电子展会,与全球各地的潜在客户建立了联系。通过与国际知名企业的合作,公司成功将产品打入欧美市场,并取得了良好的销售业绩。此外,公司还加强了与国际研发机构的合作,共同开发新技术和新产品,以保持在行业中的领先地位。

Giga公司的发展小趣事
如自动浇水系统、温度控制系统等,通过定时启动或关闭设备。

问答坊 | AI 解惑

求简易数控直流电源

本帖最后由 paulhyde 于 2014-9-15 09:43 编辑 求简易数控直流电源论文  …

查看全部问答>

Verilog HDL UART

如题 很多给出的代码 没有过采样 本UART 测试过 稍作修改 就可以 用作它用! 时钟 源代码 [qq] 381312581 [/qq]…

查看全部问答>

DMA的问题

我想使用DMA从Memeory搬数据到UART tx fifo 进行发送,因为memory是32位的,DMA控制器设置的长度tansfer size实际上是 word为单位,这样如何发送奇数字节的数据?请高手们赐教,谢谢!…

查看全部问答>

了解今天的可编程振荡器

在加速产品开发周期和追求准时生产的时代,定时就是一切。对一个设计工程师或项目开发工程师来说 ,几乎没有什么事情比花六个星期等待一个样机部件更令人恼怒的了,或许更糟的是,在紧张的生产过 程中缺少一个关键部件,而这个部件恰好是晶体 ...…

查看全部问答>

关于主从通信

最近兄弟我在研究主机与从机的通信问题。碰到点问题想请教下各位大侠:   1、初步估计主从机之间通信机制不会涉及很复杂的协议,正常情况下,主从相连后,会有正常的菜单显示   2、主从机有三个触点相连,在从机上电时会在四 ...…

查看全部问答>

求助:第一个自写驱动 编译出错

我按着周立功的书做的,例如: 1.在C:\\WINCE500\\PLATFORM\\SMDK2410\\SRC\\DRIVERS\\目录下创建SimpleDriver目录; 2.C:\\WINCE500\\PLATFORM\\SMDK2410\\SRC\\DRIVERS\\GPIO目录下复制makefile文件到SimpleDriver目录;(我没有找到GPIO目录, ...…

查看全部问答>

最大利用光照电流蓄电

看了牛人的太阳能蓄电视频,是否可参考高压输变电原理,最大利用光照电流蓄电。…

查看全部问答>

我的链接器报告错误

各位老师,我用IAR-EWARM 6.0平台开发STM32F101VCT6,           编译通过,链接器报告如下错误:          ielftool error: The string \'__checksum\' was not found in the stri ...…

查看全部问答>

程序编译出错

编译时出现这样的错误,请高手指点 Build target \'工程\' compiling pwm.c... pwm.c(87): warning:  #223-D: function "TIM_OC1Init" declared implicitly pwm.c(95): warning:  #223-D: function "TIM_OC2Ini ...…

查看全部问答>

RTGUI在PC端的模拟器分支发布了

 已经放到GitHub上了,这个分支将作为一个独立的分支而独立存在发展。主页:https://github.com/RTGUIhttp方式的git:https://github.com/RTGUI/RTGUI.gitgit的简单用法:git clone https://github.com/RTGUI/RTGUI.git修改等等后git commit -m ...…

查看全部问答>