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

相关推荐
djykkkkkk10 分钟前
ubuntu 和 RV1126 交叉编译Mosqutiio-1.6.9
linux·运维·ubuntu
好多知识都想学1 小时前
第二章Linux 命令概述
linux·运维·服务器
熊峰峰1 小时前
Linux第0节:Linux环境的搭建
linux·运维·服务器
鸭梨山大。2 小时前
linux命令-iptables与firewalld 命令详解
linux·运维·网络
半夏知半秋2 小时前
linux下的网络抓包(tcpdump)介绍
linux·运维·服务器·网络·笔记·学习·tcpdump
深思慎考2 小时前
Linux——进程间通信初解(匿名管道与命名管道)
java·linux·服务器
深思慎考2 小时前
Linux——进程间通信(system V共享内存)
linux·服务器·算法
Watink Cpper2 小时前
[多线程]基于环形队列(RingQueue)的生产者-消费者模型的实现
linux·运维·服务器·消费者·生产者·生产者消费者模型
菜鸟康3 小时前
Linux网络编程——UDP网络通信的简单实现
java·linux·windows
Albert XUU4 小时前
nettrace rtt分析器
linux·运维·网络·网络协议·网络安全·腾讯云·运维开发