【驱动】uboot环境变量分析
来源:互联网 发布:华艺服装淘宝店 编辑:程序博客网 时间:2024/06/05 14:52
0、bootcmd
0.1 飞凌原设置
bootcmd=if mmc rescan; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;
0.1.1 bootcmd解析
if mmc rescan; then //mmc rescan:重新搜索mmc设备。如果有mmc设备
if run loadbootscript; then //如果是uboot脚本启动,则执行脚本,参见0.1.2
run bootscript; //参见0.1.3
else
if test ${bootdev} = sd1; then //如果是从sd1启动,
echo update firmware.........;
run update_from_sd; //则执行更新固件的脚本,参见0.1.4
else
echo mmc boot..........;
if run loadimage; then //参见0.1.5
run mmcboot; //参见0.1.6
else
run netboot;
fi;
fi;
fi;
else
run netboot;
fi;
0.1.2 loadbootscript解析
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
a)fatload 该命令用于从 FAT 文件系统设备中读取指定文件放入指定内存中,用法介绍如下:
usage: fatload <interface> <dev[:part]> <addr> <filename> [bytes]
如介绍所述,当要读取文件时,需要设备已经完成初始化并注册到文件系统中,读取时用法如: fatload mmc 1 0x81000000 boot.img[size],其中 mmc 1 为文件 boot.img 保存的设备,0x81000000 为读取的内容存放的内存地址。
b)去变量后的命令
mmcdev=1
mmcpart=1
loadaddr=0x80800000
script=boot.scr
fatload mmc 1:1 0x80800000 boot.scr
0.1.3 bootscript解析
bootscript=echo Running bootscript from mmc ...; source //source运行脚本boot.scr
0.1.4 update_from_sd
update_from_sd=run update_emmc;
update_emmc=mmc rescan;fatload mmc 0 ${loadaddr} /bin/${image}; fatload mmc 0 ${initrd_addr} /bin/ramdisk.img.u; fatload mmc 0 ${fdt_addr} /bin/${fdt_file}; set bootargs console=${console},${baudrate} cma=320M rdinit=/linuxrc; bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
0.1.4.1 解析update_emmc
mmc rescan;
fatload mmc 0 ${loadaddr} /bin/${image}; ------>fatload mmc 0 0x80800000 /bin/zImage;
fatload mmc 0 ${initrd_addr} /bin/ramdisk.img.u; ------>fatload mmc 0 0x83800000 /bin/ramdisk.img.u
fatload mmc 0 ${fdt_addr} /bin/${fdt_file}; ------>fatload mmc 0 0x83000000 /bin/imx6ul-14x14-evk.dtb
set bootargs console=${console},${baudrate} cma=320M rdinit=/linuxrc; ------> set bootargs console=ttymxc0,115200 cma=320M rdinit=/linuxrc
bootz ${loadaddr} ${initrd_addr} ${fdt_addr}; ------>bootz 0x80800000 0x83800000 0x83000000
0.1.5 loadimage解析
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
--------> fatload mmc 1:1 0x80800000 zImage
0.1.6 mmc启动解析
0.1.6.1 mmcboot变量
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
0.6.1.2 mmcboot解析
echo Booting from mmc ...;
run mmcargs;
if test ${boot_fdt} = yes || test ${boot_fdt} = try; then
if run loadfdt; then
bootz ${loadaddr} - ${fdt_addr};
else
if test ${boot_fdt} = try; then
bootz;
else
echo WARN: Cannot load the DT;
fi;
fi;
else
bootz;
fi;
0.6.1.3 mmcargs设置bootargs参数
mmcargs=setenv bootargs console=${console},${baudrate} calibrate=${calibrate} cma=320M root=${mmcroot}
------->setenv bootargs console==ttymxc0,115200 calibrate=【空】 cma=320M root=/dev/mmcblk1p2 rootwait rw
//rw是声明启动权限,即以读写方式启动;rootwait是指等待设备/dev/mmcblk0p2设备就绪后才尝试挂载rootfs。如果没有此参数,linux内核启动时可能会在存储设备尚未就绪是就尝试挂载rootfs,此时肯定挂载失败,那么启动也就失败了。
0.2 试验设置
bootcmd=if 0; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;
设置命令 setenv bootcmd "if 0; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;"
1、netboot
1.1 飞凌原设置
netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${image}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
1.1.1 解析
echo Booting from net ...;
run netargs;
if test ${ip_dyn} = yes; then //-------->ip_dyn=yes
setenv get_cmd dhcp;
else
setenv get_cmd tftp;
fi;
${get_cmd} ${image}; //-------->dhcp zImage ;是否需要改为tftp 0x80800000 zImage????即ip_dyn=no;${get_cmd} ${loadaddr} ${image};
if test ${boot_fdt} = yes || test ${boot_fdt} = try; then //-------->boot_fdt=try
if ${get_cmd} ${fdt_addr} ${fdt_file}; then //-------->dhcp 0x83000000 imx6ul-14x14-evk.dtb
bootz ${loadaddr} - ${fdt_addr}; //-------->bootz 0x80800000 - 0x83000000
else
if test ${boot_fdt} = try; then
bootz;
else
echo WARN: Cannot load the DT;
fi;
fi;
else
bootz;
fi;
1.1.1.1 netargs
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
----------->setenv bootargs console==ttymxc0,115200 root=/dev/nfs ip=dhcp nfsroot=【空】:【空】,v3,tcp
1.1.1.2 需要设置${serverip}:${nfsroot}
二、设置命令
1、飞凌原设置
setenv bootcmd "if mmc rescan; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;"
setenv ip_dyn=yes
setenv serverip
setenv nfsroot
2、试验修改
setenv bootcmd "if 0; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;"
setenv ip_dyn no
setenv serverip 172.16.12.89
setenv nfsroot "/home/lisa/3-nfsrootfs/im6ul_rootfs"
0.1 飞凌原设置
bootcmd=if mmc rescan; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;
0.1.1 bootcmd解析
if mmc rescan; then //mmc rescan:重新搜索mmc设备。如果有mmc设备
if run loadbootscript; then //如果是uboot脚本启动,则执行脚本,参见0.1.2
run bootscript; //参见0.1.3
else
if test ${bootdev} = sd1; then //如果是从sd1启动,
echo update firmware.........;
run update_from_sd; //则执行更新固件的脚本,参见0.1.4
else
echo mmc boot..........;
if run loadimage; then //参见0.1.5
run mmcboot; //参见0.1.6
else
run netboot;
fi;
fi;
fi;
else
run netboot;
fi;
0.1.2 loadbootscript解析
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
a)fatload 该命令用于从 FAT 文件系统设备中读取指定文件放入指定内存中,用法介绍如下:
usage: fatload <interface> <dev[:part]> <addr> <filename> [bytes]
如介绍所述,当要读取文件时,需要设备已经完成初始化并注册到文件系统中,读取时用法如: fatload mmc 1 0x81000000 boot.img[size],其中 mmc 1 为文件 boot.img 保存的设备,0x81000000 为读取的内容存放的内存地址。
b)去变量后的命令
mmcdev=1
mmcpart=1
loadaddr=0x80800000
script=boot.scr
fatload mmc 1:1 0x80800000 boot.scr
0.1.3 bootscript解析
bootscript=echo Running bootscript from mmc ...; source //source运行脚本boot.scr
0.1.4 update_from_sd
update_from_sd=run update_emmc;
update_emmc=mmc rescan;fatload mmc 0 ${loadaddr} /bin/${image}; fatload mmc 0 ${initrd_addr} /bin/ramdisk.img.u; fatload mmc 0 ${fdt_addr} /bin/${fdt_file}; set bootargs console=${console},${baudrate} cma=320M rdinit=/linuxrc; bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
0.1.4.1 解析update_emmc
mmc rescan;
fatload mmc 0 ${loadaddr} /bin/${image}; ------>fatload mmc 0 0x80800000 /bin/zImage;
fatload mmc 0 ${initrd_addr} /bin/ramdisk.img.u; ------>fatload mmc 0 0x83800000 /bin/ramdisk.img.u
fatload mmc 0 ${fdt_addr} /bin/${fdt_file}; ------>fatload mmc 0 0x83000000 /bin/imx6ul-14x14-evk.dtb
set bootargs console=${console},${baudrate} cma=320M rdinit=/linuxrc; ------> set bootargs console=ttymxc0,115200 cma=320M rdinit=/linuxrc
bootz ${loadaddr} ${initrd_addr} ${fdt_addr}; ------>bootz 0x80800000 0x83800000 0x83000000
0.1.5 loadimage解析
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
--------> fatload mmc 1:1 0x80800000 zImage
0.1.6 mmc启动解析
0.1.6.1 mmcboot变量
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
0.6.1.2 mmcboot解析
echo Booting from mmc ...;
run mmcargs;
if test ${boot_fdt} = yes || test ${boot_fdt} = try; then
if run loadfdt; then
bootz ${loadaddr} - ${fdt_addr};
else
if test ${boot_fdt} = try; then
bootz;
else
echo WARN: Cannot load the DT;
fi;
fi;
else
bootz;
fi;
0.6.1.3 mmcargs设置bootargs参数
mmcargs=setenv bootargs console=${console},${baudrate} calibrate=${calibrate} cma=320M root=${mmcroot}
------->setenv bootargs console==ttymxc0,115200 calibrate=【空】 cma=320M root=/dev/mmcblk1p2 rootwait rw
//rw是声明启动权限,即以读写方式启动;rootwait是指等待设备/dev/mmcblk0p2设备就绪后才尝试挂载rootfs。如果没有此参数,linux内核启动时可能会在存储设备尚未就绪是就尝试挂载rootfs,此时肯定挂载失败,那么启动也就失败了。
0.2 试验设置
bootcmd=if 0; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;
设置命令 setenv bootcmd "if 0; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;"
1、netboot
1.1 飞凌原设置
netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${image}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
1.1.1 解析
echo Booting from net ...;
run netargs;
if test ${ip_dyn} = yes; then //-------->ip_dyn=yes
setenv get_cmd dhcp;
else
setenv get_cmd tftp;
fi;
${get_cmd} ${image}; //-------->dhcp zImage ;是否需要改为tftp 0x80800000 zImage????即ip_dyn=no;${get_cmd} ${loadaddr} ${image};
if test ${boot_fdt} = yes || test ${boot_fdt} = try; then //-------->boot_fdt=try
if ${get_cmd} ${fdt_addr} ${fdt_file}; then //-------->dhcp 0x83000000 imx6ul-14x14-evk.dtb
bootz ${loadaddr} - ${fdt_addr}; //-------->bootz 0x80800000 - 0x83000000
else
if test ${boot_fdt} = try; then
bootz;
else
echo WARN: Cannot load the DT;
fi;
fi;
else
bootz;
fi;
1.1.1.1 netargs
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
----------->setenv bootargs console==ttymxc0,115200 root=/dev/nfs ip=dhcp nfsroot=【空】:【空】,v3,tcp
1.1.1.2 需要设置${serverip}:${nfsroot}
二、设置命令
1、飞凌原设置
setenv bootcmd "if mmc rescan; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;"
setenv ip_dyn=yes
setenv serverip
setenv nfsroot
2、试验修改
setenv bootcmd "if 0; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;"
setenv ip_dyn no
setenv serverip 172.16.12.89
setenv nfsroot "/home/lisa/3-nfsrootfs/im6ul_rootfs"
阅读全文
0 0
- 【驱动】uboot环境变量分析
- uboot环境变量实现分析
- uboot环境变量实现分析
- uboot环境变量实现分析
- uboot环境变量实现分析
- uboot环境变量实现分析
- uboot环境变量实现分析
- uboot环境变量实现分析
- DM9000 uboot驱动分析
- Linux内核驱动之Uboot(1)环境变量
- xilinx uboot网卡驱动分析
- uboot 源码分析(2)uboot 环境变量实现简析
- uboot 环境变量
- uboot环境变量
- uboot环境变量
- uboot环境变量
- uboot环境变量
- uboot环境变量
- 1806: [Ioi2007]Miners 矿工配餐
- 为什么要重写hashcode()方法以及如何重写hashcode和equals方法
- hdu 4638 Group
- 浅谈KMP算法及实现
- NLP深度学习 —— CS224学习笔记4
- 【驱动】uboot环境变量分析
- ccf 201612-4 压缩编码
- 【SikuliX】SikuliX+Vysor实现安卓app自动化测试
- 常用开关电源拓扑演进
- Hadoop小案例
- 在参数封装对象Page中使用in查询多项数据记录
- JS中window对象的使用
- js 数值操作(floor ceil abs round)
- Linux之解压缩常用命令