文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>利用LTIB生成的根文件系统修改定制我们的ramdisk..

利用LTIB生成的根文件系统修改定制我们的ramdisk..

时间:2009-04-07  来源:starby


LTIB生成文件系统(ramdisk, jffs, jffs2, cramfs)镜像的子功能函数mk_fs_image位于安装目录的bin/Ltibutils.pm, 此文件是perl的模块库,定义了很多函数,由安装目录下的perl执行脚本ltib进行调用。
  对于LTIB自动生成的文件系统位于安装目录下的rootfs目录(包含文件多,比较大)
在rootfs目录的基础上又进行裁减(如去除含有内核镜像的/boot目录, /usr/lib/*.a, /usr/include/*等),会生成比较适合下载到开发板上的根文件系统rootfs.tmp(此目录默认情况下编译结束会z自动删除)。
 修改Ltibutils.pm脚本(注释818     rm -rf $stage)或者在使用./ltib --preconfig config/platform/mpc8349itx/defconfig-min-fs 编译弹出第一个配置菜单时进入
 --- Target Image Generation
  Options  ---> 进入选择
  [*] Keep temporary staging directory
 这样编译结束会保留临时根文件系统rootfs.tmp
在rootfs.tmp的基础上添加设备文件,生成压缩(genext2fs, gzip)的文件为rootfs.ext2.gz(RAMDISK文件系统, ext2格式可读写)
用于uboot启动的文件系统镜像是rootfs.ext2.gz.uboot
      定制我们需要的文件系统有三种方式:   A: 只需添加少量文件到文件系统中
rootfs.ext2.gz 在Ltibutils.pm脚本中是先得到根文件系统的大小(du -slk),然后再添加一定大小(语句:      $fs_size += $fs_size >= 20000 ? 16384 : 2400;), 然后用此大小来做根分区的大小。所以可以在rootfs.ext2.gz中添加少量文件.(只要不超过根分区的大小即可)
利用rootfs.ext2.gz修改添加文件到文件系统镜像方法:
$ mkdir -p ~/temp/loop
$ cp /usr/local/mpc8349/small/rootfs.ext2.gz ~/temp
$ cd ~/temp
$ gunzip rootfs.ext2.gz
$ su root
# mount -o loop rootfs.ext2 loop/
# cd loop && ls
# df ./     ## 查看剩余空间大小,空间使用率
# 添加自己的应用程序库脚本等到目录中,或修改启动脚本etc/rc.d/rcS(注意权限)
# cd /home/liuby/temp/
# umount loop/
# exit
$ gzip rootfs.ext2  或者gzip -v9 rootfs.ext2
$ mkimage -n 'uboot ext2 ramdisk rootfs' -A ppc -O linux -T ramdisk -C gzip -d  rootfs.ext2.gz rootfs.ext2.gz.uboot
  ## 在镜像前添加64字节的头,为uboot提供必要的信息。
  ## 注: mkimage 位于 /opt/freescale/ltib/usr/bin/mkimage, 可以将其复制到/usr/bin/目录下
  ## /opt/freescale/ltib/usr/bin/下有许多常用工具
  ## mkimage用法参考http://blog.chinaunix.net/u2/80953/showart.php?id=1890789
$ ls  rootfs.ext2.gz.uboot   ## 即可下载使用
 
B: 自由定制根分区大小
同样利用rootfs.ext2.gz
$ mkdir -p ~/temp/loop
$ cp /usr/local/mpc8349/small/rootfs.ext2.gz ~/temp
$ cd ~/temp
$ gunzip rootfs.ext2.gz
$ su root
# mount -o loop rootfs.ext2 loop/
# cd loop && ls
# df ./ 
# 添加自己的应用程序库脚本等到目录中,或修改启动脚本etc/rc.d/rcS(注意权限)
# fs_size=`LANG=C du -slk loop/ | cut -f1` ## 统计loop目录大小
# fs_count=`find loop/ | wc -l`  ## 统计loop/目录中的文件节点数目, 功能同perl 中find( sub { $fs_count++}, loop/ );
# echo $fs_count && echo $fs_size
# inodes=`expr $fs_count + 400`  ## inodes为索引节点数。下面创建的ext2文件系统中最多有$inodes个节点
# blocks=`expr $fs_size + 2400`  ## 为根分区增加一些空闲空间(2400kB,也可以更大些)
# echo $inodes  && echo $blocks
# genext2fs -U -b $blocks -i $inodes -d loop/  loop.ext2
  ## 根据loop目录创建ext2文件系统镜像,分区大小为$blocks kByte. inode数目为$inodes
  ## 注: genext2fs 位于 /opt/freescale/ltib/usr/bin/genext2fs, 可以将其复制到/usr/bin/目录下
  ## genext2fs用法见附录
# gzip -v9 loop.ext2
# mkimage -n 'uboot ext2 ramdisk rootfs' -A ppc -O linux -T ramdisk -C gzip -d  loop.ext2.gz loop.ext2.gz.uboot
# exit && ls loop.ext2.gz.uboot   ## 根文件系统loop.ext2.gz.uboot
      C: 自由定制根文件系统
利用编译时的临时文件系统目录rootfs.tmp
rootfs.tmp其实就是相当于创建常用目录,添加一些命令和Busybox,可以试着自己做一个
$ cd /usr/local/mpc8349/small/   ## ltib的安装目录, 配置编译后产生rootfs.tmp目录
$ rm -f rootfs.ext2.gz  rootfs.ext2.gz.uboot
$ cd rootfs.tmp/ && ls
$ 添加自己的应用程序或库文件或脚本到对应的目录中,或修改启动脚本etc/rc.d/rcS(注意权限)
$ cd /usr/local/mpc8349/small/rootfs.tmp/
$ fs_size=`LANG=C du -slk rootfs.tmp/ | cut -f1`
$ fs_count=`find rootfs.tmp/ | wc -l`
$ echo $fs_count && echo $fs_size
$ inodes=`expr $fs_count + 400` 
$ blocks=`expr $fs_size + 2400`
$ echo $inodes  && echo $blocks
$ genext2fs -v -U -b $blocks -i $inodes -D bin/device_table.txt -d rootfs.tmp/  rootfs.ext2
  ## -D bin/device_table.txt是根据bin/device_table.txt来产生/dev下设备节点表
  ## -v 显示文件系统结构(可不用)
$ gzip -v9 rootfs.ext2
$ mkimage -n 'uboot ext2 ramdisk rootfs' -A ppc -O linux -T ramdisk -C gzip -d  rootfs.ext2.gz rootfs.ext2.gz.uboot

注: 如果ext2文件系统大小(blocks kB)超过默认的4096kB, 则需要在uboot的环境变量中添加启动命令行参数来指定ramdisk_size大小至少为${blocks}kB. 例如:
=> setenv bootargs root=/dev/ram rw ramdisk_size=$blocks

附录: genext2fs 用法:  genext2fs [options] image
根据目录或文件为嵌入式系统创建产生一个ext2文件系统镜像(Create an ext2 filesystem image from directories/files);
它是嵌入式中生成ramdisk文件系统的重要工具(ext2格式, 可写可读)
  -x image         Use this image as a starting point
  -d directory     Add this directory as source
  -b blocks        Size in blocks(指定大小: 1 block = 1kB)
  -i inodes        Number of inodes
  -r reserved      Number of reserved blocks
  -g path          Generate a block map file for this path
  -e value         Fill unallocated blocks with value
  -z               Make files with holes
  -D,-f            Use the named FILE as a device table file
  -q               Squash permissions and owners making all files be owned by root
  -U               Squash owners making all files be owned by root
  -P               Squash permissions on all files
  -v               Print resulting filesystem structure
  -h               Show this help

genext2fs调用的文件device_table.txt参考自http://buildroot.uclibc.org/网站的/trunk/buildroot/target/generic/device_table.txt
附上面用的device_table.txt #
# When building a target filesystem, it is desirable to not have to
# become root and then run 'mknod' a thousand times.  Using a device
# table you can create device nodes and directories "on the fly".
#
# This is a sample device table file for use with genext2fs.  You can
# do all sorts of interesting things with a device table file.  For
# example, if you want to adjust the permissions on a particular file
# you can just add an entry like:
#   /sbin/foobar        f       2755    0       0       -       -       -       -       -
# and (assuming the file /sbin/foobar exists) it will be made setuid
# root (regardless of what its permissions are on the host filesystem.
# Furthermore, you can use a single table entry to create a many device
# minors.  For example, if I wanted to create /dev/hda and /dev/hda[0-15]
# I could just use the following two table entries:
#   /dev/hda    b       640     0       0       3       0       0       0       -
#   /dev/hda    b       640     0       0       3       1       1       1       15
#
# Device table entries take the form of:
# <name>    <type>      <mode>  <uid>   <gid>   <major> <minor> <start> <inc>   <count>
# where name is the file name,  type can be one of:
#       f       A regular file
#       d       Directory
#       c       Character special device file
#       b       Block special device file
#       p       Fifo (named pipe)
# uid is the user id for the target file, gid is the group id for the
# target file.  The rest of the entries (major, minor, etc) apply only
# to device special files.
# Have fun
# -Erik Andersen <[email protected]>
#
#<name>  <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
/dev  d 755 0 0 - - - - -
/dev/pts d 755 0 0 - - - - -
/dev/shm d 755 0 0 - - - - -
/dev/input d 755 0 0 - - - - -
#/tmp  d 1777 0 0 - - - - -
#/etc  d 755 0 0 - - - - -
#/home/default d 2755 1000 1000 - - - - -
#<name>     <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
#/bin/busybox    f 4755 0 0 - - - - -
#/etc/shadow    f 600 0 0 - - - - -
#/etc/passwd    f 644 0 0 - - - - -
#/etc/network/if-up.d   d 755 0 0 - - - - -
#/etc/network/if-pre-up.d  d 755 0 0 - - - - -
#/etc/network/if-down.d   d 755 0 0 - - - - -
#/etc/network/if-post-down.d  d 755 0 0 - - - - -
#/usr/share/udhcpc/default.script f 755 0 0 - - - - -
# uncomment this to allow starting x as non-root
#/usr/X11R6/bin/Xfbdev  f 4755 0 0 - - - - -
# Normal system devices
/dev/mem c 640 0 0 1 1 0 0 -
/dev/kmem c 640 0 0 1 2 0 0 -
/dev/null c 666 0 0 1 3 0 0 -
/dev/zero c 666 0 0 1 5 0 0 -
/dev/random c 666 0 0 1 8 0 0 -
/dev/urandom c 666 0 0 1 9 0 0 -
/dev/ram b 640 0 0 1 1 0 0 -
/dev/ram b 640 0 0 1 0 0 1 4
/dev/loop b 640 0 0 7 0 0 1 2
/dev/rtc c 640 0 0 10 135 - - -
/dev/console c 666 0 0 5 1 - - -
/dev/tty c 666 0 0 5 0 - - -
/dev/tty c 666 0 0 4 0 0 1 8
/dev/ttyp c 666 0 0 3 0 0 1 10
/dev/ptyp c       666     0       0       2       0       0       1       10
/dev/ptmx c 666 0 0 5 2 - - -
/dev/ttyP c 666 0 0 57 0 0 1 4
/dev/ttyS c 666 0 0 4 64 0 1 4
/dev/fb  c 640 0 5 29 0 0 32 4
#/dev/ttySA c 666 0 0 204 5 0 1 3
/dev/psaux c 666 0 0 10 1 0 0 -
/dev/ppp c 666 0 0 108 0 - - -
/dev/ttyAM c 666 0 0 204 16 0 1 4
/dev/ttyCPM c 666 0 0 204 46 0 1 2
# MTD stuff
/dev/mtd c 640 0 0 90 0 0 2 7
/dev/mtdblock b 640 0 0 31 0 0 1 7
#Tun/tap driver
/dev/net d 755 0 0 - - - - -
/dev/net/tun c 660 0 0 10 200 - - -
# Audio stuff
/dev/audio c 666 0 29 14 4 - - -
/dev/audio1 c 666 0 29 14 20 - - -
/dev/dsp c 666 0 29 14 3 - - -
/dev/dsp1 c 666 0 29 14 19 - - -
/dev/sndstat c 666 0 29 14 6 - - -
# User-mode Linux stuff
/dev/ubda b 640 0 0 98 0 0 0 -
/dev/ubda b 640 0 0 98 1 1 1 8
# IDE Devices
/dev/hda b 640 0 0 3 0 0 0 -
/dev/hda b 640 0 0 3 1 1 1 8
/dev/hdb b 640 0 0 3 64 0 0 -
/dev/hdb b 640 0 0 3 65 1 1 8
#/dev/hdc b 640 0 0 22 0 0 0 -
#/dev/hdc b 640 0 0 22 1 1 1 8
#/dev/hdd b 640 0 0 22 64 0 0 -
#/dev/hdd b 640 0 0 22 65 1 1 8
# SCSI Devices
/dev/sda b 640 0 0 8 0 0 0 -
/dev/sda b 640 0 0 8 1 1 1 8
/dev/sdb b 640 0 0 8 16 0 0 -
/dev/sdb b 640 0 0 8 17 1 1 8
/dev/sdc b 640 0 0 8 32 0 0 -
/dev/sdc b 640 0 0 8 33 1 1 8
/dev/sdd b 640 0 0 8 48 0 0 -
/dev/sdd b 640 0 0 8 49 1 1 8
#/dev/sde b 640 0 0 8 64 0 0 -
#/dev/sde b 640 0 0 8 65 1 1 8
#/dev/sdf b 640 0 0 8 80 0 0 -
# MD devices
/dev/md  b 640 0 0 9 0 0 1 4
# SPI devices
/dev/qspi c 666 0 0 126 0 - - -
# Watchdog timer port
/dev/watchdog c 644 0 0 10 130 - - -
# Input
/dev/input/mice c 644 0 0 13 63 - - -
/dev/input/event c 644 0 0 13 64 0 1 3
相关阅读 更多 +
排行榜 更多 +
木头人挑战游戏

木头人挑战游戏

休闲益智 下载
荒野神枪手

荒野神枪手

休闲益智 下载
步步通行

步步通行

学习教育 下载