复习:
1. 嵌入式系统 软硬件组成
bootloader
kernel window linux vxwork
rootfs 挂载根文件系统
2. 编译工具
nm 符号表
addr2line 根据地址 定位到行号
size 读取段大小
readelf
objdump
objcopy
strip
strings
***********************************
1. uboot常用命令的使用
1、pri print printenv
打印环境变量
save saveenv 保存环境便令
2、set setenv
设置环境变量
set xxxx "value" 设置环境变量值
set xxxx 删除环境变量
3、help 帮助信息
uboot 支持哪些命令
help go go 命令使用说明
4、loadb loady loadx
通过串口 传输数据
5、tftp
网络方式下载 数据
6、go
执行 程序
7、ping
icmp
测试 开发板 和 Ubuntu 是否连通
8、bootm
启动 kernel
bootm 内核地址 文件系统地址
bootm 41000000
9、mmc
烧写 eMMC
1. FS6818# tftp 41000000 win-uboot.bin
2. FS6818# mmc dev 2
3. FS6818# mmc write 41000000 0 300
4. FS6818# saveenv 不用 save
烧写 SD卡
1. FS6818# tftp 41000000 win-uboot.bin
2. FS6818# mmc dev 0
3. FS6818# mmc write 41000000 0 300
4. FS6818# saveenv 不用 save
出现 bl1 就可以了
bl2 是 uboot
uboot 烧写
mmc info
mmc dev [0 2]
mmc write 内存地址 起始块 块儿个数
mmc read 内存地址 起始块 块儿个数
mmc erase 起始块 块儿个数
mmc list 列出 soc 上 mmc 的适配器个数
10 环境变量
set bootcmd "tftp 41000000 uImage; bootm 41000000"
11 boot 命令
让uboot 解析执行 bootcmd 中的命令
12 reset re
重启uboot
2. bootloader作用
1. 对应硬件有 强依赖
2. 初始化硬件
3. 引导内核 启动
当内核启动起来, 它就功成身退, 所占用的内存
资源, 被内核回收
3. bootloader的种类
vivi 韩国 redboot 美国 uboot 德国
4. uboot特点
1、 开源免费软件
2、 代码框架清晰,容易移植维护
3、 支持多种架构处理器
4、 支持开发板种类很多
5、 含有丰富的命令
6、 支持多种网络协议
7、 多种文件系统类型,USB,SD的驱动
8、 更新活跃,使用者多,有助于解决问题
5. 两种模式
1. 自启动模式
2. 交互模式
6. uboot源码获取方式
1. 通过官方网站 获取 uboot 源码
http://ftp.denx.de/pub/u-boot/
2. 从厂商获取 核心板 uboot
gcc 编译工具, uboot, kernel
7. uboot 版本选择
1. 不选择老版本, 维护不方便
2. 不要 选择 太新的
不稳定, 新功能知道的人少
带 rc 公测的,测试
选择 不带 rc
8. uboot源码,配置与编译
1. 拷贝大 Ubuntu 用 tar -xvf 解压
2. 交叉 编译工具 配置
$ vi Makefile
修改顶层Makefile
198 ifeq (arm , arm)
199 CROSS_COMPILE ?= arm-none-linux-gnueabi-
200 endif
3. 配置 指定 开发板
$ make fs6818_config
$ make fs6818_config O=../output
4. 编译 uboot 必须在 顶层目录 执行 make
$ make / make all
make all -j4 多核编译
make all V=1
5. 清除
$ make clean # 清除 .o .bin
$ make mrproper # 清除 .o .bin + 配置文件 +
$ make distclean # 清除 .o .bin + 配置文件 + rm .bak ....
9. 移植的准备工作,获取硬件处理器器信息
board fs6818
SoC s5p6818
cpu armv8 ---- cortex-a53
arch arm 架构
vender samsung
10. u-boot 源码目录结构介绍
arch: cpu架构相关代码
arch/arm/
arch/arm/cpu/
arch/arm/cpu/arm11 arm9 armv8 armv7
board: 不同厂商板子相关代码
board/samsung/: 三星厂商的板子
driver: 设备驱动代码
fs: 文件系统
lib: 解压缩代码,字符串处理,校验代码, 红黑树,快速排序
net: 网络协议
common: 命令相关代码
doc: 文档, 相比Linux内核 的文档太少了
include: 头文件
include/configs/ 各个开发板的配置头文件 .h
scripts: 编译时使用的 Makefile shell 脚本
dts: 以后的uboot版本也将使用设备树
disk: 硬盘分区相关代码
CREDITS: 对uboot的主要贡献者
boards.cfg: uboot 都支持哪些板子
11. 配置流程详解
468 %_config:: outputmakefile
469 @$(MKCONFIG) -A $(@:_config=)
@/home/sky/share/u-boot-2014.07/mkconfig -A $(@:_config=)
@/home/sky/share/u-boot-2014.07/mkconfig -A fs6818
生成
include/config.h
include/config.mk
12. 动手移植 uboot
1. $ vi ./boards.cfg 添加一行
1146 Active arm armv8 s5p6818 hqyj s5p6818 x6818 -
2. $ mkdir ./board/hqyj
2. $ cp ./board/samsung/s5p6818/ ./board/samsung/common/ ./board/hqyj/ -r
3. $ cp ./include/configs/fs6818.h ./include/configs/x6818.h
4. $ make x6818_config // 到顶层目录 配置
5. $ make // 到顶层目录 编译
13. 编译流程详解
见 文档 --> u-boot配置流程-编译流程详细分析.txt
14. 芯片的启动流程
1、BL0 IROM 20K norflash
代码由三星芯片出厂时固化的
1. 内存地址 0x34000000
2. 时钟, 初始化ISRAM,SD/eMMC的控制器,
3. 读取拨码开关
4. 跳过SD卡第0块,从第一块读取56k到ISRAM 读到0xFFFF_0000
5. PC打到ISRAM运行BL1代码 0xFFFF_0000
2、BL1 ISRAM 64K
代码由三星提供bin文件 nsih.txt + S6818_N.bl1 组成bl1
1. 内存地址 0xFFFF_0000
2. DDR 初始化 0x40000000 ~ 0x80000000 1G 内存
3. 从SD卡或者eMMC 读取 自己的代码(蜂鸣器,或者led,uboot)
从哪里(SD卡 还是eMMC)读,由bl1代码决定
4. 读到0x43C00000
15. 点亮第一盏LED灯
1. $ mk6818 pwm.bin nsih.txt S6818_N.bl1 interface.bin
2. $ cat 512B pwm.bin > win-pwm.bin
3. FS6818# tftp 41000000 pwm.bin
4. FS6818# mmc dev 0
5. FS6818# mmc write 41000000 1 55