发布时间:2012-12-09 14:34:17
内核部分:内核版本linux 2.6.22.6 1. 从start_kernel() // 在 init/main.c中 点击(此处)折叠或打开start_kernel()... trap_init()... 点击(此处)折叠或打开void __init trap_init(void){ unsigned long vectors = CONFIG_VECTORS_BASE; //CONFIG_VECTORS_BASE = 0XFFFF0000 &n......【阅读全文】
发布时间:2012-12-09 08:55:28
linux mmap 详解谨以此文纪念过往的岁月一.前言mmap的具体实现以前在学习内核时学习过,但是对于其中的很多函数是一知半解的,有些只能根据其函数名来猜测其具体的功能,在本文中,一起来重新深入理解其具体的实现。二.mmap的用户层应用void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize); 具体参数含义start : 指向欲映射的内存起始地址,通常设为 NULL,代表让系统自动选定地址,映射成功后返回该地址。length: 代表将文件中多大的部分映射到内存。prot......【阅读全文】
发布时间:2012-12-09 08:43:08
1. 内存映射 所谓的内存映射就是把物理内存映射到进程的地址空间之内,这些应用程序就可以直接使用输入输出的地址空间,从而提高读写的效率。Linux提供了mmap()函数,用来映射物理内存。 在驱动程序中,应用程序以设备文件为对象,调用mmap()函数,内核进行内存映射的准备工作,生成vm_area_struct结构体,然后调用设备驱动程序中定义的mmap函数。 2. 映射的种类 把同一个物理地址映射为虚拟地址有两种方法,第一种是mmap()函数将物理地址映射到进程的虚拟地址空间中去,第二种方法为ioremap()函数映射到内核虚拟地址上的方法。 应用程......【阅读全文】