Messages in this thread Patch in this message | | | From | nicholas@binary9 ... | Date | Thu, 28 May 1998 14:16:29 -0400 (EDT) | Subject | [EXAMPLE-PATCH] /proc/config |
| |
Well, since I've thought about this myself for close to a year now, and recently there were a few messages bounced around about this, I thought I'd try to implement it.
As you all may know, I'm not the best programmer in the world. So please consider this to be an EXAMPLE patch of how this might work.
make proconfig * creates kernel/config.c with all the set variables from .config. Stuff like "# CONFIG_xyz is not set" is not copied. Currently the full phrase "CONFIG_xyz" is saved, even though know I could strip it off. At the end of make {config,oldconfig,xconfig,menuconfig} this is called to regenerate kernel/config.c.
make curconfig * if it exists, it will use /proc/config as defaults for this kernel. This required patching scripts/Configure to support a new option "-di" will standards for "Default (ignore NEW)". Otherwise at every point where you don't have the option mention in /proc/config, it would stop and ask you about it.
And that's basically it. Hopefully this will give a real programmer a decent starting point for something that we could include in 2.2.
diff -Nur linux.104-prist/Makefile linux.104-config/Makefile --- linux.104-prist/Makefile Thu May 28 11:18:38 1998 +++ linux.104-config/Makefile Thu May 28 12:36:47 1998 @@ -197,31 +197,50 @@ mkdir include/linux/modules; \ fi +proconfig: + $(CONFIG_SHELL) scripts/makeproconf.sh > $(TOPDIR)/kernel/config.c + oldconfig: symlinks scripts/split-include $(CONFIG_SHELL) scripts/Configure -d arch/$(ARCH)/config.in if [ -r include/linux/autoconf.h ]; then \ scripts/split-include include/linux/autoconf.h include/config; \ fi + $(MAKE) proconfig + +curconfig: symlinks scripts/split-include + @if [ -f "/proc/config" ]; then \ + cat /proc/config > .config; \ + $(CONFIG_SHELL) scripts/Configure -di arch/$(ARCH)/config.in; \ + if [ -r include/linux/autoconf.h ]; then \ + scripts/split-include include/linux/autoconf.h include/config; \ + fi; \ + $(MAKE) proconfig; \ + else \ + echo "Your current kernel does not support autoconfiguration"; \ + fi -xconfig: symlinks scripts/split-include +xconfig: symlinks scripts/split-include $(MAKE) -C scripts kconfig.tk wish -f scripts/kconfig.tk if [ -r include/linux/autoconf.h ]; then \ scripts/split-include include/linux/autoconf.h include/config; \ fi + $(MAKE) proconfig -menuconfig: include/linux/version.h symlinks scripts/split-include +menuconfig: include/linux/version.h symlinks scripts/split-include $(MAKE) -C scripts/lxdialog all $(CONFIG_SHELL) scripts/Menuconfig arch/$(ARCH)/config.in if [ -r include/linux/autoconf.h ]; then \ scripts/split-include include/linux/autoconf.h include/config; \ fi + $(MAKE) proconfig -config: symlinks scripts/split-include +config: symlinks scripts/split-include $(CONFIG_SHELL) scripts/Configure arch/$(ARCH)/config.in if [ -r include/linux/autoconf.h ]; then \ scripts/split-include include/linux/autoconf.h include/config; \ fi + $(MAKE) proconfig linuxsubdirs: dummy set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i; done @@ -359,7 +378,7 @@ rm -f drivers/net/hamradio/soundmodem/gentbl rm -f drivers/char/hfmodem/gentbl drivers/char/hfmodem/tables.h rm -f drivers/sound/*_boot.h drivers/sound/.*.boot - rm -f .version .config* config.in config.old + rm -f .version .config* config.in config.old kernel/config.c rm -f scripts/tkparse scripts/kconfig.tk scripts/kconfig.tmp rm -f scripts/lxdialog/*.o scripts/lxdialog/lxdialog rm -f .menuconfig.log diff -Nur linux.104-prist/fs/proc/array.c linux.104-config/fs/proc/array.c --- linux.104-prist/fs/proc/array.c Wed May 6 14:01:45 1998 +++ linux.104-config/fs/proc/array.c Thu May 28 11:34:32 1998 @@ -1200,6 +1200,7 @@ extern int get_rtc_status (char *); extern int get_locks_status (char *, char **, off_t, int); extern int get_swaparea_info (char *); +extern int get_proc_config (char *); #ifdef CONFIG_ZORRO extern int zorro_get_list(char *); #endif @@ -1290,6 +1291,9 @@ case PROC_HARDWARE: return get_hardware_list(page); #endif + case PROC_CONFIG: + return get_proc_config(page); + } return -EBADF; } diff -Nur linux.104-prist/fs/proc/root.c linux.104-config/fs/proc/root.c --- linux.104-prist/fs/proc/root.c Sun May 17 14:34:57 1998 +++ linux.104-config/fs/proc/root.c Thu May 28 11:34:32 1998 @@ -623,6 +623,11 @@ NULL, NULL /* parent, subdir */ }; #endif +static struct proc_dir_entry proc_root_config = { + PROC_CONFIG, 6, "config", + S_IFREG | S_IRUGO, 1, 0, 0, + 0, &proc_array_inode_operations +}; void proc_root_init(void) { @@ -694,7 +699,7 @@ #ifdef CONFIG_PROC_DEVICETREE proc_device_tree_init(); #endif - + proc_register(&proc_root, &proc_root_config); proc_bus = create_proc_entry("bus", S_IFDIR, 0); } diff -Nur linux.104-prist/include/linux/proc_fs.h linux.104-config/include/linux/proc_fs.h --- linux.104-prist/include/linux/proc_fs.h Wed May 20 19:21:51 1998 +++ linux.104-config/include/linux/proc_fs.h Thu May 28 11:47:14 1998 @@ -51,6 +51,7 @@ PROC_PPC_HTAB, PROC_SOUND, PROC_MTRR, /* whether enabled or not */ + PROC_CONFIG, PROC_FS }; diff -Nur linux.104-prist/kernel/Makefile linux.104-config/kernel/Makefile --- linux.104-prist/kernel/Makefile Wed May 6 14:01:46 1998 +++ linux.104-config/kernel/Makefile Thu May 28 11:34:32 1998 @@ -13,7 +13,7 @@ O_TARGET := kernel.o O_OBJS = sched.o dma.o fork.o exec_domain.o panic.o printk.o sys.o \ module.o exit.o itimer.o info.o time.o softirq.o resource.o \ - sysctl.o acct.o capability.o + sysctl.o acct.o capability.o config.o OX_OBJS += signal.o diff -Nur linux.104-prist/scripts/Configure linux.104-config/scripts/Configure --- linux.104-prist/scripts/Configure Sun May 3 20:52:06 1998 +++ linux.104-config/scripts/Configure Thu May 28 12:33:21 1998 @@ -120,14 +120,19 @@ # readln prompt default oldval # function readln () { - if [ "$DEFAULT" = "-d" -a -n "$3" ]; then + if [ "$DEFAULT" = "-d" -o "$DEFAULT" = "-di" -a -n "$3" ]; then echo "$1" ans=$2 else - echo -n "$1" - [ -z "$3" ] && echo -n "(NEW) " - IFS='@' read ans </dev/tty || exit 1 - [ -z "$ans" ] && ans=$2 + if [ "$DEFAULT" = "-di" -a -z "$3" ]; then + echo "$1" + ans=$2 + else + echo -n "$1" + [ -z "$3" ] && echo -n "(NEW) " + IFS='@' read ans </dev/tty || exit 1 + [ -z "$ans" ] && ans=$2 + fi fi } @@ -488,6 +493,10 @@ DEFAULT="" if [ "$1" = "-d" ] ; then DEFAULT="-d" + shift +fi +if [ "$1" = "-di" ] ; then + DEFAULT="-di" shift fi diff -Nur linux.104-prist/scripts/makeproconf.sh linux.104-config/scripts/makeproconf.sh --- linux.104-prist/scripts/makeproconf.sh Wed Dec 31 19:00:00 1969 +++ linux.104-config/scripts/makeproconf.sh Thu May 28 12:41:15 1998 @@ -0,0 +1,25 @@ +#!/bin/sh + +cat -<<EOT +#include <linux/config.h> +#include <linux/version.h> +#include <linux/malloc.h> +#include <linux/unistd.h> + + +int get_proc_config(char *page) { + int size=0; + +EOT + +cat $TOPDIR/.config | grep '^CONFIG' | awk -F= ' + { + print " size+=sprintf(page+size,\"" $1 "=" $2 "\\n\");" + } +' + +cat -<<EOT + + return (size); +} +EOT
___________________________________________________________________________ simple is elegant mrnick.binary9.net nicholas@binary9.net ___________________________________________________________________________ Linux 2.1.104 #4 SMP Thu May 28 12:07:14 EDT 1998, up 1:39 Linux 2.1.103 #2 Fri May 22 11:45:19 EDT 1998, up 33 min Linux 2.1.96 #2 Wed Apr 15 11:38:48 EDT 1998, up 2 days
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu
| |