11

CLion でいくつかの小さな Linux カーネル モジュールを開発したいと考えています。たとえば、次のファイルをコンパイルしたいとします。

スタック.h:

#ifndef _LL_STACK_H
#define _LL_STACK_H
#include <linux/list.h>

typedef struct stack_entry {
    struct list_head lh;
    void *data;
} stack_entry_t;

stack_entry_t* create_stack_entry(void *data);
void delete_stack_entry(stack_entry_t *entry);

void stack_push(struct list_head *stack, stack_entry_t *entry);
stack_entry_t* stack_pop(struct list_head *stack);
#define stack_empty(stack) list_empty((stack))

#define STACK_DATA(stack_entry, data_ptr_type) \
    ((data_ptr_type)(stack_entry)->data)

#define STACK_DATA_RESET(stack_entry, new_data) \
    do { \
        (stack_entry)->data = new_data; \
    } while(0)

#endif //_LL_STACK_H

main.c:

#include <stdio.h>
#include "stack.h"

int main() {
    printf("hello");
    return 0;
}

私のタスクを完了するためにCMakeLists.txtを構成することは可能ですか? いくつかのディレクトリ (linux、include、kernel) を追加しようとしましたが、うまくいきません。

4

3 に答える 3

7

はい、そうです。ただし、カーネル モジュールをビルドするための make ファイルを作成する必要があります。

更新 1: Linux カーネル モジュールの作成には QtCreator をお勧めします。私のマニュアルを参照してください

更新 2: eclipse cdt もお勧めします。Linux カーネル用に準備する方法については、 Eclipse のマニュアルを参照してください。

于 2015-02-24T08:55:51.347 に答える
1

clion を介して Linux カーネルを探索するために使用するアプローチは次のとおりです。

  • compile_commands.jsonインターセプトされたビルドを使用してカーネル用の を作成する
  • ruby スクリプトを使用compile_commands.jsonして clion フレンドリーに変換するCMakeLists.txt

これにより、コード ナビゲーションと合理的な編集エクスペリエンスの両方が可能になります。

詳細については、https://github.com/habemus-papadum/kernel-grokを参照してください。

于 2017-11-08T14:27:50.467 に答える