歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

U-Boot直接引導zImage內核

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