使用QtCreator进行Linux内核开发

19 Jun 2015 | QtCreator, Linux, Kernel | | ˚C

前言

研二的实验室生活即将到来,导师安排搞内核开发。由于之前一直习惯于QtCreator,想继续用下去,于是花了一晚上进行配置,记录一下配置过程。

Why 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强大的代码编辑和语法分析功能进行内核开发。

简单配置QtCreator进行Linux内核开发

以最简单的hello world为例。模块名为khello。

1. 建立项目

选择非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

2. 修改项目文件

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改成自己的内核版本。

3. 配置构建套件

在”项目”中,取消Shadow build的选择,然后在“构建步骤”中删除qmake。

4. 构建并运行

构建项目后,会在项目路径下生成khello.ko。然后用sudo insmod khello.ko运行就可以了。下面是在虚拟机中的运行结果:

khello 运行截图

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


Older · View Archive (22)

test highlight

Newer

关于init_MUTEX()的消失的探索