• SmartQ5/7 uboot 代码解读


    想搞SmartQ5上的多启动,看了官方的u-boot源码,记于此:

    在lib_arm下的board.c文件中的void start_armboot (void)是汇编过渡到C的第一个函数,在此函数中主要是进行一些初始化工作,像nand,eth及其它设备等,在函数的最后面是一个“死循环”用于处理“终端”上的命令

    /* main_loop() can return to retry autoboot, if so just run it again. */
    for (;;) 
    {
        main_loop ();
    }

     SmartQ的u-boot在进入循环之前,添加如下代码:

    #ifdef  CONFIG_HHTECH_MINIPMP
    if (tstc() && getc() == ' ')    // here test press key
        setenv("bootcmd", NULL); 
    else 
    {
        
    if(0 == init_hard_last(00))
            do_start_firmware(
    1, NULL);
        
    else
            
    return;
    }
    #endif

    当终端上有输入,进入主循环,处理终端命令,否则,启动“刷机”程序的引导代码,代码文件cmd_hhtech.c和hhtech.h中包含大部分功能,所以要作多启动,以这两个文件的内容作相应的修改就行,hhtech.h中主要对于“按键”的定义,在cmd_hhtech.c中,开始的部分是一些硬件的“驱动”代码,包含LCD(开背光),LED及电源,下面是一个固件的struct定义,官方的刷机固件是以initramfs方式运行的,所以这个struct很最要,它把kernel和initramfs封装在firmware中,根据struct的定义把相应的部分读取出来;再后面是加载kernel并运行等相关代码,分为从nand中和sd卡中加载。紧接着是读按键代码,区分不同的按键以启动不同的系统就靠它了!

  • 相关阅读:
    Azure Cognitive Service 访问优化
    Azure Managed Disk 共享不灵,EventGrid + LogicApp 来搞
    AZURE ACI -- 无服务器化容器解决方案
    Global Azure 与 China Azure 互联
    小总结
    存储过程及Comm.cs类的创建
    DataGrid1
    根据经纬度和半径计算经纬度范围
    CheckBoxJS选中与反选得到Value
    每天学一点-Jquery判断checkbox是否为选中状态
  • 原文地址:https://www.cnblogs.com/zhongzf/p/1515261.html
Copyright © 2020-2023  润新知