歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> U-Boot直接引導zImage內核

U-Boot直接引導zImage內核

日期:2017/3/1 10:26:58   编辑:Linux編程

U-boot1.1.6只能只能就能過mkimage工具加工後的內核鏡像文件。mkimage工具給zImage增加了一個64B大小的頭。U-Boot是通過bootm命令來引導Linux內核的,bootm命令調用do_bootm函數來mkimage工具增加的頭,最後調用do_bootm_linux函數引導去掉了mkimage工具增加的頭的Linux內核,也就是zImage,啟動的流程可以參考圖解U-Boot:引導內核分析(http://www.linuxidc.com/Linux/2012-03/55965.htm)這篇博客。

要讓U-Boot直接引導zImage內核,只需在do_bootm函數中去掉對mkimage工具增加的頭的分析,直接調用do_bootm_linux函數引導zImage內核即可。下面是經過修改的do_bootm函數,修改的部分用///////////包圍起來了,省略號後面的就不需要改動了。這個函數common/cmd_bootm.c文件中。

  1. int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
  2. {
  3. ulong iflag;
  4. ulong addr;
  5. ulong data, len, checksum;
  6. ulong *len_ptr;
  7. uint unc_len = CFG_BOOTM_LEN;
  8. int i, verify;
  9. char *name, *s;
  10. int (*appl)(int, char *[]);
  11. image_header_t *hdr = &header;
  12. s = getenv ("verify");
  13. verify = (s && (*s == 'n')) ? 0 : 1;
  14. if (argc < 2) {
  15. addr = load_addr;
  16. } else {
  17. addr = simple_strtoul(argv[1], NULL, 16);
  18. }
  19. SHOW_BOOT_PROGRESS (1);
  20. //////////////////////////////////////////////////////////////////////////////////
  21. //printf ("## Booting image at %08lx ...\n", addr);
  22. printf ("## Booting from zImage at %08lx ---by ce123\n", addr);
  23. #ifdef CONFIG_SILENT_CONSOLE
  24. fixup_silent_linux();
  25. #endif
  26. do_bootm_linux (cmdtp, flag, argc, argv,
  27. addr, len_ptr, verify);
  28. //////////////////////////////////////////////////////////////////////////////////
  29. ......
Copyright © Linux教程網 All Rights Reserved