快速业务通道

使用initrd文件系统 U-boot引导Linux方法

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-09

bootm 0x100000 0x240000

(其中:0x100000是linux内核在flash中的地址,0x240000是initrd在flash中的地址)

setenv bootargs console=ttyS0,115200n8 root=/dev/ram rw mem=32M

当u-boot使用上面的设置时,能够正常引导linux加载initrd !

注意:

u-boot和linux内核之间是通过ATAG-TAG方式来传递启动参数的.u-boot根据下面的命令:

bootm 0x100000 0x240000

通过调用setup_initrd_tag()在 params = (struct tag *) bd->bi_boot_params内存相应位置建立initd的TAG表项,向linux传递了关于initrd的内核参数,因此,不用在bootargs中再次指定initrd的相关参数了!

void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],

ulong addr, ulong *len_ptr, int verify)

{

ulong initrd_start, initrd_end;

......

data = addr   sizeof (image_header_t);

len = ntohl (hdr->ih_size);

...... 

#if defined(CONFIG_B2) || defined(CONFIG_OSK_OMAP5912)

memmove ((void *) ntohl(hdr->ih_load), (uchar *)data, len);

data = ntohl(hdr->ih_load);

#endif 

...... 

if (data) {

initrd_start = data;

initrd_end = initrd_start   len;

}

......

#if defined (CONFIG_SETUP_MEMORY_TAGS) || 

defined (CONFIG_CMDLINE_TAG) || 

defined (CONFIG_INITRD_TAG) || 

setup_start_tag (bd);

......

#ifdef CONFIG_INITRD_TAG

if (initrd_start && initrd_end)

setup_initrd_tag (bd, initrd_start, initrd_end);

#endif

......

setup_end_tag (bd);

#endif

......

theKernel (0, bd->bi_arch_number, bd->bi_boot_params);

}

#ifdef CONFIG_INITRD_TAG

static void setup_initrd_tag (bd_t *bd, ulong initrd_start, ulong initrd_end)

{

params->hdr.tag = ATAG_INITRD2;

params->hdr.size = tag_size (tag_initrd);

params->u.initrd.start = initrd_start;

params->u.initrd.size = initrd_end - initrd_start; 

params = tag_next (params);

}

#endif

#if defined (CONFIG_SETUP_MEMORY_TAGS) || 

defined (CONFIG_CMDLINE_TAG) || 

defined (CONFIG_INITRD_TAG) || 

......

static void setup_start_tag (bd_t *bd)

{

params = (struct tag *) bd->bi_boot_params;

......

params = tag_next (params);

}

int board_init (void)

{

DECLARE_GLOBAL_DATA_PTR;



gd->bd->bi_arch_number = 234;

gd->bd->bi_boot_params = 0x10000100;

......

}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号