カテゴリー別アーカイブ: プログラミング

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表示で使っています。

HiKeyでディスプレイが表示されない問題

前回の続きです。

ファームを更新しただけでは状況は改善されず、依然としてディスプレイには何も表示されません。困った時のシリアルコンソール、ということでUSB UARTアダプタを追加で入手しました。が、これは根本的な解決にはなりません。githubにあるドキュメントWikiをしっかり読み直します。

ドンピシャな情報がありました。起動後に "右Alt + PrintScr + G" の同時押しで、EDIDのモードを一つずつ手動で切り替えられるようです。UARTアダプタをHiKeyに接続し、PCとmicroUSBで接続し、TeraTermでシリアルポートを開いておけば自動ログインしてくれます。

この状態で上記のキーを同時押しする度に解像度とリフレッシュレートが変更され、シリアルコンソールに表示中の値が表示されます。何度か押していくと、ディスプレイに表示されました。この時の解像度とリフレッシュレートを、HiKeyのブートパラメータに追加します。私の環境では 1920x1200 @59Hz でした。これを

$ sudo vi /boot/grub/grub.cfg
...
linux ~ video=HDMI-A-1:1920x1200@59

のようにしてgrubの設定ファイルのlinux行の末尾に追記します。追記したら再起動しましょう。通常であればこれで画面が表示されるようになります。

続きを読む

7インチ IGZO LCDパネル

HiKeyの話の途中ですが、微妙に脱線です。

有線も無線もない社外でRaspberry Pi等をセットアップする際にディスプレイが欲しい、という状況が何度かあり、持ち運び可能なディスプレイを捜していました。ノートPCのモニタに表示させることができればいいのですが、ノートPCのHDMI等は出力端子なのでそんなことは無理です。

しばらく捜していたのですが、昨年末からSHARPの7インチ IGZO LCDパネル秋月で取り扱いが始まりました。ちょっと遅れましたが、これを入手しました。もちろん裸では持ち歩けるはずがありませんので、アクリルのケースも購入して組み立てました。

HDMI入力で、デフォルトの解像度は1200x1920のポートレート表示です。7インチでこの解像度だと細かすぎる気がしないでもないですが、気にしない方向で。

電源に使うUSBケーブルは、細いものを選択しました。

同様に、HDMIケーブルも細いものにしました。

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で試す その7 uImageの生成

前回の続きです。引き続きTutorialFPGAの部屋を参考にします。

ここからまたLinuxに戻り、Linux Kernelをリビルドします。まずはkernel sourceをgit gloneしてきます。ここでもmaster-nextブランチです。また、ほぼ1GBあるので時間が掛かるのでご注意下さい。DLが済んだらmakeしていきます

$ git clone -b master-next https://github.com/DigilentInc/Linux-Digilent-Dev.git
...
$ cd Linux-Digilent-Dev
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig
...
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
...

ビルドに足りないツールがあった場合はコンパイルエラーになります。私の環境では bc コマンドを追加でインストールしました。Debianであれば事前にkernel-packageを入れておけば無難かも知れません。

$ sudo apt-get update
$ sudo apt-get install bc
...
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
...

インストール後に再度makeを実行しましょう。私の手元の環境では約20分でビルドが完了しました。ビルドしたイメージは arch/arm/boot/zImage として生成されています。

次にuImageを生成しますが、それにはmkimageコマンドが必要です。mkimageが見つからない場合は、以前u-bootをコンパイルしたディレクトリ内のtoolsディレクトリにPATHを通します (ディレクトリは環境に合わせて適宜変更して下さい)。

$ export PATH=$PATH:~/zynq/u-boot-Digilent-Dev/tools
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage

arch/arm/boot/uImageが生成されました。

ZyboをTutorialで試す その6 BOOT.binの生成

続きです。引き続きTutorialFPGAの部屋を参考にします。

ここからまたWindowsに戻ります。Vivadoでzybo_bsd.xprを開きます。FileメニューからExport→Export Hardwareを選択するとExport Hardwareダイアログが表示されます。Include bitstreamにチェックを入れてOKをクリックします。

続いてFileメニューからLaunch SDKを選択します。Launch SDKダイアログが表示されるので、デフォルトのままOKをクリックします。しばし待つとEclipseベースらしきSDKのIDE (GUI)が立ち上がります。セキュリティの確認ダイアログが表示された時はプライベートネットワークのアクセスを許可して下さい。

SDKの真ん中のペインにsystem.hdfが表示されていると思います。Address Mapの一覧にmyLed_0があることが確認できます。

FileメニューからNew→Application Projectと選択すると、Application Projectダイアログが表示されます。Project Nameに "FSBL" と入力し、他の項目はデフォルトのままNextで次へ進みます。Template一覧からZynq_FSBLを選択し、Finishをクリックします。しばらく待つとSDKの真ん中のペインに system.mss タブが追加されます。

さて、ここで、電源on/offの前後でもZyboのMACアドレスが変わならいようにするため、ファイルを一つ差し替えます。Zynq Base Systemのsource/vivado/SDK/fsbl/fsbl_hooks.cを適当なエディタで開いて全体をクリップボードにコピーします。続いてSDKの左側ペインからFSBL→src→fsbl_hooks.cと選択してファイルを開き、全体を選択して丸々ペーストして保存します。

編集後の保存時に自動でリビルドされますが、気になるようであればProjectメニューからClean...を選択し、表示されたダイアログのOKをクリックするとクリーン後に自動ビルドされます。ビルドされたファイルは source\vivado\hw\zybo_bsd\zybo_bsd.sdk\FSBL\Debug\FSBL.elf として出力されています。

SDK左側ペインのProject ExplorerからFSBLを右クリックし、Create Boot Imageを選択すると、Create Zynq Boot Imageダイアログが表示されます。Boot image partitions一覧にデフォルトでFSBL.elfとsystem_wrapper.bitは入っていますので、右側のAddボタンでAdd partitionダイアログを開き、LinuxでビルドしてWindowsにコピーしてきたu-boot.elfを選択します。Partition Typeが(デフォルトの)datafileになっていることを確認してOKでダイアログを閉じ、Boot image partitions一覧にu-boot.elfが追加されたことを確認します。

Output pathのBrowseボタンをクリックして出力先をZybo Base Systemのsd_image/BOOT.binに変更し、"Create Image"ボタンでBOOT.binを生成します。