SmartQ5/7 u-boot 代码解读

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值