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和自己设计的板子均正常运行。

相关推荐
齐鲁大虾37 分钟前
UOS(统信操作系统)如何更新CUPS(通用Unix打印系统)
linux·服务器·chrome·unix
虾..2 小时前
Linux 简单日志程序
linux·运维·算法
huoxingwen2 小时前
Ubuntu 22.04 上 VMware Workstation 点击虚拟机窗口就消失的解决历程
linux·运维·ubuntu
姚青&3 小时前
Linux 常用命令之基本命令
linux·运维·服务器
一路往蓝-Anbo3 小时前
【第05期】数据的微观世界 (五) —— 浮点数 vs 定点数:MCU的数学课
linux·stm32·单片机·嵌入式硬件·物联网
G_H_S_3_3 小时前
【网络运维】企业级监控平台Zabbix:部署与实践指南
linux·运维·网络·zabbix
小周学学学3 小时前
Vcenter Auto Deploy安装与使用
linux·运维·服务器
微爱帮监所写信寄信3 小时前
微爱帮监狱写信寄信工具服务器【Linux篇章】再续:TCP协议——用技术隐喻重构网络世界的底层逻辑
linux·服务器·开发语言·网络·网络协议·小程序·监狱寄信
VekiSon4 小时前
Linux网络编程——IO多路复用
linux·运维·网络
旖旎夜光4 小时前
Linux(3)(上)
linux·学习