LINUX IO端口、IO內存釋疑

IO端口是指接口電路中能夠被CPU直接訪問的寄存器,一般有數據端口、控制端口和狀態端口。每個連接到IO總線的設備都有自己的地址(集合),即端口,可以被映射到物理地址空間。

IO內存和IO端口的主要區別是,IO端口操作具有邊際效應,而內存則沒有(所以可以用多種方法進行優化,比如重新排序、告訴緩存等)。

 

使用IO內存前要先申請request_mem_region,然後ioremap映射;使用IO port前要用request_region請求。Linux維護全局變量ioport_resource和iomem_resource,每次request的時候從其中分配。PCI設備所需的內存基址在啓動的時候已經有BIOS設定,所以在driver中需request_mem_region(base,length)聲明。

request_region和request_mem_region僅僅申請資源。io region爲0~64k,mem爲0~4G。申請後僅該驅動程序可以使用該資源。

 

request_mem_region 函數返回resource指針,ioremap函數將該物理地址映射成內核虛擬地址(內部用vm_struct組織,跟vmalloc類似)。

ioport_map用於將io port映射成內核虛擬地址。

發佈了22 篇原創文章 · 獲贊 7 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章