Saving Environment to FAT... Card did not respond to voltage select!

在移植uboot到全志H3时,出现了错误:

Saving Environment to FAT... Card did not respond to voltage select!

判定与MMC有关。

同时还有报错:

Error: ethernet@1c30000 address not set.

No ethernet found.

查看源码发现这与环境变量有关(读不到MAC地址),进一步坐实了MMC的问题。

因为板子是自己设计的,只留了SD卡,没有EMMC,所以刚开始以为是虚焊等硬件问题,但进一步分析,既然都到这一步了,SD卡肯定是能正常使用的。

为了找到原因,这里使用orangepi pc plus(带EMMC)验证:

网口依然无法使用,并且出现错误:

Loading Environment from FAT... Unable to use mmc 1:1...

查看mmc:

mmc 1:1说明使用的是EMMC的第1分区,也就是说我想使用SD卡,但在后续板级初始化时,系统会更改MMC,而默认使用的是EMMC,所以需要将其更改SD卡。

找到出现错误的代码:

c 复制代码
static int env_fat_load(void)
{
	ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
	struct blk_desc *dev_desc = NULL;
	disk_partition_t info;
	int dev, part;
	int err;

#ifdef CONFIG_MMC
	if (!strcmp(CONFIG_ENV_FAT_INTERFACE, "mmc"))
		mmc_initialize(NULL);
#endif

	part = blk_get_device_part_str(CONFIG_ENV_FAT_INTERFACE,
					CONFIG_ENV_FAT_DEVICE_AND_PART,
					&dev_desc, &info, 1);	// 识别设备与分区
	if (part < 0)
		goto err_env_relocate;

	dev = dev_desc->devnum;
	if (fat_set_blk_dev(dev_desc, &info) != 0) {
		/*
		 * This printf is embedded in the messages from env_save that
		 * will calling it. The missing \n is intentional.
		 */
		printf("Unable to use %s %d:%d... ",	// 打印错误
		       CONFIG_ENV_FAT_INTERFACE, dev, part);
		goto err_env_relocate;
	}

	err = file_fat_read(CONFIG_ENV_FAT_FILE, buf, CONFIG_ENV_SIZE);
	if (err == -1) {
		/*
		 * This printf is embedded in the messages from env_save that
		 * will calling it. The missing \n is intentional.
		 */
		printf("Unable to read \"%s\" from %s%d:%d... ",
			CONFIG_ENV_FAT_FILE, CONFIG_ENV_FAT_INTERFACE, dev, part);
		goto err_env_relocate;
	}

	return env_import(buf, 1);

err_env_relocate:
	env_set_default(NULL, 0);

	return -EIO;
}

在出现错误之前,uboot会识别设备与其分区,通过宏"CONFIG_ENV_FAT_DEVICE_AND_PART"来定义,查看配置文件:

#define CONFIG_ENV_FAT_DEVICE_AND_PART "1:auto"

发现它确实被默认配置为EMMC启动,所以这里将1改为0,重新编译,orangepi和自己设计的板子均正常运行。

相关推荐
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao3 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush44 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5204 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩4 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言