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

弱弱的问一个,简单字符设备驱动程序,打开文件错误问题。

    来源: 互联网  发布时间:2017-02-06

    本文导语:  刚开始接触字符驱动就被吓到了,按着教科书的内容,整理了个最简单的字符驱动,加载上以后open打开返回总是-1,实在找不到原因了,驱动文件我也创建了,内核我也加载过了。 驱动部分代码: #include  #include  #...

刚开始接触字符驱动就被吓到了,按着教科书的内容,整理了个最简单的字符驱动,加载上以后open打开返回总是-1,实在找不到原因了,驱动文件我也创建了,内核我也加载过了。

驱动部分代码:

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

#define SCHAR_MAJOR 256
#define SCHAR_MINOR 0

struct cdev cdev;

int schar_open(struct inode *inode, struct file *filp){
printk("-------------------open--------------------");
return 0;
}

int schar_release(struct inode *inode, struct file *filp){
printk("-------------------close-------------------");
return 0;
}

ssize_t schar_read(struct file *filp, char __user *buff, size_t count, loff_t *offp){
printk("----------------read----------------n");
return 0;
}

ssize_t schar_write(struct file *filp, char *buff, size_t count, loff_t *offp){
printk("-----------------write--------------n");
return 0;
}
static struct file_operations schar_fops = {
        .owner =        THIS_MODULE,
        .read =           schar_read,
        .write =          schar_write,
        .open =         schar_open,
       .release=       schar_release,
};
 
static int inits_module(void)
{
int res;
dev_t dev = 0;

dev = MKDEV(SCHAR_MAJOR, SCHAR_MINOR);
res = register_chrdev_region(dev, SCHAR_NR_DEVS, "schar");


if (res) {
printk("can't register device with kerneln");
return res;
}else {
printk("--------Register device number:%d---------n",(int)dev);
}

cdev_init(&cdev,&schar_fops);
cdev.owner = THIS_MODULE;
cdev.ops = &schar_fops;
cdev_add(&cdev,SCHAR_MINOR,SCHAR_NR_DEVS);

printk("-----------module loaded--------------n");
return 0;
}

void cleanups_module(void)
{
printk("------------------------------------n");
dev_t dev = MKDEV(SCHAR_MAJOR, SCHAR_MINOR);
cdev_del(&cdev);
kfree(schar_init);
unregister_chrdev_region(dev,SCHAR_NR_DEVS);
printk("----------------unloaded---------------n");
return;
}

module_init(inits_module);
module_exit(cleanups_module);

测试代码:
#include 
#include 
#include 
#include 
#include 
#include  
#include 
int buf[2];

int main(void)
{
          
  int fd, num;

  fd = open("/dev/schar",O_RDWR);

  if (fd != -1 )
  {
    printf("The program is schar drivern");

    close(fd);
  }
  else
  {
    printf("Device open failuren");
  }
}

|
调用系统调用后,不妨使用perror来看看出错信息。

|
你这种写法需要手动创建设备节点
用mknod命令创建 /dev/schar
但是你好像没有创建,当然失败了

|
同意一楼

    
 
 

您可能感兴趣的文章:

  • linux驱动程序如何加版本字符串
  • 字符设备驱动程序问题
  • 请教!关于linux字符驱动程序
  • 自己编写一个简单的字符设备驱动程序以后,改怎么使用它?
  • 在编译字符驱动程序时,为何总是找不到头文件!急......
  • 字符驱动程序的疑问!
  • 请教高手,有关字符设备驱动程序问题
  • 请问在linux下的字符界面下如何使用优盘?需要安装驱动程序吗?
  • 有关ldd中字符驱动程序的scull_devices
  • 字符设备驱动程序编写中,被读写的数据到底应该定义在什么地方?
  • 段错误____书上的最简单字符驱动,生成了模块.另一个测试程序(写1操作).
  • 简单的字符设备驱动程序问题
  • 第一人入门字符设备驱动程序的问题
  • 参照网上写的一个简单字符驱动程序,为什么只能用一次
  • 简单的字符设备驱动程序居然出错!大家帮忙看看哈^_^
  • 加载混杂字符设备驱动在/dev/下没有出现设备文件,请帮忙分析我程序!
  • 嵌入式系统字符驱动程序(应用)问题(初学),请帮忙回答
  • 想用"|"来分离字符串,但用String.split("|")总是出现错误,总是多分离出一个空串,如果字符串中有空格那错误更多。
  • 字符替换函数的错误---------急! 就5行代码竟然有错误....
  • 怎么设置错误字符串?
  • 关于字符设备的段错误
  • 字符转换错误
  • 关于字符串处理的错误
  • 读取属性文件中字符串出现莫名错误
  • linux open 字符设备返回错误
  • 向Oracle数据库的CLOB属性插入数据报字符串过长错误
  • 字符串处理string.h错误--undefined reference to `strcopy'
  • “不合法的转义字符”的错误!
  • sprintf函数的第一参数字符缓冲区为何分配空间不够,在linux运行也不出现内存错误?
  • 请教:在程序里用system启动一个命令,如何获得这个进程的正常输出和错误输出到一个字符串里?
  • linux字符驱动insmod出现错误
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Strings(字符串) 成员 size():返回字符串中字符的数量
  • 关于字符串的操作,我想得到字符串的长度,和他开始两位组成的新的字符串,例如::
  • C++ Strings(字符串) 成员 c_str():将字符串以C字符数组的形式返回
  • 请问怎样判断一个字符是中文字符还是英文字符?(空)
  • C++ Strings(字符串) 成员 find():在字符串中查找字符
  • C语言实现输入一个字符串后打印出该字符串中字符的所有排列
  • C++ Strings(字符串) 成员 end():返回一个迭代器,指向字符串的末尾。(最后一个字符的下一个位置)
  • 用Java正则去掉字符串中重复出现的字符
  • C++ I/O 成员 ignore():读取字符并忽略指定字符
  • 字符字符串加法问题?
  • C++ Strings(字符串) 成员 copy():将内容复制为一个字符数组
  • 怎样去掉字符串中的tab字符?
  • C++ Strings(字符串) 成员 rbegin():返回一个逆向迭代器,指向最后一个字符
  • 如何使GDB显示完整的字符串变量,当字符串比较长时。
  • C++ Strings(字符串) 成员 empty():如果字符串为空,返回真
  • 如何将一个双引号”放在一个字符串中,就是在字符串中如何转义一个双引号。谢谢!
  • C++ Strings(字符串) 成员 begin():返回一个迭代器,指向第一个字符
  • php判断字符串在另一个字符串位置的方法
  • C++ Strings(字符串) 成员 data():返回内容的字符数组形式
  • 请教,有关16进制字符串形成2进制字符串的问题!
  • C++ Strings(字符串) 成员 length():返回字符串的长度
  • crtl+alt+F1一直到F6都可以从图形到字符,那么,这和纯粹的字符界面有什么区别,也就是该/etc/initab的值为3后进入的字符界面?


  • 站内导航:


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

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

    浙ICP备11055608号-3