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定义的:

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的

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数组。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-29 13:14:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-29 13:14:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-29 13:14:04       87 阅读
  4. Python语言-面向对象

    2024-01-29 13:14:04       96 阅读

热门阅读

  1. 【微信小程序框架的详细介绍】

    2024-01-29 13:14:04       59 阅读
  2. 面经——面试中常问到的计算机网络相关问题

    2024-01-29 13:14:04       55 阅读
  3. Spring Cloud 之 Gateway详解

    2024-01-29 13:14:04       63 阅读
  4. basicpython-6

    2024-01-29 13:14:04       42 阅读
  5. MySQL必看表设计经验汇总-上(精华版)

    2024-01-29 13:14:04       50 阅读
  6. ffmpeg4.0.4 ffmpeg.c 讲解

    2024-01-29 13:14:04       45 阅读
  7. 系统分析师-23年-上午试题

    2024-01-29 13:14:04       47 阅读
  8. 大语言模型-大模型基础文献

    2024-01-29 13:14:04       56 阅读
  9. mysql优化案例

    2024-01-29 13:14:04       52 阅读
  10. unicloud-db组件

    2024-01-29 13:14:04       48 阅读