您的位置 首页 传感器

在ARM中运用Ramdisk

Linux启动时,initrd可以在内存中,也可以在Flash或其它可用的设备上;initrd文件格式为:romfsMinixext2gzip;相关的函数:drivers

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 中来设置,就像上面代码中说到的相同:

[cpp]view plaincopy

print?

  1. aster2_fixup(structmachine_desc*desc,structparam_struct*unused,char**cmdline,structmeminfo*mi)
  2. {
  3. ROOT_DEV=MKDEV(RAMDISK_MAJOR,0);
  4. setup_ramdisk(1,0,0,CONFIG_BLK_DEV_RAM_SIZE);
  5. setup_initrd(0x04200000,4*1024*1024);
  6. }

这段代码的作用有几个:

(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自已传参数给中心

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/262383.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部