嵌入式启动顺序及原理

嵌入式启动顺序及原理

以常见机顶盒 晶晨 海思 等,第一启动为uboot,uboot类似电脑bios,实现硬件初始化,和启动顺序,emmc的 分区表也在这里。
这里重要的是 启动顺序,修改变量环境更改设置

setenv start_usb_autoscript "if fatload usb 0 11000000 s805_autoscript; then autoscr 11000000; fi; if fatload usb 1 11000000 s805_autoscript; then autoscr 11000000; fi;"


setenv start_autoscript 'if usb start; then run start_usb_autoscript; fi; if mmcinfo; then run start_mmc_autoscript; fi;'

setenv bootcmd 'run start_autoscript; run storeboot'

saveenv
如这里的设置是 加载脚本文件 s805_autoscript 到内存,优先usb0 usb1 mmc,定义start_autoscript脚本,并执行这个脚本。
而这个脚本内容是 加载内核 及相关配置文件 到内存,然后启动。
s805_autoscrip:
'V▒▒!^s\▒▒u▒▒,auto_script▒setenv env_addr “0x11400000”
PuTTYPuTTYsetenv dtb_addr “0x11800000”
setenv kernel_addr “0x14000000”
setenv initrd_addr “0x15000000”
setenv boot_start bootm ${kernel_addr} ${initrd_addr} ${dtb_addr}
if fatload mmc 1:4 ${kernel_addr} uImage; then if fatload mmc 1:4 ${initrd_addr} uInitrd; then if fatload mmc 1:4 ${env_addr} uEnv.ini; then env import -t ${env_addr} ${filesize};fi; if fatload mmc 1:4 ${dtb_addr} ${dtb_name}; then run boot_start; else imgread dtb boot ${dtb_addr}; run boot_start;fi;fi;fi;

uEnv.ini :
dtb_name=/dtb/me.dtb
bootargs=root=/dev/system rootflags=data=writeback rw console=ttyS0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.repair=yes net.ifnames=0 ramoops.mem_address=0x04e00000 ramoops.mem_size=0x100000 ramoops.record_size=0x8000 ramoops.console_size=0x4000 storage=2 cvbsdrv=0 vdaccfg=0xa000 logo=osd1,loaded,0x7900000,1080p,full hdmimode=1080p cvbsmode=576cvbs androidboot.firstboot=1 hdmitx=

为定义roosfs 挂载设备

总结整个顺序 为:
1、根据 uboot 变量环境启动 s805_autoscrip
2、s805_autoscrip加载内核、dtb、uEnv.ini
3、uEnv.ini加载rootfs

如果要修改启动磁盘或者分区,与uboot的变量 和 s805_autoscrip 脚本内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值