メインコンテンツへスキップ
見出し画像

カリンちゃん、新しい冒険。OpenWrtを移植できるの? 自分には絶対に無理だと思っていたことが、AIと一緒ならできてしまった

    カリンちゃんがOpenWrtを移植するなんて

    カリンちゃんは、プログラマーではありません。パソコンやネットワークをいじるのは大好きですが、専門的なプログラミングの経験があるわけでもありません。それなのに今回、なんとルーター用のOSを、自分で移植することに挑戦しました。

    OpenWrtとは、ルーターなどで動く、自由に改造できるOSのことです。メーカー純正のソフトウェアを入れ替えて、自分好みの機能を追加したり、細かな設定を変更したりできます。カリンちゃんも、対応機種にOpenWrtをインストールして使ったことはありました。

    でも、対応していない機器に、自分で最初からOpenWrtを移植するなんて、考えたこともありません。Linuxカーネル? デバイスドライバ? ブートローダー? 名前くらいは知っていますが、自分で手を入れるなんて未知の世界すぎます。

    そんなことがカリンちゃんにできるとは、最初は思いませんでした。でも、そこでいつもの疑問が浮かびます。「でも本当にそう? AIと一緒なら、できるのでは?」

    きっかけは、SoftBank Air ターミナル6

    今回のターゲットは、SoftBank Air ターミナル6です。携帯電話の電波を受信して、自宅でインターネットを使えるようにする機器ですね。実はこれ、なかなか魅力的なハードウェアなんです。

    中身にはMediaTek製のMT6990という高性能なチップが搭載されています。Wi-Fi 7に対応し、5G通信機能も備えた、かなり贅沢な構成です。一般的な家庭用ルーターとして使うにも、十分に面白い性能を持っています。

    ところが、この機器で自由に使えるOpenWrtは用意されていません。せっかく高性能なのに、メーカーが用意した使い方に限られているのは、ちょっともったいない気がします。これを自由に使えるようにしたら、きっと面白いはずです。

    だったら、自分でOpenWrtを移植できないだろうか。無謀かもしれませんが、失敗しても調べることはできます。よし、ちゃっぴぃと一緒にやってみよう!

    最初の目標は、Linuxカーネルを起動すること

    いきなりOpenWrtを全部動かそうとしても、何が原因で失敗したのか分からなくなりそうです。そこで、まずはLinuxの心臓部にあたる「カーネル」だけを起動することにしました。カーネルとは、CPUやメモリなどのハードウェアを管理する、OSの中心部分です。

    まずは、公開されているソースコードやメーカーのSDK、他の機器での先行事例を調べます。ちゃっぴぃと一緒に、起動の仕組みや内部の記憶領域、メーカーによる電子署名の仕組みも調査しました。普通のパソコンと違って、ソフトウェアを作っただけでは起動できないのです。

    ここで一つ、カリンちゃんには心当たりがありました。この機器は、起動用のシステムをAとBの二組持つ構成になっています。それなら、片方を残して、もう片方を実験に利用できるのでは? もちろん安全に切り替えられる保証はありませんが、慎重に調べながら進めることにしました。

    GitHubでLinuxカーネルをビルドし、起動できる形式にまとめて、実機に書き込みます。UARTという通信端子をつなげば、機器が起動するときのメッセージをパソコンで読むことができます。これを手がかりに、どこまで起動できたのかを調べるわけです。

    ところが、そう簡単には動きません。起動途中で止まったり、エラーメッセージが出たり、何も表示されなくなったりします。ちゃっぴぃの推測が外れることもあって、実機から得られた結果をもとに、何度も修正して試し直しました。

    そして、ついにその瞬間がやってきました。Linux 6.18.44のカーネル起動に成功したのです! UARTの画面に次々と流れるLinuxのメッセージを見て、思わずうれしくなりました。

    普段なら、黒い画面に文字が流れても、何とも思わないかもしれません。でも今回は違います。自分たちが作ったLinuxが、本当にこの機械の中で動き始めたのです。

    次はユーザーランド。OpenWrtを動かしたい!

    カーネルが起動したとはいえ、これだけではルーターとして使えません。コマンドを受け付けたり、ネットワークを設定したり、さまざまなプログラムを動かしたりする仕組みが必要です。これを「ユーザーランド」と呼びます。

    次の目標は、OpenWrtのユーザーランドを起動させることです。起動時に必要なファイルをどう配置するか、どの記憶領域を使うか、ファイルシステムをどう読み込ませるか。ここでも、思った以上に試行錯誤が続きました。

    カーネルは起動するのに、その先に進めないこともあります。ログを読んで原因を探し、修正してビルドし直し、また起動してみる。その繰り返しの末、とうとうOpenWrtのシェルが立ち上がりました。

    root@(none):~#

    たった一行の表示です。でも、これは自分たちが移植したOpenWrtが、コマンドを受け付けるようになった証拠です。とうとう、ここまで来た!

    でも、機器が動かなければルーターじゃない

    OpenWrtのシェルが動いても、まだ完成ではありません。ルーターなのですから、有線LANやWi-Fiが使えなければ困ります。さらに、この機器には5Gモデムも搭載されています。

    ハードウェアを動かすためには、それぞれに対応した「デバイスドライバ」が必要です。これは、OSから機器を操作するためのプログラムのことです。今回の機器では、そのまま使えるものばかりではありません。

    まずは有線LANです。内部でどんなチップが使われ、どのようにつながっているのかを調べます。次にWi-Fiも、機器の認識やドライバの動作条件を確認しながら進めました。

    そして、有線LANが動いた! Wi-Fi 7も動いた!

    もちろん、すべてが完成したわけではありません。5Gモデムはまだ調査と実装の途中ですし、安定性や細かな機能もこれから確認が必要です。それでも、起動するだけだったLinuxが、実際に通信できるOpenWrtへと成長してきました。

    自分で作った手ごたえがある

    今回の移植では、調査も、コードの作成も、問題の解析も、かなりの部分をAIに担当してもらいました。カリンちゃん一人では、絶対にここまで到達できなかったと思います。でも、不思議なことに「AIに作ってもらっただけ」という感覚はありません。

    自分で作った、という確かな手ごたえがあるのです。

    何を実現したいのか、どこから手をつけるのか、どんな方法を試すのか。それを考え、結果を確認し、次に進む方向を決めるのはカリンちゃんです。AIの提案が正しいとは限りませんから、疑問があれば問い直します。

    例えば、OpenWrtを起動するための領域が小さすぎるなら、別の領域を利用できないだろうか。起動に失敗したときも、本当にカーネルが原因なのか、それとも起動前の処理で止まっているのか。AIが示した方針について、別の可能性を考えたり、実機の記録で確かめたりしながら進めました。

    「でも本当にそう?」

    失敗すれば原因を考え、別の方法を探します。成功すれば、次に実現したいことが見えてきます。そうやって一つずつ判断を重ねているうちに、いつの間にか、自分で開発しているという実感が生まれていました。

    これまで、プログラムを作るというのは、自分でコードを書くことだと思っていました。でも、今回の経験で、少し考えが変わりました。コードを自分で書くことだけが、ものを作るということではないのかもしれません。

    AIは、最初から答えを知っているわけじゃない

    今回、ちゃっぴぃが最初からターミナル6の内部構造や、OpenWrtの移植方法を全部知っていたわけではありません。インターネットを調べても、必要な情報がすべて見つかるわけではありません。結局は、実機を調べ、仮説を立て、試してみるしかない場面がたくさんありました。

    例えば、有線LANを動かそうとしたときのことです。機器の内部で、どの通信回路がどの端子につながっているのか、公開情報だけでは分かりませんでした。そこで実機から設定情報を読み取り、AIと一緒に接続関係を調べ直しました。

    途中で、それまで正しいと思っていた対応関係が逆だったと判明したこともあります。AIの知識だけでは分からないことも、実機から得られる事実と組み合わせれば、少しずつ解き明かしていけるのです。

    そこには、カリンちゃん自身の「これを動かしたい!」という気持ちがあります。分からないことがあれば調べたいし、失敗したら原因を知りたくなります。動いたらうれしいし、もっと先まで進めたくなります。

    AIは、そのための強力な相棒になってくれました。自分では理解できなかった資料を読み解き、必要なコードを作り、実験結果から次の方法を考えてくれます。一人では難しかったことも、AIと一緒なら少しずつ進められるのです。

    もう一つ、大切だったのが記録です。調査結果やソースコード、実験の成果はGitHubに保存して、次の作業に引き継げるようにしました。これによって、何日にもわたる作業でも、前に進んできた道筋を見失わずに済みました。

    今回、AIに任せたことで、自分の仕事がなくなったわけではありません。むしろ、AIに任せられるからこそ、自分が挑戦できる範囲が広がりました。必要だったのは、最初からすべてを理解することではなく、「次に何を確かめ、何を実現すればいいか」を一つずつ見つけることだったのです。

    OpenWrtの移植なんて、専門的な技術を持った人だけにできることだと思っていました。でも、AIと一緒に取り組むことで、カリンちゃんもその世界に足を踏み入れることができました。そして、実際にOpenWrtを動かすところまでたどり着けたのです。

    自分にもできるんだ。

    それが、今回何よりもうれしかったことです。OpenWrtが動いたことはもちろん大きな成果ですが、それ以上に、自分の可能性が少し広がったように感じています。今まで遠くから眺めていた世界が、急に身近になりました。

    次は、あなたの「無理かも」。でも本当にそう?

    今回カリンちゃんが伝えたいのは、OpenWrtの移植がどれほど難しいか、ということではありません。AIを使えば誰でも簡単にできる、という話でもありません。実際、何日もかかりましたし、失敗もたくさんありました。

    でも、これまで「自分には無理」と思っていたことにも、AIと一緒なら挑戦できる。今回の経験で、カリンちゃんはそう実感しました。最初から専門家である必要はありませんし、もしかしたら、専門家にならなくても実現できることがたくさんあるのかもしれません。

    大事なのは、好奇心と、やってみたいという気持ち、そして実験して確かめることです。できるかどうか分からなくても、まずは調べてみる。そこから、思いがけない道が開けるかもしれません。

    「そんなこと、自分にできるわけがない」

    でも本当にそう?

    その一言から、新しい世界が始まるかもしれません。少なくともカリンちゃんにとって、今回のOpenWrt移植は、まさにそんな体験でした。次は何に挑戦してみようかな!


    最後まで読んでいただき、ありがとうございました。

    こちらの記事もおすすめ


    気に入っていただけたら「スキ」をお願いします! 励みになります!!

     
     

    Karin

     
     
    自家用ソフト(非売品)開発者。AIと古い機械をつないで遊んでいます。ChatGPTやCodexを工具に、電子工作、自宅サーバー、Androidアプリ、OpenWrt移植などに挑戦中。自分や家族が使いたいものを、日曜大工のように作っています。ノウハウはできるだけ無料で共有します。

    あなたへのおすすめ