研二的实验室生活即将到来,导师安排搞内核开发。由于之前一直习惯于QtCreator,想继续用下去,于是花了一晚上进行配置,记录一下配置过程。
近几年虽然出现了Atom、Sublime Text这样的强大好用的编辑器,可我写代码还是偏向于用IDE(个人喜好,无意引战,vim/emacs大神们尽可以鄙视我)。几年下来,几乎所有主流和非主流的C/C++ IDE我都用过,除了QtCreator之外,还有微软全系列、MingW Developer Studio、CFree、Anjuta、KDevelop、Code::Blocks、CodeLite、Eclipse、CLion…综合速度、自动补全、代码高亮、代码跳转、配置灵活性、跨平台性和个人使用习惯等各个方面,QtCreator绝对算是不二之选了。当然如果是进行Qt开发,那也没什么好选的。
QtCreator也不仅仅局限在Qt程序开发上,稍经配置可以胜任几乎所有C/C++的开发需要。只需要自定义Makefile,就可以利用QtCreator强大的代码编辑和语法分析功能进行内核开发。
以最简单的hello world为例。模块名为khello。
选择非Qt项目->纯C语言项目,命名为khello。源文件命名为khello.c。
khello.c
:
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("innoink");
MODULE_DESCRIPTION("hello world module");
static int __init khello_init(void)
{
printk(KERN_ERR "hello world!");
return 0;
}
static void __exit khello_exit(void)
{
printk(KERN_EMERG "hello exit!");
}
module_init(khello_init)
module_exit(khello_exit)
在项目目录下新建Makefile。
Makefile
:
TARGET=khello
ifneq ($(KERNELRELEASE),)
obj-m := $(TARGET).o
else
KERNELDIR := /lib/modules/4.0.5-1-ARCH/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
endif
在khello.pro
中加入下面的内容:
DEFINES += __KERNEL__
DEFINES += MODULE
INCLUDEPATH = /lib/modules/4.0.5-1-ARCH/build \
/lib/modules/4.0.5-1-ARCH/build/include \
/lib/modules/4.0.5-1-ARCH/build/arch/x86 \
/lib/modules/4.0.5-1-ARCH/build/arch/x86/include
其中,4.0.5-1-ARCH改成自己的内核版本。
在”项目”中,取消Shadow build的选择,然后在“构建步骤”中删除qmake。
构建项目后,会在项目路径下生成khello.ko。然后用sudo insmod khello.ko
运行就可以了。下面是在虚拟机中的运行结果:
6月20日更新
今下午写了个建立内核项目的wizard,放到 gitcafe上,项目链接:
qtcreator_kdev_wizard
。目前还很简单,项目创建后还需要取消Shadow Build和删除qmake步骤。以后再继续完善。
2016.05.29
gitcafe合并到coding了:https://coding.net/u/innoink/p/qtcreator_kdev_wizard/git