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_drambank.start,bd->bi_drambank.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数组。

相关推荐
weixin_571667416 小时前
Windows 通过 SSH 反向隧道向 Ubuntu 转发代理
linux·运维·windows·代理
俊基科技6 小时前
A-59P 多功能语音处理模组:一芯集成 AI 降噪、消回音与波束成形,重塑全双工通话体验
嵌入式硬件·硬件开发·ai降噪·语音模块·回音消除
POMAGTOR6 小时前
硬件接口选型|磁吸式连接器原理与应用,不止磁吸充电
网络·嵌入式硬件·电脑
乔旭伟6 小时前
CentOS 停更迁移实战:vault 源配置、目标选型与迁移工程清单
linux·运维·centos
鬼手点金6 小时前
ReAct 循环
linux·服务器·前端·javascript·react.js·前端框架
皓月盈江6 小时前
Linux Debian下STM32CubeProgrammer串口连接失败解决方案
linux·stm32·debian·串口下载·stm32f103c8t6·usb转ttl·stm32cubepro
2501_922639586 小时前
率能半导体 SS6226双通道直流电机驱动芯片:7.2V/1.4A双路,覆盖玩具、小家电、直流有刷电机三大应用场景
单片机·嵌入式硬件·硬件工程
LCG米6 小时前
STM32时钟树配置实测:HSE起振失败回退HSI、PLL分频倍频计算与Flash等待周期陷阱
stm32·单片机·嵌入式硬件·嵌入式
远方16097 小时前
108-ORA-00600 [kdsgrp1-qetlbr] 内部错误排查与 RMAN 块级恢复
大数据·linux·数据库·oracle
yunwei377 小时前
eBPF 实例教程:BPF 动态指针处理可变长度数据
linux·后端·性能优化