ARM中的Ramdisk的使用

转载 2007年10月07日 00:03:00
 Linux启动时,initrd可以在内存中,也可以在 Flash或其它可用的设备上;initrd文件格式为: romfs/Minix/ext2/gzip;相关的函数:drivers/block/rd.c: identify_ramdisk_image ;
加载位置: init/main.c: prepare_namespace;
需要的参数为:initrd_start 和 initrd_end;

ARM如何传递initrd参数:ARM传递initrd参数可以分为两种情况:
1.从外部获取的情况:
arch/arm/kernel/setup.c: 从 TAG参数中获取(tags简单来说内存中一段具有一定格式的标签数据和参数,核心和Loader所共知的一种格式,由loader来构造,由核心来读取);通过Loader或核心配置的命令行参数中应包含 root=/dev/ram的参数;

2.不从外部获取的情况:
可以在 fix_up 中来设置,就像上面代码中提到的一样: 
aster2_fixup(struct machine_desc *desc, struct param_struct *unused,
char **cmdline, struct meminfo *mi)
{
ROOT_DEV = MKDEV(RAMDISK_MAJOR, 0);
setup_ramdisk(1, 0, 0, CONFIG_BLK_DEV_RAM_SIZE);
setup_initrd(0x04200000, 4 * 1024 * 1024);


这段代码的效果有几个:
(1)第一行:设置根文件系统为 ramdisk(相当于root=/dev/ram0,这种情况下核心命令行参数可以不需要这一行)
(2) 第二行:加载ramdisk;
(3) 第三行:通过setup_initrd设置initrd的参数,即(虚拟的)起始和结束地址;

   Loader向内核传参数通过这样的代码: BOOT_PARAMS(0x04000100); 0x04000100是个非常重要的地址,核心将从这个地址开始分析 tag参数,可以传递的参数包括:物理内存信息(ATAG_MEM)、ramdisk信息(ATAG_RAMDISK已经不再使用),initrd信息(ATAG_INITRD2),序列号(ATAG_SERIAL),版本号(ATAG_REVISION),命令行参数(ATAG_CMDLINE)等。Loader可以部份或全部设定这些标记。

    传递 initrd 参数的条件是, image文件中包含 initrd文件,即通过 mkimage生成一个核心与initrd混合的image文件,然后用bootm,这个参数就可以传给核心了。核心代码中定义的参数地址BOOT_PARAMS(0x04000100)与u-boot中的参数地址必须一致。
    如果要能加载 initrd 到 ramdisk中,那么 Loader应该将 initrd加载到 (虚)0x04200000位置,让Loader自已传参数给核心。
 

从ramdisk根文件系统启动Linux成功

这几天参考国嵌的实验手册和网上的资料完成了u-boot定制、内核定制、ramdisk根文件系统的制作,并成功。趁热打铁,总结一下。本文引用了很多网络上的文章,就不一一注明了。感谢各大侠的帮助,如有雷同...
  • wanghanjiett
  • wanghanjiett
  • 2011年09月09日 15:20
  • 2456

ramdisk制作过程记录

一. ramdisk.gz.uboot自作过程: 1. 创建一个loop目录,作为挂载点: mkdir loop 2. 获取一个10M的镜像,count会在kernel配置中使用: dd if=/d...
  • dean_gdp
  • dean_gdp
  • 2016年06月19日 17:42
  • 1013

创建嵌入式linux混合文件系统(ramdisk+jffs2)

1、 Ramdisk文件系统 Ramdisk就是将内存中的一块区域作为物理磁盘来使用的一种技术,内存盘的存取速度要远快于目前的物理硬盘,所以它具有读写速度高的优势。在嵌入式设备中,我们可以把Ramdi...
  • u013305541
  • u013305541
  • 2014年01月01日 14:33
  • 2433

制作在线升级工具-Ramdisk文件系统的制作与调试运行

开发环境:Fedora 9 交叉编译工具链:arm-linux-gcc 4.3.2 with EABI 嵌入式Linux内核版本:2.6.29.4-FriendlyARM。昨天写贴子的时候具体记不...
  • sanmaoljh
  • sanmaoljh
  • 2017年05月04日 17:37
  • 347

rootfs——InitRamdisk & InitRamfs 介绍和使用

一、rootfs     rootfs,Root FileSystem,是指根文件系统,对应/目录节点。     rootfs又分为虚拟rootfs和真实rootfs。     虚拟rootf...
  • xys0610
  • xys0610
  • 2016年09月21日 20:50
  • 792

ARM中的Ramdisk的使用

Linux启动时,initrd可以在内存中,也可以在 Flash或其它可用的设备上;initrd文件格式为: romfs/Minix/ext2/gzip;相关的函数:drivers/block/rd....
  • linweig
  • linweig
  • 2010年01月23日 15:28
  • 1253

嵌入式linux中如何查看ramdisk.img中的文件内容

一 查看文件格式 file ramdisk.img.u ramdisk.img.u: u-boot legacy uImage, ramdisk, Linux/ARM, RAMDisk Image...
  • u012851076
  • u012851076
  • 2016年05月17日 19:22
  • 1108

在ARM中使用Ramdisk

在ARM中使用Ramdisk Linux启动时,initrd可以在内存中,也可以在 Flash或其它可用的设备上; initrd文件格式为: romfs/Minix/ext2/gzip;相关的函数...
  • ce123
  • ce123
  • 2011年09月08日 15:16
  • 2513

生成ramdisk-uboot.img和解压ramdisk-uboot.img

dd if=ramdisk-uboot.img of=ramdisk.img.gz bs=1 skip=64
  • ZhengKarl
  • ZhengKarl
  • 2011年03月04日 15:04
  • 17406

ARM linux busybox ramdisk制作脚本

#bash/sh echo "Start make rootfs !" BUSYBOX_PATH=/home/fanyl/work/mv_pro_5.0/busybox-1.23....
  • fanyl2006
  • fanyl2006
  • 2015年02月13日 16:41
  • 376
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ARM中的Ramdisk的使用
举报原因:
原因补充:

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