2011-04-13 68 views
3

我使用insmod hello.ko來啓動我建立的模塊。並使用lsmod來查找這個模塊。然後我發現一個奇怪的問題,我看到模塊從地址0xbf000000開始。據我所知,內核地址從0xc0000000開始,驅動程序模塊是內核的一部分,但其地址在用戶空間中。這退出了奇數。爲什麼模塊從地址0xbf000000開始

順便說一句,在ARM平臺上。

+0

這是哪個平臺? arm x86 x86_64 ppc?虛擬地址對於不同的平臺可能會有很大的不同... – gby 2011-04-13 09:51:20

+0

@gby ARM,並且內核空間也應該從0xc0000000 – 2011-04-13 09:58:17

回答

4

所有內核代碼駐留在虛擬地址0xc0000000的方案實際上僅限於x86,甚至只有在使用用戶空間和內核之間的3:1內存地址拆分的默認配置選項時。

在手臂上,虛擬內存空間尋址方案不同,內核可加載模塊從常量TASK_SIZE映射到PAGE_OFFSET-1,其中PAGE_OFFSET是物理內存直接1:1映射開始的地址。

爲了什麼去哪裏在手臂上完全一致,請參閱本文檔:http://www.arm.linux.org.uk/developer/memory.txt

它也駐留在ARM子目錄下的Linux內核,這是看的好地方的文檔目錄裏對於其他體系結構的這些問題的答案:-)