细说嵌入式Linux文件系统的制作方法

发表于:2011-9-20 10:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:kit    来源:51Testing软件测试网采编

  7、同样/usr/bin下面也是busybox的link

  basename dirname env free id logger reset tail tr tty uptime which xargs

  awk cut du 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 modules into the kernel.  
  • insmod /lib/modules/2.6.13.2/intel/ixp400.ko  
  • # Firmware code for NPE Engine.  
  • cat /etc/IxNpeMicrocode.dat > /dev/ixNpe  
  • insmod /lib/modules/2.6.13.2/intel/ixp400_eth.ko netdev_max_backlog=500 
  • insmod /lib/modules/led.ko  
  • insmod /lib/modules/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方面,请大家多注意这两方面。

    22/2<12
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号