22.2. 現在我應該怎麼做?

首先,修改 sys/conf/options (或是 sys/<arch>/conf/options.<arch>, 例如 sys/i386/conf/options.i386), 並且選一個您認為您的新的組態最合適存放的 opt_foo.h

如果已經有跟您所需要的選項功能相近的設定檔,就使用它吧! 例如一個更動跟 SCSI 驅動程式相關的選項,應該放在 opt_scsi.h檔案。 如果有一個選項是 FOO, 這通常表示對應的設定檔在 opt_foo.h。 This can be overridden on the right-hand side of a rule by specifying another filename.

如果您想放選項的檔案 opt_foo.h 尚不存在, 那就建立一個新的吧!找一個比較有意義的名字,在 options[.<arch>] 檔案中寫下相對的註解。 config(8) 下一次執行時會自動地找到這個改變。 大部份的選項都應該有對應的標頭檔 (header file)。

將太多的選項放在一個 opt_foo.h 檔案將會導致過多的 kernel 程式碼在其中一個選項被改變時就會被重新編譯。

最後,找到對應新的選項的 kernel 程式碼檔案。 除非您剛發明了新的選項,這個選項在其他的程式碼中都不還不存在, 您可以使用指令

    % find /usr/src/sys -type f | xargs fgrep NEW_OPTION
來找到他們。 修改這些檔案,在所有的 #include <xxx.h> 前面加入
            #include "opt_foo.h"
, 由於預設的程式碼是
     #ifndef NEW_OPTION #define NEW_OPTION (something)
            #endif
,您的設定可能會被預設值覆寫掉, 所以順序是很重要的。

增加一個選項把系統預設的標頭檔中的設定覆寫 (也就是說,那些設定在 /usr/include/sys/ 目錄下的檔案中) 幾乎可以說就是個錯誤。 opt_foo.h 也不能在那些檔案中被引入(include),因為這樣會更嚴重的破壞標頭檔。 but if it is not included, then places that include it may get an inconsistent value for the option. 是的,已經有別的人是這樣做,但那並沒有使得一切變得更正確。