您好,欢迎来到九壹网。
搜索
您的当前位置:首页基于ARMCLinux嵌入式系统启动引导的实现

基于ARMCLinux嵌入式系统启动引导的实现

来源:九壹网
 - 好好学习,天天向上

基于ARM-μCLinux嵌入式系统启动引导的实现

32位ARM嵌入式处理器具有高性能、低轼耗的特性,已被广泛应用于消费电子产品、无线通 信和网络通信等领域。ΜCLinux是专门为无MMU处理器设计的嵌入式操作系统,支持ARM、Motorola等微处理器。目前国内外采用ARM- μCLinux作为嵌入式系统非常普遍。而嵌入式系统的启动引导技术是嵌入式系统开发的一个难点。系统启动引导的成功与否决定了应用程序的运行环境是否能 正确构建,即系统启动成功是应用正确运行的前提。 常用的嵌入式系统启动方法是先通过JTAG将嵌入式操作系统内核与进Flash,再由其带 的引导程序bootloader完成嵌放式系统的启动引导工作。这种方法要借助昂贵的JTAG设备完成操作系统内核 的烧写工作,并且不能方便地更新嵌入式系统中的软件平台。本文提出一种基于ARM-μCLinux嵌入式系统的启动引导方案,不但可以通过简易的串口方便 地更新嵌入式系统内的软件平台,而且成功解决了这种架构的嵌入式系统的启动、初始化、操作系统内核的固化和引导等问题。本文简略说明ARM- μCLinux嵌入式系统的硬件平台和软件平台;描述系统引导程序bootloader的设计,阐述设计时考虑的因素和需解决的技术难点,给出一套可行的 引导程序流程;针对μCLinux内核的引导程序,说明μCLinux内核的加载和初始化过程。 1 系统组成

典型的ARM嵌入式系统硬件平台一般包括一个以ARM为内核的处理器、存储器和必要的外部 接口与设备。在本系统中,采用内嵌ARM7TDMI的Samsung公司的S3C4510处理器,存储器使用2MB的Flash和16MB的SDRAM, 外部接口除了用于下载和通信的串口,还配备了一个以太网接口,以支持S3C4510的网络功能。

软件平台由以下部分组成:系统引导程序、嵌入式操作系统内核、文件系统。系统引导程序通常 也称为bootloader,代码量虽少,但是作用非常大,相当于PC上的BIOS,负责将操作系统内核固化到Flash中和系统初始化工作,然后将系统 控制权交给操作系统。嵌入式操作系统内核是嵌入式系统加电运行后的管理平台,负责实时性任务和多任务的管理。ARM7TDMI是一款没有MMU的处理器, 因此采用μCLinux作为本系统的操作系统内核。ΜCLinux是Linux是一个分支,专为无MMU的处理器设计,它继承了Linux强大的网络功能 和多任务管理功能,并对内存管理和进程管理进行了改写,满足无MMU处理器的开

-1

- 好好学习,天天向上

发要求。文件系统是嵌入式系统软件平台占用存储量最大的一部分,也是与用户 开发最相关的一部分。它存储了系统配置文件、系统程序、用户应用程序和必需的驱动程序。 软件平台固化在Flash中。通常根据软件平台的内容 对Flash的地址空间进行分区,一般分三个区,分别丰放bootloader、μCLinux内核和文件系统。分区的方式一般有两种:一种是根据三个部 分预定的存储空量,允许bootloader、内核和文件系统拥有自己固定的分区和首地址;另一种就是按照这三部分的实际分配区间,一个部分紧跟着另一个 部分后存储,没有固定的分区和首地址。通常采用第一种方式,虽然可能会浪费一部分Flash空间,但是方便内核的加载和文件系统的挂载,同时也利于系统的 调试和开发。而如果充分利用Flash的存储区间,节约成本,那么可采用第二种方式。 2 系统引导程序的设计

系统引导程序bootloader是嵌入式系统加电后执行的第一个程序,进行功能设计时首先要考虑以下问题:

(1)将μCLinux内核和文件系统固化在Flash中

目地μCLinux内核和文件系统固化在Flash的手段很多。主机可以通过JTAG口, 将内核和文件系统的映像文件烧写到指定的Flash位置上;也可以通过以太网接口,将映像文件下载到Flash中;另外还可以通过串口烧写到Flash。 前两种方法的下载速度比后一种方法快得多。在本系统中,采用串口烧写Flash。这是因为一方面配置一个串口方便且廉价,而JTAG烧写还要配置昂贵的 JTAG仿真器和相关的驱动程序以及协议转换程序,网口下载还要有以太网支持;另一方面μCLinux默认通过串口打印其运行的信息,那么串口不但可以提 供烧写Flash的功能,还可作为调试μCLinux内核的通道。

在本系统中,Flash在刚开始时,只存储了bootloader,还没有存储μCLinux内核和文件系统。因此bootloader在系统加电完成初始化工作后,要初始化一条链接主机和目标机的串口通道,并提供串口下载功能。

-2

- 好好学习,天天向上

图1

(2)系统初始化

因为系统刚加电时,操作系统的内核还没有被加载,系统的初始化工作由bootloader完成。它主要是将系统、初始化存储系统、配置ARM各种模式下的数据栈、使能屏常中断、根据需要切换处理器模式和状态。 (3)μCLinux内核加载方式

固化在Flash中的μCLinux内核有两种运行方式:一种方式是直接在Flash中运行μCLinux自带的引导程序;另一种方式是将固化在Flash中的内核先拷贝到SDRAM的某一段地址区间,再从该段地址区间的首地址运行uCLinux内核。

第一种方式是bootloader进行系统初始化工作后,跳到内核固化在Flash中的首 地址处,将控制权交给μCLinux,开始在Flash中逐句执行内核自带的引导程序,由该引导程序完成内核的加载工作。这种方式是目前很多嵌入式系统启 动内核所采用的方式,也是本系统采用的内核加载方式。

第二种方式是bootloader完成系统初始化工作后,把内核的映像文件由Flash拷贝到SDRAM

-3

- 好好学习,天天向上

中,再从SDRAM中执行μCLinux内核的引导程序,加载μCLinux内核。

第二种加载方式在SDRAM中运行程序,因此执行速度比第一种方式快一些,并且可以通过 RAM快速引导技术实现这种加载方式。其主要是针对NAND型Flash的情况。与NOR型Flash最大的不同点是:NOR型Flash使用内存随机读 取技术,与SDRAM一样,可以直接执行存储在Flash中的程序;而NAND一样,可以直接内存随机读取技术,它是一次读取一整块内存,因此不能直接执 行存储在NAND型Flash中的程序,必须把NAND型Flash中的程序先拷贝到SDRAM,再在SDRAM中执行该程序。但是NAND型Flash 价格比NOR型Flash廉价,所以很多嵌入式系统还是采用NOR型Flash(几百K字节)+NAND型Flash(几兆字节)的存储模式。其中NOR 型Flash存放可执行的且代码量小的bootloader和一些必要的数据,而NAND型Flash保存存储量较大的内核和文件系统。

在本系统中,由于采用NOR型Flash存储bootloader、内核和文件系统,所以可以直接访问内核所在地址区间的首地址,执行内核自己的引导程序,而且内核自带的引导程序功能强大,可以方便地内核的加载,向内核传递有关的硬件参数。本系统采用第一种加载方式。 (4)自举模式和内核启动模式的切换 Bootloader一般要实现两种启动模式:自举模式和内核启动模式。自举模式也称为 bootstrap模式,该模式的主要作用是目标机通过串口与主机通信,可以接收主机发送过来的映像文件,例如内核、文件系统和应用程序,并将其固化在 Flash中,也可以将Flash中的映像文件上传到主机。内核启动模式允许嵌入式系统加电启动后加载μCLinux内核,将系统交由μCLinux操作 系统管理。

在本系统中,采用一个开关实现两种模式的切抽象。在系统的Flash中只有 bootloader时,首先将开关拔上去,提示系统进入自举模式,加电启动后,bootloader根据开关的状态,进入自举模式,接收主机发送过来的 内核和文件系统的映像文件。接着将开关拔下来,提示系统进入内核启动模式,再按链,bootloader根据此时的开关状态进入内核启动模式,加载内核和 文件系统,由操作系统接管系统。以后也可以根据需要,设置开关的状态,以提示系统进入不同的启动模式。

(5)地址映射表的配置和重映射

地址映射表的配置包括设置Flash地址空间、SDRAM地址空间、外部I/O地址范围和 处理器寄存器地址范围。ARM处理器加电后执行在地址0x0处的代码,因此在加电启动时,首先将存储了bootlader的Flash地址空间设置为 0x0-0x200000,将SDRAM的地址空间设置为0x1000000-0x2000000,当内核引导程序将内核拷贝到SDRAM后,再设置 SDRAM的地址空间为0x00x1000000,而Flash的地址空间为0x1800000-0x1A00000。这需要在内核引导程序中对 Flash和SDRAM的地址空间进行重映射。 本文采用的系统启动引导方案流程图如图1。 3 μCLinux内核的加载和初始化

本启动方案中采用μCLinux自带的引导程序加载内核。该引导程序代码在 linux/arch/armnommu/boot/compressed目录,其中的作用最关键,它完成了加载内核的大部分工作; 则提供加载内核所需要的子程序,其中解压内核的子程序是调用的重要程序,另外内核的加载还必须知道系统必要的硬件信息,该硬件信 息在中并被所引用。

当bootloader将控制权交给内核的引导程序时,第一个执行的程序就是 。下面基于本系统介绍加载内核的主要过程。首先配置S3C4510的系统寄存器;再初始化S3C4510的ROM、 RAM以及总线等控制寄存器,将Flash和SDRAM的地址范围分别设置为0x0-0x200000和0x1000000-0x2000000;接着将 内核的映像文件从Flash拷贝到SDRAM,并将Flash和SDRAM的地址区间分别重映射为0x1800000-0x1A00000和0x0- 0x1000000;然后调用中的解压内核函数(decompress_kernel),对拷贝到SDRAM的内核映像文件进行解压缩;最后 跳

-4

- 好好学习,天天向上

转到执行调用内核函数(call_kernel),将控制权交给解压后的μCLinux系统。

执行Call_kernel函数实际上是执行linux/init/中的start_kernel函数,中包括处理器结构的初始化、中断的初始化、进程相关的初始化以及内存初始化等重要工作。

该启动引导方案实现了自举模式和内核启动模式以及两种模式的切换,使得开人员既可以采用自 举模式方便地烧写Flash,更新嵌入式系统中的软件平台,又能够切换到内核启动模式,自动安全地启动系统;其次,本方案采用简易的串口通道作业主机与目 标系统的通信渠道,既可以方便地将操作系统内核、文件系统和其他应用下载到目标系统中,又可以作为调试μCLinux内核和应用程序通道;此外针对 ARM7TDMI的无MMU特性,采用修改后的μCLinux内核引导程序加载操作系统和初始化操作系统环境,解决内核加载的地址重映射问题和操作系统的 内存管理问题。

基于嵌入式Linux的PMP系统设计与实现

PMP系统简介

便携式多媒体播放器(PMP),也就是通常人们所说的MP4,已成为继MP3以后消费类产品的一个新热点。PMP的主要优点是:携带方便,能够直接播放高 品质音/视频文件;也可以浏览图片,以及作为移动硬盘、数字银行使用;此外,还有FM、游戏等功能。PMP播放器不仅需要对机体大小有所,更重要的是 需要一种压缩效率更高、画面质量更高的视频压缩技术,以及相关编解码芯片。本文介绍了此PMP系统的软、硬件设计,重点在软件设计,此PMP系统方案现在 已经进入量产阶段。

PMP系统的硬件设计

现阶段PMP内部核心架构,大多都是采用CPU搭配DSP的方式。其中,DSP负责编/解码工作;CPU则是针对文件管理、存取,以及使用接口、周边组件 的控制等进行处理。另外,还需考虑整合硬盘、存储卡及LCD显示屏等组件,以及与外部USB接口、操控按钮间的搭配等问题。

为符合上述要求,PMP的设计需要内建视频编/解码芯片,作为模拟与数字两种信号间转换之用。另外,设计还需要考虑:用来连接视频译码器与DSP的总线;LCD显示屏的驱动电路;IDE接口与硬盘控制芯片间的沟通等。

-5

- 好好学习,天天向上

DM320芯片

图1 DM320的结构图

本系统整体方案是建立在TI DM320基础之上的。DM320 是一款支持视频编/解码的带有双CPU核的处理器。针对多媒体器件做专门的处理, 它可以直接支持视频输入/输出, 可以方便的扩展音频的输入/输出, 支持USB ,SDRAM,FLASH,CF/SD/MMC/MS/MS Pro 接

-6

- 好好学习,天天向上

口。DM320的结构图,如图1所示。

TI DM320将C5409与ARM926整合,即将CPU与DSP同时集成在DM320核心内。芯片采用32MB或MB容量的SDRAM,以及4MB的 闪存,用作加载与存放操作系统。DM320本身已内建LCD控制器、 OTG接口控制器,同时让CCIR-656格式信号经由总线在视频译码芯片与DM320间传送。由于NTSC/PAL编码器也被整合在其中,因此也可直接 进行复合视频输出。

图2 DM320硬件系统的整体框架图

另一方面,DM320还可支持CCD/CMOS感光组件的连接,使得未来PMP要导入DSC、DV等更为容易。对于存储卡的兼容性部分,除现阶段主流的 CF、SD及MMC外,还包括Memory Stick。此外,此芯片还提供2组RS232串行端口、1组JTAG接口,能支持更多的外围设备。DM320硬件系统的整体框架图,如图2所示。

图3 PMP软件设计框图 PMP系统的软件设计

因为要兼顾到高质量的音视频效果、多种外设和有限的系统资源,PMP软件系统的设计变得相对复杂。系统设计将软件分为三层结构,如图3所示。

该系统的最底层是操作系统层,其中包括bootloader引导程序,主要完成系统从FLASH的启动,LOGO的显示,以及OS的引导。嵌入式 Linux主要包括适合在TI DM320上运行的Linux操作系统,以及各种外围设备的驱动程序。第2层为CODEC和MMI核层,MMI核包括第3层主GUI和各种应用程序所依赖 的各种框架结构和数据结构,如窗口管理,定时器管理等。CODEC部分包括音频的编解码程序(主要由ARM实现)和图像的编解码程序(主要由DSP实 现)。最上层为主GUI和各种应用程序。应用程序包括:FileManager(用来浏览存储器中的文件),VideoPlayer(播放视频文件), AudioPlayer(播放音频文件),

-7

- 好好学习,天天向上

ImageViewer(浏览图片),FM(收音机),Games(游戏),Resumes(重新播放音/视频 文件)。

嵌入式Linux操作系统

本系统采用的Linux内核是对从Internet上下载比较稳定的Arm-Linux内核进行相应的修改,并编写相关外围设备的驱动程序,使之成为一个 适合TI DM320开发的操作系统环境。之所以称为嵌入式,是因为其操作系统运行的环境并不是普通的PC,而且嵌入在非PC构架的电子设备中。

关于内核修改Kconfig文件

Kconfig文件是用来对你所要加载内核内容进行配置的文件。比如,当在控制台上敲入make menuconfig,就会看到内核配置的窗口,可对其中的内容进行选择。选择[*]表示把此内容编入内核,选择[M]表示把此内容当成模块编译。 Linux支持动态加载内核模块的功能,甚至可以在运行操作系统一段时间后再加载内核模块。由于DM320框架并未列入内核中,所以我们需要把DM320 框架加入内核。首先,就要在内核目录下./arch/arm/Kconfig加入DM320的配置选项,这样才能在执行make menuconfig配置内核时看到DM320框架。修改的部分内容如下所示:

choice

prompt \"ARM system type\"

default ARCH_DM320_20 drivers/char/Kconfig文件,并加入以下内容: config DM320_SAMSUNG_ 4_LCD

tristate \"DM320 SAMSUNG inch 16:9 TFT LCD\" depends on ARCH_DM320_20 && BOARD_400H default y help

This driver provides support for SAMSUNG ' 16:9 TFT LCD for DM320.

其中,config DM320_SAMSUNG_4_LCD表示增加一个新的配置入口。一旦这个配置选项被选中就会在. /include/linux/:有:#define CONFIG_DM320_SAMSUNG_4_LCD 1的定义。

这样的话,我们在整个内核源码树中都可以使用CONFIG_DM320_SAMSUNG_4_LCD来进行特定的选择。

在tristate \"DM320 SAMSUNG inch 16:9 TFT LCD\"中,引号里的内容为出现在配置选项中的提示文字。tristate表示三态,意思是除了可以选择[*]、[ ]外,还可以选择[M],表示把当前内容当成模块编译。

depends on ARCH_DM320_20 && BOARD_400H表示如果前面配置平台框架时选择了ARCH_DM320_20,并在选择型号时选择了BOARD_400H,我们就可以看到这个对于 三星4英寸TFT LCD的配置选项。

default y表示默认把此驱动编入内核。help的内容为当我们对内核进行配置时,选帮助所看到的内容。

-8

- 好好学习,天天向上

Makefile文件

简单地说,Makefile是用来进行项目配置和管理的。我们要把Linux编译、链接最后生成可执行的内核映像,Makefile文件是必不可少的。

在该PMP设计开发中,只需要把外设驱动模块加入相应的内核源码树就可以完成对Makefile文件的修改。以加入三星4英寸TFT LCD驱动为例,只需要在./drivers/char/Makefile加入如下内容即可:

obj-$(CONFIG_DM320_ SAMSUNG_4_LCD) +=

PMP系统设计中两个必须的驱动以及要注意的问题 LCD驱动程序

在一个PMP设备中,LCD显示屏是必备的。在LCD驱动程序的设计过程中,主要是要选好时钟源、分频系数以及时钟极性。比如在DM320中,时钟控制器 有以下几个外部输入:PCLK、SYSCLK、MXI、M48XI,其中除了M48XI外其余均选择27M外部晶振。LCD的时钟频率DCLK在本系统中 是由VENC(Video Encoder Clock)确定,而VENC又可以通过系统的PLL分频而确定,所以说首先要选好时钟源和恰当的分频系数,然后通过设置VENC的寄存器就可以设置时钟 的极性。

FrameBuffer驱动

FrameBuffer是把显存抽象成一个设备,通过对这个设备的读写就等同于直接对显存进行操作。这种操作是抽象的、统一的。用户不必关心显存的物理位 置、换页机制等具体细节,这些都是由FrameBuffer设备驱动程序来完成的。 FrameBuffer对应的源文件在linux/drivers/video/目录下。全部的抽象设备文件作为与各种显卡驱动程序相关的 源文件放在该目录下,如笔者所进行的针对DM320的FrameBuffer源文件。在源文件我们要设置相应屏幕的长、宽以及每一个像 素点的位数等等,还有一些与DM320 OSD(On-Screen Display)相关的寄存器的设置。因为涉及内容较多,在此不再赘述。 结语

本PMP方案设计的产品已经进入量产阶段,经过大量的用户测试,证实了整个设计是切实可行的。同时,其设计思路对于其他类似产品如车载GPS,都有一定的参考价值。

参考文献:

1. Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman,LINUX DEVICE DRIVERS. O'REILLY ,东南大学出版社(影印版),2005年6月第1版 2.Texas Instruments, TMS320DM320 CPU and Peripherals Vol-1a

3. 谭磊, 基于嵌入式LINUX 的智能手机系统设计,电子技术应用,2004年第12期 4. 倪继利,Linux内核分析及编程 电子工业出版社,2005年9月第1次印刷

摘 要:本文介绍了以TI的DM320为主芯片,基于嵌入式Linux的PMP系统的设计与实现。设计实现包括软件和硬件两个部分,其中重点在软件部分。采用本设计方案的PMP系统可以实现高质量的音频、图片、视频效果,以及其他一些辅助功能。 关键词:PMP;嵌入式Linux;音/视频编解码

-9

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务