快意恩仇780 2021-06-26 20:12 采纳率: 0%
浏览 85

Linux中insmod驱动出现killed

最近学习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

 

  • 写回答

1条回答 默认 最新

  • 少林and叔叔 2023-03-30 22:26
    关注

    这个驱动比较简单,应该没有问题的!其他的虚拟机可能操作上或软件安装存在差异!导致不能运行!

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?