大学课件物联网与嵌入式系统开发--第7章_嵌入式Linux操作系统的移植_第1页
大学课件物联网与嵌入式系统开发--第7章_嵌入式Linux操作系统的移植_第2页
大学课件物联网与嵌入式系统开发--第7章_嵌入式Linux操作系统的移植_第3页
大学课件物联网与嵌入式系统开发--第7章_嵌入式Linux操作系统的移植_第4页
大学课件物联网与嵌入式系统开发--第7章_嵌入式Linux操作系统的移植_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第7章章嵌入式嵌入式Linux操作系统的移植操作系统的移植 本章主要内容本章主要内容7.1 Bootloader7.2 Linux的移植的移植7.3 根文件系统的制作根文件系统的制作 思考与习题思考与习题本章主要内容本章主要内容 本章介绍将本章介绍将Linux-Linux-移植到移植到ARMARM平台的过平台的过程,开发板为广州友善之臂公司计算机科技有限公程,开发板为广州友善之臂公司计算机科技有限公司的司的mini2440mini2440开发板。这里要说明的是,从开发板。这里要说明的是,从Linux-Linux-2.6.322.6.32开始,开始,LinuxL

2、inux内核已经对内核已经对mini2440mini2440开发板有了开发板有了有限的支持,因此,我们这里主要介绍移植的方法。有限的支持,因此,我们这里主要介绍移植的方法。 Linux Linux移植必然要涉及到驱动程序的移植,而移植必然要涉及到驱动程序的移植,而LinuxLinux驱动程序足足可以写一本书,所以,本章只简驱动程序足足可以写一本书,所以,本章只简单的介绍移植单的介绍移植LinuxLinux的流程,对于驱动程序则不作过的流程,对于驱动程序则不作过多介绍,读者可以参考相关书籍进行深入学习。多介绍,读者可以参考相关书籍进行深入学习。7.1 Bootloader7.1.1 Bootlo

3、ader7.1.1 Bootloader简介简介7.1.2 7.1.2 常见常见BootloaderBootloader回本章目录回本章目录7.1 Bootloader7.1.1 Bootloader简介简介 Bootloader Bootloader是在操作系统内核运行之前是在操作系统内核运行之前运行的一段程序,它类似于运行的一段程序,它类似于PCPC中的中的BIOSBIOS程序。程序。通过这段程序,可以完成硬件设备的初始化,通过这段程序,可以完成硬件设备的初始化,并建立内存空间的映射关系,从而将系统的并建立内存空间的映射关系,从而将系统的软软/ /硬件环境带到一个合适的状态,为最终加硬件环

4、境带到一个合适的状态,为最终加载系统内核做好准备。载系统内核做好准备。 大多数大多数BootloaderBootloader都包含两种不同的操都包含两种不同的操作模式:作模式:(1) (1) 启动加载模式启动加载模式(2) (2) 下载模式下载模式回本节目录回本节目录7.1 Bootloader7.1.1 Bootloader简介(续)(1) (1) 启动加载模式启动加载模式也叫做也叫做“自主自主”模式,该模式下,模式,该模式下,Bootloader从目标机上的某个固态存储从目标机上的某个固态存储设备上将操作系统加载到设备上将操作系统加载到RAM中并启动中并启动操作系统运行,整个过程没有用户的

5、介操作系统运行,整个过程没有用户的介入。入。嵌入式产品发布时的使用该模式。嵌入式产品发布时的使用该模式。7.1 Bootloader7.1.1 Bootloader简介(续)(2) (2) 下载模式下载模式 下载模式是目标机上的下载模式是目标机上的BootloaderBootloader将通过串口将通过串口连接或网络连接等通信手段从主机下载文件,如下连接或网络连接等通信手段从主机下载文件,如下载内核映像和根文件系统映像等。从主机下载的文载内核映像和根文件系统映像等。从主机下载的文件通常首先被件通常首先被BootloaderBootloader保存到目标机的保存到目标机的RAMRAM中,中,然后

6、被然后被BootloaderBootloader写入到目标机上的固态存储设备写入到目标机上的固态存储设备中。中。BootloaderBootloader的这种模式在系统更新时使用。的这种模式在系统更新时使用。 工作于这种模式下的工作于这种模式下的BootloaderBootloader通常都会向它通常都会向它的终端用户提供一个简单的命令行接口。的终端用户提供一个简单的命令行接口。7.1 Bootloader7.1.1 Bootloader简介(续)BootloaderBootloader的启动流程一般分为两个阶的启动流程一般分为两个阶段:段:stage1stage1和和stage2stage2

7、。stage1stage1的代码一般用汇编语言编写的代码一般用汇编语言编写stage2stage2的代码一般用的代码一般用C C语言编写。语言编写。7.1 Bootloader7.1.1 Bootloader简介(续)(1 1)stage1stage1阶段主要完成以下工作阶段主要完成以下工作 基本的硬件初始化,包括屏蔽所有的中断、设置基本的硬件初始化,包括屏蔽所有的中断、设置CPUCPU的速的速度和时钟频率、度和时钟频率、RAMRAM初始化、外围设备初始化、关闭初始化、外围设备初始化、关闭CPUCPU内部指令和数据内部指令和数据CacheCache等。等。 为加载为加载stage2stage2

8、准备准备RAMRAM空间,通常为了获得更快的执行速空间,通常为了获得更快的执行速度,通常把度,通常把stage2stage2加载到加载到RAMRAM空间中来执行,因此必空间中来执行,因此必须为加载须为加载BootloaderBootloader的的stage2stage2准备好一段可用的准备好一段可用的RAMRAM空间。空间。 复制复制stage2stage2的代码到的代码到RAMRAM中,在这里要确定两点:中,在这里要确定两点:1 1、stage2stage2的可执行映像在固态存储设备的存放起的可执行映像在固态存储设备的存放起始地址和终止地址;始地址和终止地址;2 2、RAMRAM空间的起始

9、地址。空间的起始地址。 设置堆栈指针设置堆栈指针SPSP,为执行,为执行stage2stage2的的C C语言代码做好准备。语言代码做好准备。7.1 Bootloader7.1.1 Bootloader简介(续)(2 2)stage2stage2主要完成以下工作主要完成以下工作 用汇编语言跳转到用汇编语言跳转到stage2stage2的入口函数。的入口函数。 初始化本阶段要使用到的硬件设备,包括初始初始化本阶段要使用到的硬件设备,包括初始化串口、初始化定时器等。化串口、初始化定时器等。 检测系统的内存映射,所谓内存映射就是指在检测系统的内存映射,所谓内存映射就是指在整个物理地址空间中指出哪些地

10、址范围被分整个物理地址空间中指出哪些地址范围被分配用来寻址系统的内存。配用来寻址系统的内存。 加载内核映像和根文件系统映像,这里包括规加载内核映像和根文件系统映像,这里包括规划内存占用的布局和从划内存占用的布局和从FlashFlash上复制数据。上复制数据。 设置内核的启动参数并启动内核。设置内核的启动参数并启动内核。7.1 Bootloader7.1.2 常见常见Bootloader1 1)RedbootRedboot Redboot Redboot是是RedhatRedhat公司随公司随eCoseCos发布的一个发布的一个BOOTBOOT方案,是一个开源项目。方案,是一个开源项目。Redb

11、ootRedboot支持的处理器构支持的处理器构架有架有ARMARM、MIPSMIPS、MN10300MN10300、PowerPCPowerPC、Renesas SHxRenesas SHx、v850v850、x86x86等。等。 Redboot Redboot的特性有:的特性有: 支持支持eCoseCos、LinuxLinux操作系统引导;操作系统引导; 在线读写在线读写FlashFlash; 支持串行口支持串行口kermitkermit,S-recordS-record下载代码;下载代码; 监控(监控(MonitorMonitor)命令集,包括读写)命令集,包括读写I/OI/O,内,内存

12、,寄存器、内存、外设测试功能等。存,寄存器、内存、外设测试功能等。回本节目录回本节目录7.1 Bootloader7.1.2 常见Bootloader(续)2 2)UBootUBoot UBoot UBoot(Universal BootloaderUniversal Bootloader)是由开源项)是由开源项目目PPCBootPPCBoot发展起来的,它是在发展起来的,它是在GPLGPL下资源代码最完下资源代码最完整的一个通用整的一个通用BootloaderBootloader。目前。目前UBootUBoot差不多以每差不多以每隔隔3 3个月发布一次。个月发布一次。UBootUBoot的官

13、网是的官网是http:/www.denx.de/wiki/U-Boothttp:/www.denx.de/wiki/U-Boot。 UBoot UBoot支持的处理器构架包括支持的处理器构架包括PowerPCPowerPC、ARMARM、MIPSMIPS、x86x86等,等,UBootUBoot提供两种操作模式:启动加载提供两种操作模式:启动加载模式和下载模式,并具有大型模式和下载模式,并具有大型Boot LoaderBoot Loader的全部的全部功能。功能。7.1 Bootloader7.1.2 常见Bootloader(续)2 2)UBootUBoot UBoot UBoot的主要特性

14、有:的主要特性有: SCC/FEC SCC/FEC以太网支持;以太网支持; BOOTP/TFTP BOOTP/TFTP引导;引导; IP IP、MACMAC预置;预置; 在线读写在线读写FlashFlash、IDEIDE、IICIIC、EEROMEEROM、RTCRTC等;等; 支持串行口支持串行口kermitkermit,S-recordS-record下载代码;下载代码; 支持多种操作系统的引导;支持多种操作系统的引导; 监控命令集,读写监控命令集,读写I/OI/O,内存、寄存器、内存、,内存、寄存器、内存、外设测试功能等;外设测试功能等; 脚本语言支持(类似脚本语言支持(类似BASHBA

15、SH脚本);脚本); 支持支持WatchdogWatchdog、LCD logoLCD logo,状态指示功能等。,状态指示功能等。7.1 Bootloader7.1.2 常见Bootloader(续)3 3)vivivivi vivi vivi是当前比较流行的专为是当前比较流行的专为ARM9ARM9处理器而设计处理器而设计的一款的一款BootloaderBootloader,它操作简便,同时提供了完备,它操作简便,同时提供了完备的命令体系。的命令体系。vivivivi是由韩国是由韩国MiziMizi公司开发的一种公司开发的一种BootloaderBootloader,适合于,适合于ARM9A

16、RM9处理器,支持处理器,支持S3C2410 xS3C2410 x处处理器,其源代码可以在理器,其源代码可以在http:/http:/网站网站下载。下载。 一个功能完备的大型一个功能完备的大型BootloaderBootloader的工作量,相的工作量,相当于一个小型的操作系统。由于当于一个小型的操作系统。由于BootloaderBootloader的移植的移植比较复杂,这里就不能详述了,读者可以查阅其他比较复杂,这里就不能详述了,读者可以查阅其他资料。资料。7.2 Linux的移植的移植7.2.1 7.2.1 安装前的准备工作安装前的准备工作7.2.2 Linux7.2.2 Linux的移植

17、步骤的移植步骤回本章目录回本章目录7.2 Linux的移植的移植7.2.1 安装前的准备工作安装前的准备工作1 1)熟悉硬件)熟悉硬件 由于由于LinuxLinux最终要操作硬件,而嵌入式系统的最终要操作硬件,而嵌入式系统的一个特点就是硬件可定制,不同的产品其硬件电路一个特点就是硬件可定制,不同的产品其硬件电路有可能很大的不同,比如有可能很大的不同,比如IICIIC芯片以及地址、网络芯片以及地址、网络芯片等,所以,在移植前一定要对要移植的平台有芯片等,所以,在移植前一定要对要移植的平台有深入的理解。深入的理解。 对于对于mini2440mini2440开发板,有几个关键要了解的内开发板,有几个

18、关键要了解的内容,如下。容,如下。 mini2440 mini2440开发板的晶振为开发板的晶振为12000000Hz12000000Hz。回本节目录回本节目录7.2 Linux的移植的移植7.2.1 安装前的准备工作(续)1 1)熟悉硬件)熟悉硬件 mini2440 mini2440的的BootloaderBootloader对对NAND FlashNAND Flash的分区如下。的分区如下。分区名称分区名称起始地址起始地址分区大小分区大小vivi0 x000000000 x00040000param0 x000400000 x00020000kernel0 x000600000 x0050

19、0000root0 x005600000 x3fa80000 IIC。mini2440具有一个直接连接具有一个直接连接CPU的的IIC信号引脚信号引脚的的EEPROM 芯片芯片AT24C08,它的容量为,它的容量为1024B,器件地址,器件地址为为A0。 DM9000。mini2440采用了采用了DM9000网卡芯片,它可网卡芯片,它可以自适应以自适应 10/100Mbit/s网络。网络。MAC地址需要通过软件设定。地址需要通过软件设定。7.2 Linux的移植的移植7.2.1 安装前的准备工作(续)1 1)熟悉硬件)熟悉硬件 UDA134x UDA134x。mini2440mini2440分

20、别使用分别使用CPUCPU的的GPB2GPB2、GPB3GPB3、GPB4GPB4端口模拟实现端口模拟实现L3-BusL3-Bus规范的规范的L3MODEL3MODE、L3DATAL3DATA、L3CLOCKL3CLOCK。 以上内容在以上内容在mini2440mini2440的平台设备文件的平台设备文件(arch/arm/mach-s3c2440/mach-mini2440.carch/arm/mach-s3c2440/mach-mini2440.c)中,读者可)中,读者可以查看该文件以了解详细内容。以查看该文件以了解详细内容。7.2 Linux的移植的移植7.2.1 安装前的准备工作(续)

21、2 2)获取内核源代码)获取内核源代码 Linux Linux版本很多,而且更新很快。我们这里选择版本很多,而且更新很快。我们这里选择Linux-Linux-作为我们移植的对象。作为我们移植的对象。 Linux Linux内核的官网地址为内核的官网地址为//,该,该网站列出了最近更新的几个稳定版。读者要下载历史版本,网站列出了最近更新的几个稳定版。读者要下载历史版本,可以从可以从/pub/linux/kernel/ftp:/ftp.kernel.

22、org/pub/linux/kernel/下载。下载。7.2 Linux的移植的移植7.2.1 安装前的准备工作(续)3 3)检测移植环境)检测移植环境 桌面桌面LinuxLinux发行版:这里选择发行版:这里选择fedora 14fedora 14。 make make程序:要编译程序:要编译LinuxLinux没有没有makemake程序是不行的,用户可程序是不行的,用户可以使用以使用make -vmake -v命令来查看命令来查看makemake是否存在以及其版本号。是否存在以及其版本号。 交叉编译器:交叉编译器的安装在交叉编译器:交叉编译器的安装在6.26.2节已经介绍过,这节已经介绍

23、过,这里不再重复。里不再重复。 必要的库:这里必要的库很难一一列出,如果出现了必要的库:这里必要的库很难一一列出,如果出现了LinuxLinux需要而系统中不存在的库,需要而系统中不存在的库,LinuxLinux会有提示,会有提示,fedorafedora用用户可以使用户可以使用yumyum命令来下载并安装所需的库。命令来下载并安装所需的库。7.2 Linux的移植的移植7.2.1 安装前的准备工作(续)4 4)下载)下载YAFFS2YAFFS2 YAFFS/YAFFS2 YAFFS/YAFFS2文件系统是专门针对文件系统是专门针对NAND FlashNAND Flash设计,其具有可写入、修

24、改并能永久保存文件的特设计,其具有可写入、修改并能永久保存文件的特性,并提供了损耗平衡和掉电保护。性,并提供了损耗平衡和掉电保护。 在在LinuxLinux下,使用命令下,使用命令 git clone git:/www.aleph1.co.uk/yaffs2 git clone git:/www.aleph1.co.uk/yaffs2来下载来下载YAFFS2YAFFS2的源代码。的源代码。YAFFSYAFFS的官网地址为的官网地址为http:/ Linux的移植的移植7.2.1 安装前的准备工作(续)4 4)下载)下载YAFFS2YAFFS2csufedora Documents$ git c

25、lone git:/www.aleph1.co.uk/yaffs2csufedora Documents$ git clone git:/www.aleph1.co.uk/yaffs2Cloning into yaffs2.Cloning into yaffs2.remote: Counting objects: 6930, doneremote: Counting objects: 6930, doneremote: Compressing objects: 100% remote: Compressing objects: 100% (4153/41534153/4153), done,

26、doneremote: Total 6930 remote: Total 6930 (delta 5484delta 5484), reused 3476 , reused 3476 (delta 2700delta 2700)Receiving Objects: 100% Receiving Objects: 100% (6930/69306930/6930), 3.42MiB | 17 Kibit/s, done., 3.42MiB | 17 Kibit/s, done.Receiving deltas: 100% Receiving deltas: 100% (5484/54845484

27、/5484), done, done7.2 Linux的移植的移植7.2.2 Linux的移植步骤的移植步骤 这里假设读者下载的是这里假设读者下载的是linux-.tar.bz2linux-.tar.bz2,并,并放到放到csucsu用户的用户的DocumentDocument目录下。目录下。1 1)解压)解压LinuxLinux内核并为内核打上内核并为内核打上YAFFS2YAFFS2补丁补丁csufedora Documents$ lscsufedora Documents$ lslinux-.tar.bz2 yaffs2linux-2.6.3

28、8.7.tar.bz2 yaffs2csufedora Documents$ tar xjf linux-.tar.bz2csufedora Documents$ tar xjf linux-.tar.bz2csufedora Documents$ cd yaffs2/csufedora Documents$ cd yaffs2/csufedora yaffs2$ ./patch-ker.sh c m ./linux-csufedora yaffs2$ ./patch-ker.sh c m ./linux-Updating ./l

29、inux-/fs/KconfigUpdating ./linux-/fs/KconfigUpdating ./linux-/fs/MakefileUpdating ./linux-/fs/Makefilecsufedora yaffs2$ cd ./linux-csufedora yaffs2$ cd ./linux-回本节目录回本节目录7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)2 2)建立自己的平台文件)建立自己的平台文件 在在LinuxLinux内核中,每个支持的开发板

30、都有一个内核中,每个支持的开发板都有一个平台文件,平台文件,LinuxLinux自带的自带的mini2440mini2440开发板的平台文开发板的平台文件为件为“arch/arm/mach-s3c2440/mach-“arch/arm/mach-s3c2440/mach-mini2440.c”mini2440.c”。我们这里就使用内核自带的平台设。我们这里就使用内核自带的平台设备文件,读者可以自己查看该文件以学习平台设备备文件,读者可以自己查看该文件以学习平台设备文件的写法。文件的写法。 如果使用内核不支持的平台移植,或如果使用内核不支持的平台移植,或为内核添为内核添加一个新平台时,加一个新平

31、台时,需要自己创建一个新的平台设备需要自己创建一个新的平台设备文件,并需要修改平台设备文件下的文件,并需要修改平台设备文件下的MakefileMakefile文件文件和和KconfigKconfig文件,其中文件,其中MakefileMakefile文件负责编译,文件负责编译,KconfigKconfig文件用于配置。文件用于配置。7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)3 3)修改驱动程序)修改驱动程序 驱动程序要根据实际情况进行修改,对于驱动程序要根据实际情况进行修改,对于mini2440mini2440,这里有三个关键的地方需要修改,其他,这里有三个关键的地方

32、需要修改,其他需要修改的内容这里就不再一一列举。需要修改的内容这里就不再一一列举。 (1 1)UDA134xUDA134x驱动驱动mini2440mini2440的声卡驱动的声卡驱动 (2 2)DM9000DM9000驱动驱动mini2400mini2400的网卡驱动的网卡驱动 (3 3)为)为DM9000DM9000指定指定MACMAC地址地址mini2440mini2440所用的所用的DM9000DM9000网卡并没有外接网卡并没有外接EEPROMEEPROM用以存储用以存储MACMAC地址,即地址,即MACMAC地址需要通地址需要通过软件进行修改过软件进行修改7.2 Linux的移植的移

33、植7.2.2 Linux的移植步骤(续)3 3)修改驱动程序)修改驱动程序(1 1)UDA134xUDA134x驱动驱动static int uda134x_startupstatic int uda134x_startup(struct snd_pcm_substream struct snd_pcm_substream * *substream,substream,) else else uda134x-master_substream = substream; uda134x-master_substream = substream;#if defined#if defined( CON

34、FIG_MACH_MINI2440 CONFIG_MACH_MINI2440 ) /* 把录音通道改为把录音通道改为 VIN2 */uda134x_writeuda134x_write(codec, 2, 2 |codec, 2, 2 |(5U25U2); ;#endif#endifreturn 0;return 0; 7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)3 3)修改驱动程序)修改驱动程序(2 2)DM9000DM9000驱动驱动static int _init dm9000_initstatic int _init dm9000_init(voidvoid)

35、#if defined#if defined(CONFIG_MACH_MINI2440CONFIG_MACH_MINI2440)#include #include unsigned int oldval_bwscon = unsigned int oldval_bwscon = * *(volatile unsigned int volatile unsigned int * *)S3C2410_BWSCON;S3C2410_BWSCON;* *(volatile unsigned int volatile unsigned int * *)S3C2410_BWSCONS3C2410_BWSC

36、ON) = = ( oldval_bwscon & oldval_bwscon & (3163dev_addrndev-dev_addr) / /* * try reading from mac try reading from mac * */ /mac_src = chip;mac_src = chip;for for (i = 0; i 6; i+i = 0; i dev_addri = iorndev-dev_addri = ior(db, i+DM9000_PARdb, i+DM9000_PAR); ; #if defined#if defined(CONFIG_MA

37、CH_MINI2440CONFIG_MACH_MINI2440)/ /* * 指定指定MAC MAC 地址为地址为 08:90:90:90:90:90 08:90:90:90:90:90 * */ /memcpymemcpy(ndev-dev_addr, x08x90 x90 x90 x90 x90, 6ndev-dev_addr, x08x90 x90 x90 x90 x90, 6); ;#endif#endif 7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)4 4)配置内核)配置内核cd /home/csu/fedoracd /home/csu/fedoramake

38、ARCH=arm menuconfigmake ARCH=arm menuconfig7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)4 4)配置内核)配置内核 内核可以配置的选项有两种:内核可以配置的选项有两种: 一种是使用用方括号的选项,这种选项可以选一种是使用用方括号的选项,这种选项可以选择编译进内核(择编译进内核( * * )或者不编译()或者不编译( );); 另一种选项使用的是尖括号,这种选项可以选另一种选项使用的是尖括号,这种选项可以选择编译进内核(择编译进内核( )、编译成模块()、编译成模块()或)或者不编译(者不编译()。)。 按空格键可以在这几个选项间

39、切换,按按空格键可以在这几个选项间切换,按Y Y键选键选择编译进内核,按择编译进内核,按M M键选择编译成模块,按键选择编译成模块,按N N键选择键选择不编译。不编译。7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)4 4)配置内核)配置内核 除了使用除了使用menuconfigmenuconfig,还可以使用,还可以使用xconfigxconfig或或gconfiggconfig来使用图形界面进行配置。来使用图形界面进行配置。 内核的配置根据实际情况进行选择,这里只列内核的配置根据实际情况进行选择,这里只列出几个关键的选项,其他选项读者可以自己查找相出几个关键的选项,其他

40、选项读者可以自己查找相关资料。关资料。(1 1)系统类型)系统类型(2 2)内核特性)内核特性(3 3)设备驱动)设备驱动(4 4)文件系统)文件系统7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)4 4)配置内核)配置内核(1 1)系统类型)系统类型系统类型决定要将系统类型决定要将Linux移植到哪个平台移植到哪个平台7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)4 4)配置内核)配置内核(2 2)内核特性)内核特性内核特性决定内核特性决定Linux内核的一些基本特性内核的一些基本特性7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续

41、)4 4)配置内核)配置内核(2 2)内核特性)内核特性 这里要注意两点:这里要注意两点: 一是使能一是使能Use the ARM EABI to compile the kernel后,要在图后,要在图7-3的的Floating point emulation中选择至少一项,一般就选中选择至少一项,一般就选NWFPE math emulation; 二是从二是从Linux- 2.6.36开始,参数的传递方式有所开始,参数的传递方式有所改变,改变,mini2440的的Bootloader仍然使用的是旧方仍然使用的是旧方式,所以这里要选择式,所以这里要选择Provide old way to p

42、ass kernel parameters,以允许旧的参数传递方式。,以允许旧的参数传递方式。7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)4 4)配置内核)配置内核(3 3)设备驱动)设备驱动 Linux提供的设备驱动很多,要根据实际情况进提供的设备驱动很多,要根据实际情况进行选择,这里就不再一一列举了。行选择,这里就不再一一列举了。7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)4 4)配置内核)配置内核(4 4)文件系统)文件系统 决定决定LinuxLinux支持的文件系统,这里选择支持的文件系统,这里选择yaffs2yaffs2,一般,一般FA

43、TFAT格式要选择,格式要选择,这样就可以读取这样就可以读取SDSD卡上的文件,卡上的文件,NFSNFS文件系统在调试文件系统时很有用。文件系统在调试文件系统时很有用。7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)5 5)编译内核)编译内核 使用如下命令编译内核:使用如下命令编译内核:make ARCH=arm CROSS_COMPILE=arm-linux- -j2 zImagemake ARCH=arm CROSS_COMPILE=arm-linux- -j2 zImage 其中,其中,CROSS_COMPILECROSS_COMPILE指定了交叉编译器的前缀,指定了

44、交叉编译器的前缀,zImagezImage是最终的目标,是压缩版的内核,是最终的目标,是压缩版的内核,-j2-j2表示使用两个表示使用两个编译线程,可以加快编译速度。编译线程,可以加快编译速度。 编译好的编译好的zImagezImage文件保存在文件保存在arch/arm/bootarch/arm/boot目录下。目录下。7.2 Linux的移植的移植7.2.2 Linux的移植步骤(续)6 6)编译内核模块)编译内核模块 使用如下命令编译内核模块:使用如下命令编译内核模块:make ARCH=arm CROSS_COMPILE=arm-linux- modulesmake ARCH=arm

45、CROSS_COMPILE=arm-linux- modules7.3 根文件系统的制作根文件系统的制作 只有内核而没有文件系统是工作不只有内核而没有文件系统是工作不起来的,根文件系统是内核启动时使用起来的,根文件系统是内核启动时使用的第一个文件系统,根文件系统由一系的第一个文件系统,根文件系统由一系列目录组成,目录中包含了应用程序、列目录组成,目录中包含了应用程序、C C语言库以及相关的配置文件。语言库以及相关的配置文件。回本章目录回本章目录7.3 根文件系统的制作根文件系统的制作 Busybox Busybox是一个集成了一百多个最常是一个集成了一百多个最常用用LinuxLinux命令和工

46、具的软件,它甚至还集命令和工具的软件,它甚至还集成了一个成了一个httphttp服务器和一个服务器和一个telnettelnet服务服务器,而所有这一切功能却只有区区器,而所有这一切功能却只有区区1MB1MB左左右的大小。右的大小。BusyboxBusybox把常用的工具和命令把常用的工具和命令集成压缩在一个可执行文件里,功能基集成压缩在一个可执行文件里,功能基本不变,而大小却小了很多,在嵌入式本不变,而大小却小了很多,在嵌入式LinuxLinux中有非常广的应用。中有非常广的应用。7.3 根文件系统的制作根文件系统的制作 Busybox Busybox基于这样一个事实:很多标准基于这样一个事

47、实:很多标准LinuxLinux工具都可以共享很多共同的元素。例如,工具都可以共享很多共同的元素。例如,很多基于文件的工具(比如很多基于文件的工具(比如grepgrep和和findfind)都)都需要在目录中搜索文件的代码。当这些工具需要在目录中搜索文件的代码。当这些工具被合并到一个可执行程序中时,它们就可以被合并到一个可执行程序中时,它们就可以共享这些相同的元素,这样可以产生更小的共享这些相同的元素,这样可以产生更小的可执行程序。实际上,可执行程序。实际上,BusyboxBusybox可以将大约可以将大约3.5MB3.5MB的工具包装成大约的工具包装成大约200KB200KB大小。这就为大小

48、。这就为可引导的磁盘和使用可引导的磁盘和使用LinuxLinux的嵌入式设备提供的嵌入式设备提供了更多功能。了更多功能。7.3 根文件系统的制作根文件系统的制作 根文件系统的制作流程如下所述。根文件系统的制作流程如下所述。1 1)下载)下载BusyboxBusybox Busybox Busybox的官网是的官网是,用,用户可到户可到http:/ http:/ 网站下载。网站下载。BusyboxBusybox也有多个版本,用户可以也有多个版本,用户可以选择合适的版本下载。这里以最新的选择合适的版本下载。这里以最新的Busybox-1.19.4Busybox-1.19.4为例来说明。为例来说明。

49、7.3 根文件系统的制作根文件系统的制作2 2)建立根文件系统目录)建立根文件系统目录 用户可以使用如下命令来建立所有必须用户可以使用如下命令来建立所有必须的文件。的文件。csufedora $ mkdir rootfscsufedora $ mkdir rootfscsufedora $ cd rootfs/csufedora $ cd rootfs/csufedora rootfs$ mkdir bin dev etc home csufedora rootfs$ mkdir bin dev etc home lib mnt opt proc root sbin tmp usr varli

50、b mnt opt proc root sbin tmp usr varcsufedora rootfs$ mkdir usr/bin usr/lib csufedora rootfs$ mkdir usr/bin usr/lib usr/sbin lib/modulesusr/sbin lib/modules7.3 根文件系统的制作根文件系统的制作3 3)创建必要的设备文件)创建必要的设备文件 用户需要使用如下命令来建立用户需要使用如下命令来建立consoleconsole和和nullnull两个设备文件。两个设备文件。csufedora rootfs$ cd devcsufedora ro

51、otfs$ cd devcsufedora dev$ mknod -m 666 console c 5 1csufedora dev$ mknod -m 666 console c 5 1csufedora dev$ mknod -m 666 null c 1 3csufedora dev$ mknod -m 666 null c 1 37.3 根文件系统的制作根文件系统的制作4 4)配置)配置BusyboxBusybox 依次执行如下命令来开始配置依次执行如下命令来开始配置BusyboxBusybox:csufedora $ tar xjf busybox-1.19.4.tar.bz2csu

52、fedora $ tar xjf busybox-1.19.4.tar.bz2csufedora $ cd busybox-1.19.4csufedora $ cd busybox-1.19.4csufedora busybox-1.19.4$ make menuconfigcsufedora busybox-1.19.4$ make menuconfig7.3 根文件系统的制作根文件系统的制作4 4)配置)配置BusyboxBusybox Busybox Busybox的配置这里不再详细说明,只说明三点。的配置这里不再详细说明,只说明三点。(1 1)为了避免出错,需要选择)为了避免出错,需要

53、选择“Dont use /usr”“Dont use /usr”。Busybox Settings -Busybox Settings -General Configuration -General Configuration - * * Dont use /usr Dont use /usr(2 2)这里将)这里将BusyboxBusybox编译为动态链接,并制定交叉编译器前缀。编译为动态链接,并制定交叉编译器前缀。Build Options -Build Options - Build BusyBox as a static binary Build BusyBox as a static

54、 binary (arm-linux-arm-linux-) Cross Compiler prefix Cross Compiler prefix(3 3)指定将)指定将BusyboxBusybox安装的位置,即上面的安装的位置,即上面的rootfsrootfs文件夹。文件夹。 Installation Options Installation Options (make install behaviormake install behavior) - -What kind of applet links to install What kind of applet links to ins

55、tall (as soft-linksas soft-links) - -(/home/csu/rootfs/home/csu/rootfs) BusyBox installation prefix BusyBox installation prefix7.3 根文件系统的制作根文件系统的制作5 5)编译并安装)编译并安装BusyboxBusybox 使用命令使用命令makemake来编译来编译BusyboxBusybox,使用命令,使用命令make make installinstall命令将命令将BusyboxBusybox安装到配置时指定的目录。安装到配置时指定的目录。6 6)安装必要的

56、库)安装必要的库 由于这里使用了动态链接,所以需要将使用到的由于这里使用了动态链接,所以需要将使用到的库复制到库复制到rootfs/lib目录下。读者可以使用目录下。读者可以使用arm-linux-readelf -d命令来查看需要的库。这里为了方命令来查看需要的库。这里为了方便,将交叉编译器中所有的库复制过来,因为即使便,将交叉编译器中所有的库复制过来,因为即使Busybox不使用这些库,其他应用程序也可能要使不使用这些库,其他应用程序也可能要使用这些库。用这些库。7.3 根文件系统的制作根文件系统的制作7 7)编写配置文件)编写配置文件 至少需要编写如下配置文件:至少需要编写如下配置文件:

57、etc/init.d/rcSetc/init.d/rcSetc/inittabetc/inittabetc/profileetc/profileetc/resolv.confetc/resolv.confetc/ inetd.confetc/ inetd.confetc/fstabetc/fstabetc/passwdetc/passwd7.3 根文件系统的制作根文件系统的制作7 7)编写配置文件)编写配置文件 这几个文件的作用是:这几个文件的作用是:rcSrcS:启动脚本文件,:启动脚本文件,inittabinittab:initinit进程按照进程按照inittabinittab文件所提供

58、的信文件所提供的信息创建进程,息创建进程,profileprofile:主要负责系统的环境变量,:主要负责系统的环境变量,resolv.confresolv.conf:是域名解析器的配置文件,:是域名解析器的配置文件,inetd.confinetd.conf:保存了系统提供:保存了系统提供internetinternet服务的数服务的数据库,据库,fstabfstab:存放系统的文件系统信息,:存放系统的文件系统信息,passwdpasswd:用于存放用户关键信息。:用于存放用户关键信息。7.3 根文件系统的制作根文件系统的制作7 7)编写配置文件)编写配置文件(1 1)etc/init.d/rcSetc/init.d/rcS需要开启该文件的执行权限。需要开启该文件的执行权限。#!/bin/sh #!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin PATH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=S runlevel=S prevlevel=N prevlevel=N umask 022 umask 022 export PATH runlevel prevlevel export PATH runlevel prevlevel /bin/hostname Micro2440/bin/ho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论