VScode 调试:/dev/gpiomem 权限被拒绝

问题描述 投票:0回答:2

目标:我想使用Raspberry Pi 400在Ubuntu上设置VScode调试。

我所做的:我能够使用

sudo ./program_name
编译并运行程序。我必须运行 sudo 否则我会收到权限被拒绝错误。我不想以 root 权限运行 VScode,因为通常不鼓励这样做。

问题:当我启动调试器(按 F5)并包含

wiringPi.h
时,出现以下错误:

wiringPiSetup: Unable to open /dev/mem or /dev/gpiomem: Permission denied.
  Aborting your program because if it can not access the GPIO
  hardware then it most certianly won't work
  Try running with sudo?
[1] + Done                       "/usr/bin/gdb" --interpreter=mi --tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-j40gmjsr.mas" 1>"/tmp/Microsoft-MIEngine-Out-vltmyj1b.a3g"

我的 launch.json 文件如下所示:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "preLaunchTask": "C/C++: g++ build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
  
    ]
}

我应该做什么才能使用我的设置启动调试器?我可以在 launch.json 文件中添加一些内容吗?

c++ linux debugging visual-studio-code raspberry-pi
2个回答
1
投票

gdb
没有权限打开
/dev/mem
/dev/gpiomem
。您可以采用两种方法。

选项 1 -- 提升 GDB 的权限

您可以在 vscode 中以 root 身份运行 gdb,而不是以 root 身份运行 vscode(这已经被建议,并且您正确地指出这通常是一个坏主意),方法是调用

sudo gdb
来启动调试器(与只是
gdb

选项 2 -- 降级
/dev/mem
/dev/gpiomem

另一个选项是在不提升权限的情况下授予您自己访问

/dev/mem
/dev/gpiomem
的权限。授予访问权限
/dev/gpiomem
大多数情况下是无害的,但允许非 root 访问
/dev/mem
是一个主要的安全漏洞,并不可取。如果可能的话,请选择选项 1。

要授予您打开这些文件的使用权限,您可以执行以下两种操作之一。

1.) 将您自己添加到所属组。

/dev/mem
属于组
kmem
,因此将您的主用户添加到该组将允许您读取访问权限。

2.) 修改文件权限。

sudo chmod ugo+xwr fname
将允许任何用户读取、写入或执行该文件。这通常是不安全的,但如果您仅激活它一会儿来解决某些问题,则会很有帮助。


0
投票

下载rpi.gpio-common包

sudo apt install rpi.gpio-common
sudo adduser "${USER}" dialout
sudo adduser -aG gpio "${USER}"
sudo reboot
cat /usr/share/doc/rpi.gpio-common/README.Debian

# Output:
Accessing GPIO
--------------

In order to access GPIO, you need to be in the dialout group.
© www.soinside.com 2019 - 2024. All rights reserved.