写了一段IA32 paging通用构造代码。有须要的。能够拿去

#define PDE_FLG_RW (1<<1)
#define PDE_FLG_US (1<<2)
#define PDE_FLG_RWT (1<<3)
#define PDE_FLG_PCD (1<<4)
/*
* initialize to be zero for page directory and page table
*/
static __SECTION_ZERO_INIT("PAGE_DIR") __align(4096) U32 paging_pde[1<<10];
static __SECTION_ZERO_INIT("PAGE_TABLE") __align(4096) U32 paging_pte_4k[1<<10][1<<10];
/*
* viraddr: virtual address/linear address (must be 4KB align)
* phyaddr: physical address (must be 4KB align)
* size: in bytes
*/
static void paging_4k(U32 viraddr, U32 phyaddr, U32 flags)
{
U32 viraddr_pd = viraddr>>22;
U32 viraddr_pt = (viraddr>>12) & 0x3FF;
/*page directory*/
paging_pde[viraddr_pd] = (U32)(&(paging_pte_4k[viraddr_pd][viraddr_pt])) & 0xFFFFF000;
paging_pde[viraddr_pd] |= flags;
paging_pde[viraddr_pd] |= 1;
paging_pde[viraddr_pd] &= (~(1<<7)); /*page table*/
paging_pte_4k[viraddr_pd][viraddr_pt] = phyaddr & 0xFFFFF000;
paging_pte_4k[viraddr_pd][viraddr_pt] |= flags;
paging_pte_4k[viraddr_pd][viraddr_pt] |= 1;
} static void paging_4k_frames(U32 viraddr, U32 phyaddr, U32 size, U32 flags)
{
U32 i, count = size >> 12;
for(i=0; i<count; i++)
{
paging_4k(viraddr+((1<<12)*i), phyaddr+((1<<12)*i), flags);
}
} /*
* viraddr: virtual address/linear address (must be 4MB align)
* phyaddr: physical address (must be 4MB align)
* size: in bytes
*/
static void paging_4m(U32 viraddr, U32 phyaddr, U32 flags)
{
U32 viraddr_pd = viraddr>>22; /*page directory*/
paging_pde[viraddr_pd] = phyaddr & 0xFFC00000;
paging_pde[viraddr_pd] |= flags;
paging_pde[viraddr_pd] |= 1;
paging_pde[viraddr_pd] |= (1<<7);
} static void paging_4m_frames(U32 viraddr, U32 phyaddr, U32 size, U32 flags)
{
U32 i, count = size >> 22;
for(i=0; i<count; i++)
{
paging_4m(viraddr+((1<<22)*i), phyaddr+((1<<22)*i), flags);
}
} static void paging_frames(U32 viraddr, U32 phyaddr, U32 size, U32 flags)
{
/* direct mapping */
if(size & 0x3FFFFF)
{
paging_4k_frames(phyaddr, phyaddr, size, flags);
}
else
{
paging_4m_frames(phyaddr, phyaddr, size, flags);
}
} void paging_uncache(U32 phyaddr, U32 size)
{
/* direct mapping */
paging_frames(phyaddr, phyaddr, size, PDE_FLG_PCD|PDE_FLG_US|PDE_FLG_RW);
} void paging_code(U32 phyaddr, U32 size)
{
/* direct mapping */
paging_frames(phyaddr, phyaddr, size, PDE_FLG_US);
} void paging_data(U32 phyaddr, U32 size)
{
/* direct mapping */
paging_frames(phyaddr, phyaddr, size, PDE_FLG_US|PDE_FLG_RW);
}
void * paging_pde_addr()
{
return (void *)paging_pde;
} void paging_enable(void)
{
U32 cr0;
asm volatile("mov %%cr0, %0": "=r"(cr0));
cr0 |= (1<<31);
asm volatile("mov %0, %%cr0":: "r"(cr0));
} void paging_setup()
{
/* peripherial registers */
paging_uncache(0xE0000000, 0x20000000);
/* code & data areas */
paging_uncache(0x00000000, 0x40000000); paging_enable();
}

IA32 MMU paging初始化代码的更多相关文章

  1. css初始化代码

    最近老有新项目开发,一直在找存留的CSS初始化代码,索性放到这里备份下, @charset "utf-8"; /* -------------------------------- ...

  2. 0023 Java学习笔记-面向对象-初始化代码块

    初始化代码块 在18篇-类的基本要素中说到,类的三大成员:成员变量.构造方法.方法,初始化代码块是类的第4个成员 初始化块用于对类或者对象的初始化, 一个类的初始化块可以有0-多个,按先后顺序执行 跟 ...

  3. 各大门户网站的css初始化代码

    腾讯QQ官网 css样式初始 body,ol,ul,h1,h2,h3,h4,h5,h6,p,th,td,dl,dd,form,fieldset,legend,input,textarea,select ...

  4. css初始化代码方案

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期 2014-06-24) 为了消除各浏览器对css默认的设置,保持网页在各浏览器中的外观保持一致,初始化css就显得非常必要了!很多时候 ...

  5. 一天搞定CSS: 标签样式初始化(CSS reset)及淘宝样式初始化代码--09

    样式初始化:是指对HTML中某些标签的默认样式进行清除 样式初始化目的: 不同浏览器的默认样式不一样,若不清理,会导致相同的代码在浏览器中解析结果不一样,为了避免这种情况,所以需要进行样式初始化. 代 ...

  6. Swift中如何化简标准库中冗长的类实例初始化代码

    可能有些童鞋并不知道,在Swift中缩写点符号对于任何类型的任何static成员都有效. 我们实际写一个例子看一下: import UIKit class CFoo{ static let share ...

  7. Golang 引用库中含有初始化代码时如何引用

    简单点说吧,要在引用库前加'_'符号 给出示例 //foo.go // /usr/local/go/pkg/src/foo/foo.go package foo import "fmt&qu ...

  8. 该对象尚未初始化。请确保在所有其他初始化代码后面的应用程序启动代码中调用 HttpConfiguration.EnsureInitialized()。

    WebAPI使用属性路由,配置config.MapHttpAttributeRoutes();后出现错误: System.InvalidOperationException: 该对象尚未初始化.请确保 ...

  9. SpringBoot程序启动时执行初始化代码

    因项目集成了Redis缓存部分数据,需要在程序启动时将数据加载到Redis中,即初始化数据到Redis. 在SpringBoot项目下,即在容器初始化完毕后执行我们自己的初始化代码. 第一步:创建实现 ...

随机推荐

  1. PCB 工程系统 模拟windows域帐号登入

    一.需求描述: 对于PCB制造企业来说,基本都采用建立共享目享+域名管控权限,好像别的大多数行业都是这样的吧.呵呵 在实际应用中,经常会有这样的问题,自己登入的帐号没有共享目录的权限,但又想通过程序实 ...

  2. xx网络--工具集合

    -- D:\workspace\bajie_projram\BJ.srfcb\BJ.srfcb\BJ.srfcb 8jielicai_New\App_Code\common\pg.cs---GetHt ...

  3. js-常见简单的js判断方法(暂不参考正则)

    1: 2: 3: 4: 5: 6: 7:

  4. js-学习方法

    1:多实践,找例子,看别人是如何实现的,然后自己去实现,然后谷歌百度,最后总结. 2:如何读js英文书:不是自己不会读,是被吓着了.自己吓自己. 英文不好的话,先不要挨着排的从头到尾读. 应该首先读目 ...

  5. 远程连接Oracle设置

    1:打开net manager:开始->程序->oracle->配置和移植工具->Net Manager 2:添加服务器名->名子自定义,一般根据项目自定义,自己知道就行 ...

  6. macOS下登录store或者xcode等应用时提示【this action could not be completed】

    sudo mkdir -p /Users/Shared sudo chown root:wheel /Users/Shared sudo chmod -R 1777 /Users/Shared === ...

  7. 安卓代码迁移:Make.exe: *** [libs/armabi-v7a/gdbserver] Error 1

    解决办法1:安装ndk和eclipse修改为x86操作系统 解决办法2:降低更换NDK版本

  8. Table边框使用总结 ,只显示你要显示的边框

    表格的常用属性 基本属性有:width(宽度).height(高度).border(边框值).cellspacing(表格的内宽,即表格与tr之间的间隔). cellpadding(表格内元素的间隔, ...

  9. express创建第一个web应用

    Express 在初始化一个项目的时候需要指定模板引擎,默认支持Jade和ejs. 这里我们使用ejs模板引擎:(关于ejs的介绍可以先从百科里面了解一个大概)EJS是一个JavaScript模板库, ...

  10. CorelDRAW图片导出变色,如何解决?

    很多小伙伴反映说CDR颜色导出不准确,特别是CorelDRAW X4以及之前的版本,那么CDR导出变色的问题是怎么导致的,如何解决呢,本文小编分享一些自己的心得. 一:出现问题. 比如下面这个问题,明 ...