我有一台华硕笔记本电脑,配有 Realtek 读卡器 RTL8411B。我必须安装内核版本为 4.15.3 的 Debian - 没有其他选择。
第一个问题出现在标准 rtsx_pci 驱动程序中,它似乎完全忽略了这个读卡器。将 SD 卡连接到笔记本电脑不会导致 /dev 目录中出现任何设备,也不会在 syslog 和其他日志中出现任何新记录。
在阅读了一些论坛之后,我了解到该问题出在驱动程序中,并且有两种可能的解决方法:
使用所有内核模块更改内核版本。
为当前内核构建新的驱动程序。
所以我选择第二个并构建自定义驱动程序表单https://github.com/M0Rf30/rts_bpp。驱动程序问题已解决。现在我得到了一个新设备 /dev/sdb:
brw-rw---- 1 root disk 8, 16 may 13 13:47 /dev/sdb
但是当磁盘组中的普通用户尝试将 /dev/sdb 挂载到他自己的目录时,他会收到错误。
$ mount /dev/sdb /home/user/media
mount: /dev/sdb: Operation not permitted
我还创建了 udev 规则来为 /dev/sdb 设备设置 MODE="0666",现在我有一个具有权限的设备:
brw-rw-rw- 1 root disk 8, 16 may 13 13:53 /dev/sdb
但安装仍然以错误结束。而且不仅仅是安装。
$ mount /dev/sdb /home/user/media
mount: /dev/sdb: Operation not permitted
$ ls -l /dev/sdb
ls: can't get access to '/dev/sdb': Operation not permitted
将此设备与“sudo”一起使用可以完美运行,但只有超级用户才能从 SD 卡读取和写入数据。
那么我需要做哪些改变才能让所有用户访问读卡器设备?
答案1
实际的“mount”系统调用是仅有的可供 root 使用。设备节点的权限无关紧要(应保留为 0660,并且您真的不应该将非特权用户放在“磁盘”组中)。
非特权访问有多种选项:
通过 sudo运行
mount
命令,并通过文件系统选项指定正确的合成 UID/GID/权限 - 大多数卡都持有 FAT 文件系统,因此您必须指定uid=
。sudo mount /dev/sdb /mnt -o uid=$(id -u),gid=$(id -g)
为 SD 卡添加一个 /etc/fstab 条目,带有“用户”选项(依赖于“mount”命令是 setuid 的事实):
/dev/disk/by-path/usb-Foo-Bar-part1 /mnt auto user 0 0
使用 /dev/disk/by-path 中的符号链接允许您识别特定的读卡器,无论它现在是“sdb”还是“sdc”。
使用
pmount
包装器安装卡,这将强制执行正确的选项:pmount /dev/sdb
使用移动U盘用于挂载卡的服务,该卡将始终被挂载在下面
/run/media/$USER
(尽管有一个 udev 属性可以让它代替使用/media
):udisksctl mount -b /dev/sdb
使用 UDisks 时,卡将始终安装在下方
/run/media/$USER
(尽管有一个 udev 属性可以让它改为使用/media
)。GNOME、KDE 和 Xfce 使用的机制与允许非特权 USB 棒访问的机制相同。