如何制作ramdiskfs

如何制作ramdiskfs


参考
http://blog.csdn.net/u014213012/article/details/51582826


问1:制作ramdiskfs,需要内核启动,内核需要配置哪些选项功能?
答1:1.修改内核选项
  a):General setup-->选择 Initial RAM filesystem and RAM disk...... 项
b):Device Drivers-->Block devices-->选择 RAM block device support 项
c) :选上Default RAM disk size kbytes选项为(4096)Default RAM disk size kbytes,因为制作的ramdisk是4096KB大小的。
    如果这个大小和你做的ramdisk不匹配,则启动时仍然会出现kernel panic内核恐慌,提示ramdisk格式不正确,挂载不上ramdisk。
    然后特别要注意的一点是,ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。
    所以一定要在make menuconfig ARCH=arm的时候进入File systems菜单,选上<*> Second extended fs support。
    以提供内核对ext2文件系统的支持。我以前添加过了ext2文件系统了,然后保存配置退出。这样就为内核添加好了ramdisk启动功能和ramdisk的驱动支持了。
    
2.修改内核启动参数
a): 修改.config,修改CONFIG_CMDLINE=""的定义
修改为CONFIG_CMDLINE="initrd=0x53000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M"    
(0x53000000,0x200000-ramdisk镜像在内存的加载地址。0x200000:大小)保存。
意思为从ramdisk启动,ramdisk压缩文件起始地址在内存地址0x53000000处,文件大小为0x200000。
此参数也可以在make menuconfig ARCH=arm时进入Boot options菜单,然后在Default kernel command string里修改。效果是一样的。

b):  或者不修改.config,而是用u-boot的bootargs环境变量来传递启动参数。
同样也是修改该环境变量为bootargs=initrd=0x53000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M
并saveenv保存u-boot环境变量



问2:如何制作ramdiskfs,有哪些步骤?
答2:


a.建立目录
#sudo mkdir ramdiskfs
#cd ramdiskfs
#sudo mkdir mnt tmp var usr sys proc etc lib dev bin sbin root home
#sudo mkdir usr/bin usr/sbin usr/lib lib/modules


b.添加设备文件
#sudo cd dev
#sudo mknod -m 666 console c 5 1 (备注:创建控制台设备文件)
#sudo mknod -m 666 null    c 1 3  (备注:创建一个空的设备文件)




c.添加配置文件
(1):第一种方法:可以复制busybox中的/examples/bootfloppy/etc的文件
(2):参考以前已经有的文件系统的配置文件复制到创建的ramdiskfs的 /etc目录


d.编译busybox
(1). 下载busybox,网站https://busybox.net/downloads/   下载想要的目录。
      或者wget https://busybox.net/downloads/busybox-1.24.1.tar.bz2 
      (备注:wget命令下载源文件到当前目录,-p可以指定目录,详情百度或者wget --help)
(2). 解压busybox
(3).  配置busybox
进入busybox目录执行#make menuconfig
进入Busybox Settings -> build Options ->选中"Build busybox as a static binary“,即静态链接,免去拷贝大量的库文件。
指定cross compile prefix :(一般是:arm-linux-)我这里是指定特定的编译工具链/arm-linux/arm-none-linux-gnueabi-4.8.3/bin/arm-none-linux-gnueabi-
(备注:这里必须指定,否则编译出来的busybox会少0.1M,在bootloader加载ramdisk.gz时会报没有可用的块,报kernel panic)
Busybox Installation Prefix (/xxx/ramdiskfs),修改该选项表明编译后的busybox将安装到该位置。
(4)编译、安装busybox
#make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- (上面指定了这里可以不需要)
几分钟编译完成后
#make install
安装到Busybox Installation Prefix (/xxx/ramdiskfs)设定的目录里。当前为我要制作的根文件系统目录(/xxx/ramdiskfs)




e.制作ramdisk根文件系统镜像
(1)第一种方法:(建议采用这种方便)
上http://genext2fs.sourceforge.net/下载可以简单方便的制作ramdisk文件系统的工具genext2fs,这样就不用像网上大多数说的那样繁琐的制作ramdisk映像了,
当前最新版本为genext2fs-1.4.1.tar.gz ,下载具体地址:http://sourceforge.net/projects/genext2fs/?source=dlp
解压,配置(./configure),编译(make),在当前目录下生成该工具genext2fs,并将其放入宿主机的/sbin/目录下以方便使用。
跳转到要制作的ramdiskfs的上一级目录
#genext2fs -b 4096 -d ramdiskfs ramdisk
-b是指制作的ramdisk大小为4096K字节
-d是指要制作成ramdisk的根文件系统目录
最后的ramdisk是制作出来的ramdisk的名字,当然可以改名了。
#gzip -v9 -f ramdisk
将该ramdisk以最优方式压缩为ramdisk.gz   






================================================
虚拟内存文件系统有3种实现方式:
1.ramdisk
2.ramfs
3.tmpfs
是一个虚拟内存文件系统,它不同于传统的用块设备形式来实现的Ramdisk,也不同于针对物理内存的Ramfs。
Tmpfs可以使用物理内存,也可以使用交换分区。在Linux内核中,虚拟内存资源由物理内存(RAM)和交换分区组成,这些资源是由内核中的虚拟内存子系统来负责分配和管理。
Tmpfs向虚拟内存子系统请求页来存储文件,它同Linux的其它请求页的部分一样,不知道分配给自己的页是在内存中还是在交换分区中。同Ramfs一样,其大小也不是固定的,而是随着所需要的空间而动态的增减。
在编译内核时须将File systems -->> pseudo filesystems -->>  Virtual memory file system support支持选上。


设置/tmp目录为tmpfs,大小128M
/ # vi /etc/fstab 
proc            /proc           proc    defaults        0       0
sysfs           /sys            sysfs   defaults        0       0
tmpfs           /dev            tmpfs   defaults        0       0
tmpfs          /tmp            tmpfs   defaults,size=128M    0  0


~
/ # cd /tmp/
/tmp # ls
/tmp # tftp -g -r multi.fs.img 172.16.151.201
multi.fs.img           8% |**                             | 10991k  0:02:36 ETA










mcu的uboot配置参数
=========================================================


setenv  bootcmd 'mmc read 0x0 0x42000000 0x800 0x2000;mmc read 0x0 0x41000000 0x2800 0x3000; bootm 0x41000000'


启动ramdiskfs
setenv bootargs 'initrd=0x42000000,0x400000 root=/dev/ram rw init=/linuxrc console=ttyAMA0 mem=192M'  
启动ext3
setenv bootargs 'mem=192M console=ttyAMA0,115200 root=/dev/mmcblk0p4 rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(boot),4M(ramdisk),6M(kernel),200M(rootfs),-(userdata)'
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值