[英]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。
在內核中,內存仍然是虛擬映射的,與用戶空間的方式不同。
可能是0x10在保護頁面或其他東西中,以捕獲空指針,因此當您觸摸它時,它會在內核中生成未處理的頁面錯誤。
通常這會導致OOPS不掛起(但可以配置為導致恐慌)。 OOPS是一種意想不到的內核條件,在某些情況下可以恢復,並不一定會導致整個系統崩潰。 通常它會殺死任務(在本例中為insmod)
您是否在加載了GUI的桌面Linux系統上執行此操作? 如果您想破解內核,我建議您使用簡單(即快速重啟)基於文本的分發來設置Linux VM(Vmware,virtualbox等)。 你會崩潰一點,你希望它盡快重啟。 此外,通過使用基於文本的分發,更容易看到內核崩潰消息(糟糕或恐慌)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.