Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117271
  • 博文数量: 64
  • 博客积分: 186
  • 博客等级: 入伍新兵
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 17:11
文章分类

全部博文(64)

文章存档

2014年(54)

2013年(2)

2012年(8)

我的朋友

分类: LINUX

2014-06-04 14:50:37

浅析armlinux-setup_arch()->clear_mapping()函数5-2-1

文章来源:http://gliethttp.cublog.cn

建议首先参考《浅析armlinux2_4_19启动程序[head-armv.s文件][http://gliethttp.cublog.cn]

//----------------------------------------

//arch/arm/mm/Mm-armv.c->clear_mapping()
static inline void clear_mapping(unsigned long virt)
{//对于2级小页映射方式,一级页目录和二级目录其实是一样的
    pmd_clear(pmd_offset(pgd_offset_k(virt), virt));
}
//include/asm-arm/Pgtable.h有如下定义
#define pgd_index(addr) ((addr) >> PGDIR_SHIFT)
#define pgd_offset(mm, addr) ((mm)->pgd+pgd_index(addr))
#define pgd_offset_k(addr) pgd_offset(&init_mm, addr)
//include/asm-arm/Pgtable.h有如下定义
#define pmd_clear(pmdp) set_pmd(pmdp, __pmd(0))
//include/asm-arm/proc-armv/Pgtable.h有如下定义
#define set_pmd(pmdp,pmd) cpu_set_pmd(pmdp,pmd)
//include/asm-arm/cpu-single.h中有如下定义
#define cpu_set_pmd cpu_fn(CPU_NAME,_set_pmd)
翻译之后
#define cpu_set_pmd cpu_arm920_set_pmd
相应的
#define cpu_set_pgd cpu_arm920_set_pgd
#define cpu_set_pmd cpu_arm920_set_pmd
#define cpu_set_pte cpu_arm920_set_pte
以上三个函数位于arch/arm/mm/proc-arm920.S
//swapper_pg_dir[4k]
    .align    5
ENTRY(cpu_arm920_set_pmd)
    str    r1, [r0]
    mcr    p15, 0, r0, c7, c10, 1//清除D入口
    mcr    p15, 0, r0, c7, c10, 4//WB开漏
    mov    pc, lr

阅读(484) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~