This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

在dm8168+dvrrdk4.0.0.3环境下,谁动了我的uboot环境变量?

Other Parts Discussed in Thread: AM3517


环境:dm8168+dvrrdk4.0.0.3

平时主机上电正常可以进入系统,100台里面可能有那么2台在客户现场就会出现主机上电不能进入系统
接串口查看主机一直停留在uboot重启
查看uboot环境变量被修改了,请问我的bootcmd为什么无缘无故被修改成bootcmd=nand erase 260000 20000; reset;uboot源码中也没有nand erase 260000 20000; reset;给bootcmd赋值
同时很多环境变量也被擦除了,请问怎么回事?谢谢!


TI8168_EVM2fs#pri
bootcmd=nand erase 260000 20000; reset;
bootdelay=1
baudrate=115200
netmask=255.255.254.0
gatewayip=192.168.26.1
dnsip=202.96.128.86
dnsip2=202.96.128.86
stdin=serial
stdout=serial
stderr=serial
ethaddr=b0:d5:cc:73:cb:3c
ethact=DaVinci EMAC
ver=U-Boot 2010.06 (Nov 23 2016 - 16:17:32)


可以正常工作的uboot环境变量如下:
bootcmd=mmc rescan 0; if fatload mmc 0 80009000 boot.scr; then source 80009000; boot; else recovery;if printenv reloadfactory; then run showupdatelogo;run burne; run reloadf; setenv reloadfactory ;setenv poweroncount 0;setenv justnowrecoveryfactory 1;saveenv; reset; fi; if printenv updatefs; then run burne; run burnf_tftp; reset; fi; if printenv autorecoveryfactory; then run showupdatelogo;run burne; run autorecoveryf;setenv autorecoveryfactory ;setenv poweroncount 0;setenv justnowrecoveryfactory 1;saveenv; reset; fi; run showlogo;saveenv;nand read 80009000 200000 400000; bootm 80009000; fi
bootdelay=0
baudrate=115200
autoload=no
verify=yes
autorunrdk=1
autorunapp=1
biosfile=hdmeeting.bios.img
osfile=hdmeeting.os.img
fsfile=hdmeeting.fs.img
logofile=hdmeeting.logo.bmp
uplogofile=hdmeeting.uplogo.bmp
gatewayip=192.168.0.1
netmask=255.255.255.0
showlogo=nand read 81000000 19a00000 a00000; logo on 81000000 a0000000 bea00000 20 60;
showupdatelogo=nand read 81000000 1a400000 a00000; logo on 81000000 a0000000 bea00000 20 60;
led_init=mw 48140b08 a; mw 48140b14 a; mw 48140b10 a; mw 4804c134 ffff7fff; mw 48032134 ff3fffff; run led_all_off;
led1_on=mw 4804c190 8000
led2_on=mw 48032190 800000
led3_on=mw 48032190 400000
led1_off=mw 4804c194 8000
led2_off=mw 48032194 800000
led3_off=mw 48032194 400000
led_all_on=mw 4804c190 8000; mw 48032190 c00000;
led_all_off=mw 4804c194 8000; mw 48032194 c00000;
error0=echo ERROR - fail to read SD/MMC; run led_all_off; sleep 1; run led_all_on; sleep 1; run error0;
error1=echo ERROR - fail to load $biosfile; run led1_off; sleep 1; run led1_on; sleep 1; run error1;
error2=echo ERROR - fail to load $osfile; run led2_off; sleep 1; run led2_on; sleep 1; run error2;
error3=echo ERROR - fail to load $fsfile; run led3_off; sleep 1; run led3_on; sleep 1; run error3;
dbgu=tftp 81000000 hdmeeting.bios.new.img; go 81000000;
dbgk=tftp 81000000 hdmeeting.os.new.img; bootm 81000000;
do_burnu=nand erase 0 200000; nand write 81000000 0 $filesize; nand read 80009000 0 $filesize; cmp.b 81000000 80009000 $filesize;
do_burnk=nand erase 200000 400000; nand write 81000000 200000 $filesize; nand read 80009000 200000 $filesize; cmp.b 81000000 80009000 $filesize;
do_burnf=run led3_off; run led2_on; nand erase 600000 c800000; nand write 81000000 600000 $filesize;
do_burnl=nand erase 19a00000 a00000; nand write 81000000 19a00000 $filesize;
do_burnupl=nand erase 1a400000 a00000; nand write 81000000 1a400000 $filesize;
burne=nand erase 100000 100000
burnu_tftp=run led1_on; if tftp 81000000 $biosfile; then run do_burnu; else run error1; fi;
burnk_tftp=run led2_on; if tftp 81000000 $osfile; then run do_burnk; else run error2; fi;
burnf_tftp=run led3_on; if tftp 81000000 $fsfile; then run do_burnf; else run error3; fi;
burnl_tftp=if tftp 81000000 $logofile; then run do_burnl; else run error0; fi;
burnupl_tftp=if tftp 81000000 $uplogofile; then run do_burnupl; else run error0; fi;
burna_tftp=run burnu_tftp; run burnk_tftp; run burnl_tftp; run burnf_tftp;
burnl_sd=if fatload mmc 0 81000000 $logofile; then run do_burnl; fi;
burnupl_sd=if fatload mmc 0 81000000 $uplogofile; then run do_burnupl; fi;
burnu_sd=if fatload mmc 0 81000000 $biosfile; then run do_burnu; run led1_on; else run error1; fi;
burnk_sd=if fatload mmc 0 81000000 $osfile; then run do_burnk; run led2_on; else run error2; fi;
burnf_sd=if fatload mmc 0 81000000 $fsfile; then run do_burnf; run led3_on; else run error3; fi;
burna_sd=run burnu_sd; run burnk_sd; run burnl_sd; run burnupl_sd;run burnf_sd;
reloadf=run led_all_on; if nand read 81000000 ce00000 400000; then nand erase 200000 400000; nand write 81000000 200000 400000; fi;if nand read 81000000 d200000 c800000; then nand erase 600000 c800000; nand write 81000000 600000 c800000; fi;
autorecoveryf=run led_all_on; if nand read 81000000 d200000 c800000; then nand erase 600000 c800000; nand write 81000000 600000 c800000; fi;
bootargs=console=ttyO2,115200n8 ubi.mtd=3,2048 rootwait root=ubi0:rootfs rootfstype=ubifs rootflags=sync rw mem=256M vram=24M notifyk.vpssm3_sva=0xBEE00000 ddr_mem=1024M lirc_serial.protocol=2 ip=dhcp dhcpdelay=1
ethaddr=b0:d5:cc:5f:4a:a8
ethact=DaVinci EMAC
serverip=192.168.26.32
ipaddr=192.168.26.100
stdin=serial
stdout=serial
stderr=serial
ver=U-Boot 2010.06 (Nov 23 2016 - 16:17:32)
poweroncount=0
root@HDMTerm:~#

  • 你好,

    是不是存放环境变量的nand的区域变成坏块了?

  • 你好,我在uboot中输入nand bad 查看 也没有nand 坏块,所以我不知道为什么会出现这个情况,是不是在rdk包中uboot源码中有一个默认的环境变量配置?

  • 你好,

    如果用户没有修改uboot环境变量,默认的环境变量如下(非SD启动),和你出问题时候是不一样的。

    \ti_tools\linux_lsp\uboot\u-boot-dvr-rdk\include\configs\ti8168_evm.h

    #define CONFIG_BOOTCOMMAND \
        "if mmc rescan 0; then " \
            "if run loadbootscript; then " \
                "run bootscript; " \
            "else " \
                "echo In case ENV on MMC/SD is required; "\
                "echo Please put a valid script named boot.scr on the card; " \
                "echo Refer to the User Guide on how to generate the image; " \
            "fi; " \
        "else " \
            "echo Please set bootargs and bootcmd before booting the kernel; " \
            "echo If that has already been done please ignore this message; "\
        "fi"

  • 在uboot环境下

    TI8168_EVM2fs#nand
    nand - NAND sub-system

    Usage:
    nand info - show available NAND devices
    nand device [dev] - show or set current device
    nand read - addr off|partition size
    nand write - addr off|partition size
    read/write 'size' bytes starting at offset 'off'
    to/from memory address 'addr', skipping bad blocks.
    nand erase [clean] [off size] - erase 'size' bytes from
    offset 'off' (entire device if not specified)
    nand bad - show bad blocks
    nand dump[.oob] off - dump page
    nand scrub - really clean NAND erasing bad blocks (UNSAFE)
    nand markbad off [...] - mark bad block(s) at offset (UNSAFE)
    nand biterr off - make a bit error at offset (UNSAFE)
    TI8168_EVM2fs#nand bad

    Device 0 bad blocks:
    TI8168_EVM2fs#

    显示没有坏块

  • 搜索uboot源码中
    ljh@ljh-desktop:/opt/prj/hdmeeting/bsp/DVRRDK_04.00.00.03.u-boot$ grep -r 0x260000 ./
    ./board/amirix/ap1000/ap1000.h:#define AP1000_CPLD_BASE 0x26000000
    ./include/configs/am3517_evm.h:#define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/ti8107_bch_dvr.h:# define MNAND_ENV_OFFSET 0x260000
    ./include/configs/omap3_zoom1.h:#define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/omap3_zoom1.h:#define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/ti811x_evm.h:# define MNAND_ENV_OFFSET 0x260000
    ./include/configs/ti8148_evm.h:# define MNAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/devkit8000.h: "eraseenv=nand unlock 0x260000 0x20000; nand erase 0x260000 0x20000\0" \
    ./include/configs/devkit8000.h:#define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/omap3_evm.h:#define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/omap3_evm.h:#define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/ti8168_evm_quick_mmc.h:# define MNAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/ti813x_evm_quick_mmc.h:# define MNAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/omap3_beagle.h:#define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/omap3_beagle.h:#define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
    ./include/configs/ti813x_evm.h:# define MNAND_ENV_OFFSET 0x260000
    ./include/configs/ti8148_evm_quick_mmc.h:# define MNAND_ENV_OFFSET 0x260000 /* environment starts here */

    与ti8168_evm相关的0x260000就是这个头文件
    ./include/configs/ti8168_evm_quick_mmc.h:# define MNAND_ENV_OFFSET 0x260000 /* environment starts here */
    一直不能理解为什么会修改成 bootcmd=nand erase 260000 20000; reset;这句话大概他的意思应该就是删除uboot环境变量然后重启
    但是我新改好的uboot环境变量偏移地址是0x100000不是以前rdk包中的0x260000,实在搞不懂?麻烦ti工程师提点建议,谢谢!

    会不会跟片内rom启动有关系?


    但是我新改的nand分区是这样的
    [ 1.330000] Creating 9 MTD partitions on "omap2-nand.0":
    [ 1.340000] 0x000000000000-0x000000100000 : "U-Boot"
    [ 1.340000] 0x000000100000-0x000000200000 : "U-Boot Env"
    [ 1.350000] 0x000000200000-0x000000600000 : "Kernel 0"
    [ 1.360000] 0x000000600000-0x00000ce00000 : "File System 0"
    [ 1.450000] 0x00000ce00000-0x00000d200000 : "Kernel 1"
    [ 1.450000] 0x00000d200000-0x000019a00000 : "File System 1"
    [ 1.540000] 0x000019a00000-0x00001a400000 : "U-Boot Logo"
    [ 1.550000] 0x00001a400000-0x00001ae00000 : "Update Logo"
    [ 1.560000] 0x00001ae00000-0x000020000000 : "Userdata"

  • Liang,

    你在编译uboot和kernel的时候使用的是quick mmc的配置?

    http://processors.wiki.ti.com/index.php/DM81XX_Quick_Boot_Measurements