###u-boot
###最终目的:启动内核
- 从Flash读出内核 放到SDRAM
- 启动内核
###u-boot要实现的功能:
- 读Flash
- 初始化SDRAM
- 启动内核
###使用u-boot:
- 解压缩
- 打补丁:patch -p? < 补丁文件
- 配置:make 100ask24x0_config
- 编译:make
###u-boot功能:单片机程序 关看门狗
初始化时钟
初始化SDRAM
从FLASH读出内核
启动内核
分析配置过程:make 100ask24x0_config
从Makefile中找
分析编译:make
- 第一个文件 cpu/arm920t/start.S
- 链接地址:board/100ask24x0/u-boot.lds 0x33F80000
###硬件相关:
- 设SVC模式
- 关看门狗
- 屏蔽中断
- 初始化SDRAM
- 设置栈
- 时钟
- 代码从Flash–>拷贝到SDRAM
- 清BSS段
- 调用start_armboot
###U-boot:启动内核
- 从Flash读出内核
- 启动:do_bootm
####启动内核: 关键代码
s = getenv("bootcmd");
run_command(s, ...);
###u-boot界面: 关键代码
readline(读入串口的数据);
run_command
###u-boot的核心:命令
- 输入命令字符串–>name–>函数
- 动作–>函数
###分区: PC:每个硬盘上都有分区表
嵌入式Linux:Flash没有分区表,源代码里写死
###u-boot:Flash上存的内核:UImage 64字节头部+真正的内核
###do_bootm:
- 根据头部移动内核到合适的地方
- 启动:do_bootm_linux
- u-boot告诉内核一些参数–>设置启动参数
- 跳到入口地址启动内核
###u-boot:启动内核
- 从Flash读出
- 启动
- 设启动参数
- 跳到入口地址
####thekernel是函数指针
thekernel( 0, bd->bi_arch_number, bd->bi_boot_params);
bd->bi_arch_number 是机器ID,内核启动时比对,确定能否支持
bd->bi_boot_params 是内核启动参数内存
###u-boot命令查询: ? 命令
读取内核命令:
nand read.jffs2 0x30007FC0 kernal;
从NAND读出内核:从哪里读,从kernel分区
放到哪里去?——0x30007FC0
nand read.jffs2 0x30007FC0 0x00060000 0x00200000
bootm 0x30007FC0
设置参数保存在内存:
setup_start_tag (bd);
setup_memory_tags (bd);
setup_commandline_tag (bd, commandline);
setup_end_tag (bd);