创建字符设备后,app打开权限问题

一、问题

        目前我还没找到在驱动中创建完成后,设置设备文件的权限的方法,对于用户层的app来说,每次都加 sudo 可能会造成未知的问题。

Failed to open device: Permission denied

二、权限设置

        1、正常来说,对于短期使用的app和驱动,手动更改 /dev 目录下对应设备的权限即可:

sudo chmod 0666 /dev/devices

        2、如果设备经常需要重启,可以通过自启动脚本 rc.local 实现权限更改:

sudo vi /etc/rc.local

在 exit 0 前添加:

chmod 0666 /dev/devices

        3、如果你的发行版没有 rc.local 文件或者不支持,可以自建 systemd 服务:

sudo vi /etc/systemd/system/set-devices-permissions.service

添加内容:

[Unit]
Description=Set permissions for /dev/devices to 0666
After=sysinit.target
Before=basic.target

[Service]
Type=oneshot
ExecStart=/bin/chmod 0666 /dev/devices
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  • Description:服务的描述信息。

  • After=sysinit.target:确保在系统初始化完成后运行。

  • Before=basic.target:确保在基本服务启动前运行。

  • Type=oneshot:表示服务只运行一次。

  • ExecStart=/bin/chmod 0666 /dev/devices:设置 /dev/devices 的权限为 0666

  • RemainAfterExit=yes:即使命令执行完毕,服务仍标记为“活跃”状态。

  • WantedBy=multi-user.target:指定服务在多用户模式下启动。

然后赋予服务文件权限:

sudo chmod 644 /etc/systemd/system/set-devices-permissions.service

启用服务:

sudo systemctl enable set-devices-permissions.service
sudo systemctl start set-devices-permissions.service

检查服务状态:

sudo systemctl status set-devices-permissions.service

开启服务后,每次系统启动都会执行这个服务,实现自动设置。

        4、新建 udev 规则,我使用的方法。

在 /etc/udev/rules.d 目录下,新建规则文件:

sudo vi 99-user-udev.rules

99代表执行优先级顺序,越小越优先,用户级别建议放低,其余名字随意,添加以下内容:

KERNEL=="device",MODE="0666"

KERNEL表示内核中看到的设备名称,也就是在驱动里面设置的DEV_NAME。MODE表示要设置的权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plmm烟酒僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值