散らばっていたG-Clusterの情報を整理しました.
はじめに
G-Cluster改造は個人的に一区切り付き,放置に近くなっています.
しかし,今見ると情報が散らばり過ぎていてるので,カーネルをビルドしてAlpine LinuxをNANDにインストールするまでをおさらいし,まとめたいと思います.
この記事で行う事
かなり長い記事となっているため,章ごとに区切ってあります.欲しい情報までスキップして利用して下さい.
使用する環境
Ubuntu 22.04の仮想マシンを使用しています.
カーネルのビルド以外そんな重い処理は無いので,VMで十分だと思います.
1. カーネル
この手順は,ビルド済カーネルを使う際にスキップできます.
(↑2024/09/08リンク更新しました。開くのに時間がかかるので注意)
とりあえず動かしたい人はダウンロードして2章まで進んで下さい.
カーネルは,私が移植したLinux 5.15(linux-stable 5.15.y)を使用します(巨大なレポジトリなので開くまで時間がかかります).
作業ディレクトリは,~/gc/
とします.
|
|
1.1 ソフトウェアのインストール
-
ビルドシステムなど
1 2
apt update apt install build-essential bc flex bison libncurses5 libssl-dev git u-boot-tools
-
コンパイラ
URLが変わる可能性があるので,最新版を参照して下さい.
1 2
wget https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz tar xvf arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz
1.2 カーネルソースのダウンロード
|
|
1.3 ビルド
|
|
1.4 後処理
|
|
こうして,全部入ったlinux-dsm232.tar.gz
が完成します.これで配布しているビルド済カーネル相当になります.
2. USBメモリからAlpine Linuxを起動
512MB以上のUSBメモリを用意します.
2.1 パーティショニング
個人の好みで大丈夫なのですが,
- u-bootから参照する
FAT32
パーティション - Linuxのrootfs
の最低2つパーティションが必要となります.
ここでは,rootfsのフォーマットはとりあえずext4
とします.ビルド時に有効にしてあればbtrfs
とかも使えるはずです.
パーティショニングの方法は色々ありますが,例としてGPartedを使ってみます.
|
|
注意!:下記を行うことでディスクが初期化されます
-
パーティションテーブルをMBRに
まず,最近のディスクはGPTとなっている物が多いのでMBRにします.
Create Partition Tableを選択し
msdos
でApply -
パーティションの作成
左上のNew Partitionをクリックし,
このような感じでfat32のプライマリパーティションを作成します.容量は512MBとしました.
同様にrootfsも作成します.こちらはext4で,容量は残り全て(デフォルト値)となっています.
-
ディスクに書き込み
Apply All Operationsをクリックし,ディスクに変更を書き込みます.
以上で,パーティショニングは終了です.
2.2 カーネルのコピー
上記で作ったFAT32の方にuImage
をコピーします.
2.3 Alpineのインストール
2.3.1 必要ソフトウェアのインストール
|
|
2.3.2 Alpine Linuxのコピー
Alpine Linuxのダウンロードページより,Mini root filesystem
のarmhf版をダウンロードします.
とりあえず,今現在のリンクではこんな感じ
|
|
2.3.3 セットアップ
Alpineにchrootします.
|
|
Alpineのシェルにて,以下のコマンドを実行
|
|
アンマウントなど
|
|
2.4 実機で起動
2.4.1 UART結線
DSM-232のUARTは
のように出ているので,クロス(TX->RX,RX->TX)でUSB-シリアル変換等に接続します.
2.4.2 u-bootから起動
-
USBメモリとネットワークインタフェース(携帯のテザリングでも可)を接続し,電源は入れないでおきます.
ネットワークインタフェースは後述のNANDインストール時に使用します.起動するだけなら不要です.
-
ターミナル(Tera Term等)を開き,シリアルポートに接続した上でボーレートを115200に設定します.
-
DSM232の電源を入れた瞬間,ターミナル上で何かボタンを押しっぱなしにして起動プロセスを中断します.
うまくいくと写真の通りU-Bootコンソールに入れます.
ここで,以下のようにコマンドを打ちます.
|
|
しばらくするとログイン画面が出ます.
2.5 ネットワーク設定
|
|
を実行すると,使用しているネットワークインタフェースの名前がわかります.
ここではeth0
だったので,
|
|
とするとDHCPからIPアドレスが設定されます.
ちなみにテザリングだとusb0
等になります.
これで,USBメモリからの起動は終了です.
3. NANDにインストール
いよいよ本体にインストールしていきます.
3.1 ソフトウェアのインストール
|
|
3.2 MTDの操作
|
|
3.3 Alpineインストール
|
|
3.4 カーネルインストール
まず,
|
|
で再起動します.次にU-Bootコンソールに入るため,再起動する瞬間キーを押すことを忘れないで下さい.
U-Bootコンソールにて,以下のようにコマンドを打ちます.
|
|
ここで,出力される
|
|
の読み込みバイト数を16進に変換して下さい.
この場合0x5b2453
となります.
続けて,NANDを消去します.
|
|
そして,書き込む際に上記のバイト数を使用します.
|
|
あとは,起動時の設定を変更します.
|
|
再起動がかかり,USBメモリを抜いても正常に起動するはずです.
なお,カーネルの更新時にはnand writeまでを実行すればよく,envの変更は必要無いです.
alpineは軽量なため,インストール後で80MB程度空いています.
関連リンク
https://blog.haru3.me/posts/20220708-gcluster-archlinux/
https://blog.haru3.me/posts/20220718-gcluster-alpine/
https://blog.haru3.me/posts/20220719-gcluster-nand-boot/
https://blog.haru3.me/posts/20220720-gcluster-linux-stable/
開発中に書いているので,詳細な説明があったりします. 一方,追記だらけで文構成がめちゃめちゃなので実行する際は使いにくかったりします…
そのため,とりあえず実行する手順を並べたのが本記事です.
付録
付録1: カーネルバージョンの更新
カーネルバージョンの更新というか,upstreamに追従する方法です.
なお,コミットログを全て取得する必要があるため5GBぐらいディスクを開けておく必要があります.
|
|
付録2: Raspbianを使う
昔のメモなので正しく使えるかは不明
|
|