- 嵌入式Linux中都需要构建根文件系统,构建根文件系统的规则在FHS(FilesystemHierarchyStandard)文档中,下面是根文件系统顶层目录。
目录内容
bin存放所有用户都可以使用的、基本的命令。
sbin存放的是基本的系统命令,它们用于启动系统、修复系统等。
usr里面存放的是共享、只读的程序和数据。
proc这是个空目录,常作为proc文件系统的挂载点。
dev该目录存放设备文件和其它特殊文件。
etc存放系统配置文件,包括启动文件。
lib存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序。
boot引导加载程序使用的静态文件
home用户主目录,包括供服务账号锁使用的主目录,如FTP
mnt用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。
opt给主机额外安装软件所摆放的目录。
rootroot用户的主目录
tmp存放临时文件,通常是空目录。
var存放可变的数据。
1、建立根文件系统目录
- 进入到/opt/studyarm目录,新建建立根文件系统目录的脚本文件create_rootfs_bash,使用命令chmod+xcreate_rootfs_bash改变文件的可执行权限,./create_rootfs_bash运行脚本,就完成了根文件系统目录的创建。
#!/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---------"
- 改变了tmp目录的使用权,让它开启sticky位,为tmp目录的使用权开启此位,可确保tmp目录底下建立的文件,只有建立它的用户有权删除。尽管嵌入式系统多半是单用户,不过有些嵌入式应用不一定用root的权限来执行,因此需要遵照根文件系统权限位的基本规定来设计。
2、建立动态链接库
- 动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝lib的内容到新建的根文件目录lib内。
cd/mnt/hgfs/sharetar–zxvfroot_qtopia.tgz–C/opt/studyarmcp–rfd/opt/studyarm/root_qtopia/lib/*/opt/studyarm/rootfs/lib/*
3、交叉编译Bosybox
- Bosybox是一个遵循GPLv2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox可以自动生成根文件系统所需的bin、sbin、usr目录和linuxrc文件。
1、解压busybox
cd/mnt/hgfs/sharetar–zxvfbusybox-1.13.3.tar.tgz–C/opt/studyarm
cd/opt/studyarm/busybox-1.13.3
CROSS_COMPILE?=arm-linux-//第164行ARCH?=arm//第189行
更多linux内核视频教程文档资料免费领取后台私信【内核】自行获取.
Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂
4、配置busybox
(1)、BusyboxSettings--->GeneralConfiguration--->
[*]Showverboseappletusagemessages[*]Storeappletusagemessagesincompressedform[*]Support–install[-s]toinstallappletlinksatruntime[*]Enablelocalesupport(systemneedslocaleforthistowork)[*]Supportfor–long-options[*]Usethedevptsfilesystemforunix98PTYs[*]Supportwritingpidfiles[*]RuntimeSUID/SGIDconfigurationvia/etc/busybox.config[*]Suppresswarningmessageif/etc/busybox.confisnotreadableBuildOptions--->[*]BuildBusyBoxasastaticbinary(nosharedlibs)[*]BuildwithLargeFileSupport(foraccessingfiles>2GB)InstallationOptions->[]Don’tuse/usrAppletslinks(assoft-links)--->(./_install)BusyBoxinstallationprefixBusyboxLibraryTuning--->(6)Minimumpasswordlegth(2)MD5:TradeBytesforSpeed[*]Fsater/procscanningcode(+100bytes)[*]Commandlineediting(1024)Maximumlengthofinput[*]vi-stylelineeditingcommands(15)Historysize[*]Historysaving[*]Tabcompletion[*]Fancyshellprompts(4)Copybuffersize,inkilobytes[*]Useioctlnamesratherthanhexvaluesinerrormessages[*]SupportinfinibandHW
(2)、LinuxModuleUtilities--->(/lib/modules)Defaultdirectorycontainingmodules(modules.dep)Defaultnameofmodules.dep
[*]insmod[*]rmmod[*]lsmod[*]modprobe-----optionscommontomultiplemodutils[]supportversion2.2/2.4Linuxkernels[*]Supporttaintedmodulecheckingwithnewkernels[*]Supportformodule.aliasesfile[*]supportformodules.symbolsfile
(3)、在busybox中配置对dev下设备类型的支持
- dev的创建有三种方法:
- 手动创建:在制作根文件系统的时候,就在dev目录下创建好要使用的设备文件,系统挂接根文件系统后,就可以使用dev目录下的设备文件了。
- 使用devfs文件系统:这种方法已经过时,具有不确定的设备映射、没有足够的主/次设备号、devfs消耗大量的内存。
- udev:它是个用户程序,能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建、删除等。它的操作相对复杂,但灵活性很高
- mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用埸合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox为基础构建嵌入式linux的根文件系统时,使用它是最优的选择。下面的选项将增加对mdev的支持。
LinuxSystemUtilities--->[*]Support/etc/mdev.conf[*]Supportcommandexecutionatdeviceaddition/removal
5、编译busybox
编译busybox到指定目录:cd/opt/studyarm/busybox-1.13.3makeCONFIG_PREFIX=/opt/studyarm/rootfsinstall在rootfs目录下会生成目录bin、sbin、usr和文件linuxrc的内容。
- etc/mdev.conf文件,内容为空。
- 拷贝主机etc目录下的passwd、group、shadow文件到rootfs/etc目录下。
- etc/sysconfig目录下新建文件HOSTNAME,内容为”MrFeng”。
- etc/inittab文件:
#etc/inittab::sysinit:/etc/init.d/rcS::askfirst:-/bin/sh::ctrl altdel:/sbin/reboot::shutdown:/bin/umount-a–r
6、etc/init.d/rcS文件:
#!/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/binrunlevel=Sprevlevel=Numask022exportPATHrunlevelprevlevelecho"----------muntall----------------"mount-aecho/sbin/mdev>/proc/sys/kernel/hotplugmdev-secho"***********************************************"echo"****************StudyingARM*********************"echo"Kernelversion:linux-2.6.29.1"echo"Student:Fengdongrui"echo"Date:2009.07.15"echo"***********************************************"/bin/hostname-F/etc/sysconfig/HOSTNAME
cd/mnt/hgfs/sharetar–zxvfroot_qtopia.tgz–C/opt/studyarmcp–rfd/opt/studyarm/root_qtopia/lib/*/opt/studyarm/rootfs/lib/*0
7、etc/fstab文件:
cd/mnt/hgfs/sharetar–zxvfroot_qtopia.tgz–C/opt/studyarmcp–rfd/opt/studyarm/root_qtopia/lib/*/opt/studyarm/rootfs/lib/*1
8、etc/profile文件:
cd/mnt/hgfs/sharetar–zxvfroot_qtopia.tgz–C/opt/studyarmcp–rfd/opt/studyarm/root_qtopia/lib/*/opt/studyarm/rootfs/lib/*2
- 制作根文件系统映像文件
- 使用以下命令安装好yaffs文件系统制作工具:
cd/mnt/hgfs/sharetar–zxvfroot_qtopia.tgz–C/opt/studyarmcp–rfd/opt/studyarm/root_qtopia/lib/*/opt/studyarm/rootfs/lib/*3
- 在/opt/studyarm目录下,使用命令mkyaffs2imagerootfsrootfs.img生成根文件系统映像文件。
二、启动系统
- 将前面两章生成的内核映像文件和根文件系统映像文件下载到mini2440开发板,查看启动信息。我成功移植启动信息如下:
cd/mnt/hgfs/sharetar–zxvfroot_qtopia.tgz–C/opt/studyarmcp–rfd/opt/studyarm/root_qtopia/lib/*/opt/studyarm/rootfs/lib/*4
- 基于S3C2440的Linux内核移植和yaffs2文件系统制作.pdfourdev_464685.rar(文件大小:64K)(原文件名:基于S3C2440的Linux内核移植和yaffs2文件系统制作.rar)