タイトル/名前 | 更新者 | 更新日 |
---|---|---|
日記/2011/05/14/就職しました。 | msakamoto-sf | 2011-05-14 08:56:47 |
日記/2011/05/03/伊豆・谷津 | msakamoto-sf | 2011-05-06 10:09:23 |
日記/2011/05/01/涼宮ハルヒのイラスト | msakamoto-sf | 2011-05-01 18:42:52 |
C言語系/memos/gcc/舞台裏を知りたいときのヒント集メモ | msakamoto-sf | 2011-05-01 18:40:22 |
技術/Windows/システムファイル属性とATTRIBコマンド | msakamoto-sf | 2011-04-30 21:58:49 |
技術/Linux/手作りLinuxシステム | msakamoto-sf | 2011-04-29 15:38:33 |
技術/Linux/手作りLinuxシステム/01. Boot from Floppy Disk (kernel-2.6.x) | msakamoto-sf | 2011-04-29 15:38:22 |
技術/Linux/手作りLinuxシステム/02. Boot from Floppy Disk (kernel-2.4.x) | msakamoto-sf | 2011-04-29 15:38:13 |
技術/Linux/手作りLinuxシステム/03. BusyBoxとuClibcを組み合わせる | msakamoto-sf | 2011-04-29 15:38:02 |
技術/Linux/手作りLinuxシステム/04. Boot from CD (kernel-2.6.x) | msakamoto-sf | 2011-04-29 15:37:47 |
5/3-4と伊豆・谷津にダイビングしてきました。
地元の漁師の人たちが大変フレンドリーで、軽トラで機材を運んでくれたり、4隻の漁船をGW休み中フル回転でダイビング用に回してくれました。
5/2の夜は熱海のビジネスホテルに泊まりました。近くのコンビニで見つけた「しずおか謹製 茶 コーラ」です:
gccコマンドの裏側を知りたいときのヒント集メモ。
使用環境:
CentOS 5.x gcc-4.1.2-48.el5 libgcc-4.1.2-48.el5 cpp-4.1.2-48.el5 binutils-2.17.50.0.6-6.el5 binutils-devel-2.17.50.0.6-14.el5(全て表示する)
システムファイル属性が有効になっていると、「隠しファイル」のチェックボックスがグレーアウトされてしまう。
システムファイル属性を確認するにはATTRIBコマンドを使う。
> ATTRIB abc.txt A SH C:\...\abc.txt
隠しファイル属性を維持したままシステムファイル属性を無効化:
> ATTRIB -S +H abc.txt
→これで「隠しファイル」のチェックボックスが使えるようになる。
隠しファイル属性を維持したままシステムファイル属性を有効化:
> ATTRIB +S +H abc.txt
参考:
本シリーズでは Linux, BusyBox, uClibc を活用し、Linuxシステムを手作りしてみます。
本シリーズの目的は次の3つです。
組み込みシステムは特に意識しません。クロスコンパイルも使いません。
x86(32bit)マシンにセットアップしたCentOS5.5上でのx86(32biti)用のgccをそのまま使い、VMware上で動かしてみます。後半はBuildrootを使ってgccツールチェインをホストマシンから分離しています。
各ツールや作業ステップの細かい解説は行いません。関連書籍やURLを随時紹介していきますので、それらを参照していただくか自分で適宜調べてみてください。本ページの最後にシリーズ全体での参考資料を挙げています。
なお、より本格的にLinuxシステムを手作りするドキュメントとしては "Linux From Scratch" があります。
LFSでは用意するソフトウェアの数が多いです。
本シリーズではユーザーランドのソフトウェアについてBusyBoxを使って「手抜き」しており、その他ディレクトリや"/etc"ファイルに付いてもBuildrootにお任せしています。その分、FD/CD-ROM/ネットワークブートなどの起動方法のバリエーションをまとめることに注力しています。
用途や段階に応じて本シリーズとLFSを使い分けてください。
本シリーズで紹介するKernel+ユーザーランドの起動バリエーションを「元ネタ」として、実務や趣味のhackで活用していただければ幸いです。
想定読者レベル:
本シリーズの環境:
VMware : Workstation 7.1.2 VMwareホスト: Windows 7 SP1 (x86 32bit) VMwareゲスト: 開発マシン("ホストマシン"): CentOS 5.5 (x86, 32bit) gcc-4.1.2-48.el5 libgcc-4.1.2-48.el5 binutils-2.17.50.0.6-14.el5 ターゲットマシン: (空), 128MB, 1プロセッサ, 1GB HDD, CD-ROM, FDD
開発マシン上でkernelやユーザーランドをビルドし、ターゲットマシン上で起動してみます。
開発マシンとターゲットマシンは同じVMwareのNAT環境内にあります。
シリーズ全体で参考にさせて頂いた資料をここでまとめておきます。
Embedded UNIXの西田亙氏の一連の記事に大いに啓発されました。
参考ムック:
Vol.1, Vol.2 が kernel-2.4.x とその時代のBusyBox、Vol.6がkernel-2.6を扱っています。
参考書籍:
"Embedded Linux Primer"が包括的かつ意外と詳しくて助かりました。
Linux Kernel 2.4.x を使ってフロッピーディスクから起動するLinuxシステムを作ってみます。
2.4.x に興味のない人はこの記事はスキップして下さい。
技術/Linux/手作りLinuxシステム/01. Boot from Floppy Disk (kernel-2.6.x) で使用したBusyBoxですが、Linuxカーネルのヘッダーファイルをincludeしています。2011年4月現在、BusyBoxのFAQ( http://www.busybox.net/FAQ.html )にも
Programming questions > 8. Tips and tricks > Including kernel headers
という項目で「本当は避けたほうが良いんだけど、どうしてもincludeしなくちゃならない場面もある」云々と書かれています。
特に設定を行っていない場合、ホストマシンのインクルードパスが使われるので、ホストマシンにインストールされた"kernel-headers"パッケージ提供のヘッダーファイルが参照されます。
どうせなら、ターゲットのLinuxカーネルヘッダを参照したいですよね。
となるとlibcライブラリもターゲットのLinuxに合わせたいところです。しかしglibcはMB単位の大きさになってしまうのでフロッピーに収まりません。
そこで今回取り上げるのが uClibc という組み込み向けにコンパクト化されたCライブラリです。
つまり
ターゲットのLinuxヘッダー + uClibc + BusyBox
の組み合わせにすればBusyBoxが参照するヘッダーも、リンクするライブラリも、全てターゲットとするLinuxに合わせることが出来ます。
この手法は組み込みの世界でも使われているらしく、@ITのMONOistで連載記事が公開されています。大いに参考にさせてもらいました、ありがとうございます。
ということで、今回は kernel-2.6.x のFDブートの発展形というか改良型としてルートファイルシステム上のアプリケーションを BusyBox + uClibc で構築してみます。加えて、簡単なHelloWorldもuClibcをリンクするようコンパイル、動作確認してみましょう。
今回はCD/DVDからのLinuxシステムの起動を目指します。
1.4MBの制限が無くなりますので、容量をあまり気にせずkernelの設定やユーザーランドを構築できます。
ローカルHDDのマウントなどは考えません。単純にISOイメージ上に格納されたbzImage(Linuxカーネル)と、kernel-2.6以降で利用出来るようになったcpio形式のInitial RAM Disk(initrd)だけで起動します。ルートファイルシステムはkernelパラメータに "root=/dev/ram0" を指定することで、initrdをそのまま使います。
また、今回は "Buildroot" を使ってuClibc, BusyBoxのビルドとルートファイルシステムの構築を行ってみます。
initrd, initramfsの違いについては "DEBUG HACKS", hack #64 を参照してください。
initrdやInitial RAM Disk関連のカーネルパラメータ、カーネル設定については豊富なWeb資料と共に、カーネルソースツリーの
Documentation/ blockdev/ramdisk.txt devices.txt initrd.txt filesystems/tmpfs.txt
も参考になります。