2012-04-07 3 views
2

私はIRQ記述配列要素へのアクセスとこれらの要素のすべてのアクション名の表示に苦労しているCでカーネルモジュールをプログラミングしています。モジュール内のIRQ記述配列へのアクセスとアクション名の表示

最初は、このirq_desc配列はマクロのようなものだと思っていましたが、コンパイルした後は理解できませんでした。それからfor_each_irq_desc(irq、desc)関数を使いました。今回は警告を返しました:

警告: "irq_to_desc" [/home/samet/Masaüstü/Assignment3/Ass-1.ko] undefined!

この警告の後、私はカーネルにエラーメッセージがポップ今回モジュールにinsmodしようとした:

insmodの:エラーが「./Ass-1.ko」を挿入:-1モジュール

における未知のシンボルを

これ以降、このプロセスに関連していると思われるすべてのヘッダーファイルが含まれていますが、何も変更されていません。それは非常に短いので

私はコードを添付しています:

#include <linux/module.h> 
#include <linux/kernel.h> 
#include <linux/init.h>  
#include <linux/sched.h>  
#include <linux/irq.h> 
#include <linux/irqdesc.h> 
#include <linux/irqnr.h> 

struct task_struct* p; 
struct irq_desc* irqElement; 
int irq, desc; 

static int __init ass_1_init(void) 
{ 
    printk(KERN_INFO "Ass-1 module is starting...\n"); 

    for_each_process(p){printk("%d\t%s\n", p->pid, p->comm);} 

    for_each_irq_desc(irq, irqElement){printk("%p\n", irqElement);} 

    return 0; 
} 

static void __exit ass_1_exit(void) 
{ 
    printk(KERN_INFO "Ass-1 module is finishing...\n"); 
} 

module_init(ass_1_init); 
module_exit(ass_1_exit); 
+0

どのカーネルバージョンを使用していますか? –

+3

質問8251226を参照してください。 'モジュールでirq_to_desc()を使用できるとは思いません。' – hellork

+0

@KristofProvost 2.6.37.6 –

答えて

-1

を私はあなたが本当に自分の能力を過大評価だと思います。これは私の初めてのhello worldカーネルモジュールです。しかし、何かがあれば、経験はプログラマーが王様であることを教えてくれました。何かが必要な場合は、定義してください。

カーネルヘッダーは、irqをモジュールに公開したくないので、明らかです。これはサポートされていない可能性があります。これは一般的には悪い考えかもしれません。しかし、私たちはそれを気にしません。私たちはハッカーです!

#include <linux/module.h> 
#include <linux/kernel.h> 
#include <linux/init.h>  
#include <linux/sched.h>  
#include <linux/irq.h> 
#include <linux/irqnr.h> 
#include <linux/irqdesc.h> 

#define irq_to_desc(irq)  (&irq_desc[irq]) 
#define nr_irqs NR_IRQS 
struct irq_desc irq_desc[NR_IRQS]; 

struct irq_desc *irqElement; 
int irq; 
int init_module(void) 
{ 
    printk(KERN_INFO "I HAZ MODULE\n"); 
    for_each_irq_desc(irq, irqElement){printk("%p\n", irqElement);} 
    return 0; 
} 

void cleanup_module(void) 
{ 
    printk(KERN_INFO "BAI MODULE!!!1\n"); 
} 
+1

これは未定義のシンボルの問題を解決する一方で、カーネルで使われているものではなく、あなた自身の 'struct irq_desc'の内容を表示します。おそらくあなたが望むものではないでしょう。 –

関連する問題