sprd bootloader 分析流程

2. bootloader的代码流程

2.1

入口: u-boot15/board/spreadtrum/ums512_1h10_go/u-boot.lds

ENTRY(_start) //当前入口_start

.text : { *(.__image_copy_start) //入口 CPUDIR/start.o (.text*)代码段 *(.text*)

}

2.2 start.S

bl main

2.3 arch/arm/lib/crt0_64.S

设置初始化C运行环境,然后调用board_init_f(0)函数

bl board_init_f

2.4 arch/arm/lib/board.c

这是板级初始化的函数流程的集合

1) board_init(); ==> u-boot15/board/spreadtrum/ums512_1h10_go/ums512_1h10_go.c

一些列初始化: 串口,终端,gpio,led等

2) board_late_init() => ums512_1h10_go.c: 充电初始化,按键初始化

3) 进入循环

819 /* main_loop() can return to retry autoboot, if so just run it again. */

820 for (;;) {

821 main_loop();

822 }

2.5 main.c

main_loop(); 循环处理命令

准备:

include/env_default.h : default_environment默认环境变量设置

35 "bootcmd=" CONFIG_BOOTCOMMAND "\0"

==> include/configs/ums512_1h10_go.h

216 #define CONFIG_BOOTCOMMAND "cboot normal"

main_loop ==> s = bootdelay_process(); //获取环境变量,获取boot_cmd参数

==> 执行 cboot 和 normal 命令 : autoboot_command(s);

2.6 autoboot_command(s);

解析: 处理命令列表

最终: cmdtp = find_cmd(argv[0]); ==》 rc = cmd_call(cmdtp, flag, argc, argv);

2.7 uboot 命令之cboot的执行

common/cmd_cboot.c

==> do_cboot 此处,判断开机的模式

cboot, CONFIG_SYS_MAXARGS, 1, do_cboot

命令cboot 需要带一个参数, 所以cboot normal 就是执行参数。

疑问:display 的初始化和亮屏都在哪里设置呢?

cboot ==> 开机模式 ==》 正常开机模式:

normal_mode ==> vlx_nand_boot(BOOT_PART, BACKLIGHT_ON, LCD_ON);

==> _uboot_set_preload(lcd_enable, backlight_set);

==> preload->display(LOGO_NORMAL_POWER, brightness, lcd_enable);

==> ./common/loader/loader_nvm.c : .display = logo_display,

==> void logo_display(int index, int backlight_value, int lcd_enable)

==> drv_lcd_init(); //lcd 的初始化

set_backlight(backlight_value);// 设置背光

ps : drv_lcd_init ==> lcd_init(lcd_base); ==> lcd_ctrl_init(lcdbase); ==>

drivers/video/sprd/sprd_main.c : sprdfb_probe

==>

178 static int sprdfb_probe(void)

179 {

180 sprd_panel_probe();

181 sprd_dispc_probe();

182

183 return 0;

184 }

至此: uboot 流程已经分析完毕.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值