2

プロセス ID が既にわかっているユーザー プロセスの task_struct にアクセスできるカーネル モジュールを実装しようとしています。私はプロセスの task_struct を取得するためにfind_get_pidandを使用しています:pid_task

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/pid.h>
#include <linux/pid_namespace.h>

int init_module( void )
{
//Declaring the variables
    int p_id = 6980;    //6980 is the process ID of my user process
    struct pid *pid_struct;
    struct task_struct *task;

// Trying to access the variables of the p_id
    pid_struct = find_get_pid(p_id);
    task = pid_task(pid_struct, PIDTYPE_PID);

//Printing the info from the task_struct
    printk( KERN_INFO "*** [%d]\n",task->pid);
    return 0;
}

void cleanup_module( void )
{
  return;
}

正常にコンパイルされ、*.ko ファイルを取得していますが、カーネルに挿入しようとすると、エラーが発生します:
insmod: error inserting 'main.ko': -1 Unknown symbol in module
Dmesg から次の出力が返され
main: Unknown symbol find_get_pid (err 0)
ます:誰かが私を助けることができれば本当に感謝しています。

4

2 に答える 2

2

使用したい関数が何と呼ばれているかをよく確認してください。

また、「コアカーネル」(おそらくfrob_task_by_pid_hardおよびその同類を含む) の多くは GPL のみであることを覚えておいてください。したがって、モジュールのライセンスを GPL として宣言しない限り、どこにも行きません。また、モジュールの他のボイラープレート データを記入してください: MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE 少なくとも。

于 2013-04-05T20:01:12.287 に答える