错误

1、下述编写了一个模块,其中有一个中断函数,当内核接收到某个IRQ上的一个中断时会调用它。
其中注意第23行和第35行,init和exit前面均为两个英文下划线 "__"。详见http://www.kerneltravel.net/?p=86
#include<linux/module.h>
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/interrupt.h>
 
static int irq;
static char *interface;
 
module_param(interface,charp,0644);
module_param(irq,int,0644);
 
static irqreturn_t my_interrupt(int irq,void *dev)
{
static int mycount = 0;
if(mycount < 10)
{
printk("Interrupt! ");
mycount++;
}
return IRQ_NONE;
}
 
static int __init myirqtest_init(void)
{
printk("module worked!! ");
if(request_irq(irq,&my_interrupt,IRQF_SHARED,interface,&irq))
{
printk(KERN_ERR "myirqtest:cannot register IRQ %d ",irq);
return -EIO;
}
printk("%s IRQ %d succeeded ",interface,irq);
return 0;
}
 
static void __exit myirqtest_exit(void)
{
printk("Unloading my module ");
free_irq(irq,&irq);
printk("Freeing IRQ %d ",irq);
return;
}
 
module_init(myirqtest_init);
module_exit(myirqtest_exit);
MODULE_LICENSE("GPL");
 
2 、.ko后缀为内核对象,
 
3、vnc无法进入到gnome图形界面,xshell连接时运行runlevel查看当前系统的运行级别,显示为N 3则为字符界面启动,显示为N 5则为图形界面启动,如果是 N 5则用init 3命令临时修改当前级别为5后再利用xshell重启开vnc端口
 
4、error: implicit declaration of function ‘kthread_run’ 
未包含kthread_run所在的头文件
 
5、insmod模块时出现"-1 Unknown symbol in module"错误
某个函数不是当前内核版本函数,可能已被删除
 
6、warning: control reaches end of non-void function [-Wreturn-type]
需要有返回值的函数未加上返回值
 
7、error: redefinition of ‘__inittest’
error: redefinition of ‘init_module’
重复定义,module_init或者是module_exit是否定义了两次
 
8、libvirtd -d报错:
libvirtd: error: Unable to obtain pidfile. Check /var/log/messages or run without --daemon for more info.
可能是由于libvirt启动文件还存在,需要先删除:rm /var/run/libvirtd.pid
原文地址:https://www.cnblogs.com/scu-cjx/p/6878144.html