.NET Core on BeagleBone Green(Debian 9.1)
BeagleBone Greenで.NET Coreを動かしてみました。
動機
BeagleBone GreenでAzure IoT Edgeが動くか試していて、Cサンプルが動くところまでは出来ました。 でも、Cだと開発がツライ。できればC#使いたい。ので、.NET Coreをインストールしたのですが、packageが無いとエラーに。
debian@beaglebone:~/iot-edge/build$ sudo apt-get install dotnet-sdk-2.0.0 E: Unable to locate package dotnet-sdk-2.0.0
そもそも、BeagleBone Greenで.NET Coreって動くのか? ということで、調べることにしました。
.NET Core for Linuxはx64だけ
.NET Core 2.0 - Supported OS versionsによると、対応アーキテクチャはx64だけで、ARMは対応外orz
.NET Core 2.0 RuntimeだけならARM32あり
でも、こんな素敵なブログが!
Setting up Raspian and .NET Core 2.0 on a Raspberry Pi
これによると、.NET Coreアプリケーションの開発や実行は、
の3つのコンポーネントに分かれていて、.NET Core RuntimeはARM32でも動くと書いてあります。
RuntimeのDaily Buildsがここにあって、ARM32に相当するLinux(armhf)が存在することが確認できます。
やってみる
BeagleBone Greenのファームウェアを最新にアップデートして、先のブログの手順を実施してみます。
なお、使ったファームウェアはbone-debian-9.1-iot-armhf-2017-08-31-4gb.img。
BeagleBone Greenに.NET Core Runtimeをインストール
Setting up Raspian and .NET Core 2.0 on a Raspberry PiのTask: Install the .NET Core Runtime on the Raspberry Pi.を実行します。
debian@beaglebone:~$ curl -sSL -o dotnet.tar.gz https://dotnetcli.blob.core.windows.net/dotnet/Runtime/release/2.0.0/dotnet-runtime-latest-linux-arm.tarr.gz debian@beaglebone:~$ sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet debian@beaglebone:~$ sudo ln -s /opt/dotnet/dotnet /usr/local/bin
何事もなく終了。
.NET Coreアプリケーションを用意
.NET Coreアプリケーションは、Windows PCのVisual Studioで開発します。
プロジェクトの新規作成で、コンソールアプリ(.NET Core)を選択し、コンソールに適当に表示するコードを用意します。
using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.WriteLine("Hello BBG!"); Console.ReadLine(); } } }
.NET Coreアプリケーションをlinux-arm用に作成して、BeagleBone Greenへコピー
BeagleBone Greenへ持っていく実行ファイル群をWindows PCでdotnet publishコマンドで作成してから、ファイル転送しなければいけません。
具体的には、.csprojのフォルダで、dotnet publish -r linux-armを実行します。
C:\Users\takashi\Desktop\netcore\ConsoleApp1>dotnet publish -r linux-arm
すると、プロジェクト配下のbin\Debug\netcoreapp2.0\linux-armフォルダとbin\Debug\netcoreapp2.0\linux-arm\publishフォルダにそれらしいファイルが出来上がるので、publishフォルダの中身すべてをBeagleBone Greenへコピーします。わたしは、zip圧縮してからTeraTermのSSH SCPでコピーしました。
BeagleBone Greenで.NET Coreアプリケーションを実行
コピーした.NET Coreアプリケーションに実行属性が付いていないので、実行属性を付けてから実行します。
debian@beaglebone:~/netcore$ chmod a+x ConsoleApp1 debian@beaglebone:~/netcore$ ./ConsoleApp1 Hello BBG!
動いた!!!
おまけ
- .NET Core Runtimeをインストールせずに.NET Coreアプリケーションを実行すると下記のエラーが発生する。
debian@beaglebone:~/netcore$ ./ConsoleApp1 Failed to load , error: libunwind.so.8: cannot open shared object file: No such file or directory Failed to bind to CoreCLR at '/home/debian/netcore/libcoreclr.so'
- .NET Core Runtimeをインストールするとディスクを約52Mbytes消費した。
- Debugging .NET Core on Linux #5を参考にリモートデバッグを試したがプロセス一覧から選択した先で接続がプッツリ切れてデバッグできない。(.NET Core Runtimeだけではダメなのかな)