如何准备QTCreator为linux驱动&内核开发。

问题描述 投票:10回答:4

我尝试了几个IDEs在Linux上开发驱动程序在C.QtCreator适合我.我需要的IDE只是为intellisence(codecompletion,跳转到函数的点击...等)更快的编码。

有没有人配置QTCreator来满足这样的需求.例如,我必须做什么来获得一个结构的intellisence?

regardscamelord.

linux qt-creator
4个回答
7
投票

更好的办法是用 "Import Existing Project "导入linux源代码,添加ARCH所需的所有文件,创建后编辑.includes文件,删除所有列出的include目录。

然后添加一些linux使用的文件。

include
arch/<ARCH>/include
arch/<ARCH>/mach-<MACH>/include
arch/<ARCH>/<PLATFORM>/include

现在编辑.config,这是最重要的部分,添加如下内容。

#define __KERNEL__
#define __arm__
#define __LINUX_ARM_ARCH__ 7

#include <linux/kconfig.h>

这是#include,它带来了所有你最想要的autoconf东西。

做一个 make V=1 来看看 Kernel build 使用的标准定义。

如果你使用的是交叉编译器,在 "Build & Run "编译器选项卡中照常设置。


7
投票

我也有同样的问题,我找到了一个解决方案,如何在Ubuntu中准备Qt Creator到linux Kernel开发。

准备好包含路径。

  1. 创建非Qt项目(C计划项目)。
  2. 添加你的文件到项目中。
  3. 下载你的linux-headers。在Ubuntu 14.04中 sudo apt-get install linux-headers-$(uname -r)
  4. 配置你的*.pro文件。

    TEMPLATE = app
    CONFIG += console
    CONFIG -= app_bundle
    CONFIG -= qt
    
    ARCH=arm64
    SRC_PROJECT_PATH = /home/user/my_LKM_project
    LINUX_HEADERS_PATH = /usr/src/linux-headers-$$system(uname -r)
    
    SOURCES += $$system(find -L $$SRC_PROJECT_PATH -type f -name "*.c" -o -name "*.S" )
    HEADERS += $$system(find -L $$SRC_PROJECT_PATH -type f -name "*.h" )
    OTHER_FILES += $$system(find -L $$SRC_PROJECT_PATH -type f -not -name "*.h" -not -name "*.c" -not -name "*.S" )
    
    INCLUDEPATH += $$system(find -L $$SRC_PROJECT_PATH -type d)
    INCLUDEPATH += $$system(find -L $$LINUX_HEADERS_PATH/include -type d)
    INCLUDEPATH += $$system(find -L $$LINUX_HEADERS_PATH/arch/$$ARCH/include -type d)
    

构建。

  1. 创建Makefile
  2. 在Qt Creator中进入 "项目",取消设置 "Shadow build"
  3. 在 "构建步骤 "中删除所有项目,添加 "make "项目。在 "make "项目的第一个字段中设置make,在第二个字段中设置Makefile的命令。你也可以设置你的编译脚本。

3
投票

我找到了答案 此处. 要实现这一点,你需要添加

QMAKE_CXXFLAGS = -I/usr/src/linux-3.1.8-1-ARCH/include
QMAKE_CFLAGS = -I/usr/src/linux-3.1.8-1-ARCH/include

到所有用于构建内核模块的.pro文件。


0
投票

我不允许发表评论,所以我在这里对RedEyed的回答加个评论。我必须把引号转义,否则我从find命令中得到一个错误信息。

SOURCES += $$system(find -L $$SRC_PROJECT_PATH -type f -name \"*.c\" -o -name \"*.S\" )
© www.soinside.com 2019 - 2024. All rights reserved.