上电–PC–BIOS–引导操作系统(windows)–识别C盘、D盘–运行应用程序(qq)
嵌入式系统–bootloader–Linux内核–挂载根文件系统–应用程序
起动内核的方式
BIOS:从硬盘上启动内核
嵌入式linux:从Flash读出内核--放到SDRAM--启动内核
u-boot要实现的功能 1、读flash(+写flash,为开发方便①写flash、②网卡、③USB)2、初始化SDRAM(初始化时钟、初始化串口) 3、启动内核
硬件相关的初始化:关看门狗、初始化时钟、初始化SDRAM
满足开发加入功能:烧写Flash (网卡、USB)、串口(输入命令)
…………………………………………………………………………………………………………………..
1.分析make 100ask24x0_config
u-boot-1.1.6 打好补丁,制作压缩文件,拷贝到win下供使用
打开u-boot的Makefile,分析 搜索 100ask24x0_config
执行make 100ask24x0_config 就相当于执行
mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0 (
0−−" role="presentation" style="position: relative;">0−−6)
打开 mkconfig
板子没有命名将其命名为$1,即100ask24x0。
在Makefile里面搜索SRCTREE
SRCTREE=CURDIR,if定义了BUILD_DIR,那么OBJTREE为BUILD_DIR
if没有定义了BUILD_DIR,那么OBJTREE为CURDIR。
并没有定义,所以SRCTREE=OBJTREE。
执行else,建立连接文件 ln -s asm-arm asm ,asm指向arm
In -s arch-s3c24x0 asm-arm/arch 在asm-arm下建立arch,指向s3c24x0
In -s proc-armv asm-arm/proc 在 asm-arm下建立proc,指向armv
内容:
ARCH =arm
CPU =arm920t
BOARD =100ask24x0
SOC =s3c24x0
创建单板相关的头文件
APPEND=no执行 > config.h # Create new config file
“>”新建文件 “>>”追加过去
config.h的内容
2.分析make
包含的文件就是上面配置过程生成的config.mk
定义了ARCH 、CPU、BOARD、SOC的变量值为arm、arm920t、smdk2410、s3c24x0
根据上面的4个变量确定编译器、编译选项等
可以看看执行make后的文件,如下
链接脚本
第一个start.o与Makefile对应
接下来是lib库
与Makefile对应
打开链接脚本u-boot-1.1.6oard100ask24x0u-boot.lds,查看链接
SECTIONS
{
. = 0x00000000
. = ALIGN(4)
.text :
{
cpu/arm920t/start.o (.text) //第一个文件的代码段
board/100ask24x0/boot_init.o (.text)
*(.text) //其他所有文件的代码段
}
. = ALIGN(4)
.rodata : { *(.rodata) } //所有文件只读数据段
. = ALIGN(4)
.data : { *(.data) } //所有文件的数据段
. = ALIGN(4)
.got : { *(.got) }
. = .
__u_boot_cmd_start = .
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .
. = ALIGN(4)
__bss_start = .
.bss : { *(.bss) }
_end = .
}
接下来分析start.o,了解uboot启动内核的整个流程。
分析Makefile:
①第一个文件 cpu/arm920t/start.o
②链接地址 board100ask24x0u-boot.lds +0x33f80000