基于ARM的Linux系统移植的方法

2018-02-09 21:58:02编辑:什么鱼 关键字:ARM  Linux  系统移植

    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的工作流程图。

    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处理器平台上的移植。


关键字:ARM  Linux  系统移植

来源: eefocus 引用地址:http://www.eeworld.com.cn/mcu/article_2018020937721.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:如何将μClinux移植到ARM7体系微处理器S3C4510B上
下一篇:基于μCOS-II的CAN通讯模块设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ARM学习之中断体系结构

CPU的“青睐”。还有一个皇后级别的中断源,叫做快速中断源。她比较牛X,只要请求,CPU就会“临幸”。(好似宫斗剧啊)。3.当发生中断后,具体我们该如何编程呢? 答:当一个异常发生时,这时ARM 的CPU将自动完成如下事情(要记住,是自动): (1)、lr寄存器保存目前指令的下一条指令地址。一般是(PC+4或PC+8) (2)、将CPSR的值复制到SPSR。 (3)、将CPSR的工作模式位设置为异常对应的工作模式。 (4)、转去执行此异常对应的向量表中的相应指令(并不只是中断处理函数)。对于我们来说,我们需要在异常向量表对应的地址处完成以下事情: (1)、保存运行的环境
发表于 2018-07-21 12:21:44

ARM学习之内存管理单元(MMU)

与映射表的一种机制(专业上叫页表)。虚拟地址到物理地址的映射。简单来说,CPU发出的虚拟地址,MMU通过查询这种映射表把这种虚拟地址转化为物理地址。在ARM体系中,用的有段(一级页表)、大页、小页、极小页(二级页表)等页表类型。4.运行地址和加载地址分别是什么意思,有什么区别? 答:在ARM中,当程序被烧写到FLASH中,用的就是加载地址。是烧写到FLASH中的某地址上。当程序运行时,程序所处的地址就是运行地址,也叫做链接地址。在烧写ARM裸板程序时,如果在链接时,不指定链接地址的话,程序的加载地址就是链接地址。当指定了某段的链接地址时,运行到此段时,此段必须处在所指定的链接地址上,否则可能会出现程序崩溃(其实,如果指定段中
发表于 2018-07-21 12:21:03

ARM学习之Nand FLash控制器

今天学习了Nand Flash的一些内容。在此做下回忆和总结:1.什么是Nand Flash? 答:Nand FLash是一种非易失性的存储性介质,一般用于保存嵌入式系统运行所必需的操作系统、应用程序、用户数据等,地位和PC上的硬盘类似。一般来说,它的接口引脚不像SDRAM那样多(SDRAM有20多根),一般也就是十几根。以三星公司的K9F1208U0M为例,如下所示。 正因为它的数据引脚较少,所以它的命令、地址、数据都是公用这一组IO引脚再配上ALE、CLE等其他使能信号进行传输的。操作Nand Flash(读、写、擦除)也和简单,基本上是按照传输命令、传输地址、最后读写数据这样一个流程实现的。这些命令在具体的
发表于 2018-07-21 12:19:08

ARM学习之时钟体系结构

今天在宿舍学习的是S3C2440的系统时钟体系,这部分的难点不是很多,所以相对来说轻松点,但还是把感悟记录下来吧。1.S3C2440的的时钟体系有哪些?它们分别有什么作用? 答:以前一直有个小疑问,你说,这CPU运行那么快,外部的设备运行的就比较慢,那它们的时钟源怎么匹配呢?哦,今天算是差不多弄清楚了。因为它们有不同的时钟源。就S3C2440来说, 它有三种时钟源: (1)FCLK:用于CPU核。 (2)HCLK:用于AHB总线上的设备,比如CPU核存储器控制器、中断控制器、LCD控制器、DMA和USB主机模块等高性能的设备。 (3)PCLK:用于APB总线上的设备,比如WATCHD
发表于 2018-07-21 12:00:45

ARM裸机程序开发——按键控制LED灯

这几天将TQ2440上的IO控制引脚学习了一下,了解了一下关于引脚的一些寄存器的配置,熟悉了一下写ARM裸机程序的流程,写一下自己学到的东西。★程序启动初始化◇关闭看门狗有一个专门的寄存器来控制看门狗,看门狗的作用就是在一定的时间内会重新启动系统,这里我们只是写一个简单的逻辑程序用不到看门狗 ,将其关掉。设置WTCON寄存器,将其第5位置0,就可以禁用看门狗◇设置栈指针C语言中设置的变量,以及调用的函数等信息都会被存放在栈中,因此栈指针必须要设置◇调用main函数main函数中设置了关于IO寄存器的一些设置操作★TQ2440硬件相关硬件主要涉及到LED灯与GPIO,按键与GPIO之间的连接◇LED灯硬件   
发表于 2018-07-21 11:48:01

浅谈:如何基于国产CPU的云平台构建容器管理平台

,哇!阿里的!据工作人员介绍目前已有业务系统运行在基于华芯通CPU的云平台上,云平台就是ZStack。热心的工作人员带我去华芯通的专柜进行详细参观。看到实物那一刻,颠覆了我的想法,这个跟x86架构的服务器没什么区别啊!一直以为他是一个类似路由器这样的小盒子。没想到ARM服务器工艺已和x86服务器自造工艺无太大区别。国产云平台 ZStack作为国内为数不多的自研云平台,根据官网信息已发布基于国产CPU架构的版本,那么完全可以实现基于国产CPU架构来构建国产云平台。这架构图摘自他们的产品白皮书,从架构上看整个逻辑还是比较清晰,各组件依赖度并不高,不会因为管理控制节点故障而影响业务系统。经过仔细研究ZStack架构发现以下特点:全异
发表于 2018-07-16 10:43:01
浅谈:如何基于国产CPU的云平台构建容器管理平台

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved