-->

访问IRQ描述阵列的模块内,并且显示操作名称(Accessing IRQ description a

2019-09-16 10:15发布

我编程在C内核模块,其努力访问IRQ描述数组元素和显示这些元件的所有操作名称。

一开始,我以为这irq_desc阵列sonething像宏但编译后,我的理解是不是。 然后我用for_each_irq_desc(IRQ,DESC)功能。 但这次返回的警告:

[/home/samet/Masaüstü/Assignment3/Ass-1.ko]未定义 “irq_to_desc”:警告!

这个警告后,我试图模块用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); 

Answer 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");
}


文章来源: Accessing IRQ description array within a module and displaying action names