准备工作:
目标板:rk3288 android
编译环境:android7.1.2
1.源码根目录:u-boot/include/configs/ 在文件 rk32plat.h 中添加环境变量CONFIG_T613_I2C 宏定义
2.源码根目录:u-boot/include/ 在文件 env_default.h 中添加环境变量数组中
******注意格式书写
#if defined(CONFIG_T613_I2C) && (CONFIG_T613_I2C >= 0)
"t613_i2c=" __stringify(CONFIG_T613_I2C) "\0"
#endif
3.源码根目录:u-boot/board/rockchip/rk32xx 获取t613_i2c这个环境变量,并在code 中使用
1)修改函数static void board_init_adjust_env(void) ,如果没有可以自行添加;
2)通过char *s1 = getenv("t613_i2c"); 函数以字符串形式获取环境变量t613_i2c ;
3)通过t613_i2c = simple_strtoul(s1, NULL, 10);函数将字符串转换成10进制值,就可以实现在别的函数中使用该值。
static void board_init_adjust_env(void)
{
bool change = false;
char *s = getenv("bootdelay");
if (s != NULL) {
unsigned long bootdelay = 0;
bootdelay = simple_strtoul(s, NULL, 10);
printf("getenv: bootdelay = %lu\n", bootdelay);
#if (CONFIG_BOOTDELAY <= 0)
if (bootdelay > 0) {
setenv("bootdelay", simple_itoa(0));
change = true;
printf("setenv: bootdelay = 0\n");
}
#else
if (bootdelay != CONFIG_BOOTDELAY) {
setenv("bootdelay", simple_itoa(bootdelay));
change = true;
printf("setenv: bootdelay = %d\n", bootdelay);
}
#endif
}
char *s1 = getenv("t613_i2c");
if (s1 != NULL) {
unsigned long t613_i2c = 0;
t613_i2c = simple_strtoul(s1, NULL, 10);
printf("getenv: t613_i2c = %lu\n", t613_i2c);
#if (CONFIG_T613_I2C <= 0)
if (t613_i2c > 0) {
setenv("t613_i2c", simple_itoa(0));
change = true;
printf("setenv: t613_i2c = 0\n");
}
#else
if (t613_i2c != CONFIG_T613_I2C) {
setenv("t613_i2c", simple_itoa(t613_i2c));
change = true;
printf("setenv: t613_i2c = %d\n", t613_i2c);
}
#endif
}
s = getenv("bootcmd");
if (s != NULL) {
printf("getenv: bootcmd = %s\n", s);
if (strcmp(s, CONFIG_BOOTCOMMAND) != 0) {
setenv("bootcmd", CONFIG_BOOTCOMMAND);
change = true;
printf("setenv: bootcmd = %s\n", CONFIG_BOOTCOMMAND);
}
}
s = getenv("initrd_high");
if (s != NULL) {
printf("getenv: initrd_high = %s\n", s);
if (strcmp(s, RAMDISK_ZERO_COPY_SETTING) != 0) {
setenv("initrd_high", RAMDISK_ZERO_COPY_SETTING);
change = true;
printf("setenv: initrd_high = %s\n", RAMDISK_ZERO_COPY_SETTING);
}
}
if (change) {
#ifdef CONFIG_CMD_SAVEENV
printf("board init saveenv.\n");
saveenv();
#endif
}
}
4.重新make uboot 执行:
1)make rk3288_secure_defconfig
2)make
1.源码根目录:u-boot/include/configs/ 在文件 rk32plat.h 中直接更改宏定义的值
#define CONFIG_BOOTDELAY 18
2.开机进入打印终端按空格键进入uboot 命令行,执行以下指令进行修改保存
print
setenv bootdelay 18
saveenv
print
注意:如果修改环境变量saveenv 后,重新开机,环境变量又变回默认值 ,请查看源码code
源码根目录:u-boot/board/rockchip/rk32xx 中对环境变量初始化的函数static void board_init_adjust_env(void) 是否对环境变量重置回默认值。