实验四ramdisk根文件系统的制作一.实验目的1.熟悉根文件系统组织结构;2.定制、编译ramdisk根文件系统。
二.实验设备1.硬件:EduKit-IV 嵌入式教学实验平台、Mini2410 核心子板、PC 机;2.软件:Windows 2000/NT/XP、Ubuntu 8.04、其他嵌入式软件包。
三.实验内容利用6.3 中的已经完成的文件系统,生成一个根文件系统镜像。
四.实验原理ramdisk是内核初始化的时候用到的一个临时文件系统,是一个最小的linuxrootfs系统,它包含了除内核以外的所有linux系统在引导和管理时需要的工具,做为启动引导驱动,包含如下目录:bin,dev,etc,home,lib,mnt,proc,sbin,usr,var。
还需要有一些基本的工具:sh,ls,cp,mv……(位于/bin 目录中);必要的配置文件:inittab,rc,fstab……位于(/etc目录种);必要的设备文件:/dev/tty*,/dev/console,/dev/men……(位于/dev目录中);sh,ls等工具必要的运行库:glibc。
1.制作ramdisk根文件系统映像1)单击菜单应用程序->附件->终端打开终端,设置环境变量:$ source /usr/local/src/EduKit-IV/Mini2410/set_env_linux.sh$ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/path.sh2)执行命令切换到ramdisk实验目录下:$cd $SIMPLEDIR/6.4-ramdisk3)运行脚本文件:$ sudosh ramdisk-install.shshell 脚本命令说明:#!/bin/bash## ramdisk-install.sh - Make ramdiskfilesystem.## Copyright (C) 2002-2007 <># Created. lusi<luce_008@>sudodd if=/dev/zero of=ramdiskbs=1M count=2......sudogzip -v9 ramdisksudochmod 777 ramdisk.gzsudormdir tempsudocp -av ramdisk.gz /home/example创建一个空的ramdisk镜像:sudodd if=/dev/zero of=ramdiskbs=1M count=2用dd命令建立了一个名为ramdisk的ramdisk基本文件;ramdisk image 文件名为ramdisk,大小为2M。
格式化文件系统:sudo echo "y" | sudo mke2fs -m 0 -N 3500 ramdisk挂载文件系统:sudomkdir -p tempsudo mount -o loop ramdisk temp拷贝 6.3 节中已经创建好的文件结构到temp 文件夹:sudocp -av root-mini/* temp/卸载;sudoumount temp生成压缩文件;sudogzip -v9 ramdisk修改root-mini.gz 的执行权限;sudochmod 777 ramdisk.gz删除临时文件夹ramdisk,拷贝生成的ramdisk根文件系统映像到home/example 目录。
sudormdir tempsudocp -av ramdisk.gz /home/example2.固化引导ramdisk文件系统用户可以根据前面章节内容(章节4.6.1)更新刚制作生成的ramdisk.gz 到Mini2410-IV 的NandFlash中,或者在Ubuntu 下采用minicom终端更新。
使用minicom固化ramdisk文件系统映像的方法跟前节固化vivi映像的步骤相似,启动vivi后,输入命令使用xmodem协议来传送新制作好的ramdisk文件系统映像ramdisk.gz(/home/example/ramdisk.gz):vivi> load flash ramdisk x后面的步骤参考前节vivi的传送,仅需要把需要传送的文件名替换为mdisk.gz即可,传送完毕minicom串口终端打印信息如下:图6-4-1 ramdisk映像传送完毕重启实验系统,并按空格进入到vivi的命令行界面,输入命令修改vivi启动参数为引导ramdisk根文件系统启动:vivi>param set ramdisk_copy 1vivi>param set linux_cmd_line "initrd=0x30800000,0x200000 root=/dev/ramconsole=ttySAC1"vivi>param save重新启动实验系统,将可以在minicom终端看到ramdisk文件系统的完成信息:VIVI version 0.1.4 (embest@ embest -laptop) (gcc version 2.95.3 20010315 (release)) #TMMU table base address = 0x33DFC000Succeed memory mapping.NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)Could not found stored vivi parameters. Use default vivi parameters.Press Return to start the LINUX now, any other key for viviCopy linux kernel from 0x00030000 to 0x30008000, size = 0x001d0000 ... size = 14donezImage magic = 0x016f2818Copy ramdisk from 0x00200000 to 0x30800000, size = 0x00200000 ... size = 2097152doneSetup linux parameters at 0x30000100linux command line is: "initrd=0x30800000,0x200000 root=/dev/ram console=ttySAC"MACH_TYPE = 193NOW, Booting Linux......Uncompressing Linux.............................................................……Bluetooth: Core ver 2.7NET: Registered protocol family 31Bluetooth: HCI device and connection manager initializedBluetooth: HCI socket layer initializedS3C2410 DMA Driver, (c) 2003-2004 Simtec ElectronicsDMA channel 0 at c4800000, irq 33DMA channel 1 at c4800040, irq 34……Bluetooth: L2CAP socket layer initializedBluetooth: RFCOMM ver 1.5Bluetooth: RFCOMM socket layer initializedBluetooth: RFCOMM TTY layer initializedBluetooth: BNEP (Ethernet Emulation) ver 1.2Bluetooth: BNEP filters: protocol multicast802.1Q VLAN Support v1.8 Ben Greear<greearb@>All bugs added by David S. Miller <davem@>RAMDISK: Compressed image found at block 0EXT2-fs warning: maximal mount count reached, running e2fsck is recommended VFS: Mounted root (ext2 filesystem).Mounted devfs on /devFreeing init memory: 420Kinit started: BusyBox v1.4.2 (2008-05-28 09:24:20 CST) multi-call binary Starting pid 762, console /dev/console: '/etc/init.d/rcS'Please press Enter to activate this console.Starting pid 772, console /dev/console: '/bin/sh'running /etc/profile~#。