当前位置:  开发笔记 > 编程语言 > 正文

无法写入/ dev/*文件

如何解决《无法写入/dev/*文件》经验,为你挑选了1个好方法。

我正在为Linux内核编写一个基本的char设备驱动程序.为此,我考虑过的代码流程如下:

    alloc_chrdev_region() - >使用主要编号的动态分配

    class_create() - >在sysfs中创建设备类

    device_creat() - >在/ dev /下创建设备

    cdv_init() - >初始化char设备结构

    cdev_add() - >在内核中添加我的设备结构

我在代码中添加了read,write,open,release方法.

当我尝试读取/ dev /下的设备文件时,调用read方法.但是当我尝试使用echo在/ dev/file上写入时会出错

"bash:/ dev/scull:Permission denied"

我已经检查了文件的权限ls -l,我有权读取或写入此文件.

我编写的每个设备驱动程序模块都会出现此问题.它适用于另一台机器.

我正在研究ubuntu 15.10,自定义编译内核4.3.0

    结果ls -l /dev/scull:

    crw------- 1 root root 247, 0 Dec 30 18:06 /dev/scull
    

    我用来打开文件的确切命令

    $ sudo echo 54 > /dev/scull
    

    开放实现的源代码

    ssize_t scull_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos){
         pr_alert("Device Written\n");
         return 0;
    }
    

行为我正在寻找这里,我应该能够看到'Device Written'dmesg输出中?



1> Martin Zabel..:

我假设你通常不是你的bash shell的root.然后这个命令行

sudo echo 54 > /dev/scull

不是你的想法.该命令分两步执行:

    bash设置输出重定向,即它尝试/dev/scull使用当前用户权限打开.

    sudo echo 54执行该命令,然后stdout连接到该文件.

由于您没有作为非root用户的写入权限,因此第一步失败并且bash报告

"bash:/ dev/scull:Permission denied"

您必须已经root设置输出重定向.这样执行

sudo -i

它为您提供了具有root权限的交互式shell.你可以执行

echo 54 > /dev/scull

在那个root shell中.


@hiabcwelcome不,这个命令打开另一个子shell.按CTRL + D或键入`exit`命令.
推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有