您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 大学课件物联网与嵌入式系统开发--第7章_嵌入式Linux操作系统的移植
第7章嵌入式Linux操作系统的移植本章主要内容7.1Bootloader7.2Linux的移植7.3根文件系统的制作思考与习题本章主要内容本章介绍将Linux-2.6.38.7移植到ARM平台的过程,开发板为广州友善之臂公司计算机科技有限公司的mini2440开发板。这里要说明的是,从Linux-2.6.32开始,Linux内核已经对mini2440开发板有了有限的支持,因此,我们这里主要介绍移植的方法。Linux移植必然要涉及到驱动程序的移植,而Linux驱动程序足足可以写一本书,所以,本章只简单的介绍移植Linux的流程,对于驱动程序则不作过多介绍,读者可以参考相关书籍进行深入学习。7.1Bootloader7.1.1Bootloader简介7.1.2常见Bootloader回本章目录7.1Bootloader7.1.1Bootloader简介Bootloader是在操作系统内核运行之前运行的一段程序,它类似于PC中的BIOS程序。通过这段程序,可以完成硬件设备的初始化,并建立内存空间的映射关系,从而将系统的软/硬件环境带到一个合适的状态,为最终加载系统内核做好准备。大多数Bootloader都包含两种不同的操作模式:(1)启动加载模式(2)下载模式回本节目录7.1Bootloader7.1.1Bootloader简介(续)(1)启动加载模式也叫做“自主”模式,该模式下,Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中并启动操作系统运行,整个过程没有用户的介入。嵌入式产品发布时的使用该模式。7.1Bootloader7.1.1Bootloader简介(续)(2)下载模式下载模式是目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件,如下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后被Bootloader写入到目标机上的固态存储设备中。Bootloader的这种模式在系统更新时使用。工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。7.1Bootloader7.1.1Bootloader简介(续)Bootloader的启动流程一般分为两个阶段:stage1和stage2。stage1的代码一般用汇编语言编写stage2的代码一般用C语言编写。7.1Bootloader7.1.1Bootloader简介(续)(1)stage1阶段主要完成以下工作基本的硬件初始化,包括屏蔽所有的中断、设置CPU的速度和时钟频率、RAM初始化、外围设备初始化、关闭CPU内部指令和数据Cache等。为加载stage2准备RAM空间,通常为了获得更快的执行速度,通常把stage2加载到RAM空间中来执行,因此必须为加载Bootloader的stage2准备好一段可用的RAM空间。复制stage2的代码到RAM中,在这里要确定两点:1、stage2的可执行映像在固态存储设备的存放起始地址和终止地址;2、RAM空间的起始地址。设置堆栈指针SP,为执行stage2的C语言代码做好准备。7.1Bootloader7.1.1Bootloader简介(续)(2)stage2主要完成以下工作用汇编语言跳转到stage2的入口函数。初始化本阶段要使用到的硬件设备,包括初始化串口、初始化定时器等。检测系统的内存映射,所谓内存映射就是指在整个物理地址空间中指出哪些地址范围被分配用来寻址系统的内存。加载内核映像和根文件系统映像,这里包括规划内存占用的布局和从Flash上复制数据。设置内核的启动参数并启动内核。7.1Bootloader7.1.2常见Bootloader1)RedbootRedboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目。Redboot支持的处理器构架有ARM、MIPS、MN10300、PowerPC、RenesasSHx、v850、x86等。Redboot的特性有:支持eCos、Linux操作系统引导;在线读写Flash;支持串行口kermit,S-record下载代码;监控(Monitor)命令集,包括读写I/O,内存,寄存器、内存、外设测试功能等。回本节目录7.1Bootloader7.1.2常见Bootloader(续)2)UBootUBoot(UniversalBootloader)是由开源项目PPCBoot发展起来的,它是在GPL下资源代码最完整的一个通用Bootloader。目前UBoot差不多以每隔3个月发布一次。UBoot的官网是。UBoot支持的处理器构架包括PowerPC、ARM、MIPS、x86等,UBoot提供两种操作模式:启动加载模式和下载模式,并具有大型BootLoader的全部功能。7.1Bootloader7.1.2常见Bootloader(续)2)UBootUBoot的主要特性有:SCC/FEC以太网支持;BOOTP/TFTP引导;IP、MAC预置;在线读写Flash、IDE、IIC、EEROM、RTC等;支持串行口kermit,S-record下载代码;支持多种操作系统的引导;监控命令集,读写I/O,内存、寄存器、内存、外设测试功能等;脚本语言支持(类似BASH脚本);支持Watchdog、LCDlogo,状态指示功能等。7.1Bootloader7.1.2常见Bootloader(续)3)vivivivi是当前比较流行的专为ARM9处理器而设计的一款Bootloader,它操作简便,同时提供了完备的命令体系。vivi是由韩国Mizi公司开发的一种Bootloader,适合于ARM9处理器,支持S3C2410x处理器,其源代码可以在网站下载。一个功能完备的大型Bootloader的工作量,相当于一个小型的操作系统。由于Bootloader的移植比较复杂,这里就不能详述了,读者可以查阅其他资料。7.2Linux的移植7.2.1安装前的准备工作7.2.2Linux的移植步骤回本章目录7.2Linux的移植7.2.1安装前的准备工作1)熟悉硬件由于Linux最终要操作硬件,而嵌入式系统的一个特点就是硬件可定制,不同的产品其硬件电路有可能很大的不同,比如IIC芯片以及地址、网络芯片等,所以,在移植前一定要对要移植的平台有深入的理解。对于mini2440开发板,有几个关键要了解的内容,如下。①mini2440开发板的晶振为12000000Hz。回本节目录7.2Linux的移植7.2.1安装前的准备工作(续)1)熟悉硬件②mini2440的Bootloader对NANDFlash的分区如下。分区名称起始地址分区大小vivi0x000000000x00040000param0x000400000x00020000kernel0x000600000x00500000root0x005600000x3fa80000③IIC。mini2440具有一个直接连接CPU的IIC信号引脚的EEPROM芯片AT24C08,它的容量为1024B,器件地址为A0。④DM9000。mini2440采用了DM9000网卡芯片,它可以自适应10/100Mbit/s网络。MAC地址需要通过软件设定。7.2Linux的移植7.2.1安装前的准备工作(续)1)熟悉硬件⑤UDA134x。mini2440分别使用CPU的GPB2、GPB3、GPB4端口模拟实现L3-Bus规范的L3MODE、L3DATA、L3CLOCK。以上内容在mini2440的平台设备文件(arch/arm/mach-s3c2440/mach-mini2440.c)中,读者可以查看该文件以了解详细内容。7.2Linux的移植7.2.1安装前的准备工作(续)2)获取内核源代码Linux版本很多,而且更新很快。我们这里选择Linux-2.6.38.7作为我们移植的对象。Linux内核的官网地址为,该网站列出了最近更新的几个稳定版。读者要下载历史版本,可以从下载。7.2Linux的移植7.2.1安装前的准备工作(续)3)检测移植环境①桌面Linux发行版:这里选择fedora14。②make程序:要编译Linux没有make程序是不行的,用户可以使用make-v命令来查看make是否存在以及其版本号。③交叉编译器:交叉编译器的安装在6.2节已经介绍过,这里不再重复。④必要的库:这里必要的库很难一一列出,如果出现了Linux需要而系统中不存在的库,Linux会有提示,fedora用户可以使用yum命令来下载并安装所需的库。7.2Linux的移植7.2.1安装前的准备工作(续)4)下载YAFFS2YAFFS/YAFFS2文件系统是专门针对NANDFlash设计,其具有可写入、修改并能永久保存文件的特性,并提供了损耗平衡和掉电保护。在Linux下,使用命令gitclonegit://来下载YAFFS2的源代码。YAFFS的官网地址为,读者可以查看该网站以了解YAFFS的有关信息。7.2Linux的移植7.2.1安装前的准备工作(续)4)下载YAFFS2[csu@fedoraDocuments]$gitclonegit://:Countingobjects:6930,doneremote:Compressingobjects:100%(4153/4153),doneremote:Total6930(delta5484),reused3476(delta2700)ReceivingObjects:100%(6930/6930),3.42MiB|17Kibit/s,done.Receivingdeltas:100%(5484/5484),done7.2Linux的移植7.2.2Linux的移植步骤这里假设读者下载的是linux-2.6.38.7.tar.bz2,并放到csu用户的Document目录下。1)解压Linux内核并为内核打上YAFFS2补丁[csu@fedoraDocuments]$lslinux-2.6.38.7.tar.bz2yaffs2[csu@fedoraDocuments]$tarxjflinux-2.6.38.7.tar.bz2[csu@fedoraDocuments]$cdyaffs2/[csu@fedorayaffs2]$./patch-ker.shcm../linux-2.6.38.7Updating../linux-2.6.38.7/fs/KconfigUpdating../linux-2.6.38.7/fs/Makefile[csu@fedorayaffs2]$cd../linux-2.6.38.7回本节目录7.2Linux的移植7.2.2Linux的移植步骤(续)2)建立自己的平台文件在Linux内核中,每个支持的开发板都有一个平台文件,Linux自带的mini2440开发板的平台文件为“arch/arm/mach-s3c2440/mach-mini2440.c”。我们这里就使用内核自带的平台设备文件,读者可以自己查看该文件以学习平台设备文件的写法。如果使用内核不支持的平台移植,或为内核添加一个新平台时,需要自己创建一个新的平台设备文件,并需要修改平台设备文件下的Makefile文件和Kconfig文件,其中Makefile文件负责编译,Kconfig文件用于配置。7.2Linux的移植7.2.2Linux的移植步骤(续)3)修改驱动程序驱动程序要根据实际情
本文标题:大学课件物联网与嵌入式系统开发--第7章_嵌入式Linux操作系统的移植
链接地址:https://www.777doc.com/doc-3648191 .html