嵌入式Linux开发实践教程(第2版)课件:移植BootLoad、内核、文件系统_第1页
嵌入式Linux开发实践教程(第2版)课件:移植BootLoad、内核、文件系统_第2页
嵌入式Linux开发实践教程(第2版)课件:移植BootLoad、内核、文件系统_第3页
嵌入式Linux开发实践教程(第2版)课件:移植BootLoad、内核、文件系统_第4页
嵌入式Linux开发实践教程(第2版)课件:移植BootLoad、内核、文件系统_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

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

文档简介

3

移植BootLoad、内核、文件系统3认识Bootloader3BootLoaderBoot+LoadBoot,启动(上电)Load,加载(系统)系统加电后运行的第一段软件代码。担负着初始化硬件和引导操作系统的双重责任。

3BootLoader功能初始化硬件设备建立内存空间的映射图调整系统的软硬件环境,以便操作系统内核启动不通用依赖于硬件CPU依赖于主板board不同的CPU有不同的BootLoader

3Linux系统的启动过程BootLoader运行阶段Linux初始化阶段系统的正常运行阶段

3BootLoader支持的体系结构名称功能说明体系结构LILOLINUX的磁盘引导加载程序x86GRUBLILO的GRU版x86Loadlin从Dos引导Linux系统x86U-BOOT通用引导加载程序x86,ARM,PowerPC,MIPS等RedBoot以eCos为基础的引导程序x86,ARM,PowerPC,MIPS,M68KVIVI为S3C24XX处理器引导LinuxARMROLO可替代BIOS,能从ROM引导Linuxx86Etherboot从以太网卡启动Linux系统的固件x86LinuxBIOS以Linux为基础的BIOS替代品x86BLOB来自LART计划的引导程序ARM3BootLoader的安装系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。比如,基于ARM7TDMI的CPU在复位时通常都从地址0x00000000取它的第一条指令。基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备被映射到这个预先安排的地址上。比如:ROM、EEPROM或FLASH等。因此在系统加电后,CPU将首先执行Bootloader程序。

3用来控制BootLoader的设备或机制主机和目标机之间一般通过串口建立连接BootLoader软件在执行时通常会通过串口来进行I/O,比如输出打印信息到串口从串口读取用户控制字符等。最常用的串口通信软件Linux:minicomWindows:附件中的超级终端

3BootLoader的启动过程BootLoader的启动过程可以是单阶段(SingleStage)一些只需完成很简单功能的bootloader可能是单阶段的多阶段(Multi-Stage)通常多阶段的BootLoader能提供更为复杂的功能,以及更好的可移植性从固态存储设备上启动的BootLoader大多都是2阶段的启动过程,也即启动过程可以分为stage1和stage2两部分3BootLoader的操作模式大多数BootLoader包含两种不同的操作模式启动加载(Bootloading)模式下载(Downloading)模式这种区别仅对于开发人员才有意义,从最终用户的角度看,BootLoader的作用就是加载操作系统,并不存在上述两种模式的区别3启动加载模式也称为自主(Autonomous)模式BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式在嵌入式产品发布时,BootLoader必须工作在该模式下3下载模式目标机的BootLoader通过串口或网络等通信手段从主机(Host)下载文件比如内核映像和根文件系统映像HosttargetramtargetFLASH

该模式的使用时机通常在第一次安装内核与根文件系统时被使用也用于此后的系统更新工作于该模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口3BootLoader的操作模式一些功能强大的BootLoader通常同时支持这两种工作模式如Blob和U-Boot允许用户在这两种工作模式之间进行切换比如,Blob在启动时处于正常的启动加载模式,但是它会延时10秒等待终端用户按下任意键而将blob切换到下载模式。如果在10秒内没有用户按键,则blob继续启动Linux内核。3移植U-Boot3U-Boot目录结构board目标板相关文件,主要包含SDRAM、FLASH驱动;common独立于处理器体系结构的通用代码,如内存大小探测与故障检测;cpu与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;driver通用设备驱动,如CFIFLASH驱动(目前对INTELFLASH支持较好)docU-Boot的说明文档;examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;includeU-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;3U-Boot目录结构lib_xxx处理器体系相关的文件,如lib_ppc,lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;net与网络功能相关的文件目录,如bootp,nfs,tftp;

post上电自检文件目录。尚有待于进一步完善;

rtcRTC驱动程序;

tools用于创建U-BootS-RECORD和BIN镜像文件的工具;3移植步骤建立开发板类型,并测试编译在/board子目录中建立自己的开发板mini2440目录修改U-Boot中的文件

3U-Boot常用命令3U-Boot帮助MINI2440#??-aliasfor'help'autoscr-runscriptfrommemorybase-printorsetaddressoffsetbdinfo-printBoardInfostructure3U-Boot环境变量MINI2440#printenvbootargs=root=/dev/mtdblock3rootfstype=jffs2console=ttySAC0,115200bootcmd=bootdelay=3baudrate=115200ethaddr=08:08:11:18:12:27ipaddr=11serverip=netmask=3网络命令MINI2440#pingdm9000i/o:0x20000300,id:0x90000a46DM9000:runningin16bitmodeMAC:08:08:11:18:12:27hostisalive3NANDFlash命令MINI2440#nandinfo

Device0:NAND128MiB3,3V8-bit,sectorsize128KiB

MINI2440#nanddevice0

Device0:NAND128MiB3,3V8-bit...isnowcurrentdevice

MINI2440#nandread0x300080000x60000200000

NANDread:device0offset0x60000,size0x200000

2097152bytesread:OK

3内存/寄存器操作指令MINI2440#baseBaseAddress:0x00000000MINI2440#md0c00000000:feffffff000000007cbd2b787cdc3378........|.+x|.3x00000010:3cfb3b783b0000007c0002e439000000<.;x;...|...9...00000020:7d1043a63d0004007918c3a63d00c000}.C.=...y...=...MINI2440#base40000000BaseAddress:0x40000000MINI2440#md0c40000000:27051956505043426f6f7420312e312e'..VPPCBoot1.1.40000010:3520284d61722032312032303032202d5(Mar212002-40000020:2031393a35353a30342900000000000019:55:04)......3flash存储器操作命令MINI2440#cp300000000000000010000CopytoFlash...doneMINI2440#cp300000000000000010000CopytoFlash...Can'twritetoprotectedFlashsectors3执行控制命令MINI2440#bootm$(kernel_addr)MINI2440#bootm$(kernel_addr)$(ramdisk_addr)3vivi移植3vivivivi是韩国Mizi公司开发的BootLoader,适用于ARM9处理器,主要用于三星S3C2410处理器的引导3Vivi目录结构arch:系统相关目录。Documentation:文档目录。drivers:驱动程序目录。include:头文件目录。init:初始化程序目录。lib:公用库。scripts:控制脚本。util:工具。rules:Makefile的规则3vivi配置编译tarxvzfvivi-src-20090519.tar.gzlsviviarchChangeLogCOPYINGdriversfa.configincludeinitlibMakefilenetRules.makescriptstestutilcd/opt/vivicpfa.config.configmakemenuconfig3param命令vivi>paramhelpUsage:paramhelp--Helpaout'param'commandparamreset--Resetparametertabletodefaulttableparamsave--Saveparametertabletoflashmemeoryparamset<name><value>--Resetvalueofparameterparamsetlinux_cmd_line"..."--setbootparameterparamsetwince_part_name"..."--setthenameofpartitionwichwincewillbestoredinparamshow--Displayparametertable3boot命令

vivi>boothelpUsage:boot<media_type>--bootingkernelvalueofmedia_type(locationofkernelimage)1=RAM2=NORFlashMemory3=SMC(OnS3C2410)boot<media_type><mtd_part>--bootfromspecificmtdpartitionboot<media_type><addr><size>boothelp--helpabout'boot'command3bon命令vivi>bonpartinfoBONinfo.(3partitions)No:offsetsizeflagsbad---------------------------------------------0:0x000000000x00030000000000000192k1:0x000300000x001000000000000001M2:0x001300000x03ec800000000000162M+800k3vivi常用命令3mem命令vivi>meminvalid'mem'command:wrongargumetsUsage:compare<dst><src><length>--comparememcopy<dst><src><length>meminfomemreset--resetmemorycontrolregistermemserach<start_addr><end_addr><value>--serachmemoryaddressthatcontainvalue3load命令vivi>loadhelpUsage:load<flash|ram>[<partname>|<addr><size>]<x|y|z|t>3part命令vivi>partshowmtdpartinfo.(5partitions)nameoffsetsizeflag------------------------------------------------vivi:0x000000000x000200000128keboot:0x000200000x000400000128kparam:0x000400000x00010000064kkernel:0x000500000x0010000001Mroot:0x001500000x03eac000062M+688k3param命令vivi>paramhelpUsage:paramhelp--Helpaout'param'commandparamreset--Resetparametertabletodefaulttableparamsave--Saveparametertabletoflashmemeoryparamset<name><value>--Resetvalueofparameterparamsetlinux_cmd_line"..."--setbootparameterparamsetwince_part_name"..."--setthenameofpartitionwichwincewillbestoredinparamshow--Displayparametertable3boot命令

vivi>boothelpUsage:boot<media_type>--bootingkernelvalueofmedia_type(locationofkernelimage)1=RAM2=NORFlashMemory3=SMC(OnS3C2410)boot<media_type><mtd_part>--bootfromspecificmtdpartitionboot<media_type><addr><size>boothelp--helpabout'boot'command3bon命令vivi>bonpartinfoBONinfo.(3partitions)No:offsetsizeflagsbad---------------------------------------------0:0x000000000x00030000000000000192k1:0x000300000x001000000000000001M2:0x001300000x03ec800000000000162M+800k认识内核内核Linux是一个用C语言写成、符合POSIX标准的类Unix操作系统,是最受欢迎的免费操作系统内核。内核是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。内核是一个操作系统的核心,一个内核并不是一套完整的操作系统。内核的组成进程调度内存管理虚拟文件系统网络接口进程间通信

进程调度控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。进程调度调度策略模块(schedulingpolicymodule)体系结构相关模块(architecture-specificmodule)体系结构无关模块(architecture-independentmodule)

系统调用接口模块(systemcallinterface)内存管理Linux采用了分页的内存管理机制。Linux允许多个进程安全地共享主内存区域、支持虚拟内存Linux内存管理机制可以分为3个层次,从下而上依次为物理内存的管理、页表的管理、虚拟内存的管理。内存管理体系结构相关模块(architecturespecificmodule)体系结构无关模块(architectureindependentmodule)系统调用接口(systemcallinterface)

虚拟文件系统虚拟文件系统隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块虚拟文件系统设备驱动模块(devicedrivermodule)设备独立接口模块(DeviceIndependentInterface)逻辑文件系统(logicalfilesystem)系统独立接口(systemindependentinterface)系统调用模块(systemcallinterface)

网络接口网络接口提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。网络接口网络设备驱动模块(NetworkDeviceDrivers)设备独立接口模块(DeviceIndependentInterface)网络协议模块(NetworkProtocols)协议无关模块(ProtocolIndependentInterface)系统调用接口模块(SystemCallinterface)进程间通讯进程间通讯支持进程间的各种通信机制。进程调度子系统处于中心位置,所有其他的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。系统间关系内核目录结构.cocciconfig59.get_maintainer.ignore31.gitattributes30.gitignore1307.mailmap7899COPYING18693CREDITS98253Documentation8187Kbuild2888Kconfig252MAINTAINERS392043Makefile59059README722arch1065block1943certs202crypto4794drivers4130firmware1704fs4987include873init508ipc506kernel4377lib8401mm4024net2194samples885scripts4769security569sound835tools931usr196virt96内核配置与编译内核编译

内核的编译根据不同的情况会有不同的步骤,但其中最主要分别为3个步骤:内核配置、建立内核,其他的为一些辅助功能,如清除文件等。如果在实际编译时若出现错误,可以考虑采用其他辅助功能。

任务要求StepOne内核配置StepTwo编译内核StepOne内核配置通过makemenuconfigmakemenuconfig编译内核建立压缩的内核映像makebzImageStepTwo内核配置选项任务要求常规设置模块和快设备选项处理器类型及特性网络协议相关选项设备驱动选项文件系统类型选项Linux-2.6在mini2440上的移植任务要求StepOne移植准备StepTwo建立目标平台StepThree内核配置StepFour内核编译

StepOne获取Linux内核源代码把内核源代码复制到/opt/mini2440目录修改内核目录根下的Makefile,指明交叉编译器设置PATH环境变量,使其可以找到交叉编译工具链StepTwo参考SMDK2440加入自已的开发板平台,取名为MINI2440将linux-/arch/arm/mach-s3c2440/目录下的mach-smdk2440.c复制一份命名为mach-mini2440.c修改系统时钟源把mach-mini2440.c中所有的smdk2440字样改为mini2440建立目标平台StepThree选择SystemType选择YAFFS2选择LCD支持触摸屏驱动内核配置StepFour编译内核下载测试内核内核编译认识文件系统文件系统

文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型,一种存储和组织计算机文件和数据的方法,它使得对其访问和查找变得容易。Linux最早的文件系统是Minix专门为Linux设计的文件系统——扩展文件系统第二版(EXT2)

虚拟文件系统Linux支持ext,ext2,xia,minix,umsdos,msdes,fat32,ntfs,proc,stub,ncp,hpfs,affs以及ufs等多种文件系统。Linux的虚拟文件系统(VFS)。文件系统的需求

Linux上有许多可用的文件系统。每个文件系统都有其特定的用途,以便于特定用户解决不同的问题。要求文件系统在频繁的文件操作(例如,新建,删除,截断)下能够保持较高的读写性能,要求低碎片化。Linux下的日志文件系统能保持数据的完整性,但消耗过多系统资源,的弱点使之不能成为嵌入式系统中的主流应用。并且这些都是专门为硬盘这类的存储设备优化,对于flash这类的存储介质并不适用。

文件系统的需求

因为现有的嵌入式文件系统的碎片化的问题,大部分的嵌入式设备只给用户提供了只读文件系统,给用户带来不便。嵌入式文件系统的载体是以Flash为主的存储介质,所以为了延长Flash的使用寿命,应该尽量减少对Flash的写入操作。文件系统采用DirectI/O的话,使I/O效率明显降低,增加了写入次数;但采用延时写的话,虽然能够降低碎片问题,如果加入日志系统的话,有不能保证数据的安全性。这是一个矛盾。

常用的嵌入式文件系统-Ext2fsExt2fs是Linux事实上的标准文件系统,它已经取代了它的前任—扩展文件系统(或Extfs)。Extfs支持的文件大小最大为2GB,支持的最大文件名称大小为255个字符—而且它不支持索引节点(包括数据修改时间标记)。Ext2fs支持达4TB的内存。

Ext2fs文件名称最长可以到1012个字符。

当创建文件系统时,管理员可以选择逻辑块的大小(通常大小可选择1024、2048和4096字节)。

Ext2fs了实现快速符号链接:不需要为此目的而分配数据块,并且将目标名称直接存储在索引节点(inode)表中。这使性能有所提高,特别是在速度上。

嵌入式文件系统-RomFSuClinux系统多采用Romfs文件系统,Romfs是一种相对简单、占用空间较少的文件系统。空间的节约来自于两个方面:首先内核支持Romfs文件系统比支持ext2文件系统需要更少的代码;其次romfs文件系统相对简单,在建立文件系统超级块(Superblock)需要更少的存储空间。Romfs是只读的文件系统,禁止写操作,因此系统同时需要虚拟盘(RAMDISK)支持临时文件和数据文件的存储。

只读文件系统,可以放在ROM空间,也可以在系统的RAM中,嵌入式linux中常用来作根文件系统。嵌入式文件系统-CRAMFSCRAMFS中的数据已被压缩,属于只读性文件系统,不能在闪存中修改。用户想获取数据时,CRAMFS先把数据送到RAM中,用户从RAM中读取。一般CRAMFS的上层为RAMFS文件系统,经修改过的文件都保存在RAM中。RAMFS和CRAMFS结合的缺陷在于,一旦出现掉电等特殊情况,保存在RAMFS中的修改数据将全部丢失。嵌入式文件系统-JFFSJFFS2是比较常用的嵌入式日志文件系统。

JFFS2在扇区级别上执行闪存擦除/写/读操作要比Ext2文件系统好。

JFFS2提供了比Ext2fs更好的崩溃/掉电安全保护。当需要更改少量数据时,Ext2文件系统将整个扇区复制到内存(DRAM)中,在内存中合并新数据,并写回整个扇区。这意味着为了更改单个字,必须对整个扇区(64KB)执行读/擦除/写例程―这样做的效率非常低。要是运气差,当正在DRAM中合并数据时,发生了电源故障或其它事故,那么将丢失整个数据集合,因为在将数据读入DRAM后就擦除了闪存扇区。JFFS2附加文件而是重写整个扇区,并且具有崩溃/掉电安全保护这一功能。嵌入式文件系统-YaffsYaffs(YetAnotherFlashFileSystem)文件系统是专门针对NAND闪存设计的嵌入式文件系统,目前有Yaffs和Yaffs两个版本,两个版本的主要区别之一在于Yaffs2能够更好地支持大容量的NANDFlash芯片。专门为Nandflash设计的日志文件系统,提供磨损平衡和调电恢复的鲁棒性。Yaffs将文件组织成固定大小(512B)的数据段,在进行文件修改时,总是先写入新的数据块,然后将旧的的数据块从文件中删除。根文件系统根文件系统根文件系统就是一种目录结构,根文件系统包括Linux启动时所必需的目录和关键性的文件。例如Linux启动时都需要有init日录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件系统等,根文件系统中还包括了许多的应用程序bin目录等。

基本根文件系统目录构成解析目录名称含义/bin存放二进制程序,如:ls,cp/boot存放系统启动的一些程序/dev存放设备文件/etc存放系统配置文件,如:group,profile/home用户根目录/lib存放库文件/media媒介的挂载点,如:闪存/mnt该目录用来为其他文件系统提供安装点/opt不随发行版本一起交付的程序/procproc文件系统/root超级用户根目录/sbin存放超级用户运行的二进制文件/src存放一些服务的目录/syssys文件系统的目录/var存放经常变化的文件,如临时文件等根文件系统引导过程BusyBox的init进程会依次进行以下工作为init设置信号处理进程。初始化控制台。剖析inittab文件、/etc/inittab文件。执行系统初始化的命令行。BusyBox在缺省情况下会使用/etc/init.d/rcS命令行。执行所有会导致init暂停的inittab命令。执行所有仅执行一次的inittab命令。一旦完成以上工作,init进程便会循环执行以下工作:执行所有终止时必须重新启动的inittab命令。执行所有终止时必须重新启动但启动前必须先询问过用户的inittab命令

根文件系统的基本结构/bin、/dev、/etc、/lib、/proc、/sbin和/usr,都是不可或缺的。为多用户提供可扩展环境的所有目录(例如/home、/mnt、/opt和/root)可以省略。调整根文件系统的时候,我们甚至可以进一步移除/tmp和/var,不过这么做可能会危害到某些软件的运行。因此不建议采用这种过于简化的做法。

二进制目录Bin在根文件系统上,存放二进制文件的目录主要有四个/bin、/sbin、/usr/bin和/usr/sbin。二进制文件要放在其中哪个目录,这与它在系统中所扮演的角色有很大的关系。如果这是用户和系统管理员必备的二进制文件,就会放在/bin。如果这是系统管理员必备、但是一般用户根本不会用到的二进制工件,就会放在/sbin。相对而言,如果不是用户必备的二进制文件,多半会放在/usr/bin;如果不是系统管理必备的工具,多半会放在/usr/sbin。链接库目录Lib至于链接库的摆放位置,也是同样的道理。系统引导以及执行最基本命令需要的链接库会摆在/lib。所有其他的链接库则会摆在/usr/lib。通常,套件安装时,会在/usr/lib中产生子目录,以便摆放它自己的链接库。以Perl5.x为例,它会产生/usr/lib/perl5目录,里自摆放的都是与Perl有关的链接库和模块。实际的共享链接库这类文件的文件名格式为libLIBRARY_NAME-VERSION.so其中。LBRARY_NAME是链接库的名称,VERSION是你使用的链接库的版本编号。例如,glibc2.2.3的数学链接库的名称为libm-2.2.3.so。主修订版本的符号链接主修订版本的编号方式与实际的版本号不同。以glibc2.2.3实际的共享C链接库libc-2.2.3.so为例,它的主修订版本编号为6。相对而言,libdl-2.2.3.so的主修订版本编号为2。主修订版本的符号链接的名称格式为libLIBRARY_NAME.so.MAJOR_REVISION_VERSION,其中MAJOR_REVISION_VERSION是链接库的主修订版本编号。以实际的C链接库为例,其符号链接的名称为libc.so.6。libdl则是libdl.so.2。链接库目录Lib与版本无关的符号链接指向主修订版本的符号链接 这些符号链接的主要功能,是为需要链接特定链接库的所有程序提供一个通用的条目,与主修订版本的编号或glibc涉及的版本无关。这些符号链接典型的格式为libLIBRARY_NAME.so.例如,libm.so指向libm.so.6,libm.so.6指向实际的共享链接库libm-2.2.3.so。静态链接库文件 选择以静态方式链接链接库的应用程序便会使用这些静态库文件。这些包的文件名格式为IibLIBRARY_NAME.a,例如libdl的静态包文件就是libdl.a。链接库目录Lib设备文件目录/dev选择用devfs(设备文件系统)来取代固定的静态设备文件,则可免去寻找设备信息的麻烦。内核源码树的Documentation/devices.txt文档就是静态设备主要和次要编号的正式信包来源。基本的/dev条目设备文件目录/dev文件名说明类型主编号次编号仅限位mem物理内存存取字符11600nullnull(黑洞)设备(译注1)字符集13666zero以nullbyte(零值字节)为数据来源字符15666random真随机数产生器字符18644try0现行的虚拟控制台字符40600tty1第一个虚拟控制台字符41600tlyS0第一个UART串行端口字符464600tty现行的TTY设备字符50666console系统控制台字符51600制作根文件系统BusyBoxBusyBox是很多标准Linux工具的一个单个可执行实现。BusyBox包含了一些简单的工具,例如cat和echo,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet(不过它的选项比传统的版本要少);有些人将BusyBox称为Linux工具里的瑞士军刀。StepOne建立根文件系统结构StepTwo准备链接库StepThree使用Busybox制作系统应用程序StepFour添加设备文件StepFive添加内核模块

任务要求StepOne创建一个建立根文件系统目录的脚本文件create_rootfs_bash使用命令chmod+xcreate_rootfs_bash改变文件的可执行权限运行脚本,就完成了根文件系统目录的创建chmod+xcreate_rootfs_bash./create_rootfs_bashStepOne#!/bin/shecho"------Createrootfsdirectonsstart...--------"mkdirrootfscdrootfsecho"--------Createroot,dev....----------"mkdirrootdevetcboottmpvarsysproclibmnthomemkdiretc/init.detc/rc.detc/sysconfigmkdirusr/sbinusr/binusr/libusr/modulesecho"makenodeindev/consoledev/null"mknod-m600dev/consolec51mknod-m600dev/nullc13mkdirmnt/etcmnt/jffs2mnt/yaffsmnt/datamnt/tempmkdirvar/libvar/lockvar/runvar/tmpchmod1777tmpchmod1777var/tmpecho"-------makedirectiondone---------"StepTwo先解压友善之臂的根文件包,拷贝lib的内容到新建的根文件目录lib内tar

–zxvf

root_qtopia.tgz

–C

/optcp

–rfd

/opt/root_qtopia/lib/*

/opt/rootfs/lib/*StepThree解压busybox修改Makefile文件配置busybox编译并安装BusyboxmakeTARGET_ARCH=armPREFIX=/opt/rootfsallinstallStepFour使用mknod指令来添加设备mknod/dev/fb0c290/*建立显示器设备文件*/mknod/dev/tsc2540/*建立触摸屏设备文件*/StepFour使用mdev在系统启动时创建所有的设备节点echo/sbin/mdev>/proc/sys/kernel/hotplugmdev-s需要内核中支持hotp

温馨提示

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

评论

0/150

提交评论