11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * kernel/configs.c 31da177e4SLinus Torvalds * Echo the kernel .config file used to build the kernel 41da177e4SLinus Torvalds * 51da177e4SLinus Torvalds * Copyright (C) 2002 Khalid Aziz <khalid_aziz@hp.com> 6f4b09ebcSAdrian Bunk * Copyright (C) 2002 Randy Dunlap <rdunlap@xenotime.net> 71da177e4SLinus Torvalds * Copyright (C) 2002 Al Stone <ahs3@fc.hp.com> 81da177e4SLinus Torvalds * Copyright (C) 2002 Hewlett-Packard Company 91da177e4SLinus Torvalds * 101da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or modify 111da177e4SLinus Torvalds * it under the terms of the GNU General Public License as published by 121da177e4SLinus Torvalds * the Free Software Foundation; either version 2 of the License, or (at 131da177e4SLinus Torvalds * your option) any later version. 141da177e4SLinus Torvalds * 151da177e4SLinus Torvalds * This program is distributed in the hope that it will be useful, but 161da177e4SLinus Torvalds * WITHOUT ANY WARRANTY; without even the implied warranty of 171da177e4SLinus Torvalds * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 181da177e4SLinus Torvalds * NON INFRINGEMENT. See the GNU General Public License for more 191da177e4SLinus Torvalds * details. 201da177e4SLinus Torvalds * 211da177e4SLinus Torvalds * You should have received a copy of the GNU General Public License 221da177e4SLinus Torvalds * along with this program; if not, write to the Free Software 231da177e4SLinus Torvalds * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 241da177e4SLinus Torvalds */ 251da177e4SLinus Torvalds 261da177e4SLinus Torvalds #include <linux/kernel.h> 271da177e4SLinus Torvalds #include <linux/module.h> 281da177e4SLinus Torvalds #include <linux/proc_fs.h> 291da177e4SLinus Torvalds #include <linux/seq_file.h> 301da177e4SLinus Torvalds #include <linux/init.h> 317c0f6ba6SLinus Torvalds #include <linux/uaccess.h> 321da177e4SLinus Torvalds 331da177e4SLinus Torvalds /* 34*13610aa9SMasahiro Yamada * "IKCFG_ST" and "IKCFG_ED" are used to extract the config data from 35*13610aa9SMasahiro Yamada * a binary kernel image or a module. See scripts/extract-ikconfig. 361da177e4SLinus Torvalds */ 37*13610aa9SMasahiro Yamada asm ( 38*13610aa9SMasahiro Yamada " .pushsection .rodata, \"a\" \n" 39*13610aa9SMasahiro Yamada " .ascii \"IKCFG_ST\" \n" 40*13610aa9SMasahiro Yamada " .global kernel_config_data \n" 41*13610aa9SMasahiro Yamada "kernel_config_data: \n" 42*13610aa9SMasahiro Yamada " .incbin \"kernel/config_data.gz\" \n" 43*13610aa9SMasahiro Yamada " .global kernel_config_data_end \n" 44*13610aa9SMasahiro Yamada "kernel_config_data_end: \n" 45*13610aa9SMasahiro Yamada " .ascii \"IKCFG_ED\" \n" 46*13610aa9SMasahiro Yamada " .popsection \n" 47*13610aa9SMasahiro Yamada ); 481da177e4SLinus Torvalds 491da177e4SLinus Torvalds #ifdef CONFIG_IKCONFIG_PROC 501da177e4SLinus Torvalds 51*13610aa9SMasahiro Yamada extern char kernel_config_data; 52*13610aa9SMasahiro Yamada extern char kernel_config_data_end; 53*13610aa9SMasahiro Yamada 541da177e4SLinus Torvalds static ssize_t 551da177e4SLinus Torvalds ikconfig_read_current(struct file *file, char __user *buf, 561da177e4SLinus Torvalds size_t len, loff_t * offset) 571da177e4SLinus Torvalds { 5885badbdfSAkinobu Mita return simple_read_from_buffer(buf, len, offset, 59*13610aa9SMasahiro Yamada &kernel_config_data, 60*13610aa9SMasahiro Yamada &kernel_config_data_end - 61*13610aa9SMasahiro Yamada &kernel_config_data); 621da177e4SLinus Torvalds } 631da177e4SLinus Torvalds 6415ad7cdcSHelge Deller static const struct file_operations ikconfig_file_ops = { 651da177e4SLinus Torvalds .owner = THIS_MODULE, 661da177e4SLinus Torvalds .read = ikconfig_read_current, 676038f373SArnd Bergmann .llseek = default_llseek, 681da177e4SLinus Torvalds }; 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds static int __init ikconfig_init(void) 711da177e4SLinus Torvalds { 721da177e4SLinus Torvalds struct proc_dir_entry *entry; 731da177e4SLinus Torvalds 741da177e4SLinus Torvalds /* create the current config file */ 75c33fff0aSDenis V. Lunev entry = proc_create("config.gz", S_IFREG | S_IRUGO, NULL, 76c33fff0aSDenis V. Lunev &ikconfig_file_ops); 771da177e4SLinus Torvalds if (!entry) 781da177e4SLinus Torvalds return -ENOMEM; 791da177e4SLinus Torvalds 80*13610aa9SMasahiro Yamada proc_set_size(entry, &kernel_config_data_end - &kernel_config_data); 811da177e4SLinus Torvalds 821da177e4SLinus Torvalds return 0; 831da177e4SLinus Torvalds } 841da177e4SLinus Torvalds 851da177e4SLinus Torvalds static void __exit ikconfig_cleanup(void) 861da177e4SLinus Torvalds { 87c74c120aSAlexey Dobriyan remove_proc_entry("config.gz", NULL); 881da177e4SLinus Torvalds } 891da177e4SLinus Torvalds 901da177e4SLinus Torvalds module_init(ikconfig_init); 911da177e4SLinus Torvalds module_exit(ikconfig_cleanup); 921da177e4SLinus Torvalds 93626a0312SStephen Boyd #endif /* CONFIG_IKCONFIG_PROC */ 94626a0312SStephen Boyd 951da177e4SLinus Torvalds MODULE_LICENSE("GPL"); 961da177e4SLinus Torvalds MODULE_AUTHOR("Randy Dunlap"); 971da177e4SLinus Torvalds MODULE_DESCRIPTION("Echo the kernel .config file used to build the kernel"); 98