版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章嵌入式Linux操作系统的移植 本章主要内容7.1 Bootloader7.2 Linux的移植7.3 根文件系统的制作 思考与习题本章主要内容 本章介绍将Linux-移植到ARM平台的过程,开发板为广州友善之臂公司计算机科技有限公司的mini2440开发板。这里要说明的是,从Linux-2.6.32开始,Linux内核已经对mini2440开发板有了有限的支持,因此,我们这里主要介绍移植的方法。 Linux移植必然要涉及到驱动程序的移植,而Linux驱动程序足足可以写一本书,所以,本章只简单的介绍移植Linux的流程,对于驱动程序则不作过多介绍,读者可以参考相关书籍进行深入学习。7.1
2、 Bootloader7.1.1 Bootloader简介7.1.2 常见Bootloader回本章目录7.1 Bootloader7.1.1 Bootloader简介 Bootloader是在操作系统内核运行之前运行的一段程序,它类似于PC中的BIOS程序。通过这段程序,可以完成硬件设备的初始化,并建立内存空间的映射关系,从而将系统的软/硬件环境带到一个合适的状态,为最终加载系统内核做好准备。 大多数Bootloader都包含两种不同的操作模式:(1) 启动加载模式(2) 下载模式回本节目录7.1 Bootloader7.1.1 Bootloader简介(续)(2) 下载模式 下载模式是目标
3、机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件,如下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后被Bootloader写入到目标机上的固态存储设备中。Bootloader的这种模式在系统更新时使用。 工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。7.1 Bootloader7.1.1 Bootloader简介(续)Bootloader的启动流程一般分为两个阶段:stage1和stage2。stage1的代码一般用汇编语言编写stage2的代码一般用C语言编写。7.1
4、Bootloader7.1.1 Bootloader简介(续)(2)stage2主要完成以下工作 用汇编语言跳转到stage2的入口函数。 初始化本阶段要使用到的硬件设备,包括初始化串口、初始化定时器等。 检测系统的内存映射,所谓内存映射就是指在整个物理地址空间中指出哪些地址范围被分配用来寻址系统的内存。 加载内核映像和根文件系统映像,这里包括规划内存占用的布局和从Flash上复制数据。 设置内核的启动参数并启动内核。7.1 Bootloader7.1.2 常见Bootloader1)Redboot Redboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目。Redboo
5、t支持的处理器构架有ARM、MIPS、MN10300、PowerPC、Renesas SHx、v850、x86等。 Redboot的特性有: 支持eCos、Linux操作系统引导; 在线读写Flash; 支持串行口kermit,S-record下载代码; 监控(Monitor)命令集,包括读写I/O,内存,寄存器、内存、外设测试功能等。回本节目录7.1 Bootloader7.1.2 常见Bootloader(续)2)UBoot UBoot(Universal Bootloader)是由开源项目PPCBoot发展起来的,它是在GPL下资源代码最完整的一个通用Bootloader。目前UBoot
6、差不多以每隔3个月发布一次。UBoot的官网是http:/www.denx.de/wiki/U-Boot。 UBoot支持的处理器构架包括PowerPC、ARM、MIPS、x86等,UBoot提供两种操作模式:启动加载模式和下载模式,并具有大型Boot Loader的全部功能。7.1 Bootloader7.1.2 常见Bootloader(续)3)vivi vivi是当前比较流行的专为ARM9处理器而设计的一款Bootloader,它操作简便,同时提供了完备的命令体系。vivi是由韩国Mizi公司开发的一种Bootloader,适合于ARM9处理器,支持S3C2410 x处理器,其源代码可以
7、在网站下载。 一个功能完备的大型Bootloader的工作量,相当于一个小型的操作系统。由于Bootloader的移植比较复杂,这里就不能详述了,读者可以查阅其他资料。7.2 Linux的移植7.2.1 安装前的准备工作7.2.2 Linux的移植步骤回本章目录7.2 Linux的移植7.2.1 安装前的准备工作(续)1)熟悉硬件 mini2440的Bootloader对NAND Flash的分区如下。分区名称起始地址分区大小vivi0 x000000000 x00040000param0 x000400000 x00020000kernel0 x000600000 x00500000root
8、0 x005600000 x3fa80000 IIC。mini2440具有一个直接连接CPU的IIC信号引脚的EEPROM 芯片AT24C08,它的容量为1024B,器件地址为A0。 DM9000。mini2440采用了DM9000网卡芯片,它可以自适应 10/100Mbit/s网络。MAC地址需要通过软件设定。7.2 Linux的移植7.2.1 安装前的准备工作(续)1)熟悉硬件 UDA134x。mini2440分别使用CPU的GPB2、GPB3、GPB4端口模拟实现L3-Bus规范的L3MODE、L3DATA、L3CLOCK。 以上内容在mini2440的平台设备文件(arch/arm/m
9、ach-s3c2440/mach-mini2440.c)中,读者可以查看该文件以了解详细内容。7.2 Linux的移植7.2.1 安装前的准备工作(续)2)获取内核源代码 Linux版本很多,而且更新很快。我们这里选择Linux-作为我们移植的对象。 Linux内核的官网地址为/,该网站列出了最近更新的几个稳定版。读者要下载历史版本,可以从/pub/linux/kernel/下载。7.2 Linux的移植7.2.1 安装前的准备工作(续)3)检测移植环境 桌面Linux发行版:这里选择fedora 14。 make程序:要编译Linux没有make程序是不行的,用户可以使用make -v命令来
10、查看make是否存在以及其版本号。 交叉编译器:交叉编译器的安装在6.2节已经介绍过,这里不再重复。 必要的库:这里必要的库很难一一列出,如果出现了Linux需要而系统中不存在的库,Linux会有提示,fedora用户可以使用yum命令来下载并安装所需的库。7.2 Linux的移植7.2.1 安装前的准备工作(续)4)下载YAFFS2 YAFFS/YAFFS2文件系统是专门针对NAND Flash设计,其具有可写入、修改并能永久保存文件的特性,并提供了损耗平衡和掉电保护。 在Linux下,使用命令 git clone git:/www.aleph1.co.uk/yaffs2来下载YAFFS2的
11、源代码。YAFFS的官网地址为/,读者可以查看该网站以了解YAFFS的有关信息。7.2 Linux的移植7.2.1 安装前的准备工作(续)4)下载YAFFS2csufedora Documents$ git clone git:/www.aleph1.co.uk/yaffs2Cloning into yaffs2.remote: Counting objects: 6930, doneremote: Compressing objects: 100% (4153/4153), doneremote: Total 6930 (delta 5484), reused 3476 (delta 270
12、0)Receiving Objects: 100% (6930/6930), 3.42MiB | 17 Kibit/s, done.Receiving deltas: 100% (5484/5484), done7.2 Linux的移植7.2.2 Linux的移植步骤(续)2)建立自己的平台文件 在Linux内核中,每个支持的开发板都有一个平台文件,Linux自带的mini2440开发板的平台文件为“arch/arm/mach-s3c2440/mach-mini2440.c”。我们这里就使用内核自带的平台设备文件,读者可以自己查看该文件以学习平台设备文件的写法。 如果使用内核不支持的平台移植,
13、或为内核添加一个新平台时,需要自己创建一个新的平台设备文件,并需要修改平台设备文件下的Makefile文件和Kconfig文件,其中Makefile文件负责编译,Kconfig文件用于配置。7.2 Linux的移植7.2.2 Linux的移植步骤(续)3)修改驱动程序 驱动程序要根据实际情况进行修改,对于mini2440,这里有三个关键的地方需要修改,其他需要修改的内容这里就不再一一列举。 (1)UDA134x驱动mini2440的声卡驱动 (2)DM9000驱动mini2400的网卡驱动 (3)为DM9000指定MAC地址mini2440所用的DM9000网卡并没有外接EEPROM用以存储M
14、AC地址,即MAC地址需要通过软件进行修改7.2 Linux的移植7.2.2 Linux的移植步骤(续)3)修改驱动程序(2)DM9000驱动static int _init dm9000_init(void)#if defined(CONFIG_MACH_MINI2440)#include unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;*(volatile unsigned int *)S3C2410_BWSCON) = ( oldval_bwscon & (3dev_addr) /* try re
15、ading from mac */mac_src = chip;for (i = 0; i dev_addri = ior(db, i+DM9000_PAR);#if defined(CONFIG_MACH_MINI2440)/* 指定MAC 地址为 08:90:90:90:90:90 */memcpy(ndev-dev_addr, x08x90 x90 x90 x90 x90, 6);#endif7.2 Linux的移植7.2.2 Linux的移植步骤(续)4)配置内核cd /home/csu/fedoramake ARCH=arm menuconfig7.2 Linux的移植7.2.2 L
16、inux的移植步骤(续)4)配置内核 内核可以配置的选项有两种: 一种是使用用方括号的选项,这种选项可以选择编译进内核( * )或者不编译( ); 另一种选项使用的是尖括号,这种选项可以选择编译进内核()、编译成模块()或者不编译()。 按空格键可以在这几个选项间切换,按Y键选择编译进内核,按M键选择编译成模块,按N键选择不编译。7.2 Linux的移植7.2.2 Linux的移植步骤(续)4)配置内核 除了使用menuconfig,还可以使用xconfig或gconfig来使用图形界面进行配置。 内核的配置根据实际情况进行选择,这里只列出几个关键的选项,其他选项读者可以自己查找相关资料。(1
17、)系统类型(2)内核特性(3)设备驱动(4)文件系统7.2 Linux的移植7.2.2 Linux的移植步骤(续)4)配置内核(1)系统类型系统类型决定要将Linux移植到哪个平台7.2 Linux的移植7.2.2 Linux的移植步骤(续)4)配置内核(2)内核特性内核特性决定Linux内核的一些基本特性7.2 Linux的移植7.2.2 Linux的移植步骤(续)4)配置内核(2)内核特性 这里要注意两点: 一是使能Use the ARM EABI to compile the kernel后,要在图7-3的Floating point emulation中选择至少一项,一般就选NWFPE
18、 math emulation; 二是从Linux- 2.6.36开始,参数的传递方式有所改变,mini2440的Bootloader仍然使用的是旧方式,所以这里要选择Provide old way to pass kernel parameters,以允许旧的参数传递方式。7.2 Linux的移植7.2.2 Linux的移植步骤(续)4)配置内核(3)设备驱动 Linux提供的设备驱动很多,要根据实际情况进行选择,这里就不再一一列举了。7.2 Linux的移植7.2.2 Linux的移植步骤(续)4)配置内核(4)文件系统 决定Linux支持的文件系统,这里选择yaffs2,一般FAT格式要
19、选择,这样就可以读取SD卡上的文件,NFS文件系统在调试文件系统时很有用。7.2 Linux的移植7.2.2 Linux的移植步骤(续)5)编译内核 使用如下命令编译内核:make ARCH=arm CROSS_COMPILE=arm-linux- -j2 zImage 其中,CROSS_COMPILE指定了交叉编译器的前缀,zImage是最终的目标,是压缩版的内核,-j2表示使用两个编译线程,可以加快编译速度。 编译好的zImage文件保存在arch/arm/boot目录下。7.2 Linux的移植7.2.2 Linux的移植步骤(续)6)编译内核模块 使用如下命令编译内核模块:make A
20、RCH=arm CROSS_COMPILE=arm-linux- modules7.3 根文件系统的制作 只有内核而没有文件系统是工作不起来的,根文件系统是内核启动时使用的第一个文件系统,根文件系统由一系列目录组成,目录中包含了应用程序、C语言库以及相关的配置文件。回本章目录7.3 根文件系统的制作 Busybox是一个集成了一百多个最常用Linux命令和工具的软件,它甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1MB左右的大小。Busybox把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小了很多,在嵌入式Linux中有非常广的应用。
21、7.3 根文件系统的制作 Busybox基于这样一个事实:很多标准Linux工具都可以共享很多共同的元素。例如,很多基于文件的工具(比如grep和find)都需要在目录中搜索文件的代码。当这些工具被合并到一个可执行程序中时,它们就可以共享这些相同的元素,这样可以产生更小的可执行程序。实际上,Busybox可以将大约3.5MB的工具包装成大约200KB大小。这就为可引导的磁盘和使用Linux的嵌入式设备提供了更多功能。7.3 根文件系统的制作 根文件系统的制作流程如下所述。1)下载Busybox Busybox的官网是,用户可到/downloads/ 网站下载。Busybox也有多个版本,用户可
22、以选择合适的版本下载。这里以最新的Busybox-1.19.4为例来说明。7.3 根文件系统的制作2)建立根文件系统目录 用户可以使用如下命令来建立所有必须的文件。csufedora $ mkdir rootfscsufedora $ cd rootfs/csufedora rootfs$ mkdir bin dev etc home lib mnt opt proc root sbin tmp usr varcsufedora rootfs$ mkdir usr/bin usr/lib usr/sbin lib/modules7.3 根文件系统的制作3)创建必要的设备文件 用户需要使用如下命
23、令来建立console和null两个设备文件。csufedora rootfs$ cd devcsufedora dev$ mknod -m 666 console c 5 1csufedora dev$ mknod -m 666 null c 1 37.3 根文件系统的制作4)配置Busybox 依次执行如下命令来开始配置Busybox:csufedora $ tar xjf busybox-1.19.4.tar.bz2csufedora $ cd busybox-1.19.4csufedora busybox-1.19.4$ make menuconfig7.3 根文件系统的制作4)配置B
24、usybox Busybox的配置这里不再详细说明,只说明三点。(1)为了避免出错,需要选择“Dont use /usr”。Busybox Settings -General Configuration -* Dont use /usr(2)这里将Busybox编译为动态链接,并制定交叉编译器前缀。Build Options - Build BusyBox as a static binary (arm-linux-) Cross Compiler prefix(3)指定将Busybox安装的位置,即上面的rootfs文件夹。 Installation Options (make instal
25、l behavior) -What kind of applet links to install (as soft-links) -(/home/csu/rootfs) BusyBox installation prefix7.3 根文件系统的制作5)编译并安装Busybox 使用命令make来编译Busybox,使用命令make install命令将Busybox安装到配置时指定的目录。6)安装必要的库 由于这里使用了动态链接,所以需要将使用到的库复制到rootfs/lib目录下。读者可以使用arm-linux-readelf -d命令来查看需要的库。这里为了方便,将交叉编译器中所有的库复
26、制过来,因为即使Busybox不使用这些库,其他应用程序也可能要使用这些库。7.3 根文件系统的制作7)编写配置文件 至少需要编写如下配置文件:etc/init.d/rcSetc/inittabetc/profileetc/resolv.confetc/ inetd.confetc/fstabetc/passwd7.3 根文件系统的制作7)编写配置文件 这几个文件的作用是:rcS:启动脚本文件,inittab:init进程按照inittab文件所提供的信息创建进程,profile:主要负责系统的环境变量,resolv.conf:是域名解析器的配置文件,inetd.conf:保存了系统提供int
27、ernet服务的数据库,fstab:存放系统的文件系统信息,passwd:用于存放用户关键信息。7.3 根文件系统的制作7)编写配置文件(1)etc/init.d/rcS需要开启该文件的执行权限。#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel /bin/hostname Micro2440/bin/mount -aecho /sbin/mdev/proc/sys/kernel/hotplug mdev -smkdir /dev/ptsmount -t devpts
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 核磁科护理工作总结
- 教育培训行业工程师工作总结
- 电商供应链管理总结
- 初中班主任工作感悟与反思
- 婚纱店前台工作心得
- 教育科研行业教学改革建议
- 2024年度企事业单位聘用司机及车辆安全培训服务合同3篇
- 得寿山石默想语文阅读理解
- 白鹅微课程设计
- 波形发生器的课程设计
- 部编版道德与法治九年级上册每课教学反思
- 2024年全国高中数学联赛北京赛区预赛一试试题(解析版)
- 2024重庆艺术统考美术专业一分一段表
- 绿化养护服务投标方案(技术标)
- 跨境电商公共服务平台项目招标文件
- 河北省保定市2023-2024学年三年级上学期期末考试数学试卷
- 煤炭托盘合作协议书
- 2024年中国主轴产业深度分析、投资前景及发展趋势预测(简版报告)
- 房地产公司总经理职位面试问题
- 大班春季班级工作计划下学期
- 2023年广东能源集团校园招聘考试真题及答案
评论
0/150
提交评论