最近学习Linux中的驱动,发现一个问题,在我自己电脑上可以正常使用的驱动程序,复制发送到别人的虚拟机上在insmod时出现killed,查了站里的一些相似问题说是结构体指针需要初始化,但是我这个驱动程序并没有定义结构体指针,而且为什么我可以运行而别人不行呢,我们用的都是同一个镜像文件
#include "linux/module.h"
#include "linux/kernel.h"
#include "linux/init.h"
#include "linux/cdev.h"
#include "linux/fs.h"
#include <linux/mm.h>
#include "asm/io.h"
#define GPFDAT 0x56000054
#define GPFCON 0x56000050
static volatile unsigned int *gpfcon;
static volatile unsigned int *gpfdat;
MODULE_LICENSE("GPL");
struct file_operations myops;
struct cdev ad_cdev ;
int major = 100;
int minor = 1;
dev_t mydev;
int k = 0;
int myopen(struct inode *pinode, struct file *pfile)
{
*gpfdat &= (~(7 << 4));// led off
k ++;
printk(KERN_INFO "myopen function run k = %d\n",k);
return 0;
}
int myclose(struct inode *pinode, struct file *pfile)
{
*gpfdat |= 7 << 4;// led off
k ++;
printk(KERN_INFO "myclose function run k = %d\n",k);
return 0;
}
void init(void)
{
int ret;
mydev = MKDEV(major,minor);
ret = register_chrdev_region(mydev,1,"ad");
if(ret == -1)
{
printk(KERN_INFO "mydev can't use\n");
ret = alloc_chrdev_region(&mydev,1,1,"ad");
if(ret == 0)
{
printk(KERN_INFO "alloc: major = %d\n",MAJOR(mydev));
}
else
{
printk(KERN_INFO "alloc error\n");
return ;
}
}
else
{
printk(KERN_INFO "mydev can use\n");
}
myops.open = myopen;
myops.release = myclose;
cdev_init(&ad_cdev,&myops);
cdev_add(&ad_cdev,mydev,1);
gpfcon = ioremap(GPFCON, 0x04); //get virtual address of GPFCON
gpfdat = ioremap(GPFDAT, 0x04); //get virtual address of GPFDAT
*gpfcon &= (~(1 << 9));
*gpfcon |= (1 << 8);
*gpfdat |= 7 << 4;// led off
return ;
}
static int __init myinit(void)
{
int a = 0;
a ++;
printk(KERN_INFO "this is myinit function run,a = %d\n",a);
init();
return 0;
}
static void __exit myexit(void)
{
int b = 1;
b = b + 2;
printk(KERN_INFO "this is myexit function run b = %d\n",b);
unregister_chrdev_region(mydev,1);
cdev_del(&ad_cdev);
return ;
}
module_init(myinit);
module_exit(myexit);
ifeq ($(KERNELRELEASE),)
#KERNELDIR ?= /home/linux/Desktop/qrs_new/driver/seventy/first_driver/linux-2.6.22.6
KERNELDIR ?= /lib/modules/$(shell uname -r)/build M=$(PWD) modules
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions Module* module*
.PHONY: modules modules_install clean
else
obj-m := first.o
endif