/*******************************************************************
• 此文章解释权归windsome所有,如要转载无须联系本人。
• 转载需要包含此抬头信息,如有疑问,欢迎联系本人。
• QQ: 35327864
• msn: fgwf1@hotmail.com
• mail: agooou@gmail.com
********************************************************************/
smp8652, smp8653, smp8654, smp8655
XENV是SMP863X及之后SMP865X用来保存参数的数据结构,最大大小为64K。每条记录都是可变大小的,用Key-value方式保存数据,特别类似windows的注册表结构。
结构如下:
0-3 :4个字节,envSize
4-23:20个字节,SHA1值(对除前24字节的内容做的SHA值)
24--:具体的记录
其中第二部分SHA值对于不同的系统和不同的SHA算法可能不一样的,比如我的smp8652就是32个字节。具体记录就从36开始了。
xenv项结构:
0-2:2个字节,其中最高4位表示属性(XENV_ATTR_RW/XENV_ATTR_RO/XENV_ATTR_OTP之一),剩余位表示此项的字节数(包含此2个字节)。
key:项名,字符串,以0结尾
value:值,可以是整数,可以是数组
XENV存储块:
1,内部串行flash中(sxenv),最大为4K。xos用来存储sector ownership and binding information,以及xmboot使用。
2,外部flash(zxenv),最大为16K。存储在外部flash的开头。(SMP8634是在NOR中,8644/8654是在NAND中)
3,可读写loacalram(lwxenv),最大为628字节。在8654/8644的local RAM(8634没有),保存数据结构的地址,并用于processors和DSPs/RISCs之间通讯。
4,只读localram(lrxenv),最大为628字节。在8654/8644的local RAM(8634没有),保存数据结构的地址,并用于processors和DSPs/RISCs之间通讯。
XENV的命名方式:
x.* 被xos解析
y.* YAMON解析,会被解析成YAMON的环境变量
z.* zboot
l.* Linux
w.* WindowsCE
lrrw.* and lrro.* 在local ram中
a.* 通用
必须使用的keys
。。。。。。。。。
zxenv块:
位于外部flash,最大为16K,SMP8644/SMP8654在nand中,任何时候内存中有一个备份。通过LR_ZBOOTXENV_LOCATION (GR32 0x61994)可以得到存储地址。
配置文件及XENV定制:
你可以在ezboot (smp86xx_ezboot_0x90.tar.bz2)包中同时编译ezboot(stage1 bootloader)和XENV,并且2者将组合成一个physical block#0 image(因为NAND的擦除单位为128K,而XENV才16K,2者合并还不足128K)。
配置文件是文本文件格式,在smp86xx_ezboot_0x90/xos/xboot2/xmasboot/configs/中。其中有几个主配置文件:SMP8644.config, SMP8652.config 和 SMP8654.config。其他都是基于这些文件的patch。
xos keys:
8634独有:
x.pll.0.pll = 0x01010062 x.mux = 0x501
8644/8654独有:
PLL-releted......
CPU/System clock
LR_XOS_F_SYS_HZ(GR32 0x61f7c)读取当前频率
ddr setting......
Memory Attribution and Dimensioning:
有一部分zxenv的键值被ezboot解析到lwxenv的键。
z.log2_xpu0_size=22
z.log2_xpu1_size=21
z.dsp0_size=1818624
z.dsp1_size=540672
z.zdata0_size=16384
z.uzdata0_size=49152
z.zdata1_size=32768
z.uzdata1_size=81920
z.ruamm0_offset=0x42233
z.ruamm1_offset=143333333
z.xos_public_mm=1
z.log2_xos_public_size=17
z.channel_index_mm=1
z.ih_api_mm=1
z.ih_api_maxsize=0x00010000
z.ios_mm=0
z.ios_size=7000001
Stage1:
x.boot = 0x5800 (offset from NAND phyblock#0)
z.stage1_ga = 0x81600000
z.boot0 = 0x00080000
z.interactive_boot_idx_sel = 1
z.default_boot = 0
z.splashscreen_enabled = 1
具体内容请看英文文档
如何解析xenv内容请看:
http://blog.csdn.net/fgwf1/archive/2011/03/31/6290788.aspx