bootloader 初始化硬件设备
启动过程
单阶段(single-stage)
多阶段(multi-stage)
bootloader大多采用两阶段
stage1
完成初始化硬件
准备内存空间,将stage3复制到内存中,设置堆栈,跳转到stage2的c入口点
stage2
初始化本阶段要用到的硬件设备
检测系统内存映射,检测哪些地址被实际对应到外部的sdram
将kernel映像和根文件映像从flash读到ram空间
为内核设置启动参数
调用内核
交叉工具链
参考
http://blog.csdn.net/retacn_yue/article/details/8510952
编译器arm-linux-gcc
反汇编工具arm-linux-objdump
elf文件查看工具arm-linux-readelf
-d参数可以查看依赖动态链接库
uboot
支持多种嵌入式cpu(mips x86 arm xscale powerpc)
支持多种嵌入式操作系统(vxworks qnx linux netbsd rtems)
目录结构
board 和开发板有关的文件
common 实现uboot支持的命令
cpu 特定cpu架构相关的代码
disk 对磁盘的支持
doc 文档目录
drivers 设备驱动程序
dtt
examples
fs 文件系统
include uboot使用的头文件
lib_arm
lib_avr32
lib_blackfin
lib_generic
lib_i386
lib_m68k
lib_microblaze
lib_mips
lib_nios
lib_nios2
lib_ppc
nand_spl
net
post
rtc
tools
uboot编译
1 选择要使用的board
2 编译
uboot命令
help
printenv 查看环境变量
setenv 添加、删除、修改环境变量 (setent 变量名 值)
saveenv 保存环境变量(保存到flash中)
文件下载
tftp通过网络下载文件
setenv ethaddr 12:34:56:78:9A:BC (mac地址)
setenv ipaddr 192.168.1.11(开发板ip地址)
setenv serverip 192.168.1.12(tftp服务器地址)
tptp c0008000 uImage
内存操作
md(memmory display)显示内存区的内容
md c0008000
mm修改内存
mm c0008000 不修改按回车,退出空格后回车
nand info 查看flash信息
nand flash芯片每一位只能从1变为0,在对其进行写入操作之前需将其
相应块擦除,擦除即是将相应块的位全部变为1
命令格式如下:
nand erase start length
start 开始位
length 长度
nand write写入数据
nand write [内存地址] [flash地址] length
nand read 读出数据
nand read [内存地址] [flash地址] length
flinfo查看flash 扇区信息
nor flash
protect flash 写保护
protect off all 关闭
protect on all 打开
protect off start end (按起始位置关闭)
protect on start end (按起始位置打开)
erase 擦除
erase start end (写入数据前必须先擦除)
cp 数据拷贝
cp[.b,.w,.l] saddress daddress len
程序执行
go 执行内存中的二进制代码
go addr[arg...]
bootm 执行内存中的二进制代码
bootm [addr [arg...]]
bdinfo 显示开发板信息
设置自动启动
setenv bootcmd tftp c0008000 uImage \; bootm c0008000
saveenv
移植过程未完成