【发布时间】:2019-09-25 14:13:19
【问题描述】:
我正在尝试设置一个模块,该模块将在运行 Raspian Stretch 的 Raspberry Pi B+ 上与 /dev/serial0 交互。我在/boot/config.txt 中使用dtoverlay=pi3-miniuart-bt 将UART0/ttyAMA0 恢复到GPIO 14 和15(这是我基于Raspi 的硬件需要我做的)。
我已尝试使用以下容器创建选项使模块可以访问该设备:
{
"HostConfig": {
"PortBindings": {
"1880/tcp": [
{
"HostPort": "1880"
}
]
},
"Privileged": true,
"Devices": [
{
"PathOnHost": "/dev/serial0",
"PathInContainer": "/dev/serial0",
"CgroupPermissions": "rwm"
},
{
"PathOnHost": "/dev/ttyAMA0",
"PathInContainer": "/dev/ttyAMA0",
"CgroupPermissions": "rwm"
},
{
"PathOnHost": "/dev/ttyS0",
"PathInContainer": "/dev/ttyS0",
"CgroupPermissions": "rwm"
}
]
}
}
当我 ssh 进入时,我可以看到 /dev/serial0,但我无法从正在运行的模块中看到它:
pi@azure-iot-test:~ $ ls -l /dev/ser*
lrwxrwxrwx 1 root root 7 Sep 24 21:17 /dev/serial0 -> ttyAMA0
lrwxrwxrwx 1 root root 5 Sep 24 21:17 /dev/serial1 -> ttyS0
pi@azure-iot-test:~ $ sudo docker exec hub-nodered ls -l /dev/ser*
ls: /dev/serial0: No such file or directory
ls: /dev/serial1: No such file or directory
有什么想法吗?
跟进:
我尝试了以下从here收集的想法:
- 将
"User": "node-red"添加到容器创建选项的根目录 - 将
"User": "root"添加到容器创建选项的根目录 - 在容器创建选项中将
"GroupAdd": "dialout"添加到"HostConfig": {...}
跟进#2
虽然我仍然无法与 /dev/serial0 交互,但我能够使用以下容器创建选项与 /dev/ttyAMA0 交互:
{
"HostConfig": {
"GroupAdd": [
"dialout"
],
"PortBindings": {
"1880/tcp": [
{
"HostPort": "80"
}
]
},
"Devices": [
{
"PathOnHost": "/dev/serial0",
"PathInContainer": "/dev/serial0",
"CgroupPermissions": "rwm"
},
{
"PathOnHost": "/dev/ttyAMA0",
"PathInContainer": "/dev/ttyAMA0",
"CgroupPermissions": "rwm"
}
]
}
}
值得注意的项目似乎是:
- 我在
"HostConfig"中不需要"Privileged": true - 我似乎不需要添加“用户”
- 我需要
"GroupAdd": ["dialout"]in"HostConfig"
因此,虽然我可以随心所欲地与串行设备进行交互,但我无法与 /dev/serial0 交互似乎很奇怪,这似乎是我读过的“推荐方式”完成。
【问题讨论】:
标签: docker raspberry-pi node-red azure-iot-edge