| --- |
| title: Config-brainstorming |
| --- |
| |
| Brainstorming for enable Kconfig on compat-drivers |
| |
| <h1>Step 1</h1> |
| |
| Using the existing kernel's config, generate a Kconfig file that contains all the right symbols for that kernel: |
| |
| <code> |
| <pre> |
| cat .config | genkconf.sh > kernel-kconfig |
| </pre> |
| </code> |
| |
| where the script is this: |
| |
| <code> |
| <pre> |
| #!/bin/bash |
| |
| while read line ; do |
| case "${line:0:7}" in |
| "CONFIG_") |
| line="${line:7}" |
| cfg="${line%%=*}" |
| val="${line#*=}" |
| cfgtype="skip" |
| if [ "$val" = "m" ] ; then |
| cfgtype="tristate" |
| elif [ "$val" = "y" ] ; then |
| cfgtype="bool" |
| fi |
| if [ "$cfgtype" != "skip" ] ; then |
| echo "config $cfg" |
| echo " $cfgtype" |
| echo " default $val" |
| echo "" |
| fi |
| ;; |
| "# CONFI") |
| cfg="${line:9}" |
| cfg="${cfg%% is not set}" |
| echo "config $cfg" |
| echo " bool" |
| echo " default n" |
| echo "" |
| ;; |
| esac |
| done |
| </pre> |
| </code> |
| |
| <h1>Step 2</h1> |
| |
| Collect all Kconfig symbols from compat: |
| <code> |
| <pre> |
| find . -name Kconfig | xargs cat | sed 's/^config //;t;d' > symbols |
| </pre> |
| </code> |
| |
| <h1>Step 3</h1> |
| |
| Instead of patching Makefiles, replaces all CONFIG_ by CONFIG_COMPAT_ in all Makefiles: |
| |
| <code><pre> |
| find . -name Makefile | xargs rpl "CONFIG_" "CONFIG_COMPAT_" |
| </pre></code> |
| |
| This means that only things that are actually selected in compat will be built. |
| |
| <h1>Step 4</h1> |
| |
| Replace all "FOO" with "COMPAT_FOO" symbols in Kconfig and code files: |
| |
| <code><pre> |
| for sym in $(cat symbols) ; do |
| find . -name Kconfig |\ |
| xargs rpl -w "$sym" "COMPAT_$sym" |
| |
| find . -name '*.c' -o -name '*.h' |\ |
| xargs rpl -w "CONFIG_$sym" "CONFIG_COMPAT_$sym" |
| done |
| </pre></code> |
| |
| <h1>Step 5</h1> |
| |
| Build a Kconfig file: |
| |
| <code><pre> |
| echo 'source "kernel-kconfig"' > Kconfig |
| for k in drivers/net/wireless/*/Kconfig ; do echo "source \"$k\"" >> Kconfig ; done |
| </pre></code> |
| |
| etc. Currently, mac80211/cfg80211/... Kconfig isn't copied. They will need to be copied and potentially modified for dependencies like WEXT. |
| |
| <h1>Step 6</h1> |
| Run menuconfig: |
| |
| <code><pre> |
| /lib/modules/$(uname -r)/build/scripts/kconfig/mconf Kconfig |
| </pre></code> |
| |
| <h1>Step 7</h1> |
| |
| Build the thing. |
| |
| The generated .config can be parsed with either the existing compat-drivers/scripts/gen-compat-autoconf.sh script or scripts/kconfig/confdata.c (conf --silentoldconfig). The generated include/linux/compat_autoconf.h is already included as part of the build of compat-drivers. |