Uboot中ARMV7和ARMV8 MMU配置

问题概述

Uboot中如果打开MMU,则MMU需要配置MMU table来管理不同的地址空间。

其中ARMV7和ARMV8中这部分的配置代码是不同。

ARMV7的配置过程

代码参考:u-boot-2020.04/arch/arm/lib/cache-cp15.c

mmu_setup

→set_section_dcache

→dram_bank_mmu_setup

其中dram_bank_mmu_setup函数中使用到的bd->bi_dram[bank].start,bd->bi_dram[bank].start是board中中定义,例如xxx_evb.c定义的:

c 复制代码
int dram_init_banksize(void)
{
	gd->bd->bi_dram[0].start = 0x40000000;
	gd->bd->bi_dram[0].size = 0x40000000;
	return 0;
}

ARMV7的mmu初始化不需要用到mem_map,所以不需要在arch目录下对应的文件中定义类似ARMV8的

c 复制代码
static struct mm_region xxx_mem_map[] = {
{
	.virt = 0x40000000UL,
	.phys = 0x40000000UL,
	.size = 0x80000000UL,
	.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
	PTE_BLOCK_INNER_SHARE
}, {
	.virt = 0x00000000UL,
	.phys = 0x00000000UL,
	.size = 0x40000000UL,
	.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
	PTE_BLOCK_NON_SHARE |
	PTE_BLOCK_PXN | PTE_BLOCK_UXN
}, {
	/* List terminator */
	0,
}
};

struct mm_region *mem_map = xxx_mem_map;
ARMV8的配置过程

代码参考:u-boot-2020.04/arch/arm/cpu/armv8/cahc_v8.c。

在进行MMU初始化的时候需要用到mem_map,所以需要在对应arch目录下定义对应的mem_map数组。

相关推荐
悠哉悠哉愿意3 小时前
【电赛学习笔记】MaixCAM 的OCR图片文字识别
笔记·python·嵌入式硬件·学习·视觉检测·ocr
一只小bit4 小时前
Linux网络:阿里云轻量级应用服务器配置防火墙模板开放端口
linux·网络·阿里云
嘉琪0014 小时前
实现视频实时马赛克
linux·前端·javascript
慕容白 MU5 小时前
新唐51单片机看门狗配置流程
c语言·单片机·嵌入式硬件·51单片机
帽儿山的枪手5 小时前
HVV期间,如何使用SSH隧道绕过内外网隔离限制?
linux·网络协议·安全
邹诗钰-电子信息工程6 小时前
嵌入式基础知识复习(C语言)
linux·c语言·vim
瀚高PG实验室7 小时前
CentOS 8 安装HGDB V4.5 psql命令执行报错
linux·运维·centos·瀚高数据库
小醉你真好7 小时前
6、CentOS 9 安装 Docker
linux·docker·centos
jingjing~7 小时前
STM32 软件模拟 I2C 读写 MPU6050--实现加速度与陀螺仪数据采集
stm32·单片机·嵌入式硬件
平生不喜凡桃李8 小时前
Linux 线程概念与控制
java·linux·运维