笔记整理—内核!启动!—uboot部分(2)

        上文中,我们说到了使用uboot去启动kernel支持的几种方式以及压缩kernel的几种形式,本章节将要接着内核的启动说起。

        上一章我们对uImage格式进行了初步的说明,并说这样的格式已经被废弃,但是依然保留了相应的代码。boot_get_kernel主要用于uImage头校验,从而得到kernel的启动位置。当argc<2时,代表传参数不足,则使用默认的加载位置进行加载。      

        上面这里基本就包含了启动镜像的基本过程。GZIP/BZIP2是压缩格式,uboot提供了解压内核的方式,但可以不使用,内核有自解压。

        uboot最早支持uImage启动方式,后面有了设备树(FDT)于是就有了LEGACY与FIT两种启动方式,后面有了zImage,但是为了省事用goto使用zImage启动,把代码夹在了FDT与uImage的启动方式之间。

        内核->DDR->校验->启动内核。将DDR到启动内核分为三个阶段,使用do_bootm_linux进行内核的启动。

do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
bootm_headers_t *images)其中images为镜像启动信息

         查看镜像是否有效if(image->legacy_hdr_valid)。

        ulong ep,其中ep为entry point的缩写意为程序入口,一个镜像文件起始执行不在第一个字节,前面的部分是存放头信息的。

        执行镜像的过程:

thekernel=(void (*)(int,int,uint)) ep;
void (*thekernel)(int zero,int arch,unint params);

         ep为偏移量的第一个入口地址的函数的地址。

        thekernel指向镜像的真正入口地址,当调用thekernel时,代表了uboot的生命周期结束。

thekernel(0,machid,bd->bi_boot,params);

        getenv("machid");将机器码传给内核有两个方案①环境变量machid。②gd->bd->bi_arch_num。对于x210而言,这是由x210_sd.h的硬编码决定的。

        uboot给linux内核做传参准备,uboot的最后一句话是staring kernel......说明uboot该干的事情干完了,但不能保障kernel成功执行。若一直卡在这个位置应该对内核中是否内容、uboot到kernel的传参是否正确、内核加载地址等方面进行检查。

        本章结束了,我们对uboot进行了扫尾工作,但由于内核启动与uboot传参之间的紧密联系,所以后面的几章内容或许还能见到uboot的身影,后面会用几个章节的时间对uboot进行总结。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
u-boot是一种常用的开源引导程序,用于嵌入式系统的启动。它在加载Linux内核之前负责初始化硬件、加载文件系统和设备驱动程序等任务。为了优化系统性能,我们需要对u-boot内核启动耗时进行统计和分析。 u-boot内核启动耗时统计是通过在u-boot的源代码中添加计时代码实现的。在初始化硬件之后、加载文件系统之前和加载设备驱动程序之前,我们可以添加计时代码来获取各个阶段的耗时。计时一般使用CPU的定时器或者系统时钟的计数器。 首先,在u-boot的源代码中找到合适的位置,插入计时代码。计时代码可以使用u-boot提供的计时函数来实现,也可以使用操作系统提供的计时功能。 其次,将获取到的耗时数据输出到串口、网络或者存储设备中,以便后续的分析。可以使用串口打印函数输出到串口终端,也可以使用网络调试工具输出到远程主机,在u-boot中运行脚本将数据写入存储设备等。 最后,根据获取到的耗时数据进行统计和分析。可以对各个阶段的耗时进行累积,计算出总的内核启动耗时。还可以对每个阶段的耗时进行比较,找出性能瓶颈,进行优化。 通过以上步骤,我们可以得到u-boot内核启动耗时的统计数据,进而分析系统性能、优化启动时间。这对于嵌入式系统的开发和调试非常重要,能够有效提高系统的响应速度和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值