本文主要针对于在Uboot下如何设置自启动的问题
一:Uboot原先的环境变量贴出:
bootcmd=mmc dev2;mmc dev 2 ;if mmc rescan; then if run loadbootscript; then runbootscript; else if run loadimage; then run mmcboot; else runnetboot; fi; fi; else run netboot;fi |
二:需要自启动的代码:
setenv fdt_file zImage-imx6sx-sdb-m4.dtb fatload mmc 2:1 0x80000000 XCU.bin dcache flush cp.b 0x80000000 0x7F8000 0x8000 dcache flush setenv mmcargs "setenv bootargs uart_from_oscconsole=${console},${baudrate} root=${mmcroot}" bootaux 0x7F8000 |
三:uboot环境变量设置
=> setenv fdt_filezImage-imx6sx-sdb-m4.dtb |
=>setenv mmcargs "setenvbootargs uart_from_osc console=${console},${baudrate}root=${mmcroot}" |
=>setenv bootrtos "fatloadmmc 2:1 0x80000000 XCU.bin;dcache flush;cp.b 0x80000000 0x7F80000x8000;dcache flush;bootaux 0x7F8000" |
=> setenv bootcmd "mmcdev 2;mmc dev 2 ;run bootrtos ; if mmc rescan; then if runloadbootscript; then run bootscript; else if run loadimage; thenrun mmcboot; else run netboot; fi; fi; else run netboot;fi" |
=> saveenv |
三:重新进入Uboot
bootcmd=mmc dev 2;mmc dev 2 ;run bootrtos ;if mmc rescan; thenif run loadbootscript; then run bootscript; else if run loadimage;then run mmcboot; else run netboot; fi; fi; else run netboot;fi bootrtos = fatloadmmc 2:1 0x80000000 XCU.bin;dcache flush;cp.b 0x80000000 0x7F80000x8000;dcache flush;bootaux 0x7F8000 |
四:重启(不进入uboot环境)
将RTOS端的信息打印出来看是否启动
解释:由于未连接CAN数据发送设备,所以其Send_len为0,但是说明其已经启动
关于Bootcmd的相关信息可以从百度获取,在这主要说明其开机后默认是执行Bootcmd命令的。
思路是:将所有的命令保存到一个环境变量中(这里是bootrtos),然后通过run命令执行这个环境变量(runbootrtos)看是否能够执行,若能执行说明OK,若不能命令出错;然后将run命令集合也添加到bootcmd中,注意这里的ifelse语句。开机重启OK