《2022年文件系统的移植 .pdf》由会员分享,可在线阅读,更多相关《2022年文件系统的移植 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验十三文件系统的移植【实验目的】熟悉 Linux 文件系统目录结构,创建自己的文件系统,通过NFS 方式集成测试,用文件系统生成ramdisk 文件系统映象文件。【实验环境】1、 Ubuntu 10.10 发行版2、 u-boot-2010.033、 FS2410平台4、 交叉编译器arm-none-linux-gnueabi-gcc-4.3.2【实验步骤】一、根文件系统制作1、 源码下载我们选择的版本是busybox-1.17.3.tar.bz2 下载路径为:http:/ 解压源码$ tar xvfbusybox-1.17.3.tar.bz23、 进入源码目录$ tar xvfbusybo
2、x-1.17.3.tar.bz24、 配置源码$ make menuconfigBusybox Settings -Build Options -* Build BusyBox asa static binary (no sharedlibs) ForceNOMMUbuild名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - Build with Large File Support (for accessingfiles 2 GB
3、)(arm-none-linux-gnueabi-)CrossCompiler prefix() Additional CFLAGS5、 编译$ make6、 安装busybox 默认安装路径为源码目录下的_install$ make install7、 进入安装目录下$ cd _install$ lsbinlinuxrcsbinusr8、 添加其他需要目录$ mkdirdev etcmnt proc var tmp sysroot9、 添加库将工具链中的库拷贝到_install 目录下$ cp /home/linux/toolchain/arm-none-linux-gnueabi/lib/
4、./删除 lib 下的所有目录、.o 文件和 .a 文件对库进行瘦身以减小文件系统的大小$ arm-none-linux-gnueabi-striplib/*10、添加系统启动文件在 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
5、):askfirst:-/bin/sh# Stuff to do when restarting the init process名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - :restart:/sbin/init# Stuff to do before rebooting:ctrlaltdel:/sbin/reboot在 etc 下添加文件fstab,文件内容如下:#devicemount-pointtypeoptionsd
6、umpfsck orderproc/procprocdefaults00tmpfs/tmptmpfsdefaults00sysfs/syssysfsdefaults00tmpfs/devtmpfsdefaults00这里我们挂在的文件系统有三个proc、sysfs 和 tmpfs,在内核中proc 和 sysfs默认都支持,而 tmpfs 是没有支持的,我们需要添加tmpfs 的支持修改内核配置:File systems-Pseudo filesystems -* Virtual memory file system support (former shm fs)* Tmpfs POSIX A
7、ccess Control Lists重新编译内核在 etc 下创建 init.d 目录,并在init.d 下创建 rcS文件, rcS 文件内容为:#!/bin/sh# This is the first script called by init process/bin/mount -a为 rcS 添加可执行权限:chmod+x init.d/rcS在 etc 下添加 profile 文件,文件内容为:#!/bin/sh名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共
8、9 页 - - - - - - - - - export HOSTNAME=farsightexport USER=rootexport HOME=root#export PS1=uh W$ export PS1=$USER$HOSTNAMEW# PATH=/bin:/sbin:/usr/bin:/usr/sbinLD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATHexport PATH LD_LIBRARY_PATH11、 设备文件创建根文件系统中有一个设备节点是必须的,在dev 下创建 console 节点$ mknoddev/consolec 5
9、1二、 NFS 测试1、备份 /source/rootfs$ cp/source/rootfs/source/rootfs_bak -a2、将我们的文件系统拷贝到/source 目录下$ cp_install /source/rootfs a3、设置 uboot 环境变量# setenv bootcmd tftp 33000000 zImage; go 33000000# setenvbootargsroot=nfsnfsroot=192.168.1.111:/source/rootfsinit=/linuxrcconsole=ttySAC0,115200ip=192.168.1.112# s
10、avenv重新启动开发板,查看是否能够正常挂载,功能是否正常三、制作 ramdisk文件系统通过 NFS 测试以后,就可以制作ramdisk 文件系统了,具体如下:1、制作一个大小为8M 的虚拟磁盘$ dd if=/dev/zero of=initrd.img bs=1k count=8192 (initrd.img 为 8M)2、格式化这个虚拟磁盘为ext2$ mkfs.ext2 -F initrd.img3、在 mount 下面创建initrd 目录作为挂载点名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -
11、- - - - - - 第 4 页,共 9 页 - - - - - - - - - $ mkdir /mnt/initrd4、将这个虚拟磁盘挂载到/mnt/initrd 下注意这里的initrd.img 不要和 Ubuntu 根目录下的initrd.img弄混了,同时 initrd.img 不能存放在 rootfs 目录中$ mount -t ext2 -o loop initrd.img /mnt/initrd5、将我们的文件系统写入initrd.img中将测试好的文件系统里的内容全部拷贝到/mnt/initrd 目录下面$ cp /source/rootfs/*/mnt/initrd a6
12、、卸载 initrd$ umount /mnt/initrd7、压缩 initrd.img 为 initrd.img.gz$ gzip -best -c initrd.img initrd.img.gz8、配置内核支持RAMDISK制作完initrd.img.gz 后,需要配置内核支持RAMDISK作为启动文件系统Device DriversSCSI device support- SCSI disk supportBlock devices-RAMdisk support(1)Default number of RAM disks(8192) Default RAM disk size (k
13、bytes)(修改为 8M)General setup-* Initial RAM filesystem and RAM disk (initramfs/initrd)support重新编译内核9、在 U-BOOT 命令行重新设置启动参数:# setenv bootcmd tftp 33000000 zImage ; tftp 30800000 initrd.img.gz ; go 33000000#setenvbootargsroot=/dev/ramrwinit=/linuxrcinitrd=0 x30800000,8Mconsole=ttySAC0,115200# savenv重新启动开
14、发板查看能否正常启动名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 四、制作 cramfs 文件系统1、cramfs 文件系统镜像制作由于系统提供制作cramfs 文件系统的工具,则可以利用。具体操作如下;$ mkfs.cramfs rootfs rootfs.cramfs2、将 rootfs.cramfs 拷贝到 /tftpboot 目录下$ cprootfs.cramfs/tftpboot3、将 rootfs.cramfs
15、烧写到 nandflash 的第三个分区上u-boot 下执行如下命令# tftp 30008000 rootfs.cramfs# nand erase500000 800000# nand write 30008000 500000 8000004、重新设置u-boot 启动参数# setenv bootcmd tftp33000000 zImage; go 33000000# setenv bootargs root=/dev/mtdblock2init=/linuxrcconsole=ttySAC0,115200# savenv启动开发板,测试是否成功。rootfarsight /roo
16、t # ls /binetclinuxrcsbintmpvardevlibmntproctestusrrootfarsight /root # mkdir testmkdir: Cannot createdirectory test: Read-only file system这是由 cramfs 文件系统决定的,cramfs 格式的文件系统是只读文件系统。五、制作jffs2文件系统1、zlib 的编译解压 zlib-1.2.3.tar.bz2 并进入 zlib-1.2.3 配置编译安装$ tar xvf zlib-1.2.3.tar.bz2$ cd zlib-1.2.3$ ./configu
17、re$ make$ make install名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 2、mtd 工具编译解压 mtd-snapshot-20050519.tar.bz2 并进入 mtd/util 编译安装$ tar xvfmtd-snapshot-20050519.tar.bz2$ cd mtd/util$ make$ make install这样我们的系统里就有了mkfs.jffs2 这个工具了3、jffs2 文件系统
18、镜像制作$ mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0 x4000 -pad=0 x800000-n$ cp rootfs.jffs2 /tftpboot4、jffs2 文件系统烧写# tftp 30008000 rootfs.jffs2# nand erase500000 800000# nand write 30008000 500000 8000005、设置 u-boot 启动参数# setenv bootcmdtftp33000000 zImage; go 33000000# setenv bootargs root=/dev/m
19、tdblock2init=/linuxrcrootfstype=jffs2 rwconsole=ttySAC0,115200# savenv重新启动开发板,查看是否成功名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 实验十四UDEV 的移植【实验目的】移植 udev 实验自动创建设备节点和自动挂在SD 卡和 U 盘。【实验环境】1、 Ubuntu 10.10 发行版2、 u-boot-2010.033、 FS2410平台4、 交
20、叉编译器arm-none-linux-gnueabi-gcc-4.3.2【实验步骤】1、下载 UDEV 源码 udev-080.tar.bz2,网址:http:/www.us.kernel.org/pub/linux/utils/kernel/hotplug/,并解压。2.交叉编译。修改 Makefile, 具体修改如下:CROSS = arm-none-linux-gnueabi-保存退出。执行命令: make 进行编译,然后执行arm-none-linux-gnueabi-stripudev udevd udevstartudevinfo udevtest。并拷贝这些文件到rootfs/b
21、in 目录下面。3.修改 /etc/fstab 为#devicemount-pointtype optionsdumpfsck orderproc/procprocdefaults00tmpfs/tmptmpfsdefaults00sysfs/syssysfsdefaults00tmpfs/devtmpfsdefaults004.修改 /etc/init.d/rcS, 添加如下内容/bin/udevd -daemon/bin/udevstart这样当我们插上U 盘和 SD 卡的时候,就可以看到我们的设备节点而不需要手动创建设名师资料总结 - - -精品资料欢迎下载 - - - - - - -
22、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 备节点。5.SD 卡或 U 盘自动挂载的实现拷贝实验代码中udev 目录到rootfs/etc拷贝 mount-sd.sh、 umount-sd.sh 、mount-usb.sh、 umount-usb.sh 到 rootfs/sbin 下这个时候当插入U 盘或 SD 卡时就会自动挂载在tmp 下。可以通过修改mount-sd.s 和mount-usb.sh 添加其他功能和修改挂载点。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -