プログラミング

久しぶりにLinuxを触って驚いた話

久しぶりにLinuxを触ってみました。

組込みLinuxで言えば、Raspberry Piをはじめ安価で高性能なボードが出回っています。

エンジニアやMakerといった人たちの間では、もはや市民権を得たといっても過言ではないと思います。ですが、ほんの10年ほど前にはこんなふうに手軽にLinuxにふれることができるなんて思ってもみなかったです。

私が、組込みの業界に入ったころ(2008年くらい)は組込みLinuxはおろか、OSに関してもそうですが、OSを動かすためのCPUに関しても玉石混交といった状況でした。ARMの情報もまだ出始めといった印象で、メジャーなCPUという印象ではなかったです。

当時人気だったのは、Microchip社のPICや日本語の情報が豊富であることから日立のH8とかSuperHあたりがマイコンや組込みプロセッサーの主流だったような気がします。かくいう僕も始めるならPICかH8くらいからかと考え、本屋でPICやH8の参考書を買ってきては、自宅でプログラミングの学習をしていました。

PICはそれほどメモリ構造などを意識しなくてもプログラミングできたことで親しめたのですが、H8やSuperHは周辺機能がPICに比べて扱いが難しかったため、まとまりのある機能を実現するには、リアルタイムOSなどのOSの力を借りないと難しいと感じていました。

何の知識もなく業界に飛び込んでしまったため、Linuxという名前のOSがあることもこの世界に入ってから知りました。当時はサーバー用のコンピューターとして、オープンソースでネットワークに強いOSという印象で、大きなデスクトップに入った規模の大きなOSという先入観がありました。ただ、一部では組込み向けにLinuxが使われて初めているというこも少しずつ耳には入っていました。

そのような状況で私は以下の本に出合いました。『はじめる組込みLinux H8マイコン×uClinuxで学べるマイコン開発の面白さ』という本です。

最初に言っておきますが、私はこの本をそんなにおススメするわけではありません。今でしたら、それこそRaspberry Piなどから始めたほうが絶対に良いと思います。

ですが、当時実践的な組込みLinuxの本が少なかった状況において、実際にH8のマイコンボードを使ってuClinuxという軽量のLinuxを動かしてみようという野心に満ちた本でした。ネットワークを使いこなしたかったこともあり、この本をやると決めて本の頭からやってみました。

H8マイコンボードの購入、メモリの購入と増設、開発環境となるホスト側のLinuxの環境構築…。ホスト環境のLinuxについては今のように仮想環境が安定していなかったこともあり、マザーボードやCPUを一から購入して自分で組み立て専用のLinuxデスクトップとして構築しました。このときは今やメジャーとなりつつあるUbuntuのVersion 6あたりを使ったような気がします。

Linuxをソースから構築するには、膨大な作業が必要

コンパイラなどもソースコードのダウンロードや設定、Makeを実行し、実際に実行ファイルを作るという形式で進みます。自分がソースコードからダウンロードしたコンパイラでH8のOSレスのプログラムを作成し、LEDが点灯したときはそれなりに嬉しかったことを覚えています。

そのあとも不具合に遭遇するたびに自分で調べて問題を解決しながら、uClinuxのソースコードをコンパイルしたり、いったんホストの環境で実行してみたり、実際にボードに転送する際に必要となるブートローダーなどを作成しました。

そして、いよいよLinuxを動かすべくH8のボードに転送しようとしたのですが、OSをメモリに転送したりするのに必要なブートローダーがうまくボードに転送できなかったのです。本をくまなく読み返し、何か自分が操作ミスを犯したのかなど自分なりに力を尽くしたのですが、結局私はブートローダーをホスト環境からH8のボードにうまく送ることができませんでした…(´;ω;`)ウッ… もちろんブートローダーがなければOSは起動できません。

そこまで私は半年以上の年月をその本の再現に投じました。もちろん本業があったため、仕事が終わった平日の夜や土日を使っての開発です。結局私が身を投じた半年以上におよぶ開発は何の実りもあげることはできませんでした

時は流れ、2020年。あれから約10年の歳月が流れました。

それまでもLinuxを使った案件がなかった訳ではなかったのですが、ボードの開発が上手くいったにも関わらず、同一のプロジェクトで設計した機械にトラブルがあり、結局日の目をみることなく終わってしまった企画などが続き、なぜかLinuxには嫌われてしまう日々を送ってきました。

今回はRaspberry Pi 3 B+というモデルを使ってみたのですが、OSのインストールはスムーズですし、Webブラウザが割とサクサク動くのに驚きをかくせませんでした。10年前H8をさわっていた時代のノートパソコンに匹敵するようなスペックになっている言っても過言ではありません。10年前は組込み用として考えていたLinuxは、ARMのCPUなどの発展もあり、むしろパソコンに近い存在になりつつあると実感しました。

これからLinuxでプログラミングやITの勉強をしようとするときにはどういうことに気をつければよいのでしょうか。まずLinuxを使う目的をある程度明確にしておくことだと思います。Linuxを触っているだけで楽しい、というなら別ですが、技術屋としてLinuxのことを知っておかねば、ということで始めるひとは意識したほうがよいポイントです。

私がLinuxを触りはじめた当時は、とにかく組込み用のボードでLinuxを動かしてみたい、というものでした。あわよくば何か製品開発に応用できないか、とも思っていました。でも今は当たり前のようにLinuxが動く時代です。すでにあるこの高性能なOSとボードを使って、どういうサービスや課題への解決策が生み出せるのか、ということを考えるフェーズになっています。

最近は複数のコアを内蔵するCPUが一般的になっており、コア毎に起動するOSを変えたりすることも実用化されています。私は、複数あるコアのうちいくつかのコアではリアルタイム性の求められる処理をしておき、グラフィックやネットワークなど、OSに資産が有効活用できそうな部分に関しては余りのコアでLinuxを動かす、というような用途に興味があります。

次回以降、Linuxが今後どういう分野で価値を提供できるのか、今世のなかにある前例などを踏まえて考えてみたいと思います。