このページは pcDuino の linux kernel をを安定させるために試したこと書いた記録です。
pcDuino の linux kernel は元のままでは不安定です。次の様な問題に遭遇します。
ubuntu distoribution が必須です。ubuntu 12.04 LTS で構築に成功しています。他の distoribution はコンパイルを完了するまでに修正を加えたりパッケージを探してインストールする作業が増えます。
項目 | 仕様 |
---|---|
distoribution | PC 向け 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 の問題点と課題は次の通りです。
次のコマンドにて 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) 版では 32bit binary を動かすためのパッケージが必須になります。次のコマンドにてインストールしてください。
% sudo apt-get install ia32-libs
ノート: リポジトリ git://github.com/pcduino/kernel.git にバイナリのみ提供されているツールが存在します。そのため ia32-libs パッケージが必要になります。
ここから先 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 Donemake 中のコンソール出力例
ノート: make コマンド内で並列 job 数を自動的に決定しています。
安定化修正済み 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 します。次のコマンドを入力してください。
% 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 で build します。clone したての working repository を使った build と変わりは有りません。次のコマンドを入力してください。
% cd ~/git/pcduino % ./configure pcduino % make - 出力省略 - CPlugin Free lib CPlugin Free lib Done
ノート: 修正前の build と違いソースにパッチを当てる処理は省略されています。
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 norootfsroot 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 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
ノート: パッチ適用コマンドで警告・エラーメッセージ(このリンク先はメッセージ例です)が表示されます。しかし、パッチは適用されてます。