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

新手问题请教

    来源: 互联网  发布时间:2016-08-23

    本文导语:  在linux内核加栽下面的模块: #include  #include  #include  #include  #include  #include  #include  #include  #define PINFO(fmt,args...) printk(KERN_INFO "[%s]" fmt,__FUNCTION__ ##args) #define SIZE 100 int major=0; int minor=0; unsigned int devno; struct...

在linux内核加栽下面的模块:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define PINFO(fmt,args...) printk(KERN_INFO "[%s]" fmt,__FUNCTION__ ##args)

#define SIZE 100
int major=0;
int minor=0;

unsigned int devno;

struct test_driver{
     char buf[SIZE];
     int irq;
     struct cdev my_cdev;
     int cur_size;
     struct fasync_struct *fa;
};
struct test_driver  mdr;
int test_fasync(int fd, struct file *flip, int on);

int test_open (struct inode *inod, struct file *filp)
{
     printk("init test drivern");
     struct test_driver *md=container_of(inod->i_cdev,struct test_driver,my_cdev);
     filp->private_data=md;
     return 0;
}
int test_close(struct inode *inod, struct file *filp)
{
     printk("close test drivern");
     filp->f_pos=0;
     test_fasync(-1, filp, 0);
     return 0;
}
ssize_t test_read (struct file *filp, char __user *buf, size_t count, loff_t *offset)
{
     struct test_driver *md=filp->private_data;
     int remain,ret;
    remain=copy_to_user(buf,md->buf+filp->f_pos,count);
    ret=count-remain;
    md->cur_size-=ret;

     return ret;

ssize_t test_write (struct file *filp, const char __user *buf, size_t count, loff_t *offset)
{
    struct test_driver *md=filp->private_data;
    int remain,ret;
    remain=copy_from_user(md->buf+filp->f_pos,buf,count);
    ret=count-remain;
    md->cur_size+=ret;
    kill_fasync(&md->fa,SIGIO,POLL_IN);
    return ret;
}
int test_fasync(int fd, struct file *flip, int on)
{
    struct test_driver *md=flip->private_data;
    return fasync_helper(fd,flip,on,&md->fa);   

}

struct file_operations f_ops=
{
.open=test_open,
.release=test_close,
.read=test_read,
.write=test_write,
.fasync=test_fasync,
};
int init_test(void)
{
     if(major){
       devno=MKDEV(major,minor);
       register_chrdev_region(devno,1,"new test driver");
   }
   else{
       alloc_chrdev_region(&devno,0,1,"alloc devno");
       major=MAJOR(devno);
       minor=MINOR(devno);
       printk("major is %d,minor is %dn",major,minor);
   }
   
    cdev_init(&mdr.my_cdev,&f_ops);
    cdev_add(&mdr.my_cdev,devno,1);
    PINFO("init test drivern");
    return 0;
}

void exit_test(void)
{
    cdev_del(&mdr.my_cdev);
    unregister_chrdev_region(devno,1);
    PINFO("exit test drivern");
}

module_init(init_test);
module_exit(exit_test);

然后让这个应用程序在后台运行:
#include 
#include 
#include 
#include 
#include 
#include 
int fd;
char buf[20]={0};
static int flag=0;

void handler(int num)
{
   if(num==SIGIO)
     {
      int ret;
      ret=read(fd,buf,5);
      printf("app read,%d,%sn",ret,buf);
      flag=1;
      return;
     }
}

int main(void)
{
    struct sigaction sa;
    fd=open("/dev/test",O_RDWR);
    if(fd

    
 
 

您可能感兴趣的文章:

  • 新手请教,我用VI时按ESC键,总是回嘟嘟嘟嘟响,请问如何去掉!谢谢!
  • 新手请教Linux和ubuntu
  • Linux新手请教声卡驱动!!!!!!!!!!!
  • 新手来请教一个关于IDE的问题
  • 大家好,我是linux新手,有些问题请教
  • 新手,有问题请教!
  • 新手,请教关于文件编辑问题...
  • 新手请教:RedHat Linux 7.3下的网络连接问题
  • 新手请教arm与linux的问题
  • 新手虚心请教.在线等复....vsftp配置成功后,本机可以FTP上,但其他系统通过FTP工具不能上.防火墙不能关..
  • 新手请教啦~~能不能帮忙推荐几本书
  • 新手,请教安装SCO Unix的问题
  • 新手请教!!!!
  • 新手请教2
  • 新手请教:我的声卡所附光盘提供了下面的这些文件,我怎么安装驱动?
  • 新手的问题,请教高手
  • 新手请教安装问题!
  • 新手向大家请教jsp,servlet的调试,发布问题
  • 我是新手,请教LINUX下如何访问光驱里的文件。
  • 新手请教一下学习GCC的经验
  • JDBC的问题,新手高手都来看看吧,说不定能帮帮我这个新手呢,谢谢!
  • 新手问题:中文问题等
  • 新手问题,关于liux安装启动的问题。
  • 新手有关linux的问题!
  • (新手问题)关于QT的问题
  • 一个蛋疼的问题,我是新手
  • 新手问题:RH怎么退回字符界面? 急!!!!
  • 新手问SCO UNIX安装问题
  • 新手学linux,关于vmware tools的问题。
  • 新手求教:关于ftp命令的问题,请大家帮帮忙
  • Java新手上路之问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 新手如何加入开源项目 有什么好的c++,java 开源适合新手 请指点!
  • 想找共同学习Linux的新手,一起学习,共同成长
  • 新手关于驱动开发的疑问
  • 新手急求~~~~~~~~~~~~~~~~~~~
  • 新手学习该用哪个版本
  • 面向新手的终端辅助工具 Clicompanion
  • 我是个新手,请各位老兄给介绍基本好书?
  • 我是新手
  • 新手:用WEB页面修改数据库中的表?
  • 我是一名新手,请问如何学java
  • (新手)这里怎么看到300篇以外的所有文章?(不是搜索)
  • 新手求助!
  • 新手上路,怎样判断网卡是否安装成功?
  • !!新手求救!!
  • CSS属性参考手册 iis7站长之家
  • 新手求救!!关于变量初始化
  • 新手,请多指教!!
  • 我是新手,安装好unix后,要如何安装鼠标?
  • 我是JAVA新手,所以我不明白(JPanel)类的东西
  • 新手学linux


  • 站内导航:


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

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

    浙ICP备11055608号-3