OK335xS U-boot 环境变量解析
/**************************************************************************************************
* OK335xS U-boot 环境变量解析
* 声明:
* 本文主要是为了知道OK335xS U-boot环境变量设置、如何选择启动方式等等内容。
*
* 2015-9-28 晴 深圳 南山平山村 曾剑锋
*************************************************************************************************/
#ifdef CONFIG_ANDROID
#define CON \
/**
* console: kernel终端输出设置为ttyO0、115200n8
*/
"console=ttyO0,115200n8 earlyprintk androidboot.console=ttyO0\0" \
/**
* In all cases we make use of optargs to control passing in of additional arguments and ip_method to determine how the kernel will deal with networking PRIOR to userspace spawning init.
*/
"optargs=init=/init\0" \
/**
* 文件系统存放的位置,文进系统存放在emmc中
*/
"mmcroot=/dev/mmcblk0p2 rw\0" \
/**
* 文件系统的类型是ext4
*/
"mmcrootfstype=ext4 rootwait\0" \
/**
* 文件系统存放的位置,文进系统存放在nand中
*/
"nandroot=ubi0:rootfs rw ubi.mtd=7,2048\0" \
/**
* 文件系统的类型是ubifs
*/
"nandrootfstype=ubifs rootwait=1\0"
#else
/*"console=ttyO0,115200n8\0" \ */
#define CON \
/**
* console: kernel终端输出设置为ttyO0、115200n8
*/
"console=ttyO0,115200n8\0" \
"optargs=\0" \
"mmcroot=/dev/mmcblk0p2 ro\0" \
/**
* 文件系统的类型是ext3
*/
"mmcrootfstype=ext3 rootwait\0" \
"nandroot=ubi0:rootfs rw ubi.mtd=7,2048\0" \
"nandrootfstype=ubifs rootwait=1\0"
#endif #if 1
#define CONFIG_EXTRA_ENV_SETTINGS \
CON \
/**
* printf("current screen type is `%s`\n",getenv("screentype"));
* printf("R means Resistor screen,C means Capacitor screen\n");
* printf("---------------------screen type----------------------\n");
* printf("0 -- exit to upper menu\n");
* printf("1 -- Resistor screen\n");
* printf("2 -- Capacitor screen\n");
* printf("------------------------------------------------------\n");
*
*/
"screentype=R\0"\
/**
* printf("current screen size is `%s`\n",getenv("screensize"));
* printf("AAAxAAA-B means Binch screen with AAAxAAA pixels\n");
* printf("---------------------screen type----------------------\n");
* printf("0 -- exit to upper menu\n");
* printf("1 -- 480x272-4\n");
* printf("2 -- 800x480-5\n");
* printf("3 -- 800x480-7\n");
* printf("4 -- 800x600-8\n");
* printf("5 -- 800x600-10\n");
* printf("------------------------------------------------------\n");
*/
"screensize=800x600-10\0"\
/**
* load address
*/
"loadaddr=0x80200000\0" \
/**
* kernel load address
*/
"kloadaddr=0x80007fc0\0" \
"fdtaddr=0x80F80000\0" \
"fdt_high=0xffffffff\0" \
/**
* ramdisk address
*/
"rdaddr=0x81000000\0" \
/**
* boot device
*/
"bootdev=MMC\0"\
/**
* boot file name
*/
"bootfile=uImage\0" \
"fdtfile=\0" \
/**
* mmc设备可能有几个,选择第0个
*/
"mmcdev=0\0" \
/**
* nand中内核保存的其实地址,这个需要看nand分区设置,kernel中有一个分区表,下面的update也有对应的值
*/
"nandsrcaddr=0x280000\0" \
/**
* nand中的kernel的大小
*/
"nandimgsize=0x500000\0" \
/**
* 网络文件系统所使用的挂在路径方式
*/
"rootpath=/export/rootfs\0" \
"nfsopts=nolock\0" \
"static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}" \
"::off\0" \
"ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=${rdaddr},64M\0" \
"ramrootfstype=ext2\0" \
/**
* ip_method to determine how the kernel will deal with networking PRIOR to userspace spawning init
*/
"ip_method=none\0" \
"bootargs_defaults=setenv bootargs " \
"console=${console} " \
"${optargs}\0" \
"mmcargs=run bootargs_defaults;" \
"setenv bootargs ${bootargs} " \
"root=${mmcroot} " \
"rootfstype=${mmcrootfstype} ip=${ip_method} screentype=${screentype} screensize=${screensize}\0" \
"nandargs=setenv bootargs console=${console} " \
"${optargs} " \
"root=${nandroot} " \
"rootfstype=${nandrootfstype} screentype=${screentype} screensize=${screensize}\0" \
"spiroot=/dev/mtdblock4 rw\0" \
"spirootfstype=jffs2\0" \
"spisrcaddr=0xe0000\0" \
"spiimgsize=0x362000\0" \
"spibusno=0\0" \
"spiargs=setenv bootargs console=${console} " \
"${optargs} " \
"root=${spiroot} " \
"rootfstype=${spirootfstype}\0" \
"netargs=setenv bootargs console=${console} " \
"${optargs} " \
"root=/dev/nfs " \
"nfsroot=${serverip}:${rootpath},${nfsopts} rw " \
"ip=dhcp\0" \
"bootenv=uEnv.txt\0" \
"loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \
"importbootenv=echo Importing environment from mmc ...; " \
"env import -t $loadaddr $filesize\0" \
"ramargs=setenv bootargs console=${console} " \
"${optargs} " \
"root=${ramroot} " \
"rootfstype=${ramrootfstype}\0" \
"loadramdisk=fatload mmc ${mmcdev} ${rdaddr} ramdisk.gz\0" \
"loaduimagefat=fatload mmc ${mmcdev} ${kloadaddr} ${bootfile}\0" \
"loaduimage=ext2load mmc ${mmcdev}:2 ${kloadaddr} /boot/${bootfile}\0" \
"mmcboot=echo Booting from mmc ...; " \
"run mmcargs; " \
"bootm ${kloadaddr}\0" \
"nandboot=echo Booting from nand ...; " \
"run nandargs; " \
"nandecc hw 2;"\
"nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; " \
"bootm ${loadaddr}\0" \
"spiboot=echo Booting from spi ...; " \
"run spiargs; " \
"sf probe ${spibusno}:0; " \
"sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; " \
"bootm ${loadaddr}\0" \
"netboot=echo Booting from network ...; " \
"setenv autoload no; " \
"dhcp; " \
"tftp ${loadaddr} ${bootfile}; " \
"run netargs; " \
"bootm ${loadaddr}\0" \
"ramboot=echo Booting from ramdisk ...; " \
"run ramargs; " \
"bootm ${loadaddr}\0" \
"findfdt="\
"if test $board_name = A335BONE; then " \
"setenv fdtfile am335x-bone.dtb; fi; " \
"if test $board_name = A33515BB; then " \
"setenv fdtfile am335x-evm.dtb; fi; " \
"if test $board_name = A335X_SK; then " \
"setenv fdtfile am335x-evmsk.dtb; fi\0" \
/**
* cat drivers/video/cfb_console.c
*
* env = getenv("TYPE");
* if(env)
* type = (*env)-'0';
* else
* type = 9;
*
* switch(type)
* {
* case 0:
* title = "Erasing nand chip............";
* break;
* case 1:
* title = "Reading MLO from MMC.........";
* break;
* case 2:
* title = "Burning MLO to nand..........";
* break;
* case 3:
* title = "Reading u-boot.img from MMC..";
* break;
* case 4:
* title = "Burning u-boot.img to nand...";
* break;
* case 5:
* title = "Reading uImage from MMC......";
* break;
* case 6:
* title = "Burning uImage to nand.......";
* break;
* case 7:
* title = "Reading ubi.img from MMC.....";
* break;
* case 8:
* title = "Burning ubi.img to nand......";
* break;
* default:
* title = "env is null..................";
* break;
* }
*/
/**
* 这一部分写到nand中的内容,需要和kernel对nand的分区进行对应,貌似这样就可以直接对u-boot、kernel进行更新了
*/
"auto_update_nand= echo ---------------Begin update system to Nand---------------;led all on;"\
"setenv TYPE 0;nand erase.chip;mmc rescan; "\
"setenv TYPE 1;fatload mmc 0 80A00000 nand_MLO; setenv TYPE 2;nandecc hw 2;nand write.i 80A00000 0 ${filesize}; "\
"setenv TYPE 3;fatload mmc 0 80A00000 nand_u-boot.img;setenv TYPE 4;nandecc hw 2;nand write.i 80A00000 80000 ${filesize}; "\
"setenv TYPE 5;fatload mmc 0 80A00000 uImage; setenv TYPE 6;nandecc hw 2;nand write.i 80A00000 280000 ${filesize}; "\
"setenv TYPE 7;fatload mmc 0 80A00000 ubi.img; setenv TYPE 8;nandecc sw;nand write.i 80A00000 780000 ${filesize};"\
"echo ;"\
"echo --------------Update system to Nand success--------------;led flash all;\0"\
"update_nand= echo ---------------Begin update system to Nand---------------;led all on;"\
"setenv TYPE 0;nand erase.chip;mmc rescan; "\
"setenv TYPE 1;fatload mmc 0 80A00000 MLO; setenv TYPE 2;nandecc hw 2;nand write.i 80A00000 0 ${filesize}; "\
"setenv TYPE 3;fatload mmc 0 80A00000 u-boot.img;setenv TYPE 4;nandecc hw 2;nand write.i 80A00000 80000 ${filesize}; "\
"setenv TYPE 3;fatload mmc 0 80A00000 u-boot.img;setenv TYPE 4;nandecc hw 2;nand write.i 80A00000 80000 ${filesize}; "\
"setenv TYPE 5;fatload mmc 0 80A00000 uImage; setenv TYPE 6;nandecc hw 2;nand write.i 80A00000 280000 ${filesize}; "\
"setenv TYPE 7;fatload mmc 0 80A00000 ubi.img; setenv TYPE 8;nandecc sw;nand write.i 80A00000 780000 ${filesize};"\
"echo ;"\
"echo --------------Update system to Nand success--------------;led all off;"\ /**
* 虽然这部分代码确认是可运行的,但是感觉真的不合理,后面的源代码貌似更为合理一点
*/
#define CONFIG_BOOTCOMMAND \
" if test $bootdev = MMC; then " \ // bootdev = MMC
"mmc dev ${mmcdev}; mmc rescan;"\ // mmcdev = 0, 设置0为当前设备
"echo SD/MMC found on device ${mmcdev};" \
/**
* loadaddr = 0x80200000
* bootenv = uEnv.txt
* loadbootenv = fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
* importbootenv = echo Importing environment from mmc ...;env import -t $loadaddr $filesize
*/
"if run loadbootenv; then " \
"echo Loaded environment from ${bootenv};" \
"run importbootenv;" \
"fi;" \
/**
* test -n: 字符串的长度非零
* uenvcmd: 不存在,不用解析
*/
"if test -n $uenvcmd; then " \
"echo Running uenvcmd ...;" \
"run uenvcmd;" \
"fi;" \
/**
* kloadaddr = 0x80007fc0
* bootfile = uImage
* loaduimagefat = fatload mmc ${mmcdev} ${kloadaddr} ${bootfile}
*
* mmcboot = echo Booting from mmc ...;run mmcargs;bootm ${kloadaddr}
* mmcroot = /dev/mmcblk0p2 ro
* mmcrootfstype = ext3 rootwait
* ip_method = none
* screentype = R
* screensize = 800x600-10
* mmcargs = run bootargs_defaults;setenv bootargs ${bootargs} root=${mmcroot} rootfstype=${mmcrootfstype} ip=${ip_method} screentype=${screentype} screensize=${screensize}
*/
"if run loaduimagefat; then " \
"run mmcboot;" \
/**
* kloadaddr = 0x80007fc0
* bootfile = uImage
* loaduimage = ext2load mmc ${mmcdev}:2 ${kloadaddr} /boot/${bootfile}
*/
"elif run loaduimage; then " \
"run mmcboot;" \
"else " \
"echo Could not find ${bootfile} ;" \
"fi;" \
"else " \
"run nandboot;" \
"fi;" \ /**
* 个人认为更合理的bootcmd
*/
#define CONFIG_BOOTCOMMAND \
/**
* mmcdev = 0, 设置0为当前设备
*/
"mmc dev ${mmcdev}; " \
/**
* 重新搜索mmc设备,如果不存在mmc设备,自然就是nand启动了
*/
"if mmc rescan; then " \
"echo SD/MMC found on device ${mmcdev};" \
"if run loadbootenv; then " \
"echo Loaded environment from ${bootenv};" \
"run importbootenv;" \
"fi;" \
"if test -n $uenvcmd; then " \
"echo Running uenvcmd ...;" \
"run uenvcmd;" \
"fi;" \
"if run loaduimagefat; then " \
"run mmcboot;" \
"elif run loaduimage; then " \
"run mmcboot;" \
"else " \
"echo Could not find ${bootfile} ;" \
"fi;" \
"else " \
"run nandboot;" \
"fi;" \
#else
OK335xS U-boot 环境变量解析的更多相关文章
- Spring Boot 环境变量读取 和 属性对象的绑定
网上看到的一些方法,结合我看到的 和我们现在使用的.整理成此文: 第一种方法 参见catoop的博客之 Spring Boot 环境变量读取 和 属性对象的绑定(尊重原创) 第二种方法 class不用 ...
- I.MX6 Linux U-boot 环境变量解析
/********************************************************************************** * I.MX6 Linux U- ...
- 安装qmake与环境变量解析
转自:http://www.kuqin.com/qtdocument/qmake-manual-2.html 安装qmake 当Qt被连编的时候,默认情况下qmake也会被连编. 这一部分解释如何手工 ...
- 十五、Spring Boot 环境变量读取 和 属性对象的绑定
凡是被spring管理的类,实现接口 EnvironmentAware 重写方法 setEnvironment 可以在工程启动时,获取到系统环境变量和application配置文件中的变量. 如: @ ...
- JDK环境变量解析
设置环境变量 在java 中需要设置三个环境变量(1.5之后不用再设置classpath了,但个人强烈建议继续设置以保证向下兼用问题)JDK安装完成之后我们来设置环境变量:右击“我的电脑”,选择“属性 ...
- Ubuntu环境变量解析
在Ubuntu中有如下几个文件可以设置环境变量 /etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. /e ...
- 24. Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
转:http://blog.csdn.net/linxingliang/article/details/52069509 凡是被spring管理的类,实现接口EnvironmentAware 重写方法 ...
- (24)Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
凡是被Spring管理的类,实现接口 EnvironmentAware 重写方法 setEnvironment 可以在工程启动时,获取到系统环境变量和application配置文件中的变量. com. ...
- 更优雅的配置:docker/运维/业务中的环境变量
目录 docker-compose 环境变量 .env 文件 env_file docker stack 不支持基于文件的环境变量 envsubst envsubst.py 1. 使用行内键值对 2. ...
随机推荐
- C/C++UNION中包含STRUCT
测试环境:Win7x64,cn_visual_studio_2010_ultimate_x86_dvd_532347.iso,qt-opensource-windows-x86-msvc2010_op ...
- C#异常信息获取
try { ; / i; } catch (Exception ex) { /** * 1.异常消息 * 2.异常模块名称 * 3.异常方法名称 * 4.异常行号 */ String str = &q ...
- python通过get方式,post方式发送http请求和接收http响应-urllib urllib2
python通过get方式,post方式发送http请求和接收http响应-- import urllib模块,urllib2模块, httplib模块 http://blog.163.com/xyc ...
- javascript变量声明及作用域总结
javascript变量声明及作用域总结 一.总结 一句话总结:还是得好好看书,光看视频是不得行的,浅学无用,要相互印证,要真正理解才有用,比如<Javascript权威指南> 书 1.j ...
- 雷林鹏分享:C# 文件的输入与输出
C# 文件的输入与输出 一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合.当打开文件进行读写时,它变成一个 流. 从根本上说,流是通过通信路径传递的字节序列.有两个主要的流:输入流 和 ...
- mac 无法打开xx ,因为无法确认开发者身份
系统偏好与设置 - 安全性与隐私 - 通用 允许从以下位置下载的应用: 选择 [任何来源],如果没有这个选项,使用终端执行下面的命令: spctl --master-disable (spctl空格 ...
- 3-23Agile Web Development,3-24(chapter: 6)
第2章 Instant Gratification 复习 和 练习第一章,新建rails web页面. 重点: 知道了类,方法,实例变量 在rails是怎么用的. rails generate con ...
- Android动画(Animations)
动画类型Android的animation由四种类型组成 XML中 alpha : 渐变透明度动画效果 scale :渐变尺寸伸缩动画效果 translate : 画面转换位置移动动画效果 ro ...
- 『Json』常用方法记录
json模块可以把字典结构改写为string然后保存,并可以反向读取字典 pickle模块则可以持久化任意数据结构 但是即使同样是字典数据结构,两个包也是有差别的, json字典value不支持其他对 ...
- python-day8-字典的内置方法
# info=['egon','male',18,180,75]### info_dic={'name':'egon','age':18,'sex':'male'} # 有对应关系 # 常用操作:优先 ...