uboot直接引导zImage内核镜像

    技术2022-05-20  46

    由于uboot的不支持直接引导zImage内核镜像,所以寻思添加命令使其可以直接引导zImage,其实网上已有牛人早实现了,只是有些地方不太清除,所以这里也算是整理一下。

    主要修改文件:

    1、添加命令bootzImage,实现文件为cmd_bootzImage.c,位于common/目录下,内容为:

     

      1 #include <common.h>   2 #include <command.h>   3   4 #ifdef CONFIG_CMD_BOOTZIMAGE   5   6 #define LINUX_PAGE_SHIFT 12   7 #define LINUX_PAGE_SIZE (1<<LINUX_PAGE_SHIFT)   8 #define LINUX_MACHINE_ID  1099//根据平台修改   9  10 void do_bootzImage(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  11 {  12     int i;  13     u32 addr;  14     char *cmdline = getenv("bootargs");  15     void(*run)(int zero, int arch);  16     struct param_struct *params = (struct param_struct *)0x20000100;//这里要注意根据平台的不同修改,

                                                                                                                          //一般 约定俗成是内存首地址+100dex  17  18     if(argc < 2){  19         addr = load_addr; //默认加载地址  20     }  21     else{  22         addr = simple_strtoul(argv[1], NULL, 16);  23     }  24  25     for(i=0; i<(sizeof(struct param_struct)>>2); i++){  26         ((u32 *)params)[i] = 0;  27     }  28  29     params->u1.s.page_size = LINUX_PAGE_SIZE;  30     params->u1.s.nr_pages = (0x04000000 >> LINUX_PAGE_SHIFT);  31  32     memcpy(params->commandline, cmdline, strlen(cmdline));  33     run = (void(*)(int, int))addr;  34     printf("start kernel.../n");  35     run(0, LINUX_MACHINE_ID);  36  37 }  38  39 U_BOOT_CMD(  40     bootzImage, 2, 1, do_bootzImage,  41     "bootzImage --boot zImage from ram./n",  42     "[addr] boot zImage directoly."  43 );  44  45 #endif

    2、在common/Makefile中添加COBJS-$(CONFIG_CMD_BOOTZIMAGE) +=cmd_bootzImage.o

    3、在配置文件中添加#define CONFIG_CMD_BOOTZIMAGE                          


    最新回复(0)