start_armboot()分析:在start.S初始化后跳转到start_armboot实现第2阶段硬件相关的初始化(烧写擦除flash,网卡驱动,usb驱动,串口驱动,从FLASH读内核,启动内核等)然后调用main_loop();实现u-boot环境参数设置(print),读内核,启动内核等 start_armboot函数代码如下(位于u-boot-1.1.6/lib_arm/borad.c) void start_armboot (void) { ... for (init_fnc_p…
分析uboot第一个执行函数_start(cpu/arm920t/start.S) 打开cpu/arm920t/start.S .globl _start // .globl定义一个全局符号"_start",表明_start这个符号要被链接器用到 _start: //_start:系统复位设置,以下共8种不同的异常处理 b reset //复位异常 0x0 ldr pc, _undefined_instruction                 //未定义的指令异常 0x4 ldr…
本节主要学习,run_command函数命令查找过程,命令生成过程 1.run_command函数命令查找过程分析:在u-boot界面中(main_loop();位于u-boot-1.1.6/common/main.c ):a 输入命令字符串b 将命令字符串代入函数run_command()c run_command():判断命令字符串,在argv[0]里保存命令名,并调用find_cmd(argv[0]))函数查找内存中该命令结构体,判断各个参数,执行命令等d find_cmd(argv[0]…
本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0"中怎么实现bootm命令启动内核. 其中bootm要做的事情:a 读取头部,把内核拷贝到合适的地方(0X30008000)b 在do_boom_linux()中把参数给内核准备好,并告诉内核参数的首地址c 在do_boom_linux()中最后使用theKernel () 引导内核. {注意:当在cmd_bootm.C中没有定义宏C…
通过make 100ask24x0_config 指令配置好芯片选型后,使用make指令来生成uboot.bin文件 本文学习目标: 对Makefile文件进行基本了解,掌握make指令是怎么实现生成uboot.bin的过程 1.接下来开始分析make指令,首先打开u-boot-1.1.6/Makefile文件: 117 include $(OBJTREE)/include/config.mk        //调用config.mk这个文件 118 ... 124 ifeq ($(ARCH),…
本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0" 怎么实现nand命令读内核. 1. nand read.jffs2 0x30007FC0 kernel 步骤a: 从NAND FILSHE中kernel分区读出步骤b: 放到0x30007FC0去 1.1 kernel分区: 是flash中内核区 其中在flash中定义了4大分区: | bootloader | :一开机直接运行u…
仿照bootm命令生成来制作一个hello命令,功能:打印出hello,world!和参数值 1.点击New File ,创建cmd_hello.c将./common/cmd_bootm.c的头文件复制到 cmd_hello.c中(因为cmd_bootm.c的头文件都是包括的命令相关的文件): #include <common.h>#include <watchdog.h>#include <command.h>#include <image.h>#incl…
本文学习目标:         掌握"make 100ask24x0_config"指令在Makefile和mkconfig文件中是怎么实现配置芯片选型 1.执行make 100ask24x0_config用来配置芯片选型,它执行以下一段,该段在Makefile中定义. 首先打开u-boot-1.1.6/Makefile文件: 87 SRCTREE := $(CURDIR) *CURDIR是make的内嵌变量, 为当前目录 92 MKCONFIG := $(SRCTREE)/mkcon…
在分析start.S文件过程中提到过,最后从汇编跳到C函数执行的是start_armboot函数,位于lib_arm\board.c文件下,它的执行流程图如下,截图来源于<嵌入式LINUX应用开发完全手册>.根据流程图,以下内容大致分几步写: 1.gd全局变量初始化 2.调用init_sequence函数指针数组里的初始化函数.nand初始化.环境变量初始化.USB初始化 3.死循环main_loop()分析 1.gd全局变量初始化 gd是全局引用的变量,它的定义在Global_data.h…
目标: 1.关看门狗 2.设置时钟 3.初始化SDRAM (初始化寄存器以及清除bss段) 4.重定位 (将nand/nor中代码COPY到链接地址上,需要初始化nandflash,读flash) 5.执行main (进入第二阶段) 6.写 7.制作uboot.lds链接脚本 编写步骤: 1.创建个名为"my_bootloader"根目录,方便编写uboot 2.新建my_bootloader/si目录,创建source insight工程 2.1 新建my_bootloader/st…