根文件系统制作实验
- 格式:pdf
- 大小:146.51 KB
- 文档页数:6
实验三内核裁减与根文件系统建立姓名:学号:时间:地点:实验目的:熟悉内核和根文件系统的烧写,裁剪的基本操作, 熟悉根文件系统的建立实验设备:PC机,虚拟机Linux系统, 开发板实验内容:1.用超级终端烧写下载内核和文件系统到开发板.2.内核的裁剪过程的基本命令3.文件系统建立busybox的配置, 建立目录,复制文件,建立文件镜像.操作步骤:实验3-1 内核和根文件系统烧写到flash中.在widows下的F盘建立一个目录share,将虚拟机上的/arm2410cl-24/img下的内容复制到F:/share下。
操作步骤:1)在windows 下,在F盘下建立share目录2)在虚拟机(PC-Linux)VM setting->option 可以将F:/share 设置为共享目录。
3)将/arm2410cl24/img/ 复制到4)共享目录中/mnt/hgfs/share5)启动超级终端6)启动开发板,按任意键进入vivi7)察看vivi的命令[vivi] help8)输入命令bon part info ,查看分区(也可以了解其他命令的含义和使用方法)9)烧写内核内核(zImage)[vivi] load flash kernel x当出现:Ready for downloading using xmodem …Waiting…选择超级终端任务栏上“传送” ”发送文件”命令,然后选择映像文件zImage, 协议选择Xmodem,单击”发送“按钮,zImage烧写开始。
10)烧写根文件系统(root.cramfs)vivi> load flash_root x当出现:Ready for downloading using xmodem …Waiting…选择超级终端任务栏上“传送” ”发送文件”命令,然后选择映像文件root.cramfs, 协议选择Xmodem,单击”发送“按钮,root.cramfs烧写开始。
根文件系统实验一、实验目标用busybox定制一个很小的文件系统,并且运行用户编译的hello(动态链接)。
二、软件包busybox:/downloads/busybox-1.10.3.tar.bz2bash:ftp:///gnu/bash/bash-3.2.tar.gz三、实验步骤3.1、建立工作目录设定工作目录为/root/build_rootfs/,该目录主要用来编译busybox,bash等制造根文件系统的软件,下载busybox,bash到该目录;mkdir/root/build_rootfs3.2、建立根目录该目录就是我们要移植到目标板上的目录,对于嵌入式的文件系统,根目录下必要的目录包括bin,dev,etc,usr,lib,sbin,proc,sys,tmp;这里设定根目录是/root/rootfs;busybox、bash编译之后,安装到该目录下;mkdir/root/rootfsmkdir/root/rootfs/{bin,dev,etc,usr,lib,sbin,proc,sys,tmp}mkdir/root/rootfs/usr/{bin,sbin,lib}创建节点以root用户执行,创建节点mknod dev/console c51mknod dev/null c133.3、拷贝动态链接库交叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目录下;我们在移植应用程序到我们的目标板的时候,需要把交叉编译的链接库也一起移植到目标板上,这里我们用到的交叉工具链的路径是/usr/local/arm/3.4.4/,所以链接库的目录是/usr/local/arm/3.4.4/sysroot/lib。
#进入链接库目录cd/usr/local/arm/3.4.4/sysroot/lib#编写一个shell文件,用于copy实际的共享链接库;主修订版本的符合链接;动态连接器及其符号链接到目标板根目录下的lib(/root/rootfs/lib)。
实训项目四-嵌入四Linux系统根文件系统制作一. 项目实施目的了解 UP-CUP2440 型实验平台Linux 系统下根文件系统结构掌握根文件系统的搭建过程掌握busybox、mkcramfs等工具的使用方法二. 项目主要任务使用busybox生成文件系统中的命令部分,使用mkcramfs工具制作CRAMFS 格式的根文件系统。
分析根文件系统etc目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程三. 基本概念1.文件系统基本概念Linux的一个最重要特点就是它支持许多不同的文件系统。
这使Linux非常灵活,能够与许多其他的操作系统共存。
Linux支持的常见的文件系统有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
随着时间的推移, Linux支持的文件系统数还会增加。
Linux是通过把系统支持的各种文件系统链接到一个单独的树形层次结构中,来实现对多文件系统的支持的。
该树形层次结构把文件系统表示成一个整个的独立实体。
无论什么类型的文件系统,都被装配到某个目录上,由被装配的文件系统的文件覆盖该目录原有的内容。
该个目录被称为装配目录或装配点。
在文件系统卸载时,装配目录中原有的文件才会显露出来。
在Linux 文件系统中,文件用i节点来表示、目录只是包含有一组目录条目列表的简单文件,而设备可以通过特殊文件上的I/O 请求被访问。
2.常见的嵌入式文件系统嵌入式Linux系统一般没有大容量的磁盘,多使用flash存储器,所以多采用基于Flash(NOR和NAND)的文件系统或者RAM内存的文件系统。
(1)Flash根据结构不同分为 NOR Flash和NAND Flash。
基于flash的文件系统主要有: jffs2:RedHat基于jffs开发的文件系统。
特点:可读写、支持数据压缩、支持哈希表的日志型文件系统,提供了崩溃/掉电安全保护,提供“写平衡”支持等。
实验三内核裁减与根文件系统建立实验目的:熟悉内核的裁剪的基本操作, 熟悉根文件系统的建立实验设备:PC机,虚拟机Linux系统, 开发板实验内容:1.内核的裁剪过程的基本名令2.文件系统建立busybox的配置, 建立目录,复制文件,建立文件镜像.3.在虚拟机pc-linux启动tftp服务,下载内核和文件系统到开发板.操作步骤:实验3-1 内核的裁剪过程(制作开发板的linux操作系统)(1)Linux内核的获取将linux内核备份,然后裁减: # cp –arf /arm2410cl/kernel /home进入到内核目录:#cd /home /kernel/linux-2.4.18-2410cl#make clean(2) 配置内核# make menuconfig配置usb无线网卡驱动Networking –wireless-- Generic IEEE 802.11 Networking StackDevice driver--Network device support--Wireless LAN--Wireless LAN (IEEE 802.11)配置(查看)字符设备Device driver—input deviceDevice driver –character device配置(查看)文件系统File systems—(3) 建立依赖关系# make dep(4)修改Makefile文件#vi MakefileARCH :=armCROSS_COMPILE = /opt/host/armv4l/bin/armv4l-unknown-linux-(5)编译内核# make zImage (需要一些时间)(6)看编译好的linux内核zImage:# cd arch/arm/boot(7)将编译好的内核zImage 复制到共享目录/share下:cp zImage /mnt/hgfs/share设置共享目录实验3-2.建立文件系统(1)从网上下载busybox ,解压缩busybox,然后备份:#cd /home#cp –arf /arm2410cl/rootfs -c./(2)进入到busybox目录:#cd /home/rootfs/busybox-1.00-pre10# make clean# rm –rf _install(3)配置busybox的命令#make menuconfig(4)建立依赖关系# make dep(5)编译生成busybox #make(6)安装busybox,生成目录_install: # make install(7)察看_insatall目录下的内容:# cd _install#ls(8) 进入到/home/rootfs/target :#cd /home /rootfs/target(9) 查看target下的文件目录:ls(10)将bin sbin usr 三个目录删除:# rm –rf bin/ sbin/ usr/(11) 将_install 目录下的内容复制到target下:# cp –arf /home/rootfs/busybox-1.00-pre10/_install ./(12) 建立文件系统:# cd /home/rootfs# mkfs.cramfs target root.cramfs(13)将编译好的内核root.cramfs 复制到共享目录/share下:# cp root.cramfs /mnt/hgfs/share实验3-3.将新建的内核和文件系统下载到开发板(1)打开超级终端(附件-通信-超级终端。
嵌入式系统根文件系统制作主机环境一、主机环境Linux vm-dev 2.6.9-42.EL RedHatEL4, VMWare6.0.3;gcc version 3.4.6 20060404 (Red Hat 3.4.6-3) Thread model: posixgcc version 3.4.6 所需源文件: busybox-1.12.2.tar.bz2;创建文件系统二、用Busybox创建文件系统前提是:通过samba服务器把源码包 busybox-1.12.2.tar.bz2拷贝到了虚拟机的/home/uptech目录1、解压busybox-1.12.2.tar.bz2,路径为[root@vm-dev ~]cd /home[root@vm-dev home]mkdir hq[root@vm-dev home]# cd hq[root@vm-dev hq]#mkdir rootfs[root@vm-dev hq]# cd rootfs[root@vm-dev rootfs]#cp /home/uptech/busybox-1.12.0.tar.bz2 . -arf[root@vm-dev rootfs]# lsbusybox-1.12.0.tar.bz2[root@vm-dev rootfs]# tar -vxjf busybox-1.12.2.tar.bz2[root@vm-dev rootfs]# cd busybox-1.12.2[root@vm-dev busybox-1.12.2]# pwd/home/hq/rootfs/busybox-1.12.2[root@vm-dev busybox-1.12.2]# vi Makefile[root@vm-dev busybox-1.12.2]#修改Makefile中的ARCH和CROSS_COMPILE与本机的路径一致:CROSS_COMPILE ?= arm-linux-...ARCH ?= arm2、编译busybox。
制作ramdisk类型文件系统ramdisk也就是内存盘的意思。
所谓的RAM驱动器,实际上是把系统内存划出頒分当做硬盘使用。
对于操作系统来讲内存的存取速度远远大于机械磁盘,所以RAM驱动器肯定要比机械的硬盘快得多。
你可以把整个应用程序都安装在ramdisk的驱动器中,然后用内存的速度运行它。
使用RAM驱动器技术对于延长笔记本电脑电池使用时间也是十分有利的,因为这样做可以减少访问〃耗电大户”的次飢Ram:内存,Disk :磁盘,在Linux中可以将一部份内存当做分区来使用,称之为Ramdisk。
对于一些时常被访问、并且不会被更改的文件,可以将它们通过Ramdisk 放在内存中,能够明显地提高系统性能。
Ramdisk工作于虚拟文件系统(VFS )层,不能格式化,但可以创建多个Ramdisk。
虽然现在硬盘价钱越来越便宜,但对于一些我们想让其访问速度很高的情况下,Ramdisk还是很好用的。
如果对计算速度要求很高,可以通过增加内存来实现,使用ramdisk技术。
一个A Ramdisk 就是把内存假设为一个硬盘驱动器,并且在它的上面存储文件,假设有几个文件要频繁的使用,如果将它们加到内存之中,程序运行速度会大幅度提高,因为内存的读写速度远高于硬盘。
划出部份内存提高整体性能,不亚于更换新的CPU。
像Web服务器这样的计算机,需要大量读取和交换特定的文件。
因此,在Web服务器上建立Ramdisk会大大提高网络读取速度。
从制作Ramdisk根文件系统的方法上来说,是很简单的。
1 .配置Linux内核支拮Ramdisk类型的文件系统。
2.制作好根文件系统,使用之前实验案例制作好的根文件系统。
3.将制作好的根文件系统制作成Ramdisk类型文件系统。
4.下载到TPAD上使用测试。
实现1 .对内核进行配置,使得内核能够支持Ramdisk类型的文件系统,如图・9 ,图・10 ,图•11。
$ cd /home/tarena/workdir/tools/linux-2.6.35.7$ make menuconfig$ make zlmage$ cp arch/arm/boot/zlmage /tftpboot图・9S-10config • Linux Kernel V2.6.35.7 ConfigurationArrow keys navigate the nenu. <Enter> selects submenus Highlighted letters are hotkeys. Pressing <Y> includes9 <N> excludes, <M> nodulartzes features. Press <Esc><Esc> to exit, <?> for Help.</> for Search. Legend: [w] built-in [ ] excluded <M> module < ><w> M nory Technology Device <HTD) support <xarelLeL uoiLt s|[w] BLock devicesI■j HI>c uevxce><> ATA/ATAPI/MFM/RLL support (DEPRECATED)CSI device support -•<> serial ATA and Parallel ,] M IttpXe devices driver ♦] N twork device support]ISDN support > ATA drivers —> support (RAID and LVM)Select Exit > < Help >图・11config - Ltn ConArrow keys navigate the nenu. <Enter> selects subnenus --->• Highlighted letters are hotkeys.Pressing <Y> includes f <N> excludes, <M> nodulartzes features. Press <Esc><Esc> to exit. <?> for Help. <f> for Search. Legend: [*] built-in [ ] excluded <M> module < >•・・ DRBD disabled because PROOFS f INET or CONNECTOR not se < > N twork block device support<*^^^A^DiocKaevlcesup^rt (16) default number of RAM disks2.制作Ramdisk文件系统的过程,如图・12 ,图・13 ,图・14 ,图・15 ,图・16所$ cd /home/tarena/workdir/tools/busybox-1.19.4/_lnstall/dev$ sudo mknod console c 5 1$ sudo mknod null c 1 3$ cd /home/tarena/workdir/tools/busybox-1.19.4$ dd if=/dev/zero of=initrd.img bs=lk count=8192$ sudo mkfs.ext2 -F initrd.img$ sudo mkdir /mnt/initrd$ sudo mount -t ext2 -o loop initrd.img /mnt/initrd$ sudo cp Jnstall/* /mnt/initrd -a$ sudo amount /mnt/initrd$ gzip -best -c initrd.img > ramdisk.img$ sudo chmod 777 ramdisk.img$ cp ramdisk.img /tftpboot图・12consoke^tQQls libbb ______ util^ltnux记県丫8192♦。
实验五使用BusyBox构建根文件系统Busybox 是Debian GNU/Linux 的大名鼎鼎的Bruce Perens 首先开发,使用在Debian 的安装程序中。
后来又有许多Debian developers 贡献力量,这其中尤推busybox 目前的维护者Erik Andersen,他患有癌症,可是却是一名优秀的自由软件开发者。
Busybox 编译出一个单个的独立执行程序,就叫做busybox。
但是它可以根据配置,执行ash shell 的功能,以及几十个各种小应用程序的功能。
这其中包括有一个迷你的vi 编辑器,系统不可或缺的/sbin/init 程序,以及其他诸如sed, ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat ... 等等这些都是一个正常的系统上必不可少的,但是如果我们把这些程序的原件拿过来的话,它们的体积加在一起,让人吃不消。
可是busybox 有全部的这么多功能,大小也不过100K 左右。
而且,用户还可以根据自己的需要,决定到底要在busybox 中编译进哪几个应用程序的功能。
这样的话,busybox 的体积就可以进一步缩小了。
BusyBox支持多种体系结构,它可以静态或动态链接glic或者uclibc库,以满足不同的需要,也可以修改BusyBox默认的编译配置以移除不想使用的命令的支持。
5.1编译BusyBox从网上下载BusyBox软件包,这里下载的是busybox-1.00-pre5.tar.gz.bz2。
首先把它放在/root/tars目录下并进行解压缩。
发busybox时为了调试而使用的。
图5-1是BusyBox的配置界面。
图5-1 配置BusyBox的主界面在Build Option菜单下,可以选择静态库编译方式,设置如下:[*] Build BusyBox as a static binary (no shared libs)[*] Do you want to build BusyBox with a Cross Compiler?(/usr/local/hybus-arm-linux-R1.1/bin/arm-linux-)图5-2 配置BusyBox交叉编译选项图5-3 文件系统安装路径图5-4 选择编译命令保存后,编译BusyBox。
实验九根文件系统构建实验一、实验目的1)了解嵌入式操作系统中文件系统的类型和作用。
2)了解yaffs2文件系统的优点及其在嵌入式系统中的作用。
3)掌握利用BusyBox 软件制作嵌入式文件系统的方法。
4)掌握嵌入式Linux 文件系统的的挂载过程。
二、实验工具1)操作系统:ubantu102)交叉编译工具:3)文件系统制作工具:busybox-1.17.2-20101120.tgz4)文件系统镜像制作工具:mkyaffs2image-128M三、实验要求利用BusyBox 构建简单的根文件系统,并将其制作成为yaffs 格式的文件系统镜像,并下载到A8实验板,要求如下:1)kernel能够成功挂载根文件系统,2)通过串口终端查看所建立的根目录,3)在自己建立的根文件系统中运行简单的“hello world”程序。
四、实验讲解文件系统是操作系统中组织、存储和命名文件的一种基本结构,是操作系统中统一管理信息资源的一种方式,可以管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,方便用户使用。
它的存储媒质包括磁盘、光盘、FLASH等,FAT(文件分配表)是最常用的一种文件系统格式,主要优点是可以允许多种操作系统访问。
Linux的一个最重要特点就是它能同时支持多种文件系统。
在加载根文件系统之后可以自动或手动挂载其他的文件系统。
因此,一个系统中可以同时存在多个不同的文件系统。
这使Linux非常灵活,能够与许多其他的操作系统共存。
Linux支持的常见的文件系统有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
随着时间的推移,Linux支持的文件系统数还会增加。
每台机器都有根文件系统,它包含系统引导和使其他文件系统得以mount(挂载)所必要的文件,根文件系统应该有单用户状态所必须的足够的内容。
通过busybox制作根⽂件系统详细过程我在之前的中也有实现过根⽂件系统的制作,那只是在ubuntu官⽹已经做好的根⽂件基础上安装⼀些⾃⼰所需的软解⽽已。
⽽使⽤busybox 制作根⽂件系统可以⾃定义选项,加深⾃⼰对linux的系统理解,⽅便后期学习根⽂件系统的裁剪。
⼀、下载busybox制作制作⼯具⼆、编译链配置将下载的⽂件放⼊linux开发环境中进⾏解压,⽬录如下图所⽰为了以后使⽤⽅便,修改交叉⼯具链,进⼊“Makefile”⽂件sudo vim Makefile进⼊⽂件后修改“ARCH”和“CROSS_COMPILE”变量,如下图所⽰:注意:交叉编译链⼀定要是⾃⼰安装的全路径三、busybox中⽂⽀持1.修改“printable_string.c”⽂件sudo vim libbb/printable_string.c进⼊⽂件后修改内容如下图所⽰:2.修改“unicode.c”⽂件sudo vim libbb/unicode.c进⼊⽂件后修改内容如下图所⽰:四、配置busybox1.设置配置项defconfig:缺项配置,也就是默认配置选项。
allyesconfig:全选配置,也就是说选中busybox的所有功能。
allnoconfig:最⼩配置。
可以根据⾃⼰需要选择配置命令,这⾥我选⽤的是最下配置命令如下sudo make defconfig配置完成后可通过查看是否有.config⽂件,如果存在则说明配置成功,如下图所⽰:2.进⼊图形配置sudo make menuconfig进⼊图形配置界⾯后,配置库⽂件来源,配置路径如下所⽰-> Settings-> Build static binary使⽤静态库时,编译出来的⽂件很⼤,然后编译出来的DNS会出问题,所以我这⾥选⽤的是动态库,配置如下图所⽰:勾选“vi-style line editing commands”,配置路径如下-> Settings-> vi-style line editing commands取消“Simplified modutils”的勾选,配置路径如下-> Linux Module Utilities-> Simplified modutils勾选“mdev”,配置路径如下-> Linux System Utilities-> mdev如下图所⽰:勾选“Support Unicode”及其⼦选项“Check $LC_ALL, $LC_CTYPE and $LANG environment variables”-> Settings-> Support Unicode-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables到此busybox的配置基本完成,如果需要其他配置项的内容可根据⾃⼰的需求选择。
Linux根文件系统的详细制作过程利用busybox制作跟文件系统准备一个busybox包我这里用的是busybox-1.21.1.tar.bz2这个包可以在官方网站上下载,这里我就用百度网盘链接https:///s/10Fnc-UbcNWPLaiAnaXKTug 解压安装包 tar xf busybox-1.21.1.tar.bz2 .根文件系统的制作1、什么是文件系统文件的索引信息文件的具体数据操作索引信息的具体代码kernel/fs/ 操作索引信息的代码ext4fatjffs2: norflashyaffs2: nandflashnfs...为什么会有很多中类型的文件?1)对应硬件特性不同2)软件的处理策略不同断电保护的策略...linux启动时加载使用的第一个文件系统称作根文件系统根文件系统中存储的文件是有特定需求的2、准备根文件系统所需要具备的目录(文件)2.1 生成arm处理器能够使用命令工具使用开源软件busybox去生成需要的命令cd /home/tarena/portingcp /home/tarena/workdir/rootfs/busybox-1.23.2.tar.bz2 ./cd busybox-1.23.2/make menuconfigBusybox Settings --->Build Options --->[*] Build shared libbusybox //共享库Installation Options ("make install" behavior) --->What kind of applet links to install (as soft-links) ---> //软链接(./_install) BusyBox installation prefix (NEW) //安装路径vi Makefile164 CROSS_COMPILE ?= arm-cortex_a9-linux-gnueabi-190 ARCH ?= armmakemake installcd _install2.2 准备busybox可执行程序需要的库文件mkdir libcp /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/arm-cortex_a9-linux-gnueabi/sysroot/lib/libm.so.6 lib/ -a cp /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/arm-cortex_a9-linux-gnueabi/sysroot/lib/libm-2.18-2013.10.solib/ -acp /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/arm-cortex_a9-linux-gnueabi/sysroot/lib/libc.so.6 lib/ -a cp /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/arm-cortex_a9-linux-gnueabi/sysroot/lib/libc-2.18-2013.10.so lib/ -acp /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/arm-cortex_a9-linux-gnueabi/sysroot/lib/ld*.so* lib/ -a2.3 配置文件的准备mkdir etc2.3.1 vi etc/inittab::sysinit:/etc/init.d/rcS::respawn:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -rmkdir etc/init.d2.3.2 vi etc/init.d/rcS //系统开机自启动的程序可以放入该文件#!/bin/sh#自动挂载/etc/fstab文件中指定的分区mount -a#热插拔事件发生时执行的命令echo /sbin/mdev >/proc/sys/kernel/hotplugmdev -s手工执行:chmod +x etc/init.d/rcS2.3.3 vi etc/fstab格式要求:设备挂载点文件系统类型挂载参数是否备份格式检查device mount_point type options dump fsckproc /proc proc defaults 0 0tmpfs /tmp tmpfs defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /dev tmpfs defaults 0 02.4 创建必要的目录mkdir proc tmp sys dev var opt mnt2.5 创建必要的设备文件linux内核在启动时需要使用两个设备文件/dev/console : 控制台/dev/null:黑洞文件sudo mknod dev/console c 5 1sudo mknod dev/null c 1 3sudo chown tarena:tarena dev/consolesudo chown tarena:tarena dev/null3、通过nfs方式验证以上根文件数据的有效性服务器端:sudo vi /etc/exports/home/tarena/porting/busybox-1.23.2/_install*(rw,sync,no_root_squash)sudo /etc/init.d/nfs-kernel-server restart客户端:setenv bootargs root=/dev/nfs nfsroot=192.168.1.8:/home/tarena/porting/busybox-1.23.2/_install init=/linuxrc ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0lcd=vs070cxn tp=gslx680-linux console=ttySAC0,115200 maxcpus=1saveenv------------------------------------------------------------1、使用软链接的好处所有的命令都是指向busybox可执行的软链接_install/bin 远小于 ubuntu 系统 /bin,原因在于:1)使用了软链接的方式2) _install/bin命令是对应PC版本命令的简化版2、bin/busybox可执行程序的分析arm-cortex_a9-linux-gnueabi-readelf -d bin/busybox libm.so.6libc.so.6加载器ldarm版本的库在交叉编译工具包有which arm-cortex_a9-linux-gnueabi-gcc令开一个窗口cd /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18find ./ -name "libm.so.6"cp -a-a: 等价于-dR-d: 保持软链接属性3、linux自举完成后会去运行1号进程1号进程如果指定为linxurclinuxrc对应的实现代码busybox/init/init.cinit_main(...){打开,解析/etc/inittab...}inittab文件的格式<id>:<runlevel>:<action>:<process>前两项在嵌入式经常忽略-/bin/sh:-, 一个会话shell4、设备节点文件的创建mknod dev/xxx c major minorc: 字符设备文件major: 主设备号minor: 次设备号ls /dev/console -l。
嵌入式系统根文件系统制作一、主机环境Linux vm-dev 2.6.9-42.EL RedHatEL4, VMWare6。
0。
3;gcc version 3.4.6 20060404 (Red Hat 3。
4.6—3) Thread model: posixgcc version 3.4。
6所需源文件:busybox-1。
12.2.tar。
bz2;二、用Busybox创建文件系统前提是:通过samba服务器把源码包busybox-1。
12.2。
tar.bz2拷贝到了虚拟机的/home/uptech目录1、解压busybox-1.12.2.tar.bz2,路径为修改Makefile中的ARCH和CROSS_COMPILE与本机的路径一致:2、编译busybox。
先make menuconfig,修改以下:保存退出,直接make,make install。
可以看到如下目录3、用shell脚本创建根文件系统的目录结构,并在想要建立根文件系统的地方运行此脚本。
我是用root用户登陆的,直接创建了设备节点。
执行这个sh:创建出一个主文件夹rootfs,里面有一批文件目录:4、把busybox源码目录下的etc的内容拷贝到这里的etc下5、修改拷贝过来的profile文件6、修改初始化文件inittab和fstab InittabFstab7、修改初始化的脚本文件init.d/rcS8、创建一个空的mdev。
conf文件,在挂载根文件系统时会用到的9、从本机拷贝passwd、shadow、group文件。
修改passwd文件,把第一行和最后一行的bash修改成ash。
10、把busybox默认安装目录中的文件全部复制到这里的rootfs中。
会发现多了linuxrc -> bin/busybox文件,这是挂载文件系统需要执行的。
OK,以上用busybox创建了一个基本的文件系统.PS:如果编译busybox时选择动态库方式编译,则需要查看生成的busybox使用哪些动态库,然后把它们拷贝到rootfs/lib目录下。
根文件系统制作兰天王目标:用busybox定制一个很小的文件系统。
一、文件系统介绍二、构建根文件系统三、BusyBox介绍四、实验步骤五、分析inittab文件六、文件系统启动过程七、附录:linux目录结构八、文件系统类型介绍一、文件系统介绍文件系统:是操作系统用于明确磁盘或分区上的文件的方法和数据结构,即在磁盘上组织文件的方法。
Linux文件系统是一个完整的统一体,组织到一个树形目录结构中。
Linux遵守文件系统科学分类标准(FHS),一个定义许多文件和目录的名字和位置的标准。
♦主要规则如下:●配置文件放在/etc目录下●设备文件放在/dev目录下●库文件放在目录/lib目录下●存放系统编译后的可执行文件、命令的目录是/bin、/sbin、/usr/bin、/usr/sbin目录在嵌入式系统中,根目录下的很多目录都可以删除,如下:●为多用户提供可扩展环境的所有目录都应该删除;如(/home,/mnt,/root)●根据引导加载情况,/boot目录可以删除。
其余的目录●/bin,/dev,/etc,/proc,/sbin,/usr,/lib都是不可缺少的。
二、构建根文件系统Linux的根文件系统包括支持linux系统正常运行的基本内容,至少应包括以下几项内容:●基本的文件系统结构,如bin、dev、etc、sbin,lib、usr、proc,sys,tmp。
●基本程序运行所需的动态库。
●基本的系统配置文件。
●必要的设备文件支持。
●基本的应用程序,如sh、ls、cp等。
.proc,sys,tmp 是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到目录树中. 如在/etc/init.d/rcS中加入下面一句:/bin/mount –aMount all filesystems (of the given types) mentioned in fstab.“mount -a”命令后将挂载proc,tmpfs 等包含在该文件中的所有的文件系统。
在硬盘上制作根文件系统一、实验目标:在硬盘上建立一个根文件系统,硬盘镜像文件的名称为:hdc-0.11.new.img二、实验环境:1、Vmware workation, bochs虚拟机,ultraedit编辑环境2、用到的四个重要的镜像文件:bootimage-0.11-hd,hdc-0.1.img,并将他们放到mylinux0.11文件夹中。
3、实验环境:redhat linux三、实验理论依据:1、Linux引导启动时,默认使用的文件系统是根文件系统。
其中一般都包括以下一些子目录和文件:etc/ 目录主要含有一些系统配置文件;dev/ 含有设备特殊文件,用于使用文件操作语句操作设备;bin/ 存放系统执行程序。
例如sh、mkfs、fdisk等;usr/ 存放库函数、手册和其它一些文件;usr/bin 存放用户常用的普通命令;var/ 用于存放系统运行时可变的数据或者是日志等信息。
存放文件系统的设备就是文件系统设备。
Linux 0.11内核所支持的文件系统是MINIX1.0文件系统。
2、inode 译成中文就是索引节点。
每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘... ... )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。
而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。
inode为每个文件进行信息索引,所以就有了inode的数值。
操作系统根据指令,能通过inode 值最快的找到相对应的文件。
每一个文件开头都是一个inode。
做个比喻,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode 就相当于这本书前面的目录,一本书有很多的内容,如果想查找某部份的内容,我们可以先查目录,通过目录能最快的找到我们想要看的内容。
四、实验过程:说明:为了深刻理解每一步操作的含义文中有【】的,里面的内容均是解释性的。
嵌入式根文件系统制作一、实验目标用busybox定制一个基本的文件系统,并且运行用户编译的hello(动态链接)。
二、软件包busybox:/downloads/busybox-1.16.0.tar.bz2bash:ftp:///gnu/bash/bash-4.0.tar.gz三、实验步骤3.1、建立工作目录设定工作目录为/root/build_rootfs/,该目录主要用来编译busybox,bash等制造根文件系统的软件,下载busybox,bash到该目录;mkdir/root/build_rootfs3.2、建立根目录该目录就是我们要移植到目标板上的目录,对于嵌入式的文件系统,根目录下必要的目录包括bin,dev,etc,usr,lib,sbin,proc,sys,tmp;这里设定根目录是/root/rootfs;busybox、bash编译之后,安装到该目录下;mkdir/root/rootfsmkdir/root/rootfs/{bin,dev,etc,usr,lib,sbin,proc,sys,tmp}mkdir/root/rootfs/usr/{bin,sbin,lib}创建节点dev目录执行,创建节点(如果使用mdev设备管理工具可忽略此步骤) /root/rootfs/dev以root用户在/root/rootfs/mknod-m666null c13mknod-m600console c513.3、拷贝动态链接库交叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目录下;我们在移植应用程序到我们的目标板的时候,需要把交叉编译的链接库也一起移植到目标板上,这里我们用到的交叉工具链的路径是/usr/local/arm/4.1.2/,所以链接库的目录是/usr/local/arm/4.1.2/arm-linux/lib。
#进入链接库目录cd/usr/local/arm/4.1.2/arm-linux/lib#编写一个shell文件,用于copy实际的共享链接库;主修订版本的符合链接;动态连接器及其符号链接到目标板根目录下的lib(/root/rootfs/lib)。
vi cp.sh#内容如下:for file in libc libcrypt libdl libm libpthread libresolv libutil libthread_dbdocp$file*.so/work/rootfs/libcp-d$file.so.*/work/rootfs/libdonecp-d ld*.so*/work/rootfs/libcp-d libstdc++.so*/work/rootfs/libcp-d libz.so*/work/rootfs/libcp-d libjpeg.so*/work/rootfs/libcp-d libgcc_s*/work/rootfs/lib#保存退出#第一个cp命令会复制实际的共享库#第二个cp命令会复制符合链接本身#第三个cp命令会复制动态连接器及其符合链接#执行刚编写的shell。
source cp.sh#这样就把链接库复制到/root/rootfs/lib目录下。
#接着我们还要缩小复制过来的链接库的体积,如下:arm-linux-strip-s/root/rootfs/lib/lib*3.4、交叉编译busyboxBosybox是一个遵循GPL v2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox可以自动生成根文件系统所需的bin、sbin、usr 目录和linuxrc文件。
busybox的源码可以从/downloads/下载,这里我们下载一个1.16.0版本的源码。
我们在配置busybox的时候是基于默认配置之上来配置的;先make defconfig就是把busybox配置成默认,然后再make menuconfig来配置busybox。
说明:我们在配置一个源代码包之前,可以先阅读源码包目录下的README和INSTALL文件以make menuconfig#配置时,我们基于默认配置,再配置它为静态编译,安装时不要/usr路径,指定一个安装路径,#如下:Busybox Settings--->Build Options--->[*]Build BusyBox as a static binary(no shared libs) Installation Options--->[*]Don't use/usr(/root/rootfs)BusyBox installation prefix输入"/root/rootfs",指定安装路径为/root/rootfs#保存退出,编译安装;make&&make install#安装完成后,busybox会在安装目录上安装linuxrc文件,用户可以根据自身需要进行跟换该文件。
3.5、交叉编译bashBash是一个交互程序,其源码可以从ftp:///gnu/bash/下载;步骤如下:cd/root/build_rootfs解压源码;tar zxvf bash-4.0.tar.gzcd bash-4.0export PATH=/usr/local/arm/4.1.2/bin:$PATH(若该环境变量已经设置成功,可以忽略此步骤) ./configure--host=arm-linuxmakearm-linux-strip-s bash编译的结果得到bash程序,将其拷贝到根目录下;cp bash/root/rootfs/bin3.6、建立系统配置文件3.6.1、/root/rootfs/etc/inittab文件首先inittab文件是系统启动后所访问的第一个脚本文件,后续启动的文件都由它指定。
vi/root/rootfs/etc/inittab添加如下内容#first:run the system script file::sysinit:/etc/init.d/rcS#second:run the local script file::once:/etc/rc.local#third run the bash shell prosecc::respawn:/bin/bash#restart init process::restart:/sbin/init#umount all file system::shutdown:/bin/umount-a-r上面的这个inittab文件决定的启动流程是:1执行“/etc/init.d/rcS”脚本;2执行“/etc/rc.local”脚本;3执行“/bin/bash”交互程序,进入交换界面;3.6.2、/root/rootfs/etc/fstab文件该配置文件为目标系统所支持挂载的文件系统类型列表(可参考PC主机上的配置)vi/root/rootfs/etc/fstab添加如下内容#device mount-point type option dump fsck orderproc/proc proc defaults00none/tmp ramfs defaults00sysfs/sys sysfs defaults00mdev/dev ramfs defaults003.6.3、/root/rootfs/etc/init.d/rcS文件该配置文件主要是挂载跟配置文件系统,建立必要的设备文件或其符号连接;mkdir/root/rootfs/etc/init.dvi/root/rootfs/etc/init.d/rcS内容如下:#!/bin/shexport PATH=/sbin:/bin:/usr/sbin:/usr/binecho"----------munt all----------------"mount-a#实现对/etc/fstab文件中各文件系统的挂载echo/sbin/mdev>/proc/sys/kernel/hotplugmdev-s#使用mdev工具对设备进行动态管理MDEVmdev是busybox自带的一个简化版的udev,适合于嵌入式的应用埸合。
其具有使用简单的特点。
它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件mdev的正常使用需要创建/root/rootfs/etc/mdev.conf文件(可以为空文件,但必须存在,在/root/rootfs/etc/下执行“touch mdev.conf”指令可创建),同时MDEV会改写/dev和/sys两个目录,必须保证这两个目录存在且是可写的(一般会用到sysfs,tmpfs。
所以要重新编译内核)。
执行mdev-s:以‘-s’为参数调用位于/sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev下创建设备节点文件。
一般只在启动时才执行一次“mdev-s”。
热插拔事件:由于启动时运行了命令:echo/sbin/mdev>/proc/sys/kernel/hotplug,那么当有热插拔事件产生时,内核就会调用位于/sbin目录的mdev。
这时mdev通过环境变量中的ACTION和DEVPATH,(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys中的那个目录。
接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev下创建设备节点文件。
3.6.4、etc/rc.local文件该配置文件主要是配置IP地址;vi/root/rootfs/etc/rc.local内容如下:#!/bin/sh#set ip/sbin/ifconfig lo127.0.0.1up/sbin/ifconfig eth0172.22.60.223netmask255.255.0.0up/sbin/route add default gw172.22.60.1eth03.6.5、在文件系统目录的根路径下添加.bashrc文件文件系统最后启动的是bash交换程序,进入交换界面;bash程序的启动会读取根目录下的.bashrc脚本文件;vi/root/rootfs/.bashrc.bashrc文件参考:#!/bin/bash#set envexport PATH=/bin:/sbin:/usr/binexport LD_LIBRARY_PATH=/lib:/usr/lib/usr/bin/hello&3.7、添加一个用户程序进入工作目录cd/root/build_rootfs/编辑源文件vi hello.c内容如下#include<stdio.h>main(){printf(“welcome to my rootfs\n”);}保存退出;交叉编译arm-linux-gcc hello.c-o hello复制到目标板的根目录mv hello/root/rootfs/usr/bin注意:完成添加上述的配置文件后,需要将其属性修改为可执行,利用chmod指令修改。