嵌入式 linux 下ramdisk 根文件制作及错误的解决

原创 2013年12月02日 14:49:19

 

1、建立loop设备的临时挂载点

    #mkdir/mnt/loop

    2、建立文件系统映象

    #ddif=/dev/zero of=/tmp/loop_tmp bs=1k count=15360

    以上2条同二中是一样

    3、mke2fs–F –v –m 0 /tmp/loop_tmp

    此处-F选项将可迫使mkefs2在文件上运行。否则mke2fs会抱怨/tmp/loop_tmp不是个块设备(在上面说了,我的理解是/tmp/loop_tmp文件映象必须是块设备文件,前面的做法是用块设备文件/dev/loop0与之相关联)。-v 选项指出mke2fs应该以verbose模式执行,-m0指出不必在文件系统上为“超级用户”保留任何区块,因为在嵌入式系统中通常是单用户系统,为“超级用户”保留区块没有意义。

    4、挂载映象文件

    #munt–o loop /tmp/loop_tmp /mnt/loop

    挂载后,在/mnt/loop下就可以对文件系统的内容进行操作。

    5、cp操作,同二中的第6条

    6、卸载映象文件

    #umount/mnt/loop

    7、压缩映象文件

    #gzip–v9 /tmp/loop_tmp

    第三中的做法与第二中的做法不同,在第二中,把块设备文件/dev/loop0与映象文件/tmp/loop_tmp相关联,然后对/dev/loop0及虚拟盘进行操作,就作用在/ltmp/loop_tmp上。

    而第三中,是直接对映象文件/tmp/loop_tmp进行操作,用mke2fs–F …将其当作块设备文件进行操作。

 

 

 

本文讲述了Linux下Ramdisk根文件系统制作过程。

    一、在一个已建好的文件系统上进行修改

    设已建立好的文件系统压缩文件为ramdisk.gz

    1、解压

    #cdramdisk.gz所在目录

    #gunzipramdisk.gz

    在解压后,得到文件系统镜象文件ramdisk,覆盖了原来的压缩文件

    2、镜象文件挂载

    镜象文件必须经过挂载后才能看到文件系统中的各个目录和详细内容

    #mkdir/mnt/loop /* /mnt/loop 是文件系统要挂载到的目录

    #mount–o loop ramdisk /mnt/loop

    在挂载目录/mnt/loop下对文件系统进行操作

    #cd/mnt/loop

    #do_whatever_you_want_to_do/*根据需要增加、删减或是修改文件系统的内容

    4、卸装文件系统

    跳到/mnt/loop目录外,否则无法卸装,提示busy

    #cdramdisk所在目录

    #umount/mnt/loop

    5、压缩文件系统

    #gzip–v9 ramdisk /*生成ramdisk.gz压缩文件

    二、自己建立根文件系统

    1、建立loop设备的临时挂载点

    #mkdir/mnt/loop

    2、建立一个大小为15M的临时文件

    #ddif=/dev/zero of=/tmp/loop_tmp bs=1k count=15360

    注意可根据自己的需要建立大小合适的文件系统,更改count大小即可。

    此处以dd命令建立一个了一个15360KB文件系统映象,存于/tmp/loop/tmp,并以.dev/zero对它进行初始化。用这种方式对文件系统进行初始化,稍后当我们使用gzip命令压缩整个映象时,将让文件系统中未使用的部分获得最大压缩比。

    3、将设备文件与临时文件联系起来

    #losetup/dev/loop0 /tmp/loop_tmp

    把设备文件/dev/loop0与临时镜象文件/tmp/loop_tmp联系起来,/dev/loop0是个块设备

    如果出现“ioctl:LOOP_SET_FD:设备或资源忙”,说明/dev/loop0设备还和一文件联系,可用losetup/dev/loop0查看地,并可用-d 删除。

  如:losetup -d /dev/loop0 即可删除。

    4、将/dev/loop0格式化为ext2文件系统

    #mke2fs–m 0 /dev/loop0

    -m0指出不必在文件系统上为“超级用户”保留任何区块。

    Linux内核识别两种可以直接考贝的到ramdisk的文件系统,它们是minix和ext2,minix是linux早期版本所用的文件系统,从minix操作系统而来,ext2性能更好。

    5、把虚拟盘挂在节点/mnt/loop上

    #mount–t ext2 /dev/loop0 /mnt/loop

    6、用cp–af命令将所需要文件拷贝到虚拟盘上

    cp–help查看cp 用法。cp –arf … -r表示拷贝目录

    /bin,/dev, /etc, /lib, proc, /sbin,/usr都是不可或缺的目录,建议保留/tmp,/var,不过可以为空。而为多用户提供可扩展环境的所有目录(例如/home、/mnt、/opt、/root)都应该省略。

    用cp复制文件时,建议把已建立好的文件系统中的内容全部拷贝过来,这样比较简单,不需要再去编译安装busybox等。当然自己也可以那样去做。

    7、卸载文件系统,得到的/tmp/loop_tmp就是文件系统映象。

    #cd/mnt/loop以外的目录 (否则会提示无法卸载,设备busy)

    #umount/mnt/loop

    8、压缩文件系统映象

    #gzip–v9 /tmp/loop_tmp >/tftpboot/ramdisk.gz

    在/tftpboot下生成了ramdisk.gz,这样一个内存文件镜象生成了。

    或只是#gzip–v9 /tmp/loop_tmp,则就是在/tmp下生成loop_tmp.gz文件,一样的。

    出现的错误

 1、

## Booting kernel from Legacy Image at 01000000...                             
                                                                                
   ImageName:  Linux-2.6.35+                                                  
                                                                                
  Created:     2011-02-18   7:31:27UTC                                       
                                                                                
   ImageType:   PowerPC Linux KernelImage (gzipcompressed)                   
                                                                                
   DataSize:    3384101Bytes = 3.2MiB                                        
                                                                                
   Load Address:00000000                                                       
                                                                                
   Entry Point: 00000000                                                       
                                                                                
   Verifying Checksum ...OK                                                    
                

Wrong Ramdisk Image Format  Ramdisk image iscorrupt or invalid 

解决方式 

  mkimage -n 'uboot ext2 ramdisk rootfs' -A ppc -Olinux -T ramdisk -C gzip -d rootfs.ext2.gz rootfs.ext2.gz.uboot

    具体参看mkimage的用法 及原因


2、系统启动后登录用户不正确

  删除etc/securetty 文件即可

    三、自己建立根文件系统(与二中不同)

    1、建立loop设备的临时挂载点

    #mkdir/mnt/loop

    2、建立文件系统映象

    #ddif=/dev/zero of=/tmp/loop_tmp bs=1k count=15360

    以上2条同二中是一样

    3、mke2fs–F –v –m 0 /tmp/loop_tmp

    此处-F选项将可迫使mkefs2在文件上运行。否则mke2fs会抱怨/tmp/loop_tmp不是个块设备(在上面说了,我的理解是/tmp/loop_tmp文件映象必须是块设备文件,前面的做法是用块设备文件/dev/loop0与之相关联)。-v 选项指出mke2fs应该以verbose模式执行,-m0指出不必在文件系统上为“超级用户”保留任何区块,因为在嵌入式系统中通常是单用户系统,为“超级用户”保留区块没有意义。

    4、挂载映象文件

    #munt–o loop /tmp/loop_tmp /mnt/loop

    挂载后,在/mnt/loop下就可以对文件系统的内容进行操作。

    5、cp操作,同二中的第6条

    6、卸载映象文件

    #umount/mnt/loop

    7、压缩映象文件

    #gzip–v9 /tmp/loop_tmp

    第三中的做法与第二中的做法不同,在第二中,把块设备文件/dev/loop0与映象文件/tmp/loop_tmp相关联,然后对/dev/loop0及虚拟盘进行操作,就作用在/ltmp/loop_tmp上。

    而第三中,是直接对映象文件/tmp/loop_tmp进行操作,用mke2fs–F …将其当作块设备文件进行操作。

相关文章推荐

制作Ramdisk文件系统

主机:ubuntu14.04 工具链:arm-none-linux-gnueabi-4.8.3 one_step: 配置内核: #make menuconfig ARCH=arm 打开配置菜单,修改两...

ramdisk 问题

1、 ## Booting kernel from Legacy Image at 01000000 ...                                             ...

tftp问题总结

问题(一)在宿主机的Linux操作系统上没有安装tftp程序。(1)解决方法:一般在在redhat 9.0的第三张光盘中,有tftp-server的安装rpm包(tftp-server-0.32-4....

PowerPC平台 linux移植一

在PowerPC平台 u-boot移植基础上,移植Linux内核,具体移植过程如下: 1.修改顶层Makefile ARCH        ?= powerpc CROSS_COMPILE   ...

linux+ramdisk移植的时候遇到的某些问题及解决方法

1.Uncompressing Linux................................................................ done, booting ...

ramdisk文件系统的介绍与制作

一、文件系统与根文件系统     1、文件系统         文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)分区上的文件的存储方法和数据结构,即在存储设备...

串口调试值printk.c

原创博客:欢迎转载,转载请注明出处 http://www.cnblogs.com/veryStrong/p/6218383.html 1、简介(基于s3c2440 linux) 在内核调试...

bootargs参数详解

U-boot的环境变量值得注意的有两个: bootcmd 和bootargs。 u-bootcmd     前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不...

嵌入式文件系统 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs

原文 Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VF...
  • cjsycyl
  • cjsycyl
  • 2012年07月05日 14:55
  • 600

制作嵌入式linux文件系统(ramdisk,cramfs,squashfs)

一、什么是文件系统 (Filesystem); A directory structure contained within a disk drive or disk area. The tot...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 linux 下ramdisk 根文件制作及错误的解决
举报原因:
原因补充:

(最多只允许输入30个字)