uboot环境变量区为何不能放在data段
2013-11-30 21:30
344 查看
一、疑问
环境变量也是全局变量,为何不能像其他的全局变量放在data段呢?为什么要放在堆中或者使用ENV_IS_EMBEDDED定义的CFG_ENV_SIZE的空间大小,又为什么需要这么大的空间呢?
二、认识
1、尝试放在data段
由于环境变量区不像其他的全局变量,环境变量可以被删除,可以被更改,可以添加,这就要求存储环境变量的空间是足够大的。
也许可以用结构体数组来实现,分别存放环境变量的名字,及相应的值。这样就可以将环境变量放在data段,我们希望在经过start.s重定位后,环境变量已经处于指定的位置了。
problem
这种情况,环境变量区在flash上是编译器分配的空间。但是,受限于保存环境变量时,flash写是以块为单位的,如果把环境变量保存到之前编译器产生的地址上极有可能破坏其他的数据。也就是说放在data区很难实现。
如果想实现“在经过start.s重定位后,环境变量已经处于指定的位置了”这个目标,使用u-boot提供的ENV_IS_EMBEDED方法最好不过了,似乎也是唯一的办法了。
2、推理
保存环境变量要写flash=>> 环境变量在flash上,必须以整块存储 =>>在RAM中就必须有对应大小的空间 = >>可以在堆区分配,要不然就在编译器编译的时候分配(ENV_IS_EMBEDED的方法)
三、结论
1、环境变量由于大小不确定,必须给其分配足够大的空间,在内存中可以在堆区分配(但需要搬运两次,一次start.s重定位,一次环境变量重定位)。
2、由于还需要将其保存(存储)在flash上,所以要给其单独分一个分区。
3、利用2的特点可以使用ENV_IS_EMBEDED方法(只需要start.s重定位一次)。
四、其他
uboot的环境变量区是以字符串保存的,即使数字也是这样。字符串是接近人的高级表达形式,而非低级的机器二进制码。所以,在处理环境变量时(读、设置、保存),都是字符处理的。
环境变量也是全局变量,为何不能像其他的全局变量放在data段呢?为什么要放在堆中或者使用ENV_IS_EMBEDDED定义的CFG_ENV_SIZE的空间大小,又为什么需要这么大的空间呢?
二、认识
1、尝试放在data段
由于环境变量区不像其他的全局变量,环境变量可以被删除,可以被更改,可以添加,这就要求存储环境变量的空间是足够大的。
也许可以用结构体数组来实现,分别存放环境变量的名字,及相应的值。这样就可以将环境变量放在data段,我们希望在经过start.s重定位后,环境变量已经处于指定的位置了。
struct environment{ struct environment * ptrfoward; struct environment * ptrbackward; char name[20] char value[20] }; struct environment tab[200];
problem
这种情况,环境变量区在flash上是编译器分配的空间。但是,受限于保存环境变量时,flash写是以块为单位的,如果把环境变量保存到之前编译器产生的地址上极有可能破坏其他的数据。也就是说放在data区很难实现。
如果想实现“在经过start.s重定位后,环境变量已经处于指定的位置了”这个目标,使用u-boot提供的ENV_IS_EMBEDED方法最好不过了,似乎也是唯一的办法了。
2、推理
保存环境变量要写flash=>> 环境变量在flash上,必须以整块存储 =>>在RAM中就必须有对应大小的空间 = >>可以在堆区分配,要不然就在编译器编译的时候分配(ENV_IS_EMBEDED的方法)
三、结论
1、环境变量由于大小不确定,必须给其分配足够大的空间,在内存中可以在堆区分配(但需要搬运两次,一次start.s重定位,一次环境变量重定位)。
2、由于还需要将其保存(存储)在flash上,所以要给其单独分一个分区。
3、利用2的特点可以使用ENV_IS_EMBEDED方法(只需要start.s重定位一次)。
四、其他
uboot的环境变量区是以字符串保存的,即使数字也是这样。字符串是接近人的高级表达形式,而非低级的机器二进制码。所以,在处理环境变量时(读、设置、保存),都是字符处理的。
相关文章推荐
- uboot环境变量不能保存的调试
- uboot 环境变量实现简析
- UBoot支持双启动(Nor and Nand)及环境变量保存的实现
- uboot环境变量设置好后烧写启动内核,文件系统出现的问题
- 模板函数的声明和定义为何不能分开放在两个文件中?
- (面试题)请用C语言实现在32位环境下,两个无符号长整数相加的函数,相加之和不能存储在64位变量中
- Windows环境变量过长及修改环境变量后导致的不能开机解决方案
- uboot的环境变量操作
- uboot设置的默认环境变量不起作用
- uboot环境变量(设置bootargs向linux内核传递正确的参数)
- uboot环境变量及常用命令【2】
- bootargs中的环境变量说明和一些常用的uboot命令
- linux 中环境变量配置错误导致部分命令不能使用包括vi
- SUDO的环境变量为何不同?
- uboot环境变量与内核MTD分区关系
- uboot 环境变量
- uboot启动参数,机器码,环境变量
- Mac电脑下myeclipse不能识别系统环境变量的问题终极解决方案
- win7 系统下配置 java 环境变量———细节决定成败,一个逗号都不能忽略!
- uboot环境变量与内核MTD分区关系