Build pcDuino stable kernel and u-boot

このページは pcDuino の linux kernel をを安定させるために試したこと書いた記録です。

安定化前に見られる pcDuino の問題点

pcDuino の linux kernel は元のままでは不安定です。次の様な問題に遭遇します。

構築環境

ubuntu distoribution が必須です。ubuntu 12.04 LTS で構築に成功しています。他の distoribution はコンパイルを完了するまでに修正を加えたりパッケージを探してインストールする作業が増えます。

項目仕様
distoributionPC 向け Ubuntu 12.04 LTS (後継リリースではパッケージ名、構成変更が有るかもしれません)
プロセッサIntel Core i3 とほぼ同等またはこれ以上の処理能力があるプロセッサ(作業性に問題が無い程度の推奨です)。 32bit, 64bit どちらでも使用可能
Ubuntu の SystemRequirements が最低限の必須環境です
メモリプロセッサが実行可能な thread 数 x 512Mibyte 以上有るのが望ましい
インターネット接続git が使用する TCP port 9148 に接続できる環境

手順概要

次の手順で pcDuino 安定化 kernel を構築します。前半は元の repository をそのままコンパイルできるか確認します。後半より安定化修正済み repository を追加、checkout してコンパイルを実施します。

問題点と課題

安定化 kernel u-boot の問題点と課題は次の通りです。

必須パッケージインストール

ubuntu 32bit(i686) 版 64bit(x86_64) 版に共通する必須パッケージ

次のコマンドにて pcDuino の kernel と u-boot をコンパイルするのに必須なパッケージをインストールしてください。

% sudo apt-get update
% sudo apt-get upgrade
% sudo apt-get install build-essential u-boot-tools uboot-mkimage \
  binutils-arm-linux-gnueabihf g++-arm-linux-gnueabihf gcc-arm-linux-gnueabihf \
  cpp-arm-linux-gnueabihf libusb-1.0-0 libusb-1.0-0-dev git wget fakeroot \
  kernel-package zlib1g-dev libncurses5-dev

ubuntu 64bit(x86_64) 版のみ必須パッケージ

ubuntu 64bit(x86_64) 版では 32bit binary を動かすためのパッケージが必須になります。次のコマンドにてインストールしてください。

% sudo apt-get install ia32-libs

ノート: リポジトリ git://github.com/pcduino/kernel.git にバイナリのみ提供されているツールが存在します。そのため ia32-libs パッケージが必要になります。

git repository を clone する

ここから先 git repository clone 先を ~/git/pcduino、テストコンパイル作業場所を ~/git/pcduino-orig として説明します。次のコマンドを入力して github に公開されている git repository を clone して下さい。pcduino は安定化パッチ作業用で使用します。pcduino-orig はテスト コンパイルで使用します。

ノート: 安定化修正済み repository を追加するのではなく、パッチを当てて対応する場合は「附録: git repository を追加するのではなく修正パッチを適用する」に示す作業を「git repository を clone する」、「安定化修正済み repository を追加する」、「安定化修正済み branch を checkout する」作業の代わりに行ってください。

% mkdir ~/git
% cd ~/git
% git clone --recursive git://github.com/pcduino/kernel.git pcduino
% cd pcduino
% git tag -a -m "Begin stabilize pcduino fix." pcduino-cool-clock-base
% git submodule foreach 'git tag -a -m "Begin stabilize pcduino fix." pcduino-cool-clock-base'
% cd ..
% git clone --recursive pcduino pcduino-orig

ノート: git プロトコルが使えない場合は git://github.com/pcduino/kernel.git を https://github.com/pcduino/kernel.git に読み替えてください。

ノート: 上記のコマンドは作業開始点を識別する pcduino-cool-clock-base tag を付る操作が含まれています。

テスト コンパイル

次の様にしてコンパイルが可能かテストします。このテストでビルドしたバイナリを Micro SD に書き込んでも不安定なままです。

% cd ~/git/pcduino-orig
% ./configure pcduino
% make
- 出力省略 -
CPlugin Free lib
CPlugin Free lib
Done
make 中のコンソール出力例

ノート: make コマンド内で並列 job 数を自動的に決定しています。

安定化修正済み repository を追加する

安定化修正済み repository を追加します。次のコマンドを入力してください。

% cd ~/git/pcduino
% git remote add -f pcduino git://www.ftechworks.mydns.jp/pcduino/kernel.git
% cd linux-sunxi
% git remote add -f pcduino git://www.ftechworks.mydns.jp/pcduino/linux-sunxi.git
% cd ../u-boot-sunxi
% git remote add -f pcduino git://www.ftechworks.mydns.jp/pcduino/u-boot-sunxi.git
% cd ..

安定化修正済み branch を checkout する

安定化修正済み branch を checkout します。次のコマンドを入力してください。

% cd ~/git/pcduino
% git checkout pcduino-cool-clock
% cd linux-sunxi
% git checkout pcduino-cool-clock
% cd ../u-boot-sunxi
% git checkout pcduino-cool-clock
% cd ..

ノート: 次の様なエラーが発生した場合、前に行った make で生成・修正されたファイルが障害になっています。git checkout を git checkout -f に読み替えてコマンドを実行してください。修正が行われたファイルを強制的に復帰します(編集結果は全て失われます)。

error: The following untracked working tree files would be overwritten by checkout:
	drivers/hardwarelib/Kconfig
Please move or remove them before you can switch branches.
Aborting

ノート: checkout した branch は元の pcDuino が提供していた arduino 互換用 kernel module が含まれていません。ソースコードが入手できないためです。

安定化修正済み branch で構築する

安定化修正済み branch で build します。clone したての working repository を使った build と変わりは有りません。次のコマンドを入力してください。

% cd ~/git/pcduino
% ./configure pcduino
% make
- 出力省略 -
CPlugin Free lib 
CPlugin Free lib 
Done

ノート: 修正前の build と違いソースにパッチを当てる処理は省略されています。

安定化修正済み kernel と u-boot を micro SD にインストールする

pcDuino の Download ページから micro SD boot image をダウンロードして Micro SD に書きこんだ後、次のコマンドを入力して安定化 kernel と u-boot に差し替えます。ここでは micro SD を /dev/sdf ノードとして認識したと想定して記述します。コマンド引数にある「日付」部分は YYYYMMDD 形式の構築年月日です。

ノート: micro SD がどのノード(デバイス)として認識されたかは、micro SD を挿入(あるいは USB カードリーダーと共に接続した直後)に dmesg コマンドで確認できます。

% cd ~/git/pcduino
% cd scripts
% sudo ./sunxi-media-create.sh /dev/sdf  ../output/pcduino_a10_hwpack_日付.tar.xz norootfs
root file system image (/ directory 以下全て)を boot image などから .tar.gz, .tar.bz2, .tar.xz, .7z いずれかの形式で収集している場合は、次の様なコマンド入力で micro SD に boot に必要な全ての書き込みができます。
% cd ~/git/pcduino
% cd scripts
% sudo ./sunxi-media-create.sh /dev/sdf  ../output/pcduino_a10_hwpack_日付.tar.xz root_filesystem_image.tar.gz

附録: git repository を追加するのではなく修正パッチを適用する

概要

安定化修正済み git repository を追加するのではなく、修正差分パッチを適用する手順の概要は次の通りです。

パッチ適用作業

git repository clone 先を ~/git/pcduino、テストコンパイル作業場所を ~/git/pcduino-orig として説明します。down_loaded_pathを 修正パッチ pcduino-cool-clock-diff.tar.gz をダウンロードしたパスとします。

% midir ~/git
% cd ~/git
% tar zxvf down_loaded_path/pcduino-cool-clock-diff.tar.gz
% git clone --recursive git://github.com/pcduino/kernel.git pcduino
% cd pcduino
% git tag -a -m "Begin stabilize pcduino fix." pcduino-cool-clock-base
% git submodule foreach 'git tag -a -m "Begin stabilize pcduino fix." pcduino-cool-clock-base'
% cd ..
% git clone --recursive pcduino pcduino-orig
% cd pcduino
% git apply ../pcduino-cool-clock-diff/kernel.diff
-- 警告メッセージが表示されます。パッチは適用されています --
% cd linux-sunxi
% git apply ../../pcduino-cool-clock-diff/linux-sunxi.diff
-- 警告メッセージが表示されます。パッチは適用されています --
% cd ../u-boot-sunxi
% git apply ../../pcduino-cool-clock-diff/u-boot-sunxi.diff

ノート: パッチ適用コマンドで警告・エラーメッセージ(このリンク先はメッセージ例です)が表示されます。しかし、パッチは適用されてます。


ホームページへ 関連blog