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

 

时间: 2024-10-25 09:16:38

OK335xS U-boot 环境变量解析的相关文章

I.MX6 Linux U-boot 环境变量解析

/********************************************************************************** * I.MX6 Linux U-boot 环境变量解析 * 声明: * 在分析完I.MX6 Manufacturing Tool V2 (MFGTool2)中一些内容之后,这里仅仅是 * 为了验证其中的一些想法: * 1. 如何读取不在分区中的uImage,而是在emmc中1M地址上的uImage: * 2. U-boot的loa

Visual Studio 2008 、 Windows 环境变量介绍 和 如何在文件中引用环境变量 .

Visual Studio 2008  和 Windows 环境变量对设置 相对路径很重要,这样便于代码的移植,即使换一台计算机,代码不用更改配置,直接就能用. 可以在项目的"工具""属性页"对话框中任何接受字符串的位置使用这些宏.这些宏不区分大小写.  关于如何自己定义环境变量详见我的另一文章:http://blog.csdn.net/jtop0/article/details/7574139     宏 说明 $(RemoteMachine) 在"调试

Xcode环境变量及路径设置

一般我们在Xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝对路径的问题不大,但是如果你把工程发给别人,别人就要在改这个绝对路径,这时候绝对路径的缺点立马出现. 所以在修改Header Search Paths这个选项的时候,使用"$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹",将上面的双引号里面的字符串拷贝之后,你会发现这个"$(SRCROOT)",会自动变成当前工程所以的目录.这样就可以了,发

jdk环境变量配置

进行java开发,首先要安装jdk,安装了jdk后还要进行环境变量配置: 1.下载jdk(http://java.sun.com/javase/downloads/index.jsp),我下载的版本是:jdk-6u14-windows-i586.exe 2.安装jdk-6u14-windows-i586.exe 3.配置环境变量:右击"我的电脑"-->"高级"-->"环境变量" 1)在系统变量里新建JAVA_HOME变量,变量值为:C

.NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]

较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参数.环境变量和物理文件作为原始配置数据的来源,如果采用物理文件作为配置源,我们可以选择不同的格式(比如XML.JSON和INI等) .如果这些默认支持的配置源形式还不能满足你的需求,我们还可以通过注册自定义ConfigurationSource的方式将其他形式数据作为我们的配置来源. [ 本文已经同

Java配置----JDK开发环境搭建及环境变量配置

[正文] 1.安装JDK开发环境 下载网站:http://www.oracle.com/ 开始安装JDK: 修改安装目录如下: 确定之后,单击"下一步". 注:当提示安装JRE时,可以选择不要安装. 2.配置环境变量: 对于Java程序开发而言,主要会使用JDK的两个命令:javac.exe.java.exe.路径:C:\Java\jdk 1.7.0 _09\bin.但是这些命令由于不属于windows自己的命令,所以要想使用,就需要进行路径配置.  单击"计算机-属性-高级

JDK环境变量配置教程分享_java

每个写Java程序的人都能正确配置JDK,不过由于在第一次配置好之后就不用再次配置了,所以在需要重新配置的时候,可能由于时间长而忘记了.此处写出来也是留下标记,方便日后查阅. 既然要配置就先须下载,推荐到官网去下载,根据需要,如不同操作系统的,或是32位或64位,总之要下载正确的版本.比如我是Win7 64位操作系统,下载的就是最新的 jdk-7u25-windows-x64 版本. 下载完成后,就是双击安装,这个就不用多介绍了,可以默认安装,也可以自定义,关键知道安装的路径就可以了.如:D:\

linux的几个内核镜像格式Image 和 u-boot启动内核和文件系统时的一些环境变量的设置

关于编译powerpc linux的几个Image参考原文 http://blog.sina.com.cn/s/blog_86a30b0c0100wfzt.html 转载▼   PowerPC架构 Linux和ARM,X86等平台有些差异,PowerPC平台HW参数不是通过命令行方式传递到Linux,而是通过传递Device tree文件的方式传递参数,所以PowerPC平台Linux需要编译dtb和uImage才能正常加载,另外PowerPC架构linux还提供simpleImage的方式加载

Linux下如何设置环境变量PATH

Linux系统环境变量配置文件: /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. /etc /environment : 在登录时操作系统使用的第二个文件, 系统在读取你自己的profile前,设置环境文件的环境变量. ~/.profile : 在登录时用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情