当前位置:  技术问答>linux和unix

怎么这个驱动刚加载就说被杀死了?

    来源: 互联网  发布时间:2016-11-16

    本文导语:  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #define LEN  1024 struct scull{ wait_queue_head_t r_que; wait_queue_head_t w_que; struct semaphore sem; struct cdev c...


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define LEN  1024
struct scull{
wait_queue_head_t r_que;
wait_queue_head_t w_que;
struct semaphore sem;
struct cdev cdev;
char buffer[LEN];
dev_t devno;
int count;
int major;
int minor;
};

struct scull *device;

static int com_read(struct file *filp,char __user *buf,size_t count,loff_t *pos)
{
wait_event_interruptible(device->r_que,device->countsem);
copy_to_user(buf,device->buffer,count);
device->count=0;
up(&device->sem);
}
static int com_write(struct file *filp,const char __user *buf,size_t count,loff_t *pos)
{
down_interruptible(&device->sem);
if(device->count>=LEN)
wake_up_interruptible(&device->r_que);
device->count+=count;
copy_from_user(device->buffer+device->count,buf,count);
up(&device->sem);
return count;
}

static int com_open(struct inode *inode,struct file *filp)
{

return 0;
}

static int com_release(struct inode *inode,struct file *filp)
{
return 0;
}

struct file_operations f_ops=
{
.owner=THIS_MODULE,
.read=com_read,
.write=com_write,
.open=com_open,
.release=com_release,
};

void set_cdev(void)
{
int err;
cdev_init(&device->cdev,&f_ops);
device->cdev.owner=THIS_MODULE;
device->cdev.ops=&f_ops;
err=cdev_add(&device->cdev,device->devno,1);
if(err)
printk(KERN_INFO"Error %d adding dev n",err);
}

static int init(void)
{
int ret;
ret=alloc_chrdev_region(&device->devno,0,1,"block_file");
if(retmajor=MAJOR(device->devno);
device->minor=MINOR(device->devno);
init_waitqueue_head(&device->r_que);
init_waitqueue_head(&device->w_que);
init_MUTEX(&device->sem);
device->count=0;
set_cdev();

return 0;
}

static int exit(void)
{
kfree(device);
unregister_chrdev_region(device->devno,1);
cdev_del(&device->cdev);
return 0;
}

MODULE_LICENSE("Dual BSD/GPL");
module_init(init);
module_exit(exit);


|
你都还没为你的device指针分配内存就拿到alloc_chrdev_region这个函数里用,能不挂掉吗

    
 
 

您可能感兴趣的文章:

  • insmod 加载驱动模块后,重启后驱动为什么没有了
  • usbhid妨碍了系统自动加载我的usb驱动程序,求教解决 (主要是加载后设备的驱动被认作usbhid)
  • linux网卡驱动加载异常
  • 为何每次重启都要重新加载驱动模块?
  • linux 2.6.15 中被编译为模块的驱动test.ko,应该放在什么路径下才能使得在需要该驱动时,由内核自动加载?谢谢
  • 相同设备分别加载不同驱动
  • 动态加载网络驱动程序问题
  • linux 硬件检测,驱动自动加载的问题
  • Java加载JDBC驱动程序实例详解
  • 怎么在redhao 7.2下加载移动硬盘(爱国者的,没提供驱动)
  • 驱动加载问题
  • 安装F8加载完SCSI驱动后就停住了
  • 驱动模块的加载和卸载的疑问
  • 怎么样加载sqlserver2000的驱动呀?
  • 加载自己写的驱动出问题了,求高人指点
  • 驱动模块断电重加载问题
  • 如何使Solaris不加载一个设备的驱动?
  • 加载驱动后,为什么有时在dev下不能自动显示设备文件?
  • 驱动加载时出现“couldn't find the kernel version the module was compiled for”
  • 驱动加载后,/dev没有出现对应的节点
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 字符设备驱动,混杂设备驱动,总线、设备、驱动模型、平台驱动
  • UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍
  • 好不容易下到sis900网卡for unix的驱动,但装上驱动后系统驱动时: SiS900 adapter initialization failure!
  • 我的网卡在redhat7.3下不能自动驱动,但我有for linux的驱动程序,请问如何才能驱动我的网卡,我是菜菜,请详细说明,谢谢!
  • Linux环境下,“PC机的驱动”与“嵌入式驱动”有什么区别?
  • linux:怎么在驱动中调用IIC驱动?
  • linux驱动 单片机驱动
  • linux下一个驱动怎么调用另一个驱动
  • u boot中怎样写flash驱动以及串口驱动
  • Linux环境下,如何一个驱动中调用另外一个驱动
  • 一个驱动文件,生成多个驱动模块??
  • -------------- 请问大家,做好一个PCI设备驱动了,如何做个应用程序来使用这个驱动呢??
  • pcie驱动和pci驱动
  • usb驱动中 hcd,pcd,device,gadget驱动有什么区别啊?
  • 移植pci驱动和RTL8139网卡驱动,只发生一次中断?
  • 想试着编写简单驱动玩,但是手头上没有什么好驱动的设备,大家支招
  • 请教有关linux驱动开发,按关机键关机时,驱动应作哪些结束工作?
  • Linux源代码中ata驱动为什么要调用pci驱动的代码
  • Linux设备驱动(第三版)- 字符设备驱动 - 例子
  • Linux 9.0+865G,只能上到640×480,Intel官方站点的最新驱动安装失败,那位有驱动?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3