タグ別アーカイブ: debian

Raspberry Pi 3でErlang

Raspberry Pi 3にErlangを入れてみました。ウェブではソースからインストールする情報が見つかりますが、面倒なのでErlang Solutionsが公開しているdebパッケージをインストールします。

$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
$ sudo dpkg -i erlang-solutions_1.0_all.deb

Debianのコードネームを求められるので、jessieと入力します。するとapt lineが追加されますので、いつも通りにapt-getしましょう。なお、Erlang Solutionsからはerlangパッケージとesl-erlangパッケージの二つがリリースされていますが、今回は前者を入れてみます。

$ sudo apt-get update
$ sudo apt-get install erlang
...
$ erl
Erlang/OTP 18 [erts-7.3] [source] [smp:4:4] [async-threads:10] [kernel-poll:false]

Eshell V7.3  (abort with ^G)
1>

50個近いパッケージが芋蔓式にインストールされました。erlを起動してみると、ちゃんと4コア認識されていることが確認できます。素晴らしい。

LinuxのストレージをSSDに換装

開発でメインに使っているPC (DELL Precision T5500)のストレージを、HDDからSSDに換装しました。2.5インチ→3.5インチ変換アダプタも合わせて購入しました。

最初は単純にSSDをSATA 2に接続し、rescue modeでDebianを起動して

# ddrescue -f -v -r 3 /dev/sda /dev/sdb

し、shutdownした後にHDDをSATA 0から外してSSDをこちらに繋ぎ直し、再起動で一応Debianが起動しました。が、いくつか問題が。

  • fdiskを実行するとエラーが表示される。パーティションの開始セクタがおかしいらしい
  • 元のHDDのfsはext3だが、SSDのfsはext4の方がいいらしい
  • 起動時にエラーが表示される (起動はする)。fsck.ext4が見つからないらしい

続きを読む

Raspberry Pi 3

桜も開花し、ようやく本格的に春めいてきました。花粉が飛び交っていますが、これからアクティブティを上げてきたいと思います。

さて、先月末に発表されたRaspberry Pi 3ですが、ようやく国内でも入手できるようになりました。私も数台入手して、セットアップしました。3になってデフォルトでWi-Fiが搭載され、LANケーブルを引き摺り回さなくて済むようになったのは嬉しいのですが、電源が5V 2.5Aを要求するようになったが地味に痛いです。

今回は4台でクラスタを組むつもりなので、Ankerの6ポート60WのUSB電源を購入しました。電源コードが付くので自由度が高いのもいい感じです。

各ポート2.4Aで微妙に2.5Aに足りていませんが、スイッチサイエンスによると2Aでも動作するらしいので気にしない方向で。USB電源ケーブルは細くて取り回し易いのを選択しました。

4台をスタックするために20mm M2.6の六角スペーサーを捜したのですが、直ぐに手に入るものが見つからなかったので、10mmのものを2本繋いで20mmにすることにしました。microSDはいつものTranscend Class10のものです。

続きを読む

96Boards Dragonboard 410c

HiKeyに続いてDragonBoard 410cも入手しました。こちらはQualcomm製のSnapdragon搭載のシングルボードコンピュータです。もちろんGPUも搭載されています。ちなみに、製品版ではSoCチップ等がシールドで囲われています (もしかしたらシールド兼ヒートシンクかも知れません)。

デフォルトではAndroidがインストールされていますので、Debianを入れ直します。手順はドキュメント (PDF)の通りで何も難しいことはありません。microSDを用意するのが面倒だったので、HiKey用にインストール済みだったfastbootを使いましたが、詰まるポイントもなく、簡単に更新できました。

また、Dragonboardの方はブートパラメータの設定変更等は一切必要なく、一発でSHARPの7インチLCDパネルへの1200x1920表示もできました。HiKeyのイメージは昨年11月末のもの、Dragonboardのイメージは今年2月末のもの、ということでこの数ヶ月分のアドバンテージがあったということでしょうか。

2016/03/18追記: xrandrで1920x1200のlandscape表示ができましたが、画面最下部までマウスカーソルを動かせないという不具合(?)があるため、今は素直にportrait表示で使っています。

96Boards HiKey LeMaker

96Boards HiKey LeMaker

ARM系のシングルボードコンピュータがどんどん増えてきます。64bit 8コアのHiKey LeMaker版を入手しました。ARMのGPUであるMali-450MPを搭載しているのでOpenCLを試そうと思ったのですが、残念ながらこのGPUはOpenCLに対応していないとのこと。

箱から出してすぐ使えるようになっているそうなので、12V 2Aの電源アダプタも購入してHDMIでディスプレイを繋いでさっそく動かしてみました。が、ウチにあるDELLの24インチディスプレイは認識されないのか何なのか画面が表示されません。参りました。

とりあえず、ファームを最新版に更新してみることにしました。HiKeyにはeMMCストレージが搭載されていますので、このままSDカードは使わずに済ませましょう (アイキャッチ画像のボードにはmicroSDを刺していますが、実際には使っていません)。ファーム更新の手順はgithubにある96BoardsのドキュメントWikiに記述されている通りです。

自宅のWindows PC上のVMWareに入れてあるDebianにandroid-fastboot-toolをインストールし、イメージファイルをDLしてfastbootで焼くだけです。ちなみに上記のドキュメントでは途中で

$ sudo fastboot reboot

が入っていますが、これを行うとfastbootでデバイスが認識されなくなってしまいましたので、この行は飛ばしました。

さて、これでファームの更新は完了です。再度ディスプレイの認識に挑戦してみましょう。

ZyboをTutorialで試す 番外編3 Debian起動

前回作成したmicroSDからDebianを起動します。

  1. J4にmicroSDを挿入
  2. JP5を "SD" に変更
  3. J11にmicroUSBケーブルを接続、もう片方の端をPCに接続
  4. J3にLANケーブルを接続
  5. J15に5V 3AのACアダプタを接続
  6. SW4で電源ON
  7. PCでTera Term等を立ち上げ、COMポートを指定して接続
  8. ブートメッセージが表示され、rootユーザで自動ログインすることを確認

となれば成功です。COMポート番号はWindowsのデバイスマネージャで確認できます。ifconfigコマンドを見るとDHCPからIPアドレスを取得できていることが分かります。

ただ、このまま使うにはいくつか課題が残っています;

  • 起動時の立ち上げに失敗しているデーモンがあるっぽい
    • acpidの起動後、一時的にメッセージが文字化けを起こしてた?
  • 時計が狂っている (要NTPクライアント)
  • /etc/resolv.confがない
  • rootユーザで自動ログインしたくない

/etc/resolv.confについては(乱暴ですが)手動でnameserver 8.8.8.8とか設定してしまえば解決します。DNSが引けるようになったらapt-getで最新のパッケージに更新できます。まずはNTPクライアント(ntpdate等)を入れておきましょう。不要なデーモンはパッケージごと削除してよいと思います。その次に日本語化でしょうか。この辺の作業はまた別途整理します。

ZyboをTutorialで試す 番外編2 microSDの作成

前回の続きです。チュートリアルはまだこの先がありますが、ここから脱線します。チュートリアルではram diskを使うようにしていますが、microSDのパーティションを切って、Debianを入れてみようと思います。

参考にするのは、今回もFPGAの部屋です。

まずmicroSDカードを用意します。class 10で8GBもあれば十分だと思いますが、32GBのが手元にあったのでこれを使います。gpartedやcfdisk等を使って、ブート用の基本パーティションに1GB割り当て、残りをrootfs用の基本パーティションに割り当てました。私の環境ではそれぞれ/dev/sdb1と/dev/sdb2になりました。

ブート用のパーティションはWindowsからも読み書きできる必要があるのでFAT32、rootfsはLinuxから読めれば問題ないのでext4でフォーマットします。ラベルは前者をZYBO_BOOT, 後者をrootfsとしました。

これまでの作業で作成済みのuImageBOOT.binをZYBO_BOOTパーティションにコピーします。

Linux KernelソースのあるLinux-Digilent-Devの下、arch/arm/boot/dtsにあるデバイスツリーのソースファイルzynq-zybo.dtsを修正します。bootargsはLinuxブート時のカーネルオプション、operating-pointsは動作周波数とコア電圧の組み合わせだそうで、この値を修正しない時計が狂うとのこと。修正が済んだらscripts/dtc/dtcコマンドで変換します。

$ cd arm/boot/dts
$ cp zynq-zybo.dts zynq-zybo.dts.orig
$ vi zynq-zybo.dts
...
 /* bootargs = "console=ttyPS0,115200 root=/dev/ram rw earlyprintk"; 下記のように変更 */
 bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfs=ext4 rootwait devtmpfs.mount-1";
...
 /* operating-points = <666667 1000000 333334 1000000 222223 1000000>; 下記のように変更 */
 operating-points = <650000 1000000>;
...
$ ../../../../scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb zynq-zybo.dts

生成されたdevicetree.dtbはmicroSDのZYBO_BOOTパーティションにコピーします。さらに、u-bootの設定ファイルuEnv.txtを作成します。

$ vi uEnv.txt
uenvcmd=fatload mmc 0 0x03000000 uImage && fatload mmc 0 0x02A00000 devicetree.dtb && bootm 0x03000000 - 0x02A00000

これもmicroSDのZYBO_BOOTパーティションにコピーします。この時点でZYBO_BOOTパーティションには以下のファイルが配置されているはずです;

  • BOOT.bin
  • uImage
  • devicetree.dtd
  • uEnv.txt

以上でブートのための準備は完了です。次にrootfsを用意します。rootfsには選択肢がいくつかあります;

  • どこの配布物を使うか? Linaro / ARMhf / etc...
  • どのディストリビューションにするか? Debian / Ubuntu / etc...
  • どのイメージ(パッケージ)を使うか? nano / developer / alip / etc...

今回は、Linaroの配布するDebian 8.3のdeveloperイメージの最新版を利用することにしました。普通にtarで展開するとbinaryディレクトリが生成されるので、これを削除するために "--strip-components=1" を渡します。展開先のmicroSDのrootfsパーティション (ここでは/media/USERNAME/rootfs) は環境に合わせて適宜変更して下さい。

$ wget https://releases.linaro.org/debian/images/developer-armhf/latest/linaro-jessie-developer-20160126-11.tar.gz
$ sudo tar --strip-components=1 -C /media/USERNAME/rootfs -xzvpf linaro-jessie-developer-20160126-11.tar.gz
...

これでmicroSDから起動する準備が完了しました。

ZyboをTutorialで試す 番外編1 Vivadoセットアップ(Debian)

番外編(?)です。

前回、ビットストリームを生成できましたので、次はU-Bootのコンパイルなのですが、ここからはLinuxのクロス環境で作業します。Debian testing環境上にVivado WebPACKをインストールしようとしたところ、64bit環境なのが正しく検出されずインストールできません。

これに対応するには、インストーラの起動オプションに--confirmを付けて、展開されたインストールスクリプトを手動で編集する必要があります。詳細はXilinxのフォーラムを参照して下さい。

2016/02/07追記: sudoでrootとしてインストールするとMATEのアプリケーション一覧に登録されないので、sudoを使わず一般ユーザ権限でインストールするように変更しました;

$ chmod +x ./Xilinx_Vivado_SDK_2015.4_1118_2_Lin64.bin
$ sudo chmod 777 /opt
$ ./Xilinx_Vivado_SDK_2015.4_1118_2_Lin64.bin
...
ERROR: This installation is not supported on 32 bit platforms.
$ ./Xilinx_Vivado_SDK_2015.4_1118_2_Lin64.bin --confirm
...
About to extract 19 KB in /tmp/xxxxxxxxxx ... Proceed ? [Y/n]
...
OK to execute: ./xsetup   ? [Y/n]

最初の確認メッセージで、インストーラの展開先が分かります。二つ目の確認メッセージでエンターを押して先に進める前に、別のターミナルを開くあるいはCtrl-Zでインストーラを中断して、インストールスクリプトを編集します。

$ vi /tmp/xxxxxxxxxx/xsetup
...
# ERROR out if this installation is running on 32 bit OS
# and does not support 32 bit installation
if [ "$(uname -m)" != "x86_64" ]; then
...

unameコマンドのオプションを -i から -m に変更して保存し、インストーラに戻ってxsetupを実行します。インストーラを進めていくと、インストールするコンポーネントの選択画面が表示されます。どうやらデフォルトでは "Software Development Kit" (SDK)が選択されていませんので、これにチェックを忘れず入れて、インストールを進めましょう。

続きを読む

Parallellaでクラスタリング その2 NFSの導入

2016/08/03追記: 新しいファームがNFSv4に対応しましたので、新たに記事を起こしました。こちらのNFSv3対応の記事は参考程度にご覧下さい。

ちょっと前の記事でクラスタリングを組んだことを書きましたが、アプリをコンパイルする度にバイナリを各ノードにコピーするのが面倒になったので、NFSを使ってファイルを共有することにしました。Parallellaのlinux kernelはNFSサーバ非対応なので、母艦をNFSサーバにします。

まず母艦のdebianにnfs-kernel-serverを入れて、設定を行います。USERNAMEは母艦でのユーザ名です。マウントポイント~USERNAME/parallellaは192.168.100.0/24以下からmountできるようにしておきます。

$ sudo apt-get install nfs-kernel-server
...
$ sudo vi /etc/idmapd.conf
...
Domain = ドメイン
...
$ sudo vi /etc/exports
/home/USERNAME/parallella 192.168.100.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check)
$ mkdir parallella
$ systemctl restart nfs-kernel-server

続きを読む

Parallellaのストレージ拡張

ParallellaのイメージをmicroSDに焼くと、100MBのboot領域 (/dev/sdb1)と3.5GBのroot領域 (/dev/sdb2)が作成されます (デバイスファイルのパスは環境に依存しますのでご注意下さい)。gunzipしたイメージファイルがおよそ4GBですので、そんなもんでしょう。しかし16GBのmicroSDにイメージを焼いた場合、残りの12GBはまったく使われない領域として残されます。

この領域を活用する一つの方法は、残りの領域を/dev/sdb3としてパーティションを切ってフォーマットして、マウントしてしまうことです。もう一つの方法は、GParted等のツールでroot領域を拡張することです。今回は後者を行ってみます。

続きを読む