मैं एक मॉड्यूल स्थापित करने की कोशिश कर रहा हूं जो /dev/serial0 के साथ रास्पबेरी पीआई बी + चल रहे रास्पियन स्ट्रेच पर बातचीत करेगा। मैंने UART0/ttyAMA0 को GPIOs 14 और 15 में पुनर्स्थापित करने के लिए dtoverlay=pi3-miniuart-bt में /boot/config.txt का उपयोग किया है (जो कि मेरे रास्पि-आधारित HW को मुझे करने की आवश्यकता है)।

मैंने निम्नलिखित कंटेनर निर्माण विकल्पों का उपयोग करके उस उपकरण को मॉड्यूल तक पहुंच योग्य बनाने का प्रयास किया है:

{
  "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

कोई विचार?

अनुवर्ती:

अतिरिक्त चीज़ें जिन्हें मैंने यहां से प्राप्त किया है, को आजमाया है:

  • कंटेनर की जड़ में "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 की आवश्यकता नहीं थी
  • ऐसा लगता है कि मुझे "उपयोगकर्ता" जोड़े जाने की आवश्यकता नहीं है
  • मुझे "HostConfig" में "GroupAdd": ["dialout"] चाहिए था

इसलिए, जबकि यह संतोषजनक है कि मैं एक सीरियल डिवाइस के साथ बातचीत कर सकता हूं जैसा मैं चाहता था, यह अजीब लगता है कि मैं /dev/serial0 के साथ बातचीत नहीं कर सकता, ऐसा लगता है कि यह मेरे द्वारा किए गए पढ़ने से "अनुशंसित तरीका" है .

0
papakpmartin 25 सितंबर 2019, 17:13

1 उत्तर

सबसे बढ़िया उत्तर

Raymond Mouthaan की मदद और अंतर्दृष्टि के लिए धन्यवाद, जो बहुत ही उपयोगी नोड-रेड स्लैक चैनल, मुझे इस कंटेनर क्रिएट ऑप्शंस के लिए अपना रास्ता मिल गया है जो मुझे /dev/serial0 तक पहुंच प्रदान करता है:

{
  "User": "node-red:dialout",
  "HostConfig": {
    "PortBindings": {
      "1880/tcp": [
        {
          "HostPort": "80"
        }
      ]
    },
    "Devices": [
      {
        "PathOnHost": "/dev/serial0",
        "PathInContainer": "/dev/serial0",
        "CgroupPermissions": "rwm"
      }
    ]
  }
}

यह ऊपर दिए गए "फॉलोअप # 2" में मिले आंशिक समाधान से अलग है, जिसमें अब मुझे वांछित के रूप में /dev/serial0 तक पहुंच प्राप्त है।

अद्यतन करें: मैंने मूल रूप से इस उत्तर को "User": "root:dialout" के बजाय "User": "node-red:dialout" का उपयोग करके पोस्ट किया था जिसे आप वर्तमान में ऊपर देख रहे हैं।

पहला काम करने वाला समाधान "User": "root:root" के साथ था, लेकिन मुझे केवल उन उपकरणों के लिए विवश होना अच्छा लगा, जिन्हें Devices में कहा जाता है, जो root:dialout करते प्रतीत होते हैं।

लेकिन मैं सोच रहा था कि क्या मुझे सुरक्षा के लिहाज से root के रूप में चलने के बारे में चिंतित होना चाहिए।

फिर मैंने node-red:dialout का उपयोग करने की कोशिश की और ऐसा लगता है कि यह पूरी तरह से काम कर रहा है, इसलिए मैंने ऊपर दिए गए कंटेनर क्रिएट ऑप्शंस को अपडेट किया है जो मुझे लगता है कि सबसे अच्छा जवाब है।

0
papakpmartin 25 सितंबर 2019, 23:51