1. 程式人生 > >Linux驅動之內存訪問

Linux驅動之內存訪問

原來 line 操作 問題 inux 計算機 dex 分配內存 地址

<背景> 內存會以分頁方式組織內存,而且每頁大小和計算機體系結構有關系,Linux中每個頁都有對應的struct page{} 與之對應。 技術分享圖片 技術分享圖片

<分配連續的內存>

a:void *kmalloc(int count,int flags)函數用於從zone_normal區域返回連續內存的分配的地址。 參數分析: count:分配內存的大小 flags:分配內存的方式 GPF_KERNEL:進程上下文用來分配內存,內存不夠時會導致進程睡眠。 GPF_ATOMIC:中斷上下文用來分配內存,不會導致進程睡眠,內存不足時候會返回錯誤。 註意:kmalloc()函數分配的內存空間會保留原來的數據,所以在內存分配成功後必須進行相應的清零操作,否則會導致意想不到的問題。 b:void *vmalloc(unsigned long count) 參數分析: count:分配內存的大小 註意:vmalloc()常用來分配較大的內存空間,但是消耗的時間更長,並且不能再中斷上下文中使用。用該函數分配的內存返回的虛擬地址是連續,但是實際的物理地址不是連續的,因此不能用來分配DM空間。

Linux驅動之內存訪問