Один из модулей IoT Edge находится в состоянии отсрочки Raspberry Pi 4 с ОС Raspbian - PullRequest
0 голосов
/ 04 августа 2020

Я разработал модуль и собрал образ для архитектуры arm64v8, поскольку мое устройство Edge работает в Raspberry Pi 4. Я правильно получил файл deployment.arm64v8. json в папке config. Но когда я щелкаю правой кнопкой мыши устройство в Visual Studio Code и выбираю «Создать развертывание для одного устройства», модули добавляются, но один из модулей показывает состояние отсрочки. В чем может быть проблема, и строго следовал this do c.

enter image description here

enter image description here

I also tried restarting the services.

enter image description here

Device Information

Host OS: Raspberry OS Architecture: Arm64v8 Container OS: Linux containers

Runtime Versions

iotedged: iotedge 1.0.9.4 Docker/Moby [run docker version]:

введите описание изображения здесь

Обновление:

Я пытаюсь создать образ arm32 на своей 64-битной Windows Dev Machine, я думаю, это причина, по которой я получаю Эта проблема. Теперь у меня есть 3 варианта.

  1. Установить 64-битную версию Raspberry OS отсюда
  2. Настроить 32-битную виртуальную машину и использовать ее как машину разработчика и создать 32-битные образы
  3. У меня уже запущен WSL, может быть, там работает код Visual Studio?

Не могли бы вы сказать мне, что было бы лучше?

1 Ответ

2 голосов
/ 07 августа 2020

Было несколько проблем, в которых я ошибался. Во-первых, я пытался создать образ arm64 на своей 64-битной Windows Dev Machine, а затем развернуть образ на arm32 Raspbian OS, что никогда не сработает. Вы можете увидеть версию и другие сведения, выполнив следующие команды.

enter image description here

If it says aarch64 then it is 64 bit. If it says armv7l then it is 32 bit. In my case, it is arm71. So now I had to build an arm32 container images on my 64 bit Windows Host machine and use it on my Raspberry Pi 4. According to this do c, это определенно возможно.

Вы может создавать образы ARM32 и ARM64 на машинах x64, но вы не сможете их запустить

Запуск не был моей проблемой, так как мне просто нужно было создать образ, и я буду использовать его в своей Raspberry Число Пи. Чтобы заставить его работать, мне пришлось изменить свой Dockerfile.arm32v7, в частности первую строку, в которой мы извлекаем базовый образ.

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim-arm32v7
WORKDIR /app
COPY --from=build-env /app/out ./

RUN useradd -ms /bin/bash moduleuser
USER moduleuser

ENTRYPOINT ["dotnet", "SendTelemetry.dll"]

Образ "build-env" должен иметь ту же архитектуру, что и основная ОС , окончательный образ должен быть архитектурой целевой ОС. После того как я внес изменения в файл docker, я изменил версию в файле module.json внутри папки моего модуля, так что новое изображение с новым тегом будет добавлено в Реестр контейнеров, когда я использую опцию Build and Push IoT Edge Solution после щелчка правой кнопкой мыши deployment.template.json, а затем я использовал параметр Create Deployment for Single Device после щелчка правой кнопкой мыши по имени устройства в Visual Studio Code. А затем, когда я слежу за устройством (параметр «Начать мониторинг встроенной конечной точки события»), я получаю следующий результат.

enter image description here

Support with Microsoft was really cool with this issue. They really helped me to solve this Проблема GitHub , которую я опубликовал.

...