嵌入式产品:编译boot

uboot(universal bootloader 通用启动代码)

1. 本质:裸机程序:上电就运行,独占CPU,启动内核就结束
2. 核心功能:启动系统内核
3. uboot是个开源项目,是bootloader标准

PC启动流程

1. BIOS程序由厂家烧录在主板(norflash)上(操作系统在硬盘)
2. BIOS初始化内存/硬盘
3. BIOS把操作系统从硬盘读到DDR
4. BIOS启动系统
5. BIOS结束

uboot启动流程

1. uboot程序/操作系统在flash上
2. uboot初始化内存/flash(这里会通过寄存器读取信息,判断是从Flash/SD卡/U盘等启动)
3. uboot把操作系统读到DDR
4. uboot启动内核,传参
5. uboot结束
6. 内核启动后加载根文件系统(这个不是uboot干的,uboot已经结束了)

uboot功能

1. 启动内核,传参(参数放到内存指定位置,内核再去取)
2. soc级(芯片级)驱动:flash驱动(初始化/读写),时钟/网络等硬件驱动
3. 烧录下载uboot/kernel/rootfs
4. 命令行工具(其实就是死循环读取行缓冲)

命令

help:帮助
print:即printenv,用来查看环境变量
set:即setenv,修改环境变量
save:即saveenv,保存环境变量

环境变量

格式:set name value
添加或修改环境变量:set a 1 # 如果环境变量a存在,则修改a=1,否则添加这个环境变量
删除环境变量:set a # 设个空值
注意:
1. 如果值是有空格或很长的字符串,用单引号括起来
2. 保存环境变量:set只对当前有效,uboot结束后,就没了。如果需要下次使用需要保存命令save

系统分区

一般对Flash划分位4个分区:uboot(1M)/uboot环境变量(32K)/kernel(5M)/rootfs,每个分区的大小自由分配
uboot直接启动(flash起始位置),再把uboot环境变量读取到内存中(这就是为什么我们set变量,但下次就没有了。save后才把内存中的环境变量写入到flash指定分区),再把kernel读到内存

下载

1. 先测试网络ping
2. tftp下载(网络)
	a. tftp作为服务器,uboot作为客户端,直接把文件从tftp服务器下载到指定内存地址(注意:uboot没有内存管理,注意内存的覆盖,内核启动后由内核管理)
	b. 设置环境变量
	serverip:tftp服务器地址
	ipaddr:本机地址(要和tftp服务器同网段)
	netmask:子网掩码
	getewayip:网关
	ethaddr:网卡mac地址
	c. 下载到内存中:tftp 0x30000000 xxx
	d. 从内存保存到flash:movi
3. fastboot下载(usb)

内存操作

movi read:从flash读到内存
movi write:从内存写入flash
movi write u-boot 0x30000000
mm:修改内存值
mw:写内存值
md:显示内存值

把zImagecopy到/tftp下
tftp 31000000 zImage
nand erase 200000 300000(offset size)
nand write 31000000 200000 300000(内存addr offset size)

启动内核

命令:bootm(从指定地址启动内核,可传参)/go(不传参)
环境变量:
bootdelay:倒计时
bootcmd:自动运行命令
bootargs:启动参数

示例

启动命令:
bootcmd=load mmc 0:1 0x41800000 sun8i.dtb; load mmc 0:1 0x41000000 zImage; bootz 0x41000000 - 0x41800000
启动参数:
bootargs=console=ttyS0,115200 panic=5 console=tty0 rootwait root=/dev/mmcblk0p2 earlyprintk rw

console:控制台输出
root:根文件系统在flash的第2分区
rw:可读写
init:linux的init进程的路径
rootfstype:文件系统类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值