标签:uboot

学习uboot中 U_BOOT_CMD命令参数编程

学习到一个奇淫技能,这里总结如下。方便以后工程实现。

在uboot中大量的命令交互,这些命令都对应其参数、help、和命令处理函数。

通常做法去解析参数名称后遍历每一个命令名称,选择执行。也就是通常的switch、case做法。

uboot给出了不一样的操作。

先看uboot怎么做。

之后对于对应console 键入命令version就能够查找到该命令处理函数 do_version 执行。

接下来,剖析背后细节。

对于do_version通过U_BOOT_CMD完成了函数申明。

include/command.h#L368

include/command.h#L325

include/linker_lists.h#L70

include/command.h#L353

include/command.h#L237

最终U_BOOT_CMD申明定义了结构体类型为cmd_tbl 的变量_u_boot_list_2_cmd_2_version 并且完成了该命令的初始化赋值。

对于如上的变量属性操作__aligned、__attribute__参考6.35 Specifying Attributes of Types。__attribute__(4)表示改结构体变量4字节对齐,__attribute__声明该变量属性可能不...

a64 uboot 代码走读

已经完整梳理主要程序流,对于每个主程序流会按章节阻逐个细化分解。

  • uboot 入口main

    main完成一些状态初始化和标记,之后通过board_init_f和board_init_r 完成早期、中期初始化工作;

  • 对于如上初始化board_init_f主要通过预定义并且初始化的函数指针列表init_sequence_f[]依次执行完成;

    同样地,对于board_init_r 通过预先定义好的init_sequence_r 数组依次完成函数调用;

  • 之后程序进入main_loop 通过解析预定义环境变量bootcmd=x执行后续操作。

    bootcmd的函数实体通过预先定义好命令序列。

    完成boot image的查找查找android 引导分区,为kernel 跳转查找基地址;

    在这里完成boot到kernel 基地址跳转;

详细分析mmc初始化流程。

allwinner a64支持uboot阶段显示静态图片,这里梳理程序结构,确定gac-350未什么未生效,同时确定从boot->rootfs 整个过程显示蓝屏的根本原因。

从如上代码走的来看,lcd完整驱动区分如下层次关系;

此uboot中的disp模块同内核/linux-3.10/drivers/video/sunxi/disp2/disp中的一一对应。

不同的是,内核中的显示驱动通过内核模块的方式加载。也就是,在uboot通过的boardc_r.c ...