[Patch] support for /proc/.config (against 2.2.3)

Tigran Aivazian (tigran@ocston.org)
Fri, 12 Mar 1999 09:19:15 -0800 (PST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-851401618-921259155=:7721
Content-Type: TEXT/PLAIN; charset=US-ASCII

Dear Everyone,

Many people (on various wishlists) requested this feature so I implemented
it.

Features:

o Correct size of /proc/.config file and binary identical to
/usr/src/linux/.config:

o kernel/dconfig.c #includes "dconfig_buf.c" which is generated
on the fly by new scripts/mkdconfig.sh bash script.

o imho, a useful thing although eats about 10K of memory
(The possible uses are for those who (like me) keep 20-30 different
kernels ready to boot but only 6-7 sets of complete source so it is hard
to know which one was compiled with which options).

If you decide to give it a try, please do
chmod 0755 scripts/mkdconfig.sh after applying the patch because diff -urN
does not seem to store mode info so patch(1) makes it not executable.

If nobody objects to it being in the mainstream kernel I will send this
patch to Linus.

Regards,
Tigran.

PS. Having learned how to maintain the correct size of /proc files
(looking at mtrr) I intend to try and do it for a few more files.

Here is a copy for those too lazy to gunzip attachment and yet curious
enough:

diff -urN linux/Makefile 223-dconfig/Makefile
--- linux/Makefile Thu Feb 25 00:30:59 1999
+++ 223-dconfig/Makefile Fri Mar 12 16:33:44 1999
@@ -223,17 +223,21 @@

oldconfig: symlinks
$(CONFIG_SHELL) scripts/Configure -d arch/$(ARCH)/config.in
+ scripts/mkdconfig.sh

xconfig: symlinks
$(MAKE) -C scripts kconfig.tk
wish -f scripts/kconfig.tk
+ scripts/mkdconfig.sh

menuconfig: include/linux/version.h symlinks
$(MAKE) -C scripts/lxdialog all
$(CONFIG_SHELL) scripts/Menuconfig arch/$(ARCH)/config.in
+ scripts/mkdconfig.sh

config: symlinks
$(CONFIG_SHELL) scripts/Configure arch/$(ARCH)/config.in
+ scripts/mkdconfig.sh

include/config/MARKER: scripts/split-include include/linux/autoconf.h
scripts/split-include include/linux/autoconf.h include/config
@@ -376,6 +380,7 @@
rm -f $(TOPDIR)/include/linux/modversions.h
rm -rf $(TOPDIR)/include/linux/modules
rm -rf modules
+ rm -f kernel/dconfig_buf.c

distclean: mrproper
rm -f core `find . \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
diff -urN linux/include/linux/proc_fs.h 223-dconfig/include/linux/proc_fs.h
--- linux/include/linux/proc_fs.h Mon Mar 8 23:51:59 1999
+++ 223-dconfig/include/linux/proc_fs.h Fri Mar 12 16:33:44 1999
@@ -52,7 +52,8 @@
PROC_STRAM,
PROC_SOUND,
PROC_MTRR, /* whether enabled or not */
- PROC_FS
+ PROC_FS,
+ PROC_DCONFIG
};

enum pid_directory_inos {
diff -urN linux/init/main.c 223-dconfig/init/main.c
--- linux/init/main.c Thu Feb 25 00:27:54 1999
+++ 223-dconfig/init/main.c Fri Mar 12 17:10:43 1999
@@ -79,6 +79,10 @@
extern void filescache_init(void);
extern void signals_init(void);

+#ifdef CONFIG_PROC_FS
+extern void dconfig_init(void);
+#endif
+
extern void device_setup(void);
extern void binfmt_setup(void);
extern void free_initmem(void);
@@ -1293,6 +1297,10 @@
real_root_mountflags = root_mountflags;
if (initrd_start && mount_initrd) root_mountflags &= ~MS_RDONLY;
else mount_initrd =0;
+#endif
+
+#ifdef CONFIG_PROC_FS
+ dconfig_init();
#endif

/* Set up devices .. */
diff -urN linux/kernel/Makefile 223-dconfig/kernel/Makefile
--- linux/kernel/Makefile Wed May 6 19:01:46 1998
+++ 223-dconfig/kernel/Makefile Fri Mar 12 16:33:44 1999
@@ -21,6 +21,10 @@
O_OBJS += kmod.o
endif

+ifeq ($(CONFIG_PROC_FS),y)
+O_OBJS += dconfig.o
+endif
+
ifeq ($(CONFIG_MODULES),y)
OX_OBJS += ksyms.o
endif
diff -urN linux/kernel/dconfig.c 223-dconfig/kernel/dconfig.c
--- linux/kernel/dconfig.c Thu Jan 1 01:00:00 1970
+++ 223-dconfig/kernel/dconfig.c Fri Mar 12 16:33:44 1999
@@ -0,0 +1,96 @@
+/*
+ * /proc/.config driver - a snapshot of /usr/src/linux/.config
+ *
+ * Copyright (C) 1999 Tigran Aivazian
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * Change History
+ *
+ * v1.0
+ * Tigran Aivazian <tigran@sco.com> : Initial version
+ *
+ */
+
+#include <linux/proc_fs.h>
+#include <linux/fs.h>
+#include <linux/init.h>
+
+#include <asm/uaccess.h>
+
+#include "dconfig_buf.c"
+
+static int dconfig_len; /* set in dconfig_init() */
+static ssize_t dconfig_read(struct file *, char *, size_t, loff_t *);
+
+static struct file_operations dconfig_fops =
+{
+ NULL, /* llseek */
+ dconfig_read, /* read */
+ NULL, /* write */
+ NULL, /* readdir */
+ NULL, /* poll */
+ NULL, /* ioctl */
+ NULL, /* mmap */
+ NULL, /* open */
+ NULL, /* flush */
+ NULL, /* release */
+ NULL, /* fsync */
+ NULL, /* fasync */
+ NULL, /* check_media_change */
+ NULL, /* revalidate */
+ NULL, /* lock */
+};
+
+static struct inode_operations proc_dconfig_inops = {
+ &dconfig_fops, /* default property file-ops */
+ NULL, /* create */
+ NULL, /* lookup */
+ NULL, /* link */
+ NULL, /* unlink */
+ NULL, /* symlink */
+ NULL, /* mkdir */
+ NULL, /* rmdir */
+ NULL, /* mknod */
+ NULL, /* rename */
+ NULL, /* readlink */
+ NULL, /* follow_link */
+ NULL, /* readpage */
+ NULL, /* writepage */
+ NULL, /* bmap */
+ NULL, /* truncate */
+ NULL /* permission */
+};
+
+
+static struct proc_dir_entry proc_root_dconfig = {
+ PROC_DCONFIG, 7, ".config",
+ S_IFREG | S_IRUGO, 1, 0, 0,
+ 0, &proc_dconfig_inops
+};
+
+
+void __init
+dconfig_init(void)
+{
+ proc_root_dconfig.size = dconfig_len = strlen(dconfig_buf);
+ proc_register(&proc_root, &proc_root_dconfig);
+ return 0;
+}
+
+
+static ssize_t
+dconfig_read(struct file *file, char *buf, size_t len, loff_t *pos)
+{
+ if (*pos > dconfig_len)
+ return 0;
+ if (*pos + len > dconfig_len)
+ len = dconfig_len - *pos;
+ if (copy_to_user(buf, dconfig_buf + *pos, len))
+ return -EFAULT;
+ *pos += len;
+ return len;
+}
diff -urN linux/scripts/mkdconfig.sh 223-dconfig/scripts/mkdconfig.sh
--- linux/scripts/mkdconfig.sh Thu Jan 1 01:00:00 1970
+++ 223-dconfig/scripts/mkdconfig.sh Fri Mar 12 16:33:44 1999
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+tmp1=/tmp/dconfig1_$$
+tmp2=/tmp/dconfig2_$$
+
+echo "/* DO NOT EDIT: Automatically generated by scripts/mkdconfig.sh */" > $tmp1
+echo "" >> $tmp1
+echo "static char *dconfig_buf = " >> $tmp1
+echo -n \" >> $tmp1
+echo "\";" > $tmp2
+
+rm -f ./kernel/dconfig_buf.c 2> /dev/null
+cat $tmp1 .config $tmp2 > ./kernel/dconfig_buf.c
+rm -f $tmp1 $tmp2 2> /dev/null

---559023410-851401618-921259155=:7721
Content-Type: APPLICATION/octet-stream; name="dconfig-2.2.3.patch.gz"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SV4.3.96.990312091915.7721A@scofolks.ocston.org>
Content-Description: Support for /proc/.config

H4sICMRK6TYCA2Rjb25maWctMi4yLjMucGF0Y2gAnVh5c+LGEv8bPkXH6/KC
BQjwtcbxlv18rRNjtrBdSaq2ShlLI5ggaXgzkr0k2Xz21zOS0IHA2edy6ejp
a37d093CYa4L7Ujcg8eC6Ks5JDPqMo9Cv7/XdmweuGyyJNbb7XaJr/Y4jeCa
PkP/ALrdwV53cHAMvePj47phGJVKateCwZAI6PWhdzjY2xvs78cSZ2fQRolW
7wgMde/34OysDnXgXqJkAHLhowMzWYfaduNidH99e2M9fLq6u2uCtAWbh9K8
0KyRoNB2gAh7am43zscXn5pmrKTDgrpRS7n9WaK7I6fK1tdKS8Pzn6+a0L5I
jcAsEQpnuP7K5BTa7tKD3OJ6Qz4NotQWC2wvcqgZY/tChWQ86Ew3+2B6Xx1G
PD4B4nkb8BguDX0/Gv8X7N9tJd1+minn45+vxoOlZjn3WNhOmEpYkSjkSqyD
imrfJ1Ayq9Nv7+iwdQjG3odu60gnX034KrLbjcfR58vbcdMsavO5k0RLag8U
t9jIHnlUZowpwUjszKgIqGcm8FjPkduxFUIOk6HtURIMwBdzwedULH2zOWL+
u8sCBzrwpQHtgPgU3u92uGCT99DmGUXQPwqEf97Dl7pTKgFFl9GYbbm4u8Jh
XsOTKxBrOGpDHujTDx+gvzc46K2tF+sUbCwfB32Mm4HXD3H0Po9HF9bD4/h8
2Fq+jZ7uL5dvw8fxuAXmLrxOaTilAmhAnj3qABcQ8BB2zXo75rx+wCglT630
8TI+C3X4dqLChCfNhzlzLIcJaodcLCwWcAl/VYDMQtMnLOjYpV0v6QUwl9RS
we0fDQ721wGYCeVBOxr0uoP9vQy0o2OV83jtdTVq9GuIaQgvnDmgKra0iT2l
ltLXUMTmSZFHsklAPFlkqBvvmOtQF5JqscQwL5nmeV7SeEcDRKtuFI049IXZ
1JI0jOaVXjyzwPXDDQyuoPEmfOqnDGr7vf7xngIA70cpBDVBiWcJzkPL51EQ
uh6ZSDiFEgUt1JgLDaVVOJYMiQhhZwc0hxVTm2Uh2DmFf4YP1vhydH/3m1JB
PUkLMnDazQOxDspaAT+130QEU7GGOf1AQ4jmCXQSOh2VzuVMTEpOZeMvreUy
srRS+wWPzJAsAA4xrwbd3mBfPRx/WMnKsuDmaaCnAoPXJCwja/Sfnx7AOIUZ
Vs4OVycu3q/BXPpfaCybU4JRs7Vo1o1MLO07HPMwzbKS5HB0+XR3FUvC6NdY
VJvEJigzm2twTC3YVbteLq4iuVzSB/wnEgD0AHHEM97tIiJH3XVQZpIbsey2
upjjreNDhaSB2VE3YBd0YTU7yXzgCIbtDNpAQAZkLqdYAbkLZiSFKYWd1OKE
W8lrHRd8vsBWMw2hcdHUBuGRTQRu4Zy9kD8ZCZasj1MmAf/VWQTJ3fCVCHoC
Cx6BjfyCqkYn2HMUYt8OgQSOiYUYY83cBRK0jihw0Ecs1oBn25fKQfVyc/8E
d+xZELGAGxpQQTz4HD17zEayTQM8YkRqBXNFlVPM2OeFFr1W3jwk3sA1HkSH
hNjTT4Ay3RSSHg/9xJhWk2htqVbRIKHahAA+V4JN9HwBHgkz2Y6WifGakmBC
4RNuFTtEik3tpdfp6ocSePBjqAln0uYIvf8RBrVbPPA4+6XKUx1mXCySwefH
Uuv8uLq2hqzqiV7ILxHpmxGxsZLI8tpWYWDZUmtYC0OEngXhssp7FBHFxMMS
jfRi8W9q5xMhKdmf1MoEsRg7DcyLyA51Q4LdFthTTHS8x6wt8Ljrosiu6iCZ
okzGUjOTjqpc6nX5HIt63fgLS+n9091dq6aqpofVmM6g8Kecq+XdaSlO9QBQ
wZkpexUMU3kji9KC88Imljn3vDcMMW6H3mYW3yfzN7QgSMEbLK4X4dfOGzvC
UVXSjVrkIrDfMERWeUosOJbYM8vHqkEsOz5Vq768EI/heaZrtXjcnlVt+ltF
KuE45xRySZ+uLJV1RoFKqJ18lsWGsIeTyAshHuDDhU7MthLJe6Q3hkmBHpfJ
HuczbOgrZPw0WyFGQSU5+ZJboeM3GeZgmSr8Kqo/QxRWean+qlglE6fSootJ
zV+tyjUlNCeTVW36PFWuPKvsLhMxaIFdQDKmI/w+k7qmZ5EuxzoOLRMWDUJs
KvpVz3JJZJNA5z8EWnDUgq2kQW6pz4QH6/Z6fHUDfwM+jZ9uRi3otaCr/nEV
7zurGZQ5pAdXS5fIurE6Lcela8WxjiqKcJovvPiGu8KHRq5Uq1qZSNMJdiMq
GjtLZalnecVaQOCEjTO1mlC/FWFLynbm6WrhVte0eKMHaf0G9Cyr4XMuk62p
4Vq9wsf8ZnCxlncjYzOUogrmGIE8Hm1tJhW2cYSxQm5FEjHQfuVgQq2Kt6V0
N/O221fX5093j0pJbP1UseQwit++rcyKVT+EFEa7yl9Kspmxavnfz42V0v9m
duzt69nx3Q8mfmyZ6BHGPvTnvVMTr+kc2rO2tzW5XyD3NRnHbnvKYQuP4OUI
7kePcHV5+ziA8yjkvkoi4nkLmOjxLYwHtEqsds0tjPK2Mp6qREKJkqRlnGz5
eJ7CCnM7gC+rGr5snaR2+sr5+AeXjln1Mw30P4KJn1pmEHle3cCqE+uCdLjW
WlBbtXiqPJaJeQsa/wfPwL3ZqhUAAA==
---559023410-851401618-921259155=:7721--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/