🐧 Linux 総合学習プラットフォーム
組込みビルド Yocto/Buildroot ・ 上級

イメージの書き込みと起動確認

ビルドが通っても、実機で起動して初めて完成です。ここでは出来上がったイメージ(sdcard.img や .wic)を microSD に書き込む方法と、その最中に一文字の打ち間違いで別のディスクを壊さないための安全確認を扱います。あわせて、画面もキーボードも無い基板と対話するためのシリアルコンソール、そして電源を入れてから U-Boot → カーネル → ログインプロンプトへと進む起動の流れ、動かないときの当たりの付け方まで通します。

ビルドが緑色で通っても、それはまだ半分だ。出来上がったイメージを microSD に書き込み、基板に挿し、電源を入れて、ログインプロンプトが出て——そこでようやく「動いた」と言える。

この最終工程には、独特の緊張がある。書き込み先を1文字打ち間違えるだけで、パソコン本体のディスクを消してしまう事故が現実に起きるからだ。だからこそ、手順より先に「安全確認」を身体に入れておきたい。

💽 sdcard.img/.wic とは

Buildroot や Yocto がビルドの最後に吐き出すのが、書き込み用のイメージファイルだ。Buildroot では sdcard.img、Yocto では .wic という拡張子でよく出てくる。

このファイルは「microSD 1枚まるごとの丸写し」だ。中にはブートローダ・カーネル・rootfs が、パーティションの区切りごと丸ごと詰まっている。だから展開ではなく、まるごと転写する。

🔗
たとえ.wic/.img は「SDカードの完全なコピー原稿」だ。1バイトずつそっくり写し取るので、書き込み先を間違えれば、その相手も1バイト残らず上書きされてしまう。

🩸 dd は装置名の間違いが即死

イメージを microSD へ丸ごと転写する定番が dd コマンドだ。強力だが無慈悲で、指定した相手に問答無用で書き込む。確認も警告も出さない。

危険なのは of=(出力先)の指定だ。ここに microSD ではなくパソコンの内蔵ディスク(たとえば /dev/sda)を書いてしまうと、OS ごと消える。取り返しがつかない。

つまずきdd の of= に内蔵ディスクを指定する事故は、熟練者でも起こす。だからこそ「書く前に、書き込み先が本当に microSD か」を複数回確かめる習慣が、唯一にして最大の防御になる。

🔎 lsblk で三度確認

書き込み先を見極める道具が lsblk だ。接続中のディスクを一覧で見せてくれる。microSD を挿す前と後で lsblk を打ち、「新しく増えた行」が目的の microSD だと特定する。

サイズ表示も強い手がかりになる。32GB の microSD を探しているのに 500GB と出る行があれば、それは内蔵ディスクだ。名前とサイズの両方で照合する。

$ lsblk NAME SIZE TYPE MOUNTPOINT sda 500G disk └─sda1 500G part / sdb 30G disk ← 挿したら増えたこれが microSD
挿す前 lsblksda 500G└sda1 /内蔵だけ挿す挿した後 lsblksda 500G└sda1 /sdb 30G ←これ増えた行が書き込み先
💡
ポイント書き込み先の特定は「挿す前 lsblk → 挿す → もう一度 lsblk → 増えた行を確認」の3段で行う。名前とサイズが一致して初めて of= に指定する。焦って一発で決めない。

of= には、パーティション(sdb1)ではなくディスク全体(sdb)を指定する。イメージはカード丸ごとの写しなので、宛先も丸ごとでなければ辻褄が合わない。

🔌 シリアルコンソールで中を見る

書き込んだ基板を挿して電源を入れても、画面もキーボードも無いことが多い。そんなとき基板と話すのが、シリアルコンソール(bs-serial-console)だ。細い USB-UART 変換ケーブルでパソコンとつなぐ。

パソコン側では、その線が /dev/ttyUSB0 のようなデバイスとして見える。ここに picocom や minicom でつなぐと、基板が吐く起動メッセージが流れ、ログインもできるようになる。

決定的に重要なのが速度(ボーレート)だ。基板側とパソコン側で数字が食い違うと、文字化けした記号の羅列しか出ない。組込みでは 115200 が定番なので、まずこれで合わせる。

$ picocom -b 115200 /dev/ttyUSB0 (毎秒115200ビットで /dev/ttyUSB0 につなぐ。終了は Ctrl-a に続けて Ctrl-x)
コツつないでも何も出ないときは、まず速度を疑う。115200 で駄目なら 9600 を試す。それでも化けるなら、TX と RX の接続が入れ替わっていないかを確認する。

🚦 U-Boot → カーネル → login:

電源投入後、正常なら画面には決まった順で文字が流れる。まずブートローダの U-Boot(boot-uboot)が起動し、次にそれがカーネルを読み込んで起動させ、最後にログインプロンプト login: が出る。

この3段は、いわば起動のチェックポイントだ。どこまで文字が出て、どこで止まったかを見れば、問題の場所がぐっと絞れる。全体を漠然と眺めるより、段で区切って観察する。

U-Boot基板を起こすカーネルOSの心臓が起動login:ここまで来れば成功どこで止まったかで原因を切り分ける

🩺 起動しない時の当たり所

そもそも何も表示されない場合、まず疑うのはコンソール側だ。ボーレート違い、TX/RX の逆、そもそも別の /dev/ttyUSB を見ている——「基板は動いているのに見えていないだけ」がとても多い。

U-Boot までは出るのにカーネルで止まるなら、カーネルや rootfs の書き込み、あるいは起動引数(どのパーティションを root にするか)を疑う。U-Boot は動いている証拠なので、電源や配線は白に近い。

つまずき「画面が真っ暗=壊れた」と決めつけない。組込みの初回起動でいちばん多い原因は、故障ではなくコンソールのボーレット設定と配線の取り違えだ。落ち着いて段ごとに確認すれば、多くは机上で解決する。

書き込みと起動確認は、地味だが組込みで最も事故が起きる工程だ。lsblk で三度確認し、115200 でコンソールをつなぎ、3段の流れを見る——この型を守れば、ここは怖い工程ではなくなる。

この項目に出てくる用語

フラッシュ(書き込み)ふらっしゅ
完成したイメージをmicroSD等の記憶媒体へ丸ごと転写する作業。
シリアルコンソールしりあるこんそーる
UART経由で基板の起動メッセージ表示やログインを行う入出力口。
wicイメージうぃっくいめーじ
Yoctoが生成する、パーティション構成込みの書き込み用ディスクイメージ。

関連コマンド

ddlsblkpicocom

▶ 学習アプリでこの続きを学ぶ・演習する