ここではBaseイメージを例に、ユーザーランドの作成手順を説明します。
ユーザーランドイメージは uClinux-distディレクトリ配下にあるromfsディレクトリをルートディレクトリとして作成されます。 このromfsディレクトリ自体は"make romfs"コマンドで作成されます。
"make romfs"コマンドが実行する処理の主な部分はvendors/AtmarkTechno/Armadillo-J.Base/にある Makefileに記述されています。
romfsディレクトリ作成部分とその説明を以下に示します。
romfs: [ -d $(ROMFSDIR) ] || mkdir -p $(ROMFSDIR) -------------- 1 for i in $(ROMFS_DIRS); do \ --------------------------- 2 [ -d $(ROMFSDIR)/$$i ] || mkdir -p $(ROMFSDIR)/$$i; \ done for i in $(DEVICES); do \------------------------------- 3 touch $(ROMFSDIR)/dev/@$$i; \ done for i in $(FLASH_DEVICES); do \ touch $(ROMFSDIR)/dev/flash/@$$i; \ done $(ROMFSINST) -s /var/tmp /tmp --------------------------- 4 $(ROMFSINST) -s /bin /sbin $(ROMFSINST) /etc --------------------------------------- 5 $(ROMFSINST) /home $(ROMFSINST) ../../Generic/romfs/etc/services /etc/services
1. romfs自体のディレクトリ作成
uClinux-dist/romfs ディレクトリが存在しなければ、ディレクトリを作成します。
2. 各ディレクトリの作成
ROMfS_DIRS に含まれている名前のディレクトリを romfsディレクトリ配下に作成します。
ROMFS_DISの定義は、
ROMFS_DIRS = bin dev etc home lib mnt proc usr var root etc/dhcpc home/guest home/guest/pub
となっています。
この定義内容を変更する事で、ディレクトリの追加/削除が行えます。
3. デバイスノードの作成
各種デバイスノードを作成します。
変更方法はデバイスノードの変更方法を参照して下さい。
4. シンボリックリンクの作成
シンボリックリンクを作成します(/tmp -> /var/tmp と /sbin -> /bin)
$(ROMFSINST) -s [リンク先] [リンク元] と記述する事で romfs内にシンボリックリンクを作成する事ができます。
※$(ROMFSINST) は romfsディレクトリを作成するためのツール(uClinux-dist/tools/romfs-inst.sh)を指しています。
5. ディレクトリの内容をコピー
ディレクトリに含まれるファイルをすべて同名のディレクトリにコピーします(home と etc) $(ROMFSINST) [ディレクトリ名] と記述する事で指定したディレクトリの内容が、romfs内の同名のディレクトリにすべてコピーされます。 例えばArmadillo-Jのユーザーランドにある/etc/HOSTNAMEの内容を変更したければ、uClinux-dist/vendors/AtmarkTechno/Armadillo-J.Base/etc/HOSTNAME を修正すればよいわけです。
なおアプリケーションをromfs/binディレクトリにコピーする処理は、各アプリケーションのMakefileに記述されています。