config.c

可以看到这是一个module,在init函数中在proc下建立一个config的node,其提供一个read函数可以读取kernel config中的配置
http://lxr.free-electrons.com/source/kernel/configs.c
 72 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         if (!entry)
 80                 return -ENOMEM;
 81 
 82         proc_set_size(entry, kernel_config_data_size);
 83 
 84         return 0;
 85 }
 86 
 92 module_init(ikconfig_init);


我们看看ikconfig_file_ops 的实现
 66 static const struct file_operations ikconfig_file_ops = {
 67         .owner = THIS_MODULE,
 68         .read = ikconfig_read_current,
 69         .llseek = default_llseek,
 70 };
继续看ikconfig_read_current
 57 static ssize_t
 58 ikconfig_read_current(struct file *file, char __user *buf,
 59                       size_t len, loff_t * offset)
 60 {
 61         return simple_read_from_buffer(buf, len, offset,
 62                                        kernel_config_data + MAGIC_SIZE,
 63                                        kernel_config_data_size);
 64 }
发现原来kernel config都是存在kernel_config_data 数组中,那这个数组又是在哪里赋值的呢?
答案就是在config_data.h 中定义的
在同级的目录下,可以看到config_data.gz是有KCONFIG_CONFIG 经过gzip 压缩的,而KCONFIG_CONFIG 就是kernel的配置文件.


从126行可以看到config_data.h 就是124行动态生成的。


http://lxr.free-electrons.com/source/kernel/Makefile
116 $(obj)/configs.o: $(obj)/config_data.h
117 
118 # config_data.h contains the same information as ikconfig.h but gzipped.
119 # Info from config_data can be extracted from /proc/config*
120 targets += config_data.gz
121 $(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE
122         $(call if_changed,gzip)
123 
124       filechk_ikconfiggz = (echo "static const char kernel_config_data[] __used = MAGIC_START"; cat $< | scripts/basic/bin2c; echo "MAGIC_END;")
125 targets += config_data.h
126 $(obj)/config_data.h: $(obj)/config_data.gz FORCE
127         $(call filechk,ikconfiggz)


所以就可以通过cat proc/config.gz  XXX 来查是否有enable 某个config。


要使能这个module的话,需要CONFIG_IKCONFIG_PROC 这个宏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值