目标:我想使用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 文件中添加一些内容吗?
gdb
没有权限打开 /dev/mem
或 /dev/gpiomem
。您可以采用两种方法。
您可以在 vscode 中以 root 身份运行 gdb,而不是以 root 身份运行 vscode(这已经被建议,并且您正确地指出这通常是一个坏主意),方法是调用
sudo gdb
来启动调试器(与只是gdb
。
/dev/mem
和 /dev/gpiomem
另一个选项是在不提升权限的情况下授予您自己访问
/dev/mem
和 /dev/gpiomem
的权限。授予访问权限 /dev/gpiomem
大多数情况下是无害的,但允许非 root 访问 /dev/mem
是一个主要的安全漏洞,并不可取。如果可能的话,请选择选项 1。
要授予您打开这些文件的使用权限,您可以执行以下两种操作之一。
1.) 将您自己添加到所属组。
/dev/mem
属于组 kmem
,因此将您的主用户添加到该组将允许您读取访问权限。
2.) 修改文件权限。
sudo chmod ugo+xwr fname
将允许任何用户读取、写入或执行该文件。这通常是不安全的,但如果您仅激活它一会儿来解决某些问题,则会很有帮助。
下载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.