Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2279967
  • 博文数量: 668
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 8588
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-29 19:22
文章分类

全部博文(668)

文章存档

2011年(1)

2010年(2)

2009年(273)

2008年(392)

分类:

2008-08-27 13:38:19


浅析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
阅读(479) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~