嵌入式启动顺序及原理
以常见机顶盒 晶晨 海思 等,第一启动为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 脚本内容