1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      使用initrd文件系統 U-boot引導Linux方法

      更新時間: 2008-06-26 09:36:40來源: 粵嵌教育瀏覽量:899

        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;
                  ......
                  }


      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 中文字幕欧美aⅴ字幕 | 五十路熟中文字幕 | 尤物无毒不卡在线观看 | 亚洲少妇综合一区 | 日本精品久久久久中文字幕 | 免费萌白酱国产一区二区 |