簡體   English   中英

從linux內核訪問物理內存

[英]accessing physical memory from linux kernel

我們可以通過一些內核代碼訪問任何物理內存嗎? 因為,我寫了一個只有init_module和exit_module的設備驅動程序..代碼如下。

int init_module(void) {
    unsigned char *p = (unsigned char*)(0x10);
    printk( KERN_INFO  "I got %u \n", *p);
    return 0;
}

和一個虛擬的exit_module ..問題是當我做lsmod時計算機掛起..會發生什么? 我應該獲得訪問mem位置的某種許可嗎?

請解釋..我是初學者!

要訪問真實的物理內存,您應該使用phys_to_virt函數。 如果它是io內存(例如PCI內存),你應該仔細看看ioremap。

整個主題非常復雜,如果您是初學者,我會建議一些內核/驅動程序開發書籍/ doc。

我建議在本書中閱讀關於記憶的章節:

http://lwn.net/Kernel/LDD3/

它可以在線免費獲得。 好東西!

在內核中,內存仍然是虛擬映射的,與用戶空間的方式不同。

可能是0x10在保護頁面或其他東西中,以捕獲空指針,因此當您觸摸它時,它會在內核中生成未處理的頁面錯誤。

通常這會導致OOPS不掛起(但可以配置為導致恐慌)。 OOPS是一種意想不到的內核條件,在某些情況下可以恢復,並不一定會導致整個系統崩潰。 通常它會殺死任務(在本例中為insmod)

您是否在加載了GUI的桌面Linux系統上執行此操作? 如果您想破解內核,我建議您使用簡單(即快速重啟)基於文本的分發來設置Linux VM(Vmware,virtualbox等)。 你會崩潰一點,你希望它盡快重啟。 此外,通過使用基於文本的分發,更容易看到內核崩潰消息(糟糕或恐慌)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM