Problem
這問題的發生一開始是因為想存取某個isa io port卻出現ioperm的錯誤。透過cat /proc/ioports卻發現那些port並沒被linux找到。比較其它可行的機器後,發現這台搭配2.6.9 kernel的RHEL4u8(真的會有人用嗎?)根本沒找到任何pnp裝置。
我想: 那我自己去enable CONFIG_PNP吧! 不幸滴,透過make menuconfig指令卻無法對Device Drivers>Plug and Play support做選擇,這到底是怎回事?
How to?
於是我開始Trace Makefile與Kconfig,看看是怎麼回事。首先至kernel source root下,看看drivers/pnp/Kconfig:
default為y這行是我加的,只是想確認是否能讓.confg產生CONFIG_PNP=y的設定。但事實上,CONFIG_PNP是相依於CONFIG_ISA(CONFIG_PNP與CONFIG_ISAPNP都會在pnp.h或isapnp.h中被使用到)。接著我就開始trace CONFIG_ISA的定義,CONFIG_ISA的宣告在arch下。我關注的是arch/i386與arch/x84_64下的Kconfig。首先是arch/i386/Kconfig,看起來宣告正常,除了在VOYAGER、VISWS、XEN這三種版本的kernel上:接著看64位元版本,arch/x86_64/Kconfig:
一開始註解就說明64位元不支援ISA,如果要enable必須自己去修kernel driver,這就是root cause。最後當然是請User升級kernel拉。
友藏內心獨白: linux的portable就是那坨config。
留言
張貼留言