在串口终端输入bootm命令后,执行do_bootm函数来完成相应的功能。Do_bootm函数首先调用bootm_start函数。(如果不输入,应该也有。) Bootm_start函数的主要作用是获取内核映像文件的相关信息,并保存到全局变量images中,image是struct bootm_headers结构类型,用来保存可执行内核映像的相关信息,主要包括内核映像的加载地址、起...
调用bootm_find_images 查找 ramdisk 和设备树(dtb)文件,但是我们没有用到 ramdisk,因此此函数在这里仅仅用于查找设备树(dtb)文件,此函数稍后也会讲解。 2.1.1 bootm_start 执行BOOTM_STATE_START 阶段时,执行bootm_start: 初始化verfify 成员, 设置images状态为 BOOTM_STATE_START。 2.1.2 bootz_setup 定义在...
boot_start_lmb暂时还没弄明白,以后再搞清楚。 最后修改images.state为bootm start。 bootm_start主要工作是清空images,标志当前状态为bootm start。 4 第二阶段:bootm_find_os 由bootm_start返回后,do_bootm传了BOOTM_STATE_FINDOS,所以进入函数bootm_find_os 调用boot_get_kernel,函数较长,首先是获取image的...
总结bootz启动过程,首先定义images全局变量,接着执行bootz_start设置系统镜像入口点,调用do_bootm_states处理不同阶段,最终通过boot_selected_os启动Linux内核。对于uboot启动Linux测试,可以通过EMMC或网络方式实现。在EMMC启动测试中,首先检查分区1中是否存在zImage和设备树文件,设置bootargs和bootcmd环境变...
bootm_start(cmdtp, flag, argc, argv) // bootm.c(uboot_sdk/common) memset((void *)&images, 0, sizeof(images)); images.verify = getenv_yesno("verify"); boot_start_lmb(&images); //logic memory block,用于管理镜像的内存 ...
ulong image_start, image_end; ulong load_start, load_end; //判断内核是否是zImage #ifdef CONFIG_ZIMAGE_BOOT #define LINUX_ZIMAGE_MAGIC 0x016f2818 //这是一个魔术,用来判断是否是zImage /* find out kernel image address */ if (argc < 2) { ...
Uboot 1.16/lib_arm/board.c中start_armboot()函数调用/common/main.c中main_loop()函数,在main_loop()中有uboot启动内核的代码: 韦东山 2020/09/30 1.5K0 第1阶段——u-boot分析之make指令(2) makefilearmlinuxgcc 通过make 100ask24x0_config 指令配置好芯片选型后,使用make指令来生成uboot.bin文件 本...
return boot_run(bmi, "bootm", BOOTM_STATE_START | BOOTM_STATE_FINDOS | BOOTM_STATE_PRE_LOAD | BOOTM_STATE_FINDOTHER | BOOTM_STATE_LOADOS); }return bootm_run_states(bmi, states); int bootz_run(struct bootm_info *bmi) { return boot_run(bmi, "bootz", 0); ...
/* Don't start if "autostart" is set to "no" */ s = env_get("autostart"); if ((s != NULL) && !strcmp(s, "no")) { if (!env_get_autostart()) { env_set_hex("filesize", images->os.image_len); return 0; } 4 changes: 1 addition & 3 deletions 4 cmd/bootm.c Ori...
memmove_wd((void*)load, (void*)image_start, image_len, CHUNKSZ); } *load_end = load + image_len; puts("OK\n"); break; 2. bootm地址和load address不一样(但需要避免出现memory move时出现覆盖导致zImage被破坏的情况) 此种情况下,bootm会把uImage header后的zImage move到load address(见...