U-Boot直接引导zImage内核

转载 2012年03月24日 11:32:51

U-Boot直接引导zImage内核


原文地址:http://blog.csdn.net/ce123/article/details/7336810

         U-boot1.1.6只能只能就能过mkimage工具加工后的内核镜像文件。mkimage工具给zImage增加了一个64B大小的头。U-Boot是通过bootm命令来引导Linux内核的,bootm命令调用do_bootm函数来mkimage工具增加的头,最后调用do_bootm_linux函数引导去掉了mkimage工具增加的头的Linux内核,也就是zImage,启动的流程可以参考图解U-Boot:引导内核分析这篇博客。

     要让U-Boot直接引导zImage内核,只需在do_bootm函数中去掉对mkimage工具增加的头的分析,直接调用do_bootm_linux函数引导zImage内核即可。下面是经过修改的do_bootm函数,修改的部分用///////////包围起来了,省略号后面的就不需要改动了。这个函数common/cmd_bootm.c文件中。

[plain] view plaincopy
  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. ......  

接下来还要修改一下lib_arm/armlinux.c中的do_bootm_linux函数。这里主要是修改kernal的加载地址(theKernel = (void (*)(int, int, uint))addr)。这就要求我们将zImage内核下载内存的addr处。并且用bootm addr进行引导,默认的地址是0x30008000,如果直接使用bootm进行引导,则需要将内核下载到0x30008000,否则无法引导内核。

[plain] view plaincopy
  1. void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],  
  2.              ulong addr, ulong *len_ptr, int verify)  
  3. {  
  4.     ulong len = 0, checksum;  
  5.     ulong initrd_start, initrd_end;  
  6.     ulong data;  
  7.     void (*theKernel)(int zero, int arch, uint params);  
  8.     image_header_t *hdr = &header;  
  9.     bd_t *bd = gd->bd;  
  10.   
  11.   
  12. #ifdef CONFIG_CMDLINE_TAG  
  13.     char *commandline = getenv ("bootargs");  
  14. #endif  
  15.   
  16.   
  17.     //theKernel = (void (*)(int, int, uint))ntohl(hdr->ih_ep);  
  18.     theKernel = (void (*)(int, int, uint))addr;  

下面是引导信息:

U-Boot 1.1.6 (Mar 11 2012 - 14:06:15)


DRAM:  64 MB
Flash:  2 MB
NAND:  256 MiB
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0

NAND read: device 0 offset 0x240000, size 0x200000
 2097152 bytes read: OK
## Booting from zImage at 30008000 ---by ce123

Starting kernel ...

Uncompressing Linux.............................................................
............................................................. done, booting the

U-Boot直接引导zImage内核

U-Boot直接引导zImage内核          U-boot1.1.6只能只能就能过mkimage工具加工后的内核镜像文件。mkimage工具给zImage增加了一个64B大小的头。U-Bo...
  • ftafta
  • ftafta
  • 2012年03月12日 13:29
  • 443

U-Boot直接引导zImage内核

U-Boot直接引导zImage内核         U-boot1.1.6只能只能就能过mkimage工具加工后的内核镜像文件。mkimage工具给zImage增加了一个64B大小的头。U-Boot...
  • ce123
  • ce123
  • 2012年03月11日 23:13
  • 8997

u-boot引导zImage内核

u-boot-1.1.6 因为/common/cmd_bootm.c支持的是启动uZimage,而我使用的是zImage,所以决定该写一个可以支持zImage的命令。 u-boot启动过程三步: 1....

u-boot 启动过程 (基于S3C2410) 和uImage zImage 启动分析

本博客转载于:http://blog.csdn.net/slj_win/article/details/6952241 本文以流行的Samsung公司的S3C2410,openmoko平台和...

利用u-boot 的工具mkimage 把zImage转换为uImage的方法

通常,u-boot为kernel提供一些kernel无法知道的信息,比如ramdisk在RAM中的地址。Kernel也必须为U-boot提供必要的信息,如通过mkimage这个工具(在u-boot代码...
  • lusehu
  • lusehu
  • 2011年05月22日 22:32
  • 1648

u-boot 启动过程 (基于S3C2410) 和uImage zImage 启动分析

本文以流行的Samsung公司的S3C2410,openmoko平台和u-boot-1.3.2(2008.5 发布)为例,介绍如何在ZIX嵌入式开发环境下探索u-boot启动过程。 虽然u-bo...
  • slj_win
  • slj_win
  • 2011年11月09日 14:03
  • 3939

从bootm看u-boot引导内核的过程

  • 2011年12月21日 14:14
  • 59KB
  • 下载

U-BOOT下使用bootm引导内核方法

  • 2008年10月29日 10:43
  • 46KB
  • 下载

Image uImage zImage U-Boot的区别

转于:http://kmoving.blog.163.com/blog/static/20504919720123151533819/ (1)、内核编译(make)之后会生成两个文件,一...

u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统

uboot最主要的功能就是能够引导内核启动。本文就介绍如何实现该功能,并组成一个最简单的系统,这不仅要移植uboot,还要移植linux内核及创建一个根文件系统。   首先我们对nandflash...
  • zhaocj
  • zhaocj
  • 2012年09月05日 16:57
  • 5609
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:U-Boot直接引导zImage内核
举报原因:
原因补充:

(最多只允许输入30个字)