码迷,mamicode.com
首页 > 其他好文 > 详细

OK335xS U-boot 环境变量解析

时间:2015-09-28 22:23:38      阅读:481      评论:0      收藏:0      [点我收藏+]

标签:

/**************************************************************************************************
 *                                      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 环境变量解析

标签:

原文地址:http://www.cnblogs.com/zengjfgit/p/4845023.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!