低版本linux内核中加入EMMC5.1支持

11 篇文章 0 订阅
7 篇文章 3 订阅

低版本linux内核中加入EMMC5.1支持

0. 问题描述

需要使用eMMC5.1协议的芯片,但是Linux内核版本较老,无法使用。

提示 unrecognised CSD structure version 3

1. 问题原因

当前的Linux内核版本是2.6,不支持新版eMMc,需要对内核进行修改。

2. 修改方式

结合内核中对eMMC的变更可知,需要修改下面三个文件实现对eMMC5.1的支持。

参考链接:https://www.spinics.net/lists/linux-mmc/msg02116.html

以下路径均以内核根目录为根目录。

2.1 drivers/mmc/core/mmc.c

mmc_decode_csd函数中做如下修改,通过csd结构体中的structure成员进行判断。

在这里插入图片描述

mmc_read_ext_csd函数中增加对 EXT_CSD_STRUCTURE 字段的分析:

/* Version is coded in the CSD_STRUCTURE byte in the EXT_CSD register. Modify By Clair For eMMC4.4 */
	if (card->csd.structure == 3) {
		int ext_csd_struct = ext_csd[EXT_CSD_STRUCTURE];
		if (ext_csd_struct > 2) {
			printk(KERN_ERR "%s: unrecognised EXT_CSD structure "
				"version %d\n", mmc_hostname(card->host),
					ext_csd_struct);
			err = -EINVAL;
			goto out;
		}
	}

同时修改对 EXT_CSD_REV的判断条件

card->ext_csd.rev = ext_csd[EXT_CSD_REV];
	if (card->ext_csd.rev > 8) {  //原来是3
		printk(KERN_ERR "%s: unrecognised EXT_CSD revision %d\n",
			mmc_hostname(card->host), card->ext_csd.rev);
		err = -EINVAL;
		goto out;
	}

如下图所示:

在这里插入图片描述

2.2 include/linux/mmc/card.h

增加 mmc_csd结构体中 structure 成员的定义(左边修改前,右边修改后):

在这里插入图片描述

2.3 include/linux/mmc/mmc.h

增加常量 EXT_CSD_STRUCTURE 的定义(左边修改前,右边修改后):

在这里插入图片描述

完成后保存编译内核即可。

3. 测试

开机启动能正常识别到eMMC芯片:

在这里插入图片描述

进入系统能使用fdisk查看mmcblk0的信息,无异常报错即说明修改成功。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值