• 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卡中加载。紧接着是读按键代码,区分不同的按键以启动不同的系统就靠它了!

  • 相关阅读:
    Linux中常用命令
    Shell基本介绍和使用
    linux基本介绍和使用
    Servlet基本介绍和使用
    linux系统下挂载windows共享目录
    linux下关于gz和bz2压缩格式的常用操作技巧
    linux下修改history命令保存条数
    关于在linux下清屏的几种技巧
    vim中如何引用自定义模板文件
    Linux下ps -ef和ps aux的区别及格式详解
  • 原文地址:https://www.cnblogs.com/zhongzf/p/1515261.html
Copyright © 2020-2023  润新知