gpt4 book ai didi

linux - 无法写入/dev/* 文件

转载 作者:太空狗 更新时间:2023-10-29 11:25:49 25 4
gpt4 key购买 nike

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

  1. alloc_chrdev_region() -> 使用主编号的动态分配
  2. class_create() -> 在 sysfs 中创 build 备类
  3. device_creat() -> 在/dev/下创 build 备
  4. cdv_init() -> 初始化字符设备结构
  5. cdev_add() -> 在内核中添加我的设备结构

我在代码中添加了读取、写入、打开、释放方法。

当我尝试读取/dev/下的设备文件时,我的读取方法被调用。但是当我尝试使用 echo 在/dev/文件上写入时,它给出了错误

"bash: /dev/scull: Permission denied"

我已经使用 ls -l 检查了文件的权限,并且我有权读取或写入该文件。

我编写的每个设备驱动程序模块都会出现此问题。它在另一台机器上运行良好。

我正在使用 ubuntu 15.10,自定义编译内核 4.3.0

  1. ls -l/dev/scull 的结果:

    crw------- 1 root root 247, 0 Dec 30 18:06 /dev/scull
  2. 我用来打开文件的确切命令

    $ sudo echo 54 > /dev/scull
  3. 开放实现的源代码

    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;
    }

我在这里寻求的行为是,我应该能够在 dmesg 输出中看到 'Device Written'

最佳答案

我假设您通常不是 bash shell 的 root 用户。然后这个命令行

sudo echo 54 > /dev/scull

不是你想的那样。该命令分两步执行:

  1. bash 设置输出重定向,即它尝试使用当前用户权限打开 /dev/scull
  2. 执行命令 sudo echo 54stdout 连接到文件。

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

"bash: /dev/scull: Permission denied"

您必须已经是 root 才能设置输出重定向。从而执行

sudo -i

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

echo 54 > /dev/scull

在根 shell 中。

关于linux - 无法写入/dev/* 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34522426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com