差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

下次修改
前次修改
linux:kernel:tracekconfig [2013/06/21 12:01]
tony 建立
linux:kernel:tracekconfig [2023/06/25 09:48] (目前版本)
行 2: 行 2:
 ====== Trace KConfig - Plug and Play support選項不能選 ====== ====== Trace KConfig - Plug and Play support選項不能選 ======
 ===== Problem ===== ===== 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做選擇,這到底是怎回事?​+這問題的發生一開始是因為想存取某個isa io port卻出現ioperm的錯誤。透過cat /​proc/​ioports卻發現那些port並沒被linux找到。比較其它可行的機器後,發現這台搭配2.6.9 kernel的RHEL4u8(真的會有人用嗎?​)根本沒找到任何pnp裝置。\\ 
 +{{:​linux:​kernel:​ioports_pnp.png|}}\\ 
 +\\ 
 +我想: 那我自己去enable CONFIG_PNP吧! 不幸滴,透過make menuconfig指令卻無法對Device Drivers>​Plug and Play support做選擇,這到底是怎回事?​\\ 
 +{{:​linux:​kernel:​menuconfig_pnp.png?​600|}}
 ===== How to? ===== ===== How to? =====
 +於是我開始Trace Makefile與Kconfig,看看是怎麼回事。首先至kernel source root下,看看drivers/​pnp/​Kconfig:​\\
 +{{:​linux:​kernel:​kconfig_pnp.png|}}\\
 +\\
 +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上:​\\
 +{{:​linux:​kernel:​kconfig_arch_2.6.9_i386_isa.png|}}\\
 +\\
 +接著看64位元版本,arch/​x86_64/​Kconfig:​\\
 +{{:​linux:​kernel:​kconfig_arch_2.6.9_x64.png|}}\\
 +一開始註解就說明64位元不支援ISA,如果要enable必須自己去修kernel driver,這就是root cause。最後當然是請User升級kernel拉。\\
 +
 +友藏內心獨白:​ linux的portable就是那坨config。
 +===== Resource =====
 +  * [[http://​www.hansenpartnership.com/​voyager/​|VOYAGER]]
 +=====    =====
 +----
 +\\
 +~~DISQUS~~