Mstar理论及实践篇(3)

2020-04-03 12:16

Power onCopy BOOTRAM section from FLASH to RAM via DMA which included bootram, bootflash, nandflash and uart16550 Start entry BOOT_Entry in boot.s @0xBFC000001. Reset CPU2. Init MIPS registers3. Init CPU Cache4. Init DSP RAM5. Set SP address at DSP RAM @0x84001000Jump to BOOTRAM_Entry @0x80200000 in bootram.sJump to BOOTROM_Entry in bootrom.c1. Set SP address @ADDR_STACK_POINTER (0x80A80000)2. Copy UBoot bin from FLASH to DRAM @UBOOT_ENTRY_ADDR(0x80100000)1. PM_Init2. PAD config3. Init system H/W register4. Set CPU clock rate5. Turn on output pad6. Enable MSTVTool access ability7. Disable WDT8. Init UART9. Init MIUJump to UBoot entry 这个过程简单来说就是:SBoot从DSP Ram的地址0x1fc00000开始运行,使用DSP Ram进行硬件初始化工作,执行相关C代码的工作,并从SPI Flash拷贝UBoot到DRam里面,最终跳转到UBoot入口。

UBoot介绍

UBoot代码结构树

MStar UBoot是基于u-boot-1.1.6的,UBoot自带CLI(command line interface),通过串口可以跟用户交互。UBoot能做些啥?有下面几点:

? 通过CLI设置环境变量和执行一些操作; ? 初始化系统;

? 通过以太网口加载kernel到DRAM;

? 烧录kernel和application到NAND Flash;

? 设置kernel参数; ? 解压kernel;

? 传递启动参数给kernel;

UBoot代码包通常包含下面子目录:board, common, cpu, disk, doc, drivers, fs,include, lib_generic, lib_mips, net, pos, rtc, tools.各个包的作用如下: Directory Board common Cpu Disk Doc drivers Fs include lib_generic lib_mips net post rtc

Description board define Command and environment setup MIPS cpu start.s Reports device info to the user Documents NAND driver, emac driver, usb driver… ext2, fat, fdos, jffs2, … header file generic lib MIPS lib net, tftp, … Power on self test Real time clock UBoot启动流程

启动入口和地址在u-boot.lds描述,然后指向/u-boot-2011.06/arch/arm/cpu/armv7/start.S,在start.S描述了入口地址。

同时,在u-boot.lds还描述了u_boot_cmd存放的section,关于u_boot-cmd在后面做详细描述。

0x80100000_start entry.text.rodata.data.sdata.got__u_boot_cmd_start .u_boot_cmd__u_boot_cmd_end.bssUBoot启动过程:

Reset and critical MIPS register Init

Allocation the memory space usageSet GOT pointer @_GLOBAL_OFFSET_TABLE_relocate_code()Set the SP register addressCache resetSet SP register pointer @0x80400000Readjust GP addressJump to board_init_f()Copy Uboot code @0x80100000 to relocated address spaceInit sequence such as1.timer,2. env,3. baudrate,4. serial port,4. console,5. version and CPU clock rate display6. ram sizeUpdate GOT offset valueClear BSS sectionJump to board_init_r()

board_init_r()Get “bootcmd” environment variableRelocates the command tableNOMemory malloc Init.bootcmd variable is valid&& don’t stop autobootYESNAND Flash Init.Execute bootm commandRead line string of promptEnvironment variables relocationUncompress kernel imageRun commands you wantDevice(serial port) and console InitLoad kernel image to specific positionEthernet init.Pass the kernel arguments to kernelmtdparts Init.Jump to startup point of kernel

MBoot/UBoot Command机制

UBoot中通过宏定义U_BOOT_CMD来定义结构体变量,并且把这些同一种结构体的变量放在一个段中,充分利用了链接器的作用。这样做的好处是,各个模块的研发人员不必去维护一个全局的结构体数组,而且也不用知道数组中的下标就能定位。 与UBoot命令机制相关的定义放在/u-boot-2011.06/include/command.h,下面对关键定义做分析。 命令结构体:

其中Struct_Section的定义如下:

由此可见,被U_BOOT_CMD定义过的结构体变量,最终会被链接器放到u_boot_cmd段中。链接脚本在U-boot.lds定义,如下:

该脚本把所有.u_boot_cmd放在了一起。 获取所有U_BOOT_CMD的命令的API:

运行U_BOOT_CMD定义的CMD的API:


Mstar理论及实践篇(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:[解析版]全国普通高等学校2017届高考数学二模试卷(文科)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: