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自已传参数给核心。
 

从bootm看u-boot引导内核的过程

 快乐虾http://blog.csdn.net/lights_joy/lights@hb165.com   本文适用于ADI bf561 DSP优视BF561EVB开发板u-boot-1.1.6 (...

u-boot传递给内核的参数bootargs和命令bootcmd(上)

Bootcmd:                    Bootcmd是自动启动时默认执行的一些命令,因此可以在当前环境中定义各种不同配置,不通过环境的参数配置,然后设置bootcmd为你经常使用的那...

在ARM中使用Ramdisk

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

arm嵌入式开发之ramdisk与IDE驱动

1.ramdisk (ram)是一种虚拟磁盘,对应设备文件一般为:/dev/ram%d。 使用下面命令创建和挂载: mkdir /tmp/ramdisk0 mke2fs /dev/ram0 m...

arm系统启动后运行 helloworld ("hello world" 被封装为ramdisk)

---------------------------------------- arm系统启动后运行 helloworld -------------------------------------...

从ramdisk根文件系统启动Linux成功,及使用initramfs启动linux

下面两篇文章是ARM9论坛上的讲解ramdisk文件系统的很不错的文章 今天做了个试验,让Linux2.6.29.4从ramdisk根文件系统启动成功,总结一下。 其中涉及的内容较多,很多东西...

使用genext2fs制作ramdisk

linux 默认并没有自带这个工具,需要下载,项目地址:http://sourceforge.net/projects/genext2fs/files/genext2fs/  最新版为genext...

ramdisk 4g是如何使用4G以上内存原理

转载地址:http://bbs.pcbeta.com/viewthread-413990-1-1.html 我找到的是MS做kernel内存管理的developer,所以应该是最权威的了. 目前驱动...
  • zhy1991
  • zhy1991
  • 2012年03月20日 08:48
  • 554

内存文件系统使用及示例:ramdisk, ramfs, tmpfs

转自:http://www.eit.name/blog/read.php?476 第一部分 在Linux中可以将一部分内存mount为分区来使用,通常称之为RamDisk。  RamDisk有三...

从ramdisk根文件系统启动Linux成功,及使用initramfs启动linux

下面两篇文章是ARM9论坛上的讲解ramdisk文件系统的很不错的文章 今天做了个试验,让Linux2.6.29.4从ramdisk根文件系统启动成功,总结一下。 其中涉及的内容较多,很多东西...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ARM中的Ramdisk的使用
举报原因:
原因补充:

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