文件系统制作|linux内核编译和根文件系统制作过程

文件系统制作|linux内核编译和根文件系统制作过程的第1张示图

『壹』 如何制作和使用Jffs2文件系统

嵌入应用:如何制作和使用Jffs2文件系统 (zhuan)本文主要介绍如何在AT91SAM9261EK板子上制作和使用jffs2文件系统,使用的是linux-2.6.21内核。 首先配置MTD $ make menuconfig 进入 Memory Technology Devices (MTD) —> <*> Memory Technology Device (MTD) support [*] Debugging [*] MTD partitioning support [*] Command line partition table parsing [*] Direct char device access to MTD devices [*] Caching block device access to MTD devices RAM/ROM/Flash chip drivers —–> <*> Detect non-CFI AMD/JEDEC-compatible flash chips <*> Support for AMD/Fujitsu flash chips Mapping drivers for chip access —> [*] Support non-linear mappings of flash chips Self-contained MTD device drivers —> [*] Support for AT45… DataFlash NAND Flash Device Drivers —-> [*] NAND Device Support [*] Support for NAND Flash /SmartMedia on AT91 File systems —-> <*> Second extended fs support [*] Inotify file change notification support [*] Inotify support for user space <*> Filesystem in Userspace support Miscellaneous filesystems <*> Journalling Flash File System v2 (JFFS2) support [*] JFFS2 write-buffering support <*> Compressed ROM file system support (cramfs)以上配置中没有列出的,都没选;其配置仅做参考,可根据自己的需要自行配置。 $ make all 其次制作mtd-util工具 从网上下载zlib-1.2.3.tar.gz解压缩$ cd zlib-1.2.3 $ ./configure –prefix=/usr/local/arm/3.4.1/arm-linux –shared 修改Makefile如下: CC=arm-linux-gcc LDSHARED=arm-linux-ld -shared $ make all $ make install 注意:这里是安装在/usr/local/arm/3.4.1/arm-linux目录下 由于交叉编译mtd工具时需要zlib.h文件,所以在编译之前先安装zlib库文件。 从网上下载mtd-snapshot-20050519.tar.bz2 解压缩 $ cd mtd/util 修改该目录下的Makefile: CROSS=arm-linux- $ make all 然后将该目录下生成的 flash_erase,flash_eraseall, mkfs.jffs2工具放在ramdisk 文件系统中(我这里放在/bin目录下),另外在ramdisk文件系统的dev目录下要保证有mtd0~mtd9,mtdblock0~mtdblock9这些设备,如果没有可参考 ramdisk文件系统的制作,也可从pc机相同目录下拷贝,要加上文件属性。 另外,需要将/arm-linux/lib目录下的libz.so, libz.so.1, libz.so.1.2.3文件拷贝到ramdisk文件系统的/lib目录下,否则mkfs.jffs2工具不能使用。 最后将新生成的uImage和ramdisk文件下载到板子上,起动系统,使用命令 cat /proc/mtd可以看到 dev: size erasesize name mtd0: 00040000 00020000 "Partition 1" mtd1: 0ffc0000 00020000 "Partition 2" mtd2: 00420000 00000210 "spi0.0-AT45DB321x" 这里mtd0,mtd1是nandflash上的分区; mtd2是dataflsh上的分区,该分区上放有u-boot,uImage.img,ramdisk.img,所以我们这里可以使用空的nandflash上的两个分区。使用之前要先用工具flash_erase或者flash_eraseall擦除nandflash,具体使用的步骤如下: # flash_erase /dev/mtd1 制作jffs2映像 # cd /var/tmp # mkdir jffs2 (jffs2下的目录可以任意建) # mkfs.jffs2 –d jffs2/ -o jffs2.img # cp /var/tmp/jffs2/jffs2.img /dev/mtdblock1 最后# mount -t jffs2 /dev/mtdblock1 /mnt/mtd即可,使用结束可使用$ umount /mnt/mtd卸载. 如果只是当作普通的jffs2 来使用dataflash或者nandflash,可不必制作 jffs2映像,只需要最后一步,# mount -t jffs2 /dev/mtdblock1 /mnt/mtd即可。AT91sam9263EK使用JFFS2根文件系统 在AT91sam9263EK成功配置了NFS根文件系统后,后来又想把JFFS2也移植到AT91sam9263EK上吧,说干就干。1. 呵呵,其实很简单我使用的linux-2.6.20内核里已经有jffs2 文件系统支持,选上jffs2即可File systems —>Miscellaneous filesystems —><*> Journalling Flash File System v2 (JFFS2) support (0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy) [*] JFFS2 write-buffering support [*] JFFS2 summary support (EXPERIMENTAL) [*] JFFS2 XATTR support (EXPERIMENTAL) [*] JFFS2 POSIX Access Control Lists [*] JFFS2 Security Labels [*] Advanced compression options for JFFS2 [*] JFFS2 ZLIB compression support [*] JFFS2 RTIME compression support [ ] JFFS2 RUBIN compression support JFFS2 default compression mode (priority) 选上MTD支持Device Drivers —>Memory Technology Devices (MTD) —><*> Memory Technology Device (MTD) support [ ] Debugging <*> MTD concatenating support [*] MTD partitioning support < > RedBoot partition table parsing [*] Command line partition table parsing <*> ARM Firmware Suite partition parsing — User Moles And Translation Layers <*> Direct char device access to MTD devices <*> Caching block device access to MTD devices <*> FTL (Flash Translation Layer) support <*> NFTL (NAND Flash Translation Layer) support [ ] Write support for NFTL 2. 从ttp://www.linux-mtd.infradead.org/上下载mtd-utils-1.0.0.tar.gz 到宿主机。解压 tar xvzf mtd-utils-1.0.0.tar.gz进入mtd-utils-1.0.0目录修改Makefile进行编译。编译出mkfs.jffs2,nandwrite等工具3. 创建jffs2根文件系统:首先要有一个其他类型的根文件系统,制作和获取方式可以参见<< AT91sam9263EK使用NFS根文件系统>>比如可以:mount -t cramfs rootfs_lnxdemo.cramfs tmp/ -o looprootfs_lnxdemo.cramfs由atmel提供当然你可以自己制作,这里直接使用atmel的省去了制作的麻烦。tar czvf target.tar.gz tmp/生成jffs2根文件系统镜像:mkfs.jffs2 –l –s 0x400 –e 0x20000 –d tmp/ -o target.jffs24. 烧写jffs2根文件系统镜像到nand flash。烧写方法应该有多种常用的有2种(呵呵自己认为的):a.通过nand编程器烧写镜像文件到nand flash芯片然后再焊接到pcb.b.挂载nfs文件系统,使用nandwrite工具写镜像文件到mtd设备。第一种适合生产时使用,而我们测试时候比较适合使用第二种方式。挂载nfs文件系统:nandwrite –o /dev/mtd1 target.jffs2或者是在nfs 根文件系统下:mount –t jffs2 /dev/mtdblock1 /mntcd /mnttar xvzf ../target.tar.gzumount /mnt5. 配置内核启动参数如下:setenv bootargs mem=64M console=ttyS0 115200 root=/dev/mtdblock1 rootfstype=jffs2 rw6. 重新启动,呵呵内核使用jffs2文件系统自动挂载根文件系统到mtdblock1设备上。ls 测试一下vi testhello this is for test jffs2 filesystem.保存退出。Sync重新启动vi test内容依旧。Ok jffs2根文件系统引导成功。Linux联盟收集整理 ,转贴请标明原始链接

『贰』 如何制作UBI文件系统

制作U盘启动盘1、首先将U盘插入电脑的USB接口,重要提示:制作过程U盘会被格式化回,注意备份资料答2、运行UltraISO.exe程序,选择“文件”——“打开”,选择WindowsPE.iso文件3、然后选择“启动光盘”——“写入硬盘映像”4、在“硬盘驱动器”项目中选择你要制作成启动盘的U盘盘符5、在“写入方式”项目中选择USB-HDD+或者USB-ZIP+,个人建议选择USB-ZIP+,兼容性比较好6、最后,点击“写入”,等待数秒,程序提示制作成功完成后,就可以拔出U盘了。PS:可以使用VDRIVE虚拟光驱加载WindowsPE.ISO文件查看光盘的内容。

『叁』 linux下ext3文件系统如何制作

建议你安装ntfs-3g可以支持对ntfs分区的读写.mount-tntfs-3g/dev/sda2/mnt/d现在新版的linux似乎已经开经支持ntfs分区,但大部分只能读,不能写(如果强行写的话后果是非常严重的.).

『肆』 如何制作 linux 文件系统

一、什么是文件系统 (Filesystem)文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。二、主要嵌入式采用的文件系统Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 HD(Harddisk,硬盘) 上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启动,最简单的方法是将 rootfs load 到 RAM 的 RAMDisk,稍复杂的就是 直接从Flash 读取的 Cramfs,更复杂的是在 Flash 上分区,并构建 JFFS2 等文件系统。RAMDisk 将制作好的 rootfs 压缩后写入 Flash,启动的时候由 Bootloader load 到RAM,解压缩,然后挂载到 /.这种方法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM.ramdisk 就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩到SDRAM并挂载根文件系统, 在linux系统中,ramdisk有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小随所需要的空间增加或减少,是目前linux常用的ramdisk技术。initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大简化了 Linux 的启动过程,附合 Linux 的基本哲学:Keep it simple, stupid(KISS)。 不过cpio-initrd 作为新的格式,还没有经过广泛测试,嵌入式 Linux 中主要采用的还是 image-initrd.Cramfs 是 Linus 写的很简单的文件系统,有很好的压缩绿,也可以直接从 Flash 上运行,不须 load 到 RAM 中,因此节约了 RAM.但是 Cramfs 是只读的,对于需要运行时修改的目录(如: /etc, /var, /tmp)多有不便,因此,一般将这些目录做成ramfs 等可写的 fs.SquashFS 是对 Cramfs 的增强。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有优势。不过,据开发者介绍,在性能上可能不如 Cramfs.这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试三、建一个包含所有文件的目录1、建一个目录rootfs 用来装文件系统2、mkdir bin dev etc lib proc sbin tmp usr var3、ln -fs bin/busybox linuxrc(使用busybox)4、到系统 /dev 把所有的device打一个包,拷贝到 dev下面(最省事的做法);或者使用mknod来自己建所需要的device,我自己用的如下:crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console crw-rw-rw- 1 root root 5, 64 2006-02-24 13:12 cua0 crw-rw-rw- 1 root root 63, 0 2006-02-24 13:12 dk0 crw-rw-rw- 1 root root 63, 1 2006-02-24 13:12 dk1 drwxr-xr-x 2 root root 4096 2006-02-24 13:12 flash brw-rw-rw- 1 root root 3, 0 2006-02-24 13:12 hda crw-rw-rw- 1 root root 36, 10 2006-02-24 13:12 ipsec crw-rw-rw- 1 root root 241, 0 2006-02-24 13:12 ixNpe crw-rw-rw- 1 root root 1, 2 2006-02-24 13:12 kmem crw-rw-rw- 1 root root 126, 0 2006-02-24 13:12 ledman lrwxrwxrwx 1 root root 16 2007-09-19 14:08 log -> /tmp/var/log/log crw-rw-rw- 1 root root 1, 1 2006-02-24 13:12 mem crw-rw-rw- 1 root root 90, 0 2006-02-24 13:12 mtd0 brw-rw-rw- 1 root root 31, 0 2006-02-24 13:12 mtdblock0 brw-rw-rw- 1 root root 31, 1 2006-02-24 13:12 mtdblock1 brw-rw-rw- 1 root root 31, 2 2006-02-24 13:12 mtdblock2 brw-rw-rw- 1 root root 31, 3 2006-02-24 13:12 mtdblock3 brw-rw-rw- 1 root root 31, 4 2006-02-24 13:12 mtdblock4 brw-rw-rw- 1 root root 31, 5 2006-02-24 13:12 mtdblock5 brw-rw-rw- 1 root root 31, 6 2006-02-24 13:12 mtdblock6 crw-rw-rw- 1 root root 90, 1 2006-02-24 13:12 mtdr0 crw-rw-rw- 1 root root 1, 3 2006-02-24 13:12 null crw-rw-rw- 1 root root 108, 0 2006-02-24 13:12 ppp crw-r——r—— 1 root root 5, 2 2006-03-29 15:56 ptmx drwxr-xr-x 2 root root 4096 2006-03-29 15:56 pts crw-rw-rw- 1 root root 2, 0 2006-02-24 13:12 ptyp0 brw-rw-rw- 1 root root 1, 0 2006-02-24 13:12 ram0 crw-rw-rw- 1 root root 1, 8 2006-02-24 13:12 random crw-rw-rw- 1 root root 5, 0 2006-02-24 13:12 tty crw-rw-rw- 1 root root 4, 0 2006-02-24 13:12 tty0 crw-rw-rw- 1 root root 3, 0 2006-02-24 13:12 ttyp0 crw-rw-rw- 1 root root 4, 64 2006-02-24 13:12 ttyS0 crw-rw-rw- 1 root root 1, 9 2006-02-24 13:12 urandom crw-rw-rw- 1 root root 1, 5 2006-02-24 13:12 zero举例: mknod console c 5 1 这样 crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console5、将编译好的busybox拷贝到/bin下面,除了busybox外,所有其他的命令都是他的linkash chgrp clear dd echo fgrep gzip ip ls modprobe mv ping pwd sed stty tar true zcat busybox chmod cp df egrep grep hostname kill mkdir more netstat ping2file rm sh sync tftp umount cat chown date dmesg false gunzip ifconfig ln mknod mount pidof ps rmdir sleep sysinfo touch uname所有的命令你可以在busybox下面用make menuconfig来增减6、同样/sbin下面也是busybox的linkhalt ifconfig init insmod klogd losetup lsmod mkswap modprobe reboot rmmod route swapoff swapon[NextPage]7、同样/usr/bin下面也是busybox的linkbasename dirname env free id logger reset tail tr tty uptime which xargsawk cut expr head killall mkfifo sort test traceroute uniq wc whoami yes上面几乎是最全的link,各个看官可以酌情删减,不过link也不占什么空间!8、同样/usr/sbin下面放着所有编译完的可执行文件,具体就不多说了9、非常重要之/lib,务必重视找到你编译环境的target目录,把需要的lib文件先用strip压缩(非target目录下的,而已编译环境提供的strip),先把最基本的libc, ld等等,必须同样做跟target/lib里面一样的link.然后根据特定的应用加相应的lib,不要把不用的加进去,lib比较占空间。10、在/etc下面加上需要的配置文件,最最重要的是rcS#!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/sbin/scripts UTC=yes mount -n -t proc proc /proc mount -n -t ramfs ramfs /tmp mount -n -t devpts devpts /dev/pts # build var directories /bin/mkdir -m 0777 /tmp/var /bin/mkdir -m 0777 /var/lock /bin/mkdir -m 0777 /var/log /bin/mkdir -m 0777 /var/run /bin/mkdir -m 0777 /var/tmp #/bin/mkdir -m 0777 /tmp/etc #/bin/cp -a /usr/etc//etc #/bin/cp -a /usr/dev//dev/ # loads the NPE ethernet moles into the kernel. insmod /lib/moles/2.6.13.2/intel/ixp400.ko # Firmware code for NPE Engine. cat /etc/IxNpeMicrocode.dat > /dev/ixNpe insmod /lib/moles/2.6.13.2/intel/ixp400_eth.ko netdev_max_backlog=500 insmod /lib/moles/led.ko insmod /lib/moles/push_button.ko下面的具体应用没有再举例加上了,这个是系统init必须的。其他的情况类似如此了,下面里面给了一个lunksys的GPL项目的target.四、生成一个ramdisk#!/bin/sh MODULE_NAME=ramdisk RAMPATH=`pwd` TMPPATH=${RAMPATH}/tmp SOURCE=${RAMPATH}/……/target if [ ! -d ${TMPPATH} ] then mkdir ${TMPPATH} fi if [ `whoami` != 'root' ] then { echo "You should run the shell as root, Please rerun as a root." echo "Aborting." exit 1 } fi # Clear in tmp path rm -rf ${TMPPATH}/tmpmnt rm -rf ${TMPPATH}/ramrootfs mkdir ${TMPPATH}/tmpmnt # Clear the old ramdisk rm -f ${RAMPATH}/$MODULE_NAME # Make a temp file which size is suitable dd if=/dev/zero of=${TMPPATH}/ramrootfs bs=1k count=6144 # Create a ext2 filesystem mke2fs -F -m 0 -i 2000 ${TMPPATH}/ramrootfs # Mount it to tmpmnt/ mount -o loop -t ext2 ${TMPPATH}/ramrootfs ${TMPPATH}/tmpmnt # Copy everything from kernel to this. cd ${TMPPATH}/tmpmnt echo ${SOURCE} cp -av ${SOURCE}/. cd ${TMPPATH} # Unmount it the ext2 filesystem umount ${TMPPATH}/tmpmnt cat ${TMPPATH}/ramrootfs | gzip -9 > /${RAMPATH}/ramdisk echo Copying ramdisk image to ${RAMPATH} sync这里给出一个自动生成脚本!五、生成一个cramfs找到cramfs的toolchain./mkcramfs -r $(FS1_DIR) $(FS_NAME)。1六、生成一个mksquashfs找到squashfs的toolchain./mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments -noI做文件系统最困难和最可能出问题的地方是在/lib库和/dev方面,请大家多注意这两方面。

『伍』 如何制作Ext4文件系统镜像

编译Android源码最后是使用make_ext4生成 Ext4镜像+签名(更新:合理使用make_ext4参数是不会导致添加签名的),如果需要纯Ext4镜像,那么需要再去掉签名,使用simg2img。这个两个工具都是在编译Android源码时编译出来的,如果没有Android源码编译环境,当然也可以使用Ubuntu社区已经整理好的工具集android-tools-fsutils,该工具集文件列表如下:(来自android-tools-fsutils/filelist)/usr/bin/ext2simg/usr/bin/ext4fixup/usr/bin/img2simg/usr/bin/make_ext4fs/usr/bin/mkuserimg/usr/bin/simg2img/usr/bin/simg2simg/usr/bin/simg_mp/usr/bin/test_ext4fixup工具集安装方法:sudo apt-get install android-tools-fsutils11制作Ext4文件系统镜像:# 创建测试目录mkdir /tmp/ext4 && cd /tmp/ext4 &&mkdir test test_mount &&echo "Hello Ext4" > test/HelloExt4.txt &&# 生成名为test.ext4的Ext4镜像make_ext4fs -l 512M test.ext4 test &&# 挂载test.ext4到test_mount测试mount -t ext4 -o loop test.ext4 test_mount &&ls test_mount || echo "Error!"一、在(yourAndroid code path)/out/ 目录里查找这个工具unyaffs: 用于解压system.img mkyaffs2image: 用于打包system.img呵呵,find 命令肯定会吧?find out/ -name mkyaffs2image找到了后,记住这个目录. 我的是(codePATH)/out/host/linux-x86/bin/1.在任意文件夹下面建立一个system文件夹,我的是在home/changjiang/下面建的,这个是用来存放你解压system.img出来的文件,然后将找到的两个工具 unyaffs、mkyaffs2image拷贝到/changjiang/home/system2.将编译出来的system.img或者下载的system.img复制到system文件夹中。3.在终端中输入如下命令操作(/home/changjiang/替换成自己电脑中的路径,你的不是我的)cd /home/changjiang/system./unyaffs /home/changjiang/system/system.img(用unyaffs命令解压system.img),解压出来的有各种应用,库等等,你可以修改或者替换二、重新打包system.img,虽然我不知道为什么要这样做,但是我知道这样做是可以的.呵呵,linux没有不可能的事情.朝鲜的 红星操作系统就是例子.具体办法是system/ 这个目录,这个目录就是用来生成system.img 的.mkyaffs2image system/ system.img在Ubuntu中第一次使用mkyaffs2image命令时,会提示mkyaffs2image:找不到命令还需要安装mkyaffs2imagehttp://code.google.com/p/fatplus/downloads/detail?name=yaffs2-source.tar&can=2&q=下载yaffs2-source.tar 解压后,进入utils文件夹,然后make将make之后生成的mkyaffs2image文件拷贝到/usr/bin目录下$ su# cp mkyaffs2image /usr/bin/# chmod 777 /usr/bin/mkyaffs2image之后$ mkyaffs2image mkyaffs2image: image building tool for YAFFS2 built Jan 6 2012usage: mkyaffs2image dir image_file [convert]dir the directory tree to be convertedimage_file the output file to hold the image'convert' proce a big-endian image from a little-endian machine表明安装成功,同时也可以看到该命令的用法mkyaffs2image dir image_file例如:mkyaffs2image am1808-fs am1808-fs.yaffs//创建jffs2文件搞Android的同学经常会接触到system.img。但是该文件经常以两种格式出现:raw和sparse。一种是raw ext4 image,即经常说的raw image,使用file观察它: 其特点是完整的ext4分区镜像(包含很多全零的无效填充区),可以直接使用mount进行挂载,因此比较大(一般1G左右)。[java] view plain $ file system.img system.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files) 信息非常明确了。

『陆』 linux内核编译和根文件系统制作过程

内核编译:makemenuconfig配置相应的平台,然后保存退出直接make命令就可以编译了。文件系统制作:一般都用busybox开源软件来做,下载,解压,然后makemenuconfig配置你想要的属性,然后保存退出,make就可以了,然后makeinstall就会在目录下看到__install的目录就是你要的根文件系统目录了。

『柒』 如何制作Linux根文件系统

根文件系统一直以来都是所有类Unix操作系统的一个重要组成部分,也可以认为是嵌入式Linux系统区别于其他一些传统嵌入式操作系统的重要特征,它给Linux带来了许多强大和灵活的功能,同时也带来了一些复杂性。我们需要清楚的了解根文件系统的基本结构,以及细心的选择所需要的系统库、内核模块和应用程序等,并配置好各种初始化脚本文件,以及选择合适的文件系统类型并把它放到实际的存储设备的合适位置。Linux的根文件系统以树型结构组织,包含内核和系统管理所需要的各种文件和程序,一般说来根目录”/”下的顶层目录都有一些比较固定命名和用途。下面列出了一个Linux根文件系统中的比较常见的目录结构:/bin 存放二进制可执行命令的目录该目录下存放所有用户都可以使用的、基本的命令,这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。/bin目录下常用的命令有:cat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,m knod,[,test等“[”命令其实就是test命令,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。/dev 存放设备文件的目录该目录下存放的是设备文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过"dev/ttySAC0"文件可以操作串口0,通过"/dev/mtdblock1"可以访问MTD设备的第2个分区。/etc 存放系统管理和配置文件的目录该目录下存放着各种配置文件,对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。/home 用户主目录,比如用户user的主目录就是/home/user,可以用~user表示用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。/lib 存放动态链接共享库的目录该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。/sbin存放系统管理员使用的管理程序的目录该目录下存放系统命令,即只有管理员能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基 本的系统命令,它们用于启动系统,修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。/sbin目录下常用的命令有:shutdown reboot fdisk fsck等,本地用户自己安装的系统命令放在/usr/local/sbin目录下。/tmp 公用的临时文件存储点用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。/root 系统管理员的主目录根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、硬盘。/proc 虚拟文件系统,可直接访问这个目录来获取系统信息。这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。/usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合FHS标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。/var 某些大文件的溢出区与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。———————————————————————一、移植环境:1、 Ubuntu 10.10发行版2、 u-boot.bin3、 目标机:FS_S5PC100平台4、 交叉编译器 arm-cortex_a8-linux-gnueabi-gcc———————————————————————二、移植步骤1、 源码下载我们选择的版本是busybox-1.17.3.tar.bz2下载路径为:http://busybox.net/downloads/2、 解压源码$ tar xvf busybox-1.17.3.tar.bz23、 进入源码目录$ cd busybox-1.17.34、 配置源码$ make menuconfigBusybox Settings —> Build Options —> [*] Build BusyBox as a static binary (no shared libs) [ ] Force NOMMU build [ ] Build with Large File Support (for accessing files > 2 GB) (arm-cortex_a8-linux-gnueabi-) Cross Compiler prefix () Additional CFLAGS5、 编译$ make6、 安装busybox默认安装路径为源码目录下的_install$ make install7、 进入安装目录下$ cd _install$ lsbin linuxrc sbin usr8、 创建其他需要的目录$ mkdir dev etc mnt proc var tmp sys root9、 添加库在_install目录下创建一个lib文件夹,将工具链中的库拷贝到lib目录下$ mkdir lib$ cp /home/linux/x-tools/arm-cortex_a8-linux-gnueabi/arm-cortex_a8-linux-gnueabi/lib/* ./lib/删除lib下的所有目录、.o文件和.a文件,对库进行瘦身以减小文件系统的大小$ rm *.o *.a$ arm-cortex_a8-linux-gnueabi-strip lib/*10、 添加系统启动文件在etc下添加文件inittab$ vim /etc/inittab文件内容如下:#this is run first except when booting in single-user mode.:: sysinit:/etc/init.d/rcS# /bin/sh invocations on selected ttys# Start an "askfirst" shell on the console (whatever that may be)::askfirst:-/bin/sh# Stuff to do when restarting the init process::restart:/sbin/init# Stuff to do before rebooting::ctrlaltdel:/sbin/reboot在etc下添加文件fstab$ vim /etc/fstab文件内容如下:#device mount-point type options mp fsck orderproc /proc proc defaults 0 0tmpfs /tmp tmpfs defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /dev tmpfs defaults 0 0这里我们挂在的文件系统有三个proc、sysfs和tmpfs,在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持修改内核配置:$ make menuconfigFile systems —> Pseudo filesystems —> [*] Virtual memory file system support (former shm fs) [*] Tmpfs POSIX Access Control Lists重新编译内核$ make zImage在etc下创建init.d目录,并在init.d下创建rcS文件$ mkdir /etc/init.d -p$ vim /etc/init.d/rcSrcS文件内容为:#!/bin/sh# This is the first script called by init process/bin/mount -a为rcS添加可执行权限:$ chmod +x init.d/rcS在etc下添加profile文件$ vim /etc/profile文件内容为:#!/bin/shexport HOSTNAME=farsightexport USER=rootexport HOME=root#export PS1="\[\[email protected]\h \W\]\$ "export PS1="[[email protected]$HOSTNAME \W]\# "PATH=/bin:/sbin:/usr/bin:/usr/sbinLD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATHexport PATH LD_LIBRARY_PATH11、 设备文件创建根文件系统中有一个设备节点是必须的,在dev下创建console节点$ mknod dev/console c 5 1重要:新制作的文件系统尺寸若超出8M,删除不需要的库文件。

『捌』 如何制作嵌入式Linux文件系统

步骤方法:1、用 busybox 解压缩后 运行 make menuconfig 进入配置项 。2、设置参数 如需要是那种文件系统。3、保存退出 make&&make install 生成文件系统 保存在当前目录下_install下。为了支持某些运算 需要添加某些库文件 最简单的方法 把 arm-linux-gcc lib目录下的库文件 全部 到 文件系统下 lib目录。

『玖』 如何制作arm linux文件系统

进入内核意思文件系统及启喽arm嵌入式Linux系统面并交叉编译器除非自编译制作给贴图编译busybox指定交叉编译器设置嵌入式系统面没没关系

未经允许不得转载:山九号 » 文件系统制作|linux内核编译和根文件系统制作过程

赞 (0)