1. 程式人生 > >Linux核心開發之記憶體與I/O訪問(三)

Linux核心開發之記憶體與I/O訪問(三)

staticint xxx_mmp(struct file *filp, struct vm_area_struct *vma)
{
    if(remap_pfn_range(vma, vma->vm_start, vm->vm_pgoff, vma->vm_end - vma->start, vma->vm_page_prot))   //建立頁表return - EAGAIN;
    vma->vm_ops = &xxx_remap_vm_ops;
    xxx_vma_open(vma);
    return 0;
}
void xxx_vma_open(
struct vm_area_struct *vma) //VMA開啟函式 { ... printk(KERN_NOTICE "xxx VMA open, virt %lx, phys %1x\n",vma->vm_start, vma->vm_pgoff 《PAGE_SHIFT); } void xxx_vma_close(struct vm_area_struct *vma) //VMA關閉函式 { ... printk(KERN_NOTICE "xxx VMA close. \n"); } staticstruct vm_operation_struct xxx_remap_vm_ops =
//VM操作結構體 { .open=xxx_vma_open, .close=xxx_vma_close, ... }

相關推薦

Linux核心開發記憶體I/O訪問()

staticint xxx_mmp(struct file *filp, struct vm_area_struct *vma) { if(remap_pfn_range(vma, vma->vm_start, vm->vm_pgoff, vma->vm_end - vma->

Linux核心開發記憶體I/O訪問(四)

// 核心模組載入函式int __init kmalloc_map_init(void) { ../申請裝置號,新增cedv結構體 buffer = kmalloc(BUF_SIZE, GFP_KERNEL); //申請bufferfor(page = virt_to_page(buffer);

Linux核心開發記憶體I/O訪問(一)

“小王,今天咱們開始講有關記憶體和I/O訪問的內容,心裡先要有點低,這部分內容還是有點煩,有點難的哦”說著話,我心裡都沒底,怕嚇著小王,不瞞你說,當時看這部分,我可是沒少費勁。 “哦,那咋辦,不能不學是不?沒事,有小濤哥在,俺就不怕”小王信心十足的說。 “哦!看不出來,還讓你來安慰我了”看著小王這充滿信心的

Linux核心開發非同步通知非同步I/O(一)

“小王,聽說過錦上添花吧..”我拍拍下王的頭說。 “還錦上添花你,為你上次提的幾個東東,我是頭上長包..”小王氣憤地瞪著我。 “啊,為啥這樣呢,本來還特意拒絕了MM的約會,抽出時間打算給你說點高階的東東,看來現在是不行了”我吃驚道,“這樣吧,這次就給你講些和前邊有關的

Linux 核心解讀記憶體管理----memory.c

轉載請註明原文出處http://blog.csdn.net/lizhiliang06/article/details/8655115 80x86體系結構中,Linux核心的記憶體管理程式使用分頁管理方式。利用頁目錄和頁表結構處理核心中其他部分程式碼對記憶體申請和釋放操作。M

Linux網路程式設計TCP(下)- I/O資料複用

轉自http://blog.csdn.net/chenjin_zhong/article/details/7255705 1.介紹 網路資料的傳送與接收有多種方式,可以直接直接從套接字讀取資料或向套接字寫入函式,如read/write. 也可以通過向量傳送與接收資料

linux裝置驅動阻塞非阻塞I/O

先做一下與核心阻塞有關的知識儲備: 1)程序休眠:     程序休眠,簡單的說就是正在執行的程序讓出CPU。休眠的程序會被核心擱置在在一邊,只有當核心再次把休眠的程序喚醒,程序才會會重新在CPU執行。這是核心中的程序排程。一個CPU在同一時間只能有一個程序在執行,微觀序列巨

Python開發——15.協程I/O模型

沒有 mage F5 quest 資源 輸入數據 準備 cor 異步 一、協程(Coroutine) 1.知識背景 協程又稱微線程,是一種用戶態的輕量級線程。子程序,或者稱為函數,在所有語言中都是層級調用,比如A調用B,B在執行過程中又調用了C,C執行完畢返回,B執行完畢返

Liunx學習筆記文件權限I/O重定向

ima 所有 讀取 區別 命令執行 com ror 重定向 cd 命令 一、文件權限 1. 文件權限 在 Linux 中有四種訪問權限,列舉如下 可讀取:r,Readable 可寫入:w,Writable 可執行:x,Execute 無權限:- 我們可以使用 ls -l

python開發virtualenvvirtualenvwrapper(linux下安裝配置)

在使用python開發過程中,會經常碰到不同的工程依賴不同版本的庫的問題,所以我們需要對於不同的工程使用不同的虛擬環境來保持開發環境以及宿主環境的清潔 ----------virtualenv 一個可以幫助我們管理不同python環境的好工具,它可以在系統中建立多個不同並且相互不干擾的虛擬環境、  

Linux 驅動開發核心模組開發 (二)—— 核心模組編譯 Makefile 入門

一、模組的編譯  我們在前面核心編譯中驅動移植那塊,講到驅動編譯分為靜態編譯和動態編譯;靜態編譯即為將驅動直接編譯進核心,動態編譯即為將驅動編譯成模組。 而動態編譯又分為兩種: a -- 內部編譯        在核心原始碼目錄內編譯 b -- 外部編譯        在核

linux檔案裝置I/O:open/close函式

一,open 函式可以開啟或建立一個檔案 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int

檔案系統快取裡記憶體頁的最小分配單元page sizeI/O大小的最佳匹配關係討論

     cache page size就是記憶體頁的最小分配單元,預設8KB,應用於R/W cache。如果I/O < 8KB,那麼一個page可能會服務多個I/O,從而優化了cache page的使用。 如果應用環境是Mixed I/O,建議不要更改。如果應用環境主要是【順序,大I/O】,將pa

Linux POSIX 檔案 I/O 操作函式

(1)檔案描述符與檔案流轉換操作 /*成功返回檔案描述符,失敗返回-1*/ int fileno(FILE* stream); /*成功返回檔案流,失敗返回NULL*/ FILE* fdopen(int fd,char* mode); (2)修改檔案描

I/OI/O記憶體 對外設訪問方式

從CPU連出來一把線:資料匯流排、地址匯流排、控制匯流排,這把線上掛著N個介面,有相同的,有不同的,名字叫做儲存器介面、中斷控制介面、DMA介面、並行介面、序列介面、AD介面……一個裝置要想接入,就用自己的介面和總線上的某個匹配介面對接……於是總線上出現了各種裝置:記憶體、

Linux應用開發使Valgrind防止記憶體洩露

用C/C++開發其中最令人頭疼的一個問題就是記憶體管理,有時候為了查詢一個記憶體洩漏或者一個記憶體訪問越界,需要要花上好幾天時間,如果有一款工具能夠幫助我們做這件事情就好了,valgrind正好就是這樣的一款工具。 Valgrind是一款基於模擬linux下的程式偵錯程式

linux 驅動開發核心樹構建

    在看<Linux Device Driver Third Edition>的時候,作者其中提到Setting Up Your Test System。他只是指出為2.6.X編寫模組,首先,要求你在Linux系統上構建和配置核心樹,對於2.6版本的核心來說,

linux基本命令chattrlsattr

linux 基本命令 chattr lsattr 1.chattr命令用來改變文件屬性:chattr命令的用法:chattr [ -RVv ] [ mode ] files… [mode]部分是由+-=和[ASacDdIijsTtu]這些字符組合的,這部分是用來控制文件的屬性。 -R:遞歸

linux驅動開發蜂鳴器驅動源碼分析(一)

linux 蜂鳴器 驅動 蜂鳴器的驅動源碼在/driver/char/buzzer/x210-buzzer.c文件中,源碼如下#include <linux/module.h> #include <linux/kernel.h> #include <linux

IOS開發——objectForKeyvalueForKey在NSDictionary中的差異

什麽 iat app 報錯信息 lease 方法 去掉 defined atom 從 NSDictionary 取值的時候有兩個方法,objectForKey: 和 valueForKey:,這兩個方法具體有什麽不同呢? 先從 NSDictionary 文檔中來看這兩個方法