Intel GalileoはArduinoとx86プロセッサが載っているヤバいかっこいいボードPCです。Linuxも動きます。
備忘録としてLinux導入からgccのインストールまでを書いておきます。
作業環境ですが、今回はWindows 7で行いましたが、シリアルコンソール(最悪なくても良い)とSSHが各自で用意できる環境なら特に問題無いと思います。
手順の流れ
- Galileoのファームウェアのアップデート
- microSDカードのフォーマット
- microSDカードへLinuxイメージをコピー
- GalileoでmicroSDから起動
- パッケージマネージャの設定
- 各パッケージのインストール
- 動作確認
1. Galileoのファームウェアのアップデート
GalileoのファームウェアはArduino IDEから行います。
この辺は解説サイトがあったのでそちらを参考に。
GalileoにUSBケーブルを接続する場合、USBケーブルを接続する前にACアダプタを接続して通電させておかないとGalileoが破損する可能性があるようです。解説サイトにも記述されてますが念のため。
Intel Galileo FWアップデート、シリアルコンソール・Ethernetリモート接続
私はGalileo用のUSB-Serialケーブルがあったのでしませんでしたが、telnetをスケッチから起動してifconfigの結果をシリアルに吐き出させることでIPアドレスを取得できるらしいです。
2. microSDカードのフォーマット
FAT32でフォーマットされている必要があります。フォーマットをする場合、Windows標準のフォーマッタでは不具合が出る場合があるため、以下のフォーマッタを使用してください。
SD/SDHC/SDXC用 SDフォーマッター4.0 - SD Association
3. microSDカードへLinuxイメージをコピー
Intelの公式サイトでLinuxイメージが配布されています。SD-Card Linux Imageをダウンロードしてください。
Galileo Software Downloads | Intel Communities
現在のバージョンは1.0.4だったので、ダウンロードしたファイルの名前はSDCard.1.0.4.tar.bz2
でした
これを展開すると4つのファイルと1つのフォルダが展開されます。
- boot
- bzImage
- core-image-minimal-initramfs-clanton.cpio.gz
- grub.efi
- image-full-galileo-clanton.ext3
これをmicroSDのルートディレクトリにコピーします。
4. GalileoでmicroSDから起動
用意したmicroSDをGalileoにセットしてUSB-Serialケーブル、LANケーブルを繋ぎます、Tera Termで接続し、ACアダプタを接続します。ボーレートは115200baudです。
Galileo用のUSB-Serialケーブルを初めて使用する場合、ドライバのインストールが必要になります。Windowsの場合、ドライバはIntelの公式サイトで配布しているArduino IDE内のhardware\arduino\x86\tools
の中にありました。
ACアダプタを接続すると、大量のブートログが流れたあとにログイン画面になります。
Poky 9.0.2 (Yocto Project 1.4 Reference Distro) 1.4.2 clanton /dev/ttyS1
clanton login:
rootでログインできるのでログインします。
microSDからブートしているか確認のために、以下のコマンドを実行します。
$ ls /media/mmcblk0p1/
boot
bzImage
core-image-minimal-initramfs-clanton.cpio.gz
grub.efi
image-full-galileo-clanton.ext3
先ほどmicroSD内にコピーしたファイルのファイル名が出力された場合、microSDから起動できているようです。
5. パッケージマネージャの設定
IntelがGalileo用にビルドしたこのLinux(clantonと言うらしいです)はパッケージマネージャにopkgを採用しています。
標準ではopkgのソースリストが空なので、手動で追加してやります。
$ vi /etc/opkg/base-feeds.conf
Galileo Package Repo Configuration Instructionsより、以下の3行を追加します。
src/gz all http://repo.opkg.net/galileo/repo/all
src/gz clanton http://repo.opkg.net/galileo/repo/clanton
src/gz i586 http://repo.opkg.net/galileo/repo/i586
ソースリストを反映させます。
$ opkg update
6. 各パッケージのインストール
gccをインストールする場合、以下のようなエラーが発生します。
Collected errors:
* check_data_file_clashes: Package uclibc wants to install file /lib/libuClibc-0.9.34-git.so
But that file is already provided by package * libc0
* check_data_file_clashes: Package uclibc wants to install file /lib/libc.so.0
But that file is already provided by package * libc0
* check_data_file_clashes: Package uclibc wants to install file /lib/ld-uClibc-0.9.34-git.so
But that file is already provided by package * libc0
* check_data_file_clashes: Package uclibc wants to install file /lib/ld-uClibc.so.0
But that file is already provided by package * libc0
* opkg_install_cmd: Cannot install package gcc.
gccのインストールの際にuClibcが同時にインストールされますが、一部のファイルがlibc0によって既に提供されているためuClibcが正常にインストールができずにインストールに失敗します。
その為、まずuClibcを強制的にインストールし、その後gccをインストールします。
$ opkg install --force-overwrite uclibc
$ opkg install gcc
makeとかビルドに必要なパッケージもインストールする場合はこちらで。
$ opkg install packagegroup-core-buildessential
7. 動作確認
ほとんどおまけです。
$ vi hello.c
#include <stdio.h>
int main(void){
printf("Hello world!\n");
return 0;
}
$ gcc hello.c -o hello
$ ./hello
Hello world!
終わりに
デフォルトでSSHが動作していたので、動作中のGalileoのIPアドレスを取得したらほぼゴールです。
uClibcを使っているため、ある程度大規模なソースコードになるとライブラリが足りないなどでコンパイルに失敗すると思います。
小規模なコードなら今回の方法で良いと思いますが、基本的にクロスコンパイルを行うべきです。