LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: rickxbx

ram disk 是什么东东?

[复制链接]
发表于 2007-1-26 14:11:29 | 显示全部楼层
好贴,懂了很多
回复 支持 反对

使用道具 举报

发表于 2007-3-26 22:24:08 | 显示全部楼层
太精彩了。东方教主果然身手不凡。这样的好贴要好好收藏!!
回复 支持 反对

使用道具 举报

发表于 2007-4-11 22:26:35 | 显示全部楼层
找的就是这个帖子,就是教主提到的那个populate_rootfs()函数,我指定了"initrd=",内核应该已经把initrd映像拷贝到/initrd.img了,应该不管我"root="给的是"/dev/ram",还是"/dev/mtdblock0",应该都可以判断出initrd映像的内型获得其块的数目,为什么只有把"root="指定为/dev/ram才可以正确判断initrd获取其块的数目?
回复 支持 反对

使用道具 举报

发表于 2007-4-15 15:01:27 | 显示全部楼层
内核文件头部是这样一个数据结构:

/* For the Linux/i386 boot protocol version 2.03.  */
struct linux_kernel_header
{
  char code1[0x0020];
  unsigned short cl_magic;                /* Magic number 0xA33F */
  unsigned short cl_offset;                /* The offset of command line */
  char code2[0x01F1 - 0x0020 - 2 - 2];
  unsigned char setup_sects;                /* The size of the setup in sectors */
  unsigned short root_flags;                /* If the root is mounted readonly */
  unsigned short syssize;                /* obsolete */
  unsigned short swap_dev;                /* obsolete */
  unsigned short ram_size;                /* obsolete */
  unsigned short vid_mode;                /* Video mode control */
  unsigned short root_dev;                /* Default root device number */
  unsigned short boot_flag;                /* 0xAA55 magic number */
  unsigned short jump;                        /* Jump instruction */
  unsigned long header;                        /* Magic signature "HdrS" */
  unsigned short version;                /* Boot protocol version supported */
  unsigned long realmode_swtch;                /* Boot loader hook */
  unsigned long start_sys;                /* Points to kernel version string */
  unsigned char type_of_loader;                /* Boot loader identifier */
  unsigned char loadflags;                /* Boot protocol option flags */
  unsigned short setup_move_size;        /* Move to high memory size */
  unsigned long code32_start;                /* Boot loader hook */
unsigned long ramdisk_image;                /* initrd load address */
unsigned long ramdisk_size;                /* initrd size */
  unsigned long bootsect_kludge;        /* obsolete */
  unsigned short heap_end_ptr;                /* Free memory after setup end */
  unsigned short pad1;                        /* Unused */
  char *cmd_line_ptr;                        /* Points to the kernel command line */
  unsigned long initrd_addr_max;        /* The highest address of initrd */
} __attribute__ ((packed));

grub 首先把vmlinuxz装载入内存,然后把initrd装载入内存,并initrd的装载地址
填入vmlinuxz的头部相应位置
回复 支持 反对

使用道具 举报

发表于 2007-4-17 19:22:37 | 显示全部楼层
这个结构struct linux_kernel_header在哪个文件中定义的阿
回复 支持 反对

使用道具 举报

发表于 2007-4-18 11:48:39 | 显示全部楼层
grub-0.97源码    /stage2/share.h文件中

linux 内核 linux-2.6.18\Documentation\i386\boot.txt 也说明了头部结构
The header looks like:

Offset        Proto        Name                Meaning
/Size

01F1/1        ALL(1        setup_sects        The size of the setup in sectors
01F2/2        ALL        root_flags        If set, the root is mounted readonly
01F4/4        2.04+(2        syssize                The size of the 32-bit code in 16-byte paras
01F8/2        ALL        ram_size        DO NOT USE - for bootsect.S use only
01FA/2        ALL        vid_mode        Video mode control
01FC/2        ALL        root_dev        Default root device number
01FE/2        ALL        boot_flag        0xAA55 magic number
0200/2        2.00+        jump                Jump instruction
0202/4        2.00+        header                Magic signature "HdrS"
0206/2        2.00+        version                Boot protocol version supported
0208/4        2.00+        realmode_swtch        Boot loader hook (see below)
020C/2        2.00+        start_sys        The load-low segment (0x1000) (obsolete)
020E/2        2.00+        kernel_version        Pointer to kernel version string
0210/1        2.00+        type_of_loader        Boot loader identifier
0211/1        2.00+        loadflags        Boot protocol option flags
0212/2        2.00+        setup_move_size        Move to high memory size (used with hooks)
0214/4        2.00+        code32_start        Boot loader hook (see below)
0218/4        2.00+        ramdisk_image        initrd load address (set by boot loader)
021C/4        2.00+        ramdisk_size        initrd size (set by boot loader)
0220/4        2.00+        bootsect_kludge        DO NOT USE - for bootsect.S use only
0224/2        2.01+        heap_end_ptr        Free memory after setup end
0226/2        N/A        pad1                Unused
0228/4        2.02+        cmd_line_ptr        32-bit pointer to the kernel command line
022C/4        2.03+        initrd_addr_max        Highest legal initrd address


在文件arch\i386\boot\bootsect.S可以看到这个结构的影子

          .org 497  
setup_sects:        .byte SETUPSECTS
root_flags:        .word ROOT_RDONLY
syssize:                         .word SYSSIZE
swap_dev:        .word SWAP_DEV
ram_size:                        .word RAMDISK
vid_mode:        .word SVGA_MODE
root_dev:                         .word ROOT_DEV
boot_flag:        .word 0xAA55
回复 支持 反对

使用道具 举报

发表于 2007-4-18 21:38:55 | 显示全部楼层
非常感谢!
看来体系结构的差异真是大啊
回复 支持 反对

使用道具 举报

发表于 2007-9-18 09:04:52 | 显示全部楼层
好帖子呀,受益匪浅。

我告诉自己这个帖子是一定要回的!这是百年难得一见的好贴啊!苍天有眼啊,让我在有生之年得以观得如此精彩绝伦的帖子!


好帖
很好帖
确实好帖
少见的好帖
真 *** 好帖
难得一见的好帖
千年等一回的好帖
好得不能再好的好帖
惊天地且泣鬼神的好帖
让人阅毕击掌三叹的好帖
让人佩服得五体投地的好帖
让人奔走相告曰须阅读的好帖
让斑竹看后决定加精固顶的好帖
让人看后在各论坛纷纷转贴的好帖
让人看后连成人网站都没兴趣的好帖
让人看完后就要往上顶往死里顶的好帖
让人不间断地在各种场合重复引用的好帖
让人一见面就问你看过某某好帖没有的好帖
让人半夜上厕所都要打开电脑再看一遍的好帖
让个读过后都下载在硬盘里详细研究欣赏的好帖
让人走路吃饭睡觉干什么事连做梦都梦到它的好帖
回复 支持 反对

使用道具 举报

发表于 2011-5-28 00:26:58 | 显示全部楼层
靠,必需顶起来!!!看得我泪流满面。。。。。。终于弄懂了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表