UBOOT分析
2016-01-17 12:05
267 查看
U-Boot是一个通用的Boootloader,它是在系统上电后执行的第一段程序,先初始化硬件设备,再准备软件环境,最后引导系统内核。
一般来说Bootloader的启动过程来说一般分两个阶段:
对于s3c2410的开发板,执行make smdk2410_config,然后执行make all生成U-Boot.bin
根据第一条指令来看makefile
找到
也就是说该命令是
再看U-Boot根文件的mkconfig
2.创建asm-arm/arch文件夹并链接向asm-smdk2410/arch
3.创建config.mk并写入
4.创建config.h并写入
未完....
一般来说Bootloader的启动过程来说一般分两个阶段:
第一阶段:
- 硬件设备初始化(关闭看门狗,关闭中断,设置CPU的速度,时钟频率,RAM初始化) - 为加载Bootloader的第二阶段代码准备RAM空间 - 复制Bootloader第二阶段代码到RAM空间中。 - 设置好栈 - 转到第二阶段代码的C语言入口
第二阶段:
- 初始化本阶段要使用到的硬件设备 - 检测系统内存映射 - 将内核映像和根文件系统映像从Flash上读到RAM空间中 - 为内核启动设置启动参数
U-Boot源码结构
我的U-Boot版本是1.1.6 Uboot根文件夹里面共有26个子目录 board ---------------> 开发板相关(对应不同电路板) cpu ---------------> 平台相关(对应不同CPU) lib_XX ---------------> 平台相关(某一架构下的通用文件) include ---------------> 通用函数(头文件和开发板的配置文件) lib_generic ---------------> 通用函数库 common ---------------> 通用函数,多是对下一层驱动程序的进一步封装 disk,drivers,dtt,fs,nand_spl,net,post,rtc通用设备驱动程序 doc ---------------> 文档 example ---------------> 实例程序 tools ---------------> 工具
U-Boot的makefile分析
对一个工程的分析当然是从makefile开始看对于s3c2410的开发板,执行make smdk2410_config,然后执行make all生成U-Boot.bin
根据第一条指令来看makefile
找到
smdk2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
@$(MKCONFIG) $(@:_config=)翻译过来就是./mkconfig smdk2410
也就是说该命令是
./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0 # $1 $2 $3 $4 $5 $6
再看U-Boot根文件的mkconfig
if [ "$SRCTREE" != "$OBJTREE" ] ; then mkdir -p ${OBJTREE}/include mkdir -p ${OBJTREE}/include2 cd ${OBJTREE}/include2 rm -f asm ln -s ${SRCTREE}/include/asm-$2 asm LNPREFIX="../../include2/asm/" cd ../include rm -rf asm-$2 rm -f asm mkdir asm-$2 ln -s asm-$2 asm else cd ./include #进入include rm -f asm #删除asm文件夹 ln -s asm-$2 asm #再次建立asm文件夹,并链接向asm-arm fi rm -f asm-$2/arch #删除asm-arm/arch文件夹 if [ -z "$6" -o "$6" = "NULL" ] ; then #如果$6变量是空 ln -s ${LNPREFIX}arch-$3 asm-$2/arch #重新建立asm-arm/arch文件夹,并链接向asm-smdk2410/arch else #否则 ln -s ${LNPREFIX}arch-$6 asm-$2/arch #重新建立asm-arm/arch文件夹,并链接向asm-s3c24x0/arch fi if [ "$2" = "arm" ] ; then rm -f asm-$2/proc ln -s ${LNPREFIX}proc-armv asm-$2/proc fi # # Create include file for Make # echo "ARCH = $2" > config.mk #向config.mk写入"ARCH = $2" echo "CPU = $3" >> config.mk #向config.mk写入"CPU = $3" echo "BOARD = $4" >> config.mk #向config.mk写入"BOARD = $4" [ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk #$5不为空 向config.mk写入"VENDOR = $5" [ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk #$6不为空 向config.mk写入"SOC = $6" # # Create board specific header file # if [ "$APPEND" = "yes" ] # Append to existing config file then echo >> config.h else > config.h # Create new config file #创建一个config.h文件 fi #向config.h写入 echo "/* Automatically generated - do not edit */" >>config.h echo "#include <configs/$1.h>" >>config.h exit 0
可见make smdk2410_config执行后的结果为
1.创建include/asm并链接向asm-arm2.创建asm-arm/arch文件夹并链接向asm-smdk2410/arch
3.创建config.mk并写入
4.创建config.h并写入
未完....
相关文章推荐
- Unicode汉字编码表-转
- UTF-8 编码里,一个汉字占用多少个字节 -转
- HTML5扫雷游戏
- 《Python for kids》学习笔记(一)
- org.testng.TestNGException: Cannot find class in classpath
- 机器学习笔记(一) : 线性建模——最小二乘法
- 从头认识java-17.7 执行器(Executor)(1)-线程池
- sqlite 按拼音排序
- Ubuntu 13.10 用sogou拼音替换ibus-转
- java正则表达式的学习
- Ubuntu 12.04中设置安装Google拼音输入法
- Bash中命令连接符的用法——一次执行多个命令-转
- 安装cocoapods
- makefile how to
- 如何正确退出线程
- php 密码加密方式
- 关于sqlite断电或者存储空间不足造成的数据文件损坏问题-转
- Android IPC 之AIDL
- 数据库的基本操作
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块