Branch data Line data Source code
1 : : /*
2 : : * kernel/configs.c
3 : : * Echo the kernel .config file used to build the kernel
4 : : *
5 : : * Copyright (C) 2002 Khalid Aziz <khalid_aziz@hp.com>
6 : : * Copyright (C) 2002 Randy Dunlap <rdunlap@xenotime.net>
7 : : * Copyright (C) 2002 Al Stone <ahs3@fc.hp.com>
8 : : * Copyright (C) 2002 Hewlett-Packard Company
9 : : *
10 : : * This program is free software; you can redistribute it and/or modify
11 : : * it under the terms of the GNU General Public License as published by
12 : : * the Free Software Foundation; either version 2 of the License, or (at
13 : : * your option) any later version.
14 : : *
15 : : * This program is distributed in the hope that it will be useful, but
16 : : * WITHOUT ANY WARRANTY; without even the implied warranty of
17 : : * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
18 : : * NON INFRINGEMENT. See the GNU General Public License for more
19 : : * details.
20 : : *
21 : : * You should have received a copy of the GNU General Public License
22 : : * along with this program; if not, write to the Free Software
23 : : * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 : : */
25 : :
26 : : #include <linux/kernel.h>
27 : : #include <linux/module.h>
28 : : #include <linux/proc_fs.h>
29 : : #include <linux/seq_file.h>
30 : : #include <linux/init.h>
31 : : #include <asm/uaccess.h>
32 : :
33 : : /**************************************************/
34 : : /* the actual current config file */
35 : :
36 : : /*
37 : : * Define kernel_config_data and kernel_config_data_size, which contains the
38 : : * wrapped and compressed configuration file. The file is first compressed
39 : : * with gzip and then bounded by two eight byte magic numbers to allow
40 : : * extraction from a binary kernel image:
41 : : *
42 : : * IKCFG_ST
43 : : * <image>
44 : : * IKCFG_ED
45 : : */
46 : : #define MAGIC_START "IKCFG_ST"
47 : : #define MAGIC_END "IKCFG_ED"
48 : : #include "config_data.h"
49 : :
50 : :
51 : : #define MAGIC_SIZE (sizeof(MAGIC_START) - 1)
52 : : #define kernel_config_data_size \
53 : : (sizeof(kernel_config_data) - 1 - MAGIC_SIZE * 2)
54 : :
55 : : #ifdef CONFIG_IKCONFIG_PROC
56 : :
57 : : static ssize_t
58 : 0 : ikconfig_read_current(struct file *file, char __user *buf,
59 : : size_t len, loff_t * offset)
60 : : {
61 : 17 : return simple_read_from_buffer(buf, len, offset,
62 : : kernel_config_data + MAGIC_SIZE,
63 : : kernel_config_data_size);
64 : : }
65 : :
66 : : static const struct file_operations ikconfig_file_ops = {
67 : : .owner = THIS_MODULE,
68 : : .read = ikconfig_read_current,
69 : : .llseek = default_llseek,
70 : : };
71 : :
72 : 0 : static int __init ikconfig_init(void)
73 : : {
74 : : struct proc_dir_entry *entry;
75 : :
76 : : /* create the current config file */
77 : : entry = proc_create("config.gz", S_IFREG | S_IRUGO, NULL,
78 : : &ikconfig_file_ops);
79 [ # # ]: 0 : if (!entry)
80 : : return -ENOMEM;
81 : :
82 : 0 : proc_set_size(entry, kernel_config_data_size);
83 : :
84 : 0 : return 0;
85 : : }
86 : :
87 : 0 : static void __exit ikconfig_cleanup(void)
88 : : {
89 : 0 : remove_proc_entry("config.gz", NULL);
90 : 0 : }
91 : :
92 : : module_init(ikconfig_init);
93 : : module_exit(ikconfig_cleanup);
94 : :
95 : : #endif /* CONFIG_IKCONFIG_PROC */
96 : :
97 : : MODULE_LICENSE("GPL");
98 : : MODULE_AUTHOR("Randy Dunlap");
99 : : MODULE_DESCRIPTION("Echo the kernel .config file used to build the kernel");
|