RK3288 android7.1.2 在uboot 源码中添加、获取环境变量以及修改CONFIG_BOOTDELAY时间的完整详细步骤

28 篇文章 9 订阅
6 篇文章 0 订阅

准备工作:

目标板: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

二  改变环境变量值的两种方式(以u-boot 开机等待时间CONFIG_BOOTDELAY 为例)

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) 是否对环境变量重置回默认值。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值