如何在make menuconfig 界面添加新选项步骤:
1、先在Linux内核源码目录下创建个新目录(哪个位置都行,一般添加新驱动时,都会在 drivers目录下创建,这里为了实验的方便就在 源码目录下创建了)
mkdir hmq_test
2、在新创建的目录下新建几个文件:hello.c Makefile 和 Kconfig
hello.c 文件:
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/kernel.h>
#include <linux/major.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/platform_device.h>
static int __init led_device_init(void)
{
printk("hello enter\n");
return 0;
}
static void __exit led_device_exit(void)
{
printk("hello end\n");
}
module_init(led_device_init);
module_exit(led_device_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("hmq");
Makefile 文件(这里的Makefile 要被顶层的Makefile 所调用,不然这个hello.c 文件就不能被编译到,为了方便,可以把下面那行代码直接放在 drivers/Makefile文件中):
obj-$(CONFIG_HMQTEST) += hello.o
Kconfig 文件:编写完后要在 arch/arm/Kconfig 中被引用才能被配置工具弄成选项
menu "hmq_hello_test"
config HMQTEST #这里不能写成 CONFIG_HMQTEST,不然会弄出个 CONFIG_CONFIG_HMQTEST
tristate "hmq_test"
help
#下面是这个模块的说明,写啥都行
Say Y here if you have memoryless force-feedback input device
such as Logitech WingMan Force 3D, ThrustMaster FireStorm Dual
Power 2, or similar. You will also need to enable hardware-specific
driver.
If unsure, say N.
To compile this driver as a module, choose M here: the
module will be called ff-memless.
endmenu
执行 make menuconfig
配置完成后,可以这样查看是否配置成功了:
然后 make zImage 编译:
编译成功!
如果没有 menu "hmq_hello_test" 和 endmenu 这两行的话就是下面这样,多选项时还是加上好点,免得同一个界面上有太多项
原理说明为啥能通过Konfig文件就能添加一个新选项:
make menuconfig的一些简单语法:
config 是一个关键字,对应的是一个选项配置;
Tristate是表示 < >的,bool是表示[ ]的,string是表示( )的;
[ ] 有两种状态,*代表选中,没有*代表未选中;
选中的意思是对应的选项功能会被编译进内核镜像文件中;
< > 有三种状态,*代表选中,没有*代表未选中,M代表模块;
( ) 存放十进制或十六进制或字符串;
default y表示该选项默认被选择上;
depends on 表示依赖项
help 是帮助信息