免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 942 | 回复: 0
打印 上一主题 下一主题

linux kernel for mips memory lost when pfn!=0 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-15 10:12 |只看该作者 |倒序浏览
    这个标题很难理解,需要解释一下,一般mips cpu DRAM的起始地址都是0x80000000, 所以在linux kernel中定义PAGE_OFFSET = 0x80000000,  物理地址从0开始,也就是这里的pfn=0 的意思。 但是也有少数的mips cpu DRAM的起始地址不是从0x80000000开始的,比如从0x88000000开始。这种情况下,一般linux kernel也可以正常工作,但是会有一个很大的memory lost的现象,我这里要说的就是如何解决这个问题。
    在linux 2.6.x kernel很容易解决,因为已经考虑这种状况了。在include/asm-mips/page.h中,
#ifndef PHYS_OFFSET
#define PHYS_OFFSET             0UL
#endif
这个PHYS_OFFSET就是为了解决这种问题专门设置的, 比如0x88000000这中情况下,就可以设  PHYS_OFFSET=0x08000000,  同时也要调整一下另外几个定义:
#define CAC_BASE                0x80000000
#define IO_BASE                 0xa0000000
#define UNCAC_BASE              0xa0000000
/*
* This handles the memory map.
* We handle pages at KSEG0 for kernels with 32 bit address space.
*/
#define PAGE_OFFSET             0x80000000UL
相应变成:
#define CAC_BASE                0x88000000
#define IO_BASE                 0xa8000000
#define UNCAC_BASE              0xa8000000
/*
* This handles the memory map.
* We handle pages at KSEG0 for kernels with 32 bit address space.
*/
#define PAGE_OFFSET             0x88000000UL
    linux kernel 2.4.x中,因为没有PHYS_OFFSET 的处理,我的做法是,从2.6.x移植相应的代码过来,也不是很复杂,只要修改这样几个文件就可以了:
.
|-- arch
|   `-- mips
|       |-- kernel
|       |   `-- setup.c                       ##bootmem_init()
|       `-- mm
|           `-- init.c                        ##paging_init(), mem_init()
|-- include
|   `-- asm-mips
|       |-- io.h
|       |-- page.h
|       `-- pgtable-32.h
`-- mm
    `-- page_alloc.c              ## free_area_init_core() ,  free_area_init()
    其实arm cpu也有一样的问题,但是,即使是2.4.x kenrel已经有对PHYS_OFFSET的处理了。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31934/showart_1001968.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP