1. 程式人生 > >Linux中的地址空間以及I/O地址空間

Linux中的地址空間以及I/O地址空間

核心的如下一組函式來完成訪問I/O記憶體:·讀I/O記憶體
unsigned int ioread8(void *addr);
unsigned int ioread16(void *addr);
unsigned int ioread32(void *addr);
與上述函式對應的較早版本的函式為(這些函式在Linux 2.6中仍然被支援):
unsigned readb(address);
unsigned readw(address);
unsigned readl(address);
·寫I/O記憶體
void iowrite8(u8 value, void *addr);
void iowrite16(u16 value, void *addr);
void iowrite32(u32 value, void *addr);
與上述函式對應的較早版本的函式為(這些函式在Linux 2.6中仍然被支援):
void writeb(unsigned value, address);
void writew(unsigned value, address);
void writel(unsigned value, address);
4. 
訪問I/O記憶體

  Linux核心也提供了一組函式申請和釋放某一範圍的I/O記憶體:
  struct resource *requset_mem_region(unsigned long start, unsigned long len,char *name);
   這個函式從核心申請len個記憶體地址(在3G~4G之間的虛地址),而這裡的start為I/O實體地址,name為裝置的名稱。注意,。如果分配成功,則返回非NULL,否則,返回NULL。
另外,可以通過/proc/iomem檢視系統給各種裝置的記憶體範圍。

  要釋放所申請的I/O記憶體,應當使用release_mem_region()函式:
  void release_mem_region(unsigned long start, unsigned long len)

  申請一組I/O記憶體後,  呼叫ioremap()函式:
void * ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags);
其中三個引數的含義為:
phys_addr:與requset_mem_region函式中引數start相同的I/O實體地址;
size:要對映的空間的大小;
flags:要對映的IO空間的和許可權有關的標誌;
功能: 將一個I/O地址空間對映到核心的虛擬地址空間上(通過release_mem_region()申請到的)

相關推薦

Linux地址空間以及I/O地址空間

核心的如下一組函式來完成訪問I/O記憶體:·讀I/O記憶體 unsigned int ioread8(void *addr); unsigned int ioread16(void *addr); unsigned int ioread32(void *addr); 與上述函式對應的較早版本的函式為(這些函式

如何在 Linux 找到你的 公網IP 地址

地址 int name 命令使用 電話 ipv ipaddress AD host 每個網站都有一個獨有的公開 IP 地址,可供任何人從任何地方訪問。 互聯網協議Internet Protocol(IP)不需要介紹 —— 我們每天都在使用它。即使你不直接使用它,當

Linux的動、靜IP地址配置

1.動態配置法已經檢視點選開啟連結 2.靜態ip配置: vi /etc/sysconfig/network-scripts/ifcfg-eth0 回車後, 開始編輯,填寫ip地址、子網掩碼、閘道器、D

PC I/O地址分配(轉)

PC只用了10位地址線(A0-A9)進行譯碼,其定址的範圍為0H-3FFH,共有1024個I/O地址。 這1024個地址中前半段(A9=0,範圍為0H-1FFH)是屬於主機板I/O譯碼, 後半段(A9=1,範圍為200H-3FFH)則是用來擴充套件插槽上的I/O譯碼用。   

linux檢視網絡卡mac地址

1. ifconfig -a 其中 HWaddr欄位就是mac地址2. cat /sys/class/net/eth0/address 檢視eth0的mac地址3. cat /proc/net/arp 檢視連線到本機的遠端ip的mac地址4. 程式中使用SIOCGIFHW

Node.js的異步I/O是如何進行的?

ioc 而是 網絡 調用 發現 回調函數 異步調用 技術 如何 Node.js的異步I/O通過事件循環的方式實現。其中異步I/O又分磁盤I/O和網絡I/O。在磁盤I/O的調用中,當發起異步調用後,會將異步操作送進libuv提供的隊列中,然後返回。當磁盤I/O執行完成之後,會

python的文件I/O

參數 末尾 清除 rom raw class 打開文件 -s tro 讀取鍵盤輸入:raw_input input raw_input([prompt]) 函數從標準輸入讀取一個行,並返回一個字符串(去掉結尾的換行符): str = raw_input("請輸入

Linux /var/spool/postfix/maildrop 占用空間很大問題

刪除 成功 tput linux 摘要 lock 目錄 drop 清空 摘要 一臺運維主機上面沒有跑什麽特殊服務,所以沒有添加監控告警。今突然執行命令執行不了發現是因為磁盤慢了導致。排錯發現是因為目錄/var/spool/postfix/mailfdrop 過大導致。

Qemu模擬IO和半虛擬化Virtio的區別以及I/O半虛擬化驅動介紹

RoCE 缺少 靈活 緩沖 不支持 src 自動 令行 nic QEMU的基本原理和優缺點 基本原理: 使用QEMU模擬I/O的情況下,當客戶機中的設備驅動程序(device driver)發起I/O操作請求之時,KVM模塊中的I/O操作捕獲代碼會攔截這次I/O請求,然後

c++ 網絡編程(四)TCP/IP LINUX/windows下 socket 基於I/O復用的服務器端代碼 解決多進程服務端創建進程資源浪費問題

linux系統中 cin 通過 sel print 大小 查看 服務 集合 原文作者:aircraft 原文鏈接:https://www.cnblogs.com/DOMLX/p/9613861.html 好了,繼上一篇說到多進程服務端也是有缺點的,每創建一個

在64-bit 驅動支援32-bit I/O 操作

原文 https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/supporting-32-bit-i-o-in-your-64-bit-driver      

linux 下的五種I/O模型

Linux下的五種I/O通訊模型 同步,非同步,阻塞,非阻塞的概念 首先,需要明確的一個問題就是,通常程式是執行在使用者態下,如果需要進行I/O操作,那麼就會發出系統呼叫(System call),由使用者態轉變為核心態,由作業系統去完成I/O操作,實際上應用程

informix資料庫在linux的安裝以及用java/c/c++訪問

一、安裝前準備 安裝JDK(略) 到IBM官網上下載informix軟體:iif.12.10.FC9DE.linux-x86_64.tar放在某個大家都可以訪問的目錄比如:/mypkg,並解壓到該目錄下。 我也放到了百度雲和天翼雲上供下載。 建立informix使

Linux 併發echo伺服器之I/O複用之select

select 簡介: 將待監聽套接字加入集合,監測,若有資料到來,進行echo,若有新連線請求到來,accept並將對應套接字加入集合 函式: int select(int , fd_set* rd, fd_set* wr , fd_set* except ,

Linux驅動開發雜記(0x08) -I/O記憶體

儘管 I/O 埠在x86世界中非常流行,但是用來和裝置通訊的主要機制是通過記憶體對映的暫存器和裝置記憶體,兩者都稱為I/O 記憶體,因為暫存器和記憶體之間的區別對軟體是透明的。   I/O 記憶體僅僅是一個類似於RAM 的區域,處理器通過匯流排訪問該區域,以實現

Linux下的5種I/O模型(轉)

Linux下的五種I/O模型:   l         阻塞I/O   l      &nbs

linux安裝jdk以及eclipse的安裝

最近將系統換成了linux(ubuntu14.04),隨之而來的是各種軟體的配置,環境的配置,因此趁機將自己的過程整理出來。1:linux中怎麼安裝jdk2 將現在的jdk解壓到對應的目錄下面(我自己解壓的目錄為/home/username/java) 將檔案複製到對應的目錄

LINUX編譯程式時,-I,-L,-l 的區別

-I (大寫i):如-I ./lib/openssl/include,./表示在本目錄下,後面的路徑存放著標頭檔案的地址,第一個尋找標頭檔案的目錄。 -L:如 -L ./lib/sqlite,後面的路

Linux 系統程式設計學習-檔案I/O操作

一、非緩衝檔案操作 執行非緩衝檔案操作後,應用程式將立即獲取或傳送資料,非緩衝檔案操作的函式只有:read(),write()。 從檔案中將資訊講到到指定的記憶體區域中read(檔案識別符號,記憶體塊指標,記憶體塊長度); 返回值是實際讀取的長度,沒有讀取到資料返回0,錯誤

linux c單執行緒I/O超時處理

單執行緒I/O超時處理 UNIX下的I/O超時處理是一個很常見的問題, 它的通常做法是接收輸入(或傳送輸出)後立刻返回, 如果無輸入(或輸出)則n秒後定時返回. 一般情況下, 處理UNIX中I/O超時的方式有終端方式, 訊號跳轉方式和多路複用方式等三種. 本節設計一個定時I