2009年2月4日水曜日

カーネルコンフィグどこだっけ?(Linux 2.6系)

忘れるのでメモ
 

CONFIG_IKCONFIG と CONFIG_IKCONFIG_PROC を有効にしてカーネルをビルドしている場合は、
"/proc/config" か "/proc/config.gz" に稼働中カーネルのコンフィグが出力されている。
 
zcat なり cat で見れる。
 
 

カーネルをyumで管理している場合は IKCONFIG は無効なので(CentOS5.2だとそう)、まず現在動作しているカーネルの開発用パッケージを入れる必要がある。
 
要は "kernel-devel" をyum install したらいい。
 

"/usr/src/kernels/{現在のカーネルバージョン}/" ディレクトリにある ".config" にカーネルのコンフィグが記述されている、と。
 
 


とにかくカーネルイメージからコンフィグ状況を取り出したいというときは丁寧に解説しているサイトにリンクさせていただく。
カーネルのコンフィグを知る方法 < < アジアのペンギン
kernelイメージから設定情報を取り出す < < IRORI.ORG

 
 




追記:折角なのでその辺のカーネルソースを見てみよう、"kernel/config.c" かな?
 
".config" にある理由と、フラグ立てたら"config.gz" 作るぜ、という事がほのかに匂う。まあはっきり言って全然わかんないが。
 

[sourcecode language='c']/*
* kernel/configs.c
* Echo the kernel .config file used to build the kernel
*
* Copyright (C) 2002 Khalid Aziz
* Copyright (C) 2002 Randy Dunlap
* Copyright (C) 2002 Al Stone
* Copyright (C) 2002 Hewlett-Packard Company
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
* NON INFRINGEMENT. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include
#include

#include

#include

#include

#include

/**************************************************/
/* the actual current config file */

/*
* Define kernel_config_data and kernel_config_data_size, which contains the
* wrapped and compressed configuration file. The file is first compressed
* with gzip and then bounded by two eight byte magic numbers to allow
* extraction from a binary kernel image:
*
* IKCFG_ST
*
* IKCFG_ED
*/
#define MAGIC_START "IKCFG_ST"
#define MAGIC_END "IKCFG_ED"
#include "config_data.h"


#define MAGIC_SIZE (sizeof(MAGIC_START) - 1)
#define kernel_config_data_size \
(sizeof(kernel_config_data) - 1 - MAGIC_SIZE * 2)

#ifdef CONFIG_IKCONFIG_PROC

static ssize_t
ikconfig_read_current(struct file *file, char __user *buf,
size_t len, loff_t * offset)
{
return simple_read_from_buffer(buf, len, offset,
kernel_config_data + MAGIC_SIZE,
kernel_config_data_size);
}

static const struct file_operations ikconfig_file_ops = {
.owner = THIS_MODULE,
.read = ikconfig_read_current,
};

static int __init ikconfig_init(void)
{
struct proc_dir_entry *entry;

/* create the current config file */
entry = proc_create("config.gz", S_IFREG | S_IRUGO, NULL,
&ikconfig_file_ops);
if (!entry)
return -ENOMEM;

entry->size = kernel_config_data_size;

return 0;
}

static void __exit ikconfig_cleanup(void)
{
remove_proc_entry("config.gz", NULL);
}

module_init(ikconfig_init);
module_exit(ikconfig_cleanup);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Randy Dunlap");
MODULE_DESCRIPTION("Echo the kernel .config file used to build the kernel");

#endif /* CONFIG_IKCONFIG_PROC */[/sourcecode]