Linux中的内存页表创建之memtable_init()函数分析
本函数的分析很难具体,因为涉及了很多arm的处理器型号和每个型号对应的cache和write buffer的工作方式,这片文章只是做简单的记录,方便以后了解更深后回来再来完善这个函数。
这个函数的调用过程如:start_kernel()->setup_arch()->paging_init()->memtable_init().传递的struct meminfo mi是一个全局变量,里面记录了整个系统所有bank的信息。我们来大概看看这个函数的代码。
void __init memtable_init(struct meminfo *mi)
{
struct map_desc *init_maps, *p, *q;//要注意这里很重要的结构-struct map_desc,这个结构体的内容等下会细讲的。
unsigned long address = 0;
int i;
build_mem_type_table();//这个函数可以说来是我最含糊的函数,我们来浅析一下吧。
static void __init build_mem_type_table(void)
{
struct cachepolicy *cp;
unsigned int cr = get_cr();//就是获得cp15的c1寄存器的内容
int cpu_arch = cpu_architecture();//获得寄存器的架构版本
int i;
#if defined(CONFIG_CPU_DCACHE_DISABLE)
if (cachepolicy > CPOLICY_BUFFERED)
cachepolicy = CPOLICY_BUFFERED;
#elif defined(CONFIG_CPU_DCACHE_WRITETHROUGH)
if (cachepolicy > CPOLICY_WRITETHROUGH)
cachepolicy = CPOLICY_WRITETHROUGH;
#endif//这里涉及到一个全局变量cachepolicy,我们可以称为cache政策,其实可以看出以上几行都是和系统配置选项有关的。
if (cpu_arch < CPU_ARCH_ARMv5) {
if (cachepolicy >= CPOLICY_WRITEALLOC)
&n
相关文档:
因为学习需要,最近用上了ubuntu 9.10.可是却发现qq for linux总是莫名其妙的自己退出。今天忍受不了了,上网找答案。原来不是我人品的问题。最终从下面这文章中找到了解决方法。
原文如下:
QQ官方提供的QQ For Linux在Ubuntu
9.10下安装之后,经常出现没聊几句天就会自动退出的bug,原因是QQ For Linux与Ubunt ......
本人安装的是Vmware 6.5精简版,导致后来我想在虚拟机和Windows下互传不了文件,发现少了linux.iso镜像文件。我在网上找到并把它放到虚拟机的安装目录下,然后启动虚拟机下的linux操作系统,虚拟机--->设置,单击CD/DVD,选择使用ISO镜像,路径指向linux.iso,然后在/mnt/cdrom下就有了vmware-t ......
一.为什么学linux
1.性能卓越
开源,免费,稳定,安全,处理多并发
2.工作方面:
linux系统管理员
linux程序员(linux软件工程师,linux嵌入式开发)
二.流程
第一阶段:linux平台上的开发,包括vi,gcc,gdb,make,jdk,tomcat,mysql..linux基本操作
第二阶段:加厚C功底或java
第三阶段:《unix环境高级编程》
第 ......
Qt是一个跨平台的C++图形用户界面库,.由挪威TrollTech公司出品,目前包括Qt/X11,基于Frambuffer的Qt Embedded,快速开发工具Qt Designer几国际化工具Qt Linguist等.Qt支持Unix及Linux系统,还支持Windows NT/Windows 2k及Qindows 95/98平台.Qt的良好封装机制使其模块化程度非常高,可重用性 ......
install
1.作用
install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户。
2.格式
(1)install [选项]... 来源 目的地
(2)install [选项]... 来源... 目录
(3)install -d [选项]... 目录...
在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的< ......