linux核心DMA記憶體分配

2021-06-17 00:31:48 字數 459 閱讀 9474

linux系統啟動過程中,會初始化整個核心位址空間,將其劃分為各個型別段,其中包括物理記憶體對映區(又稱之為邏輯位址對映區)、虛擬記憶體分配區、高階頁面對映區、系統保留對映區、dma對映區(這個類似物理記憶體對映區,其對映的實體地址是連續的)這幾個區域等等,linux核心在啟動的時候通過arch/arm/include/asm/memory.h中的consistent_dma_size巨集配置核心位址空間dma大小。**位置如下:

#ifndef consistent_dma_size

#define consistent_dma_size sz_2m

#endif

consistent_dma_size 大小根據自己系統需求的情況來分配,比如做大資料高速採集一般這個dma的值就應該設定大一些,否則在核心申請會報下面錯誤:

(null device *): dma_alloc_coherent size *****  failed

linux核心記憶體分配

核心中的記憶體分配通常通過kmalloc kfree來進行,但是也有其它的方式來獲取記憶體,所有這些方式共同提供了核心中分配 釋放記憶體的介面。類似於標準c中的malloc free,kmalloc kfree是核心中的用於常規記憶體分配的介面。kmalloc kfree是工作在slab分配器的基礎...

Linux核心記憶體分配

函式有 kmalloc get free page get free pages get free page vmalloc kmem cache kmem cache alloclinux記憶體分為3中,dma 可以直接訪問 normal memory,high memory 一般記憶體中,前16...

Linux核心中記憶體分配函式

1.原理說明 linux核心中採 用了一種同時適用於32位和64位系統的內 存分頁模型,對於32位系統來說,兩級頁表足夠用了,而在x86 64系 統中,用到了四級頁表,如圖2 1所示。四級頁表分別為 頁全域性目錄 page global directory 頁上級目錄 page upper dire...