This is a 2.2.17pre20 refresh of the /proc/config.gz patch originally
created by, well, here are the credits:

    Oliver Xymoron <[EMAIL PROTECTED]> Jan 15 1999
    Derived from a patch by Nicholas Leon <[EMAIL PROTECTED]> with
    suggestions from Michael Chastain <[EMAIL PROTECTED]> and Peter T. Breuer

I've been using it for at least a year and it's great....

Index: Documentation/Configure.help
--- Documentation/Configure.help.prev
+++ Documentation/Configure.help        Fri Aug  4 18:52:48 2000
@@ -7816,4 +7816,12 @@
   programs depend on this, so everyone should say Y here.
 
+/proc/config.gz support
+CONFIG_PROC_CONFIG
+  Say Y here if you want a copy of your current kernel configuration
+  saved in the kernel that you build. This is extremely useful if you
+  ever build more than one kernel. The cost is around 1K-4K of running
+  memory. Only say no if you really can't spare this. You can sneeze
+  and lose more on memory than this.
+
 NFS filesystem support
 CONFIG_NFS_FS

Index: include/linux/proc_fs.h
--- include/linux/proc_fs.h.prev
+++ include/linux/proc_fs.h     Fri Aug  4 18:52:48 2000
@@ -52,5 +52,6 @@
        PROC_STRAM,
        PROC_SOUND,
-       PROC_MTRR, /* whether enabled or not */
+       PROC_MTRR,      /* whether enabled or not */
+       PROC_CONFIG,    /* whether enabled or not */
        PROC_FS
 };

Index: Makefile
--- Makefile.prev
+++ Makefile    Fri Aug  4 18:52:48 2000
@@ -264,4 +264,15 @@
        @ touch include/config/MARKER
 
+cloneconfig: symlinks scripts/split-include
+       @if [ -f "/proc/config.gz" ]; then \
+           mv -f .config .config.bak; \
+           gzip -d < /proc/config.gz > .config; \
+           if [ -r include/linux/autoconf.h ]; then \
+               scripts/split-include include/linux/autoconf.h include/config; \
+           fi; \
+       else \
+           echo "Your current kernel does not support cloning."; \
+       fi
+
 linuxsubdirs: $(patsubst %, _dir_%, $(SUBDIRS))
 
@@ -297,4 +308,7 @@
        @mv -f .ver $@
 
+include/linux/config_data.h: newversion scripts/bin2c
+       gzip -9 < .config | scripts/bin2c kernel_config_data > $@
+
 include/linux/version.h: ./Makefile
        @echo \#define UTS_RELEASE \"$(KERNELRELEASE)\" > .ver
@@ -303,5 +317,5 @@
        @mv -f .ver $@
 
-init/version.o: init/version.c include/linux/compile.h include/config/MARKER
+init/version.o: init/version.c include/linux/compile.h include/linux/config_data.h 
+include/config/MARKER
        $(CC) $(CFLAGS) -DUTS_MACHINE='"$(ARCH)"' -c -o init/version.o init/version.c
 
@@ -375,5 +389,5 @@
        rm -f core `find . -type f -name 'core' -print`
        rm -f core `find . -name '.*.flags' -print`
-       rm -f vmlinux System.map
+       rm -f vmlinux System.map include/linux/config_data.h
        rm -f .tmp*
        rm -f drivers/char/consolemap_deftbl.c drivers/video/promcon_tbl.c
@@ -406,5 +420,5 @@
        rm -f .depend `find . -name .depend -print`
        rm -f core `find . -size 0 -print`
-       rm -f .hdepend scripts/mkdep scripts/split-include
+       rm -f .hdepend scripts/mkdep scripts/split-include scripts/bin2c
        rm -f $(TOPDIR)/include/linux/modversions.h
        rm -rf $(TOPDIR)/include/linux/modules
@@ -488,2 +502,5 @@
 scripts/split-include: scripts/split-include.c
        $(HOSTCC) $(HOSTCFLAGS) -o scripts/split-include scripts/split-include.c
+
+scripts/bin2c: scripts/bin2c.c
+       $(HOSTCC) $(HOSTCFLAGS) -o scripts/bin2c scripts/bin2c.c

Index: fs/Config.in
--- fs/Config.in.prev
+++ fs/Config.in        Fri Aug  4 18:52:48 2000
@@ -35,4 +35,7 @@
 tristate 'OS/2 HPFS filesystem support (read only)' CONFIG_HPFS_FS
 bool '/proc filesystem support' CONFIG_PROC_FS
+if [ "$CONFIG_PROC_FS" = "y" ] ; then
+       bool '    /proc/config.gz (kernel configuration)' CONFIG_PROC_CONFIG
+fi
 if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
   # It compiles as a module for testing only.  It should not be used

Index: fs/proc/array.c
--- fs/proc/array.c.prev
+++ fs/proc/array.c     Fri Aug  4 18:52:48 2000
@@ -415,4 +415,15 @@ static int get_version(char * buffer)
 }
 
+#ifdef CONFIG_PROC_CONFIG
+static int get_proc_config(char *buffer)
+{
+       extern char *kernel_config_data;
+       extern int kernel_config_data_size;
+
+       memcpy(buffer, kernel_config_data, kernel_config_data_size);
+       return kernel_config_data_size;
+}
+#endif
+
 static int get_cmdline(char * buffer)
 {
@@ -1461,4 +1472,9 @@ static long get_root_array(char * page, 
                        return get_stram_list(page);
 #endif
+#ifdef CONFIG_PROC_CONFIG
+               case PROC_CONFIG:
+                       return get_proc_config(page);
+#endif
+
        }
        return -EBADF;

Index: fs/proc/root.c
--- fs/proc/root.c.prev
+++ fs/proc/root.c      Fri Aug  4 18:52:48 2000
@@ -691,4 +691,11 @@ static struct proc_dir_entry proc_root_p
 };
 #endif
+#ifdef CONFIG_PROC_CONFIG
+static struct proc_dir_entry proc_root_config = {
+  PROC_CONFIG, 9, "config.gz",
+  S_IFREG | S_IRUGO, 1, 0, 0,
+  0, &proc_array_inode_operations
+};
+#endif
 
 __initfunc(void proc_root_init(void))
@@ -771,5 +778,7 @@ __initfunc(void proc_root_init(void))
        proc_device_tree_init();
 #endif
-
+#ifdef CONFIG_PROC_CONFIG
+       proc_register(&proc_root, &proc_root_config);
+#endif
        proc_bus = create_proc_entry("bus", S_IFDIR, 0);
 }

Index: init/version.c
--- init/version.c.prev
+++ init/version.c      Fri Aug  4 18:52:48 2000
@@ -7,8 +7,12 @@
  */
 
+#include <linux/config.h>
 #include <linux/uts.h>
 #include <linux/utsname.h>
 #include <linux/version.h>
 #include <linux/compile.h>
+#ifdef CONFIG_PROC_CONFIG
+#include <linux/config_data.h>
+#endif
 
 #define version(a) Version_ ## a

Index: scripts/bin2c.c
--- /dev/null   Tue May  9 16:53:16 2000
+++ scripts/bin2c.c     Fri Aug  4 18:52:48 2000
@@ -0,0 +1,23 @@
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+       int ch,total=0;
+
+       if(argc>1) printf("const char *%s %s=\n",argv[1],argc>2?argv[2]:"");
+
+       do {
+               printf("\t\"");
+               while((ch=getchar())!=EOF)
+               {
+                       total++;
+                       printf("\\x%02x",ch);
+                       if(total%16==0) break;
+               }
+               printf("\"\n");
+       } while(ch!=EOF);
+
+       if(argc>1) printf("\t;\n\nconst int %s_size = %d;\n",argv[1],total);
+
+       return 0;
+}

-- 
Chip Salzenberg              - a.k.a. -              <[EMAIL PROTECTED]>
"I wanted to play hopscotch with the impenetrable mystery of existence,
    but he stepped in a wormhole and had to go in early."  // MST3K
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to