Exynos 4412ファイルシステム作成(三)——ファイルシステム移植


ルートファイルシステムは従来、すべてのクラスUnixオペレーティングシステムの重要な構成部分であり、組み込みLinuxシステムが他の従来の組み込みオペレーティングシステムとは異なる重要な特徴であり、Linuxに多くの強力で柔軟な機能をもたらし、同時にいくつかの複雑さをもたらしたと考えられています.ルート・ファイル・システムの基本構造を明確に理解し、必要なシステム・ライブラリ、カーネル・モジュール、アプリケーションなどを慎重に選択し、さまざまな初期化スクリプト・ファイルを構成し、適切なファイル・システム・タイプを選択し、実際のストレージ・デバイスの適切な場所に配置する必要があります.
Linuxのルートファイルシステムは、カーネルとシステム管理に必要なさまざまなファイルとプログラムを含むツリー構造で組織されており、一般的にルートディレクトリと呼ばれています/」の下の最上位ディレクトリには、固定的なネーミングと用途があります.
Linuxルート・ファイル・システムで一般的なディレクトリ構造を以下に示します.
/binバイナリ実行可能コマンドを格納するディレクトリ
このディレクトリの下には、他のファイルシステムに接続する前に使用できるすべてのユーザーが使用できる基本的なコマンドが格納されます.したがって、/binディレクトリはルートファイルシステムと同じパーティションにある必要があります.
/binディレクトリの下でよく使われるコマンドはcat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,mknod,[,testなどの「[」コマンドは実はtestコマンドであり,Busyboxを利用してルートファイルシステムを作成する際,生成したbinディレクトリの下に実行可能なファイル,すなわち利用可能なコマンドが見られる.
/devデバイスファイルを格納するディレクトリ
このディレクトリの下にはデバイスファイルが格納され、デバイスファイルはLinux特有のファイルタイプであり、Linuxシステムの下では、あるデバイスファイルを読み書きすることによって特定のハードウェアを操作するファイル方式で各種デバイスにアクセスする.例えば、「dev/ttySAC 0」ファイルでシリアルポート0を操作し、「/dev/mtdblock 1」でMTDデバイスの2番目のパーティションにアクセスすることができる.
/etcシステム管理とプロファイルを格納するディレクトリ
このディレクトリの下には、PC上のLinuxシステムに対して、/etcディレクトリの下のファイルとディレクトリが非常に多く、これらのディレクトリファイルはオプションであり、システムに所有されているアプリケーションに依存し、これらのプログラムがプロファイルを必要とするかどうかに依存する.組み込みシステムでは、これらのコンテンツを大幅に削減できます.
/homeユーザホーム、例えばユーザuserのホームが/home/userであり、~userで表すことができる
ユーザーディレクトリはオプションで、一般ユーザーごとに/homeディレクトリの下にユーザー名で命名されたサブディレクトリがあり、ユーザー関連のプロファイルが格納されます.
/libダイナミックリンク共有ライブラリを格納するディレクトリ
このディレクトリには、システムを起動するための共有ライブラリとロード可能(ドライバ)が格納されます.ルートファイルシステムの実行可能プログラム、例えば/bin/sbinディレクトリの下のプログラムを実行します.
/sbinシステム管理者が使用するマネージャのディレクトリを格納
このディレクトリにはシステムコマンド、すなわち管理者のみが使用できるコマンドが格納され、システムコマンドは/usr/sbin、/usr/local/sbinディレクトリに格納され、/sbinディレクトリに格納されるのは基本的なシステムコマンドであり、システムの起動、システムの修復などに用いられ、/binディレクトリと同様に、他のファイルシステムを接続する前に/sbinを使用することができるため、/sbinディレクトリはルートファイルシステムと同じパーティションにある必要がある.
/sbinディレクトリでよく使われるコマンドはshutdown reboot fdisk fsckなどで、ローカルユーザーが自分でインストールしたシステムコマンドは/usr/local/sbinディレクトリの下に置かれます.
/tmp共通の一時ファイル格納ポイント
一時ファイルを格納するために使用される、通常は空のディレクトリです.一時ファイルを生成するプログラムで使用される/tmpディレクトリの下には、/tmpディレクトリが存在し、アクセスできる必要があります.
/rootシステム管理者のホームディレクトリ
ルートユーザのディレクトリです.これに対応して、一般ユーザのディレクトリは/homeの下のサブディレクトリです.
/mntシステムは、このディレクトリを提供し、ユーザーに他のファイルシステムを一時的にマウントさせる.
ファイルシステムを一時的にマウントするためのマウント接点は、通常は空のディレクトリであり、/mnt/cdram/mnt/hda 1などの空のサブディレクトリを作成することもできます.CD、HDDを一時的にマウントします.
/proc仮想ファイルシステムで、このディレクトリに直接アクセスしてシステム情報を取得できます.
これは空のディレクトリで、よくprocファイルシステムの接点として、procファイルシステムは仮想的なファイルシステムで、それは実際の記憶装置がなくて、中のディレクトリ、ファイルはすべてカーネルから臨時に生成して、システムの運行状態を表すために、その中のファイル制御システムを操作することができます.
/usrで最も膨大なディレクトリで、使用するアプリケーションやファイルはほとんどこのディレクトリにあります.
/usrディレクトリの内容は、システムが起動した後にルートファイルシステムの/usrディレクトリの下に掛けられる別のパーティションに存在することができる.中には共有、読み取り専用のプログラムとデータが格納されており、これは/usrディレクトリの下の内容が複数のホスト間で共有できることを示しており、これらは主にFHS規格にも合致している./usrのファイルは読み取り専用で、他のホストに関連し、可変ファイルは/varなどの他のディレクトリに保存する必要があります./usrディレクトリは埋め込み式で削減できます.
/var一部の大きなファイルのオーバーフロー領域
/usrディレクトリとは逆に、/varディレクトリにはspoolディレクトリ(mail,news)、logファイル、一時ファイルなどの可変データが格納されます.
---------------------------------------------------------------------
一、移植環境:
1、Ubuntu 10.10リリース
2、  u-boot.bin
3、目標機:FS 4412プラットフォーム
4、クロスコンパイラarm-none-linux-gnueabi-gcc--------------------------------------------------------------------------------二、移植手順
1、ソースのダウンロード
私たちが選んだバージョンはbusybox-1.17.3です.tar.bz 2のダウンロードパスは次のとおりです.http://busybox.net/downloads/
2、ソースコードを解凍する
$ tar xvf  busybox-1.17.3.tar.bz2

3、ソースディレクトリに入る
$ cd busybox-1.17.3

4、ソースコードの配置
$ make menuconfig
Busybox Settings --->
       Build Options --->
              [*] Build BusyBox as a static binary (no shared libs)
              [ ] Force NOMMU build
              [ ] Build with Large File Support (for accessing files > 2 GB)
              (arm-cortex_a8-linux-gnueabi-) Cross Compiler prefix
              () Additional CFLAGS

5、コンパイル
$ make

6、取り付け
busyboxのデフォルトのインストールパスはソースディレクトリの下にあります.install
$ make install

7、インストールディレクトリの下に入る
$ cd _install
$ ls
bin  linuxrc  sbin  usr

8、その他必要なディレクトリの作成
$ mkdir  dev etc  mnt proc var tmp sys root

9、ライブラリの追加
で、Installディレクトリの下にlibフォルダを作成し、ツールチェーンのライブラリをlibディレクトリの下にコピーします.
$ mkdir lib
$ cp /home/linux/x-tools/arm-cortex_a8-linux-gnueabi/arm-cortex_a8-linux-gnueabi/lib/*  ./lib/

libの下のすべてのディレクトリを削除します.oファイルと.aファイル、ライブラリをダイエットしてファイルシステムのサイズを減らす
$ rm *.o *.a
$ arm-cortex_a8-linux-gnueabi-strip  lib/*

10、システム起動ファイルの追加
etcの下にファイルinittabを追加
$ vim /etc/inittab

ファイルの内容は次のとおりです.
#this is run first except when booting in single-user mode.
:: sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
# Start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot

etcでファイルfstabを追加する
$ vim /etc/fstab

ファイルの内容は次のとおりです.
#device     mount-point     type        options         dump     fsck order
proc          /proc         proc        defaults        0          0
tmpfs      /tmp         tmpfs       defaults          0          0
sysfs         /sys          sysfs       defaults         0          0
tmpfs         /dev          tmpfs       defaults         0          0

ここで掛けたファイルシステムには3つのproc、sysfs、tmpfsがあり、カーネルではprocとsysfsがデフォルトでサポートされていますが、tmpfsはサポートされていません.tmpfsのサポートを追加する必要があります.
カーネル構成の変更:
$ make menuconfig
File systems --->
       Pseudo filesystems --->
              [*] Virtual memory file system support (former shm fs)
              [*] Tmpfs POSIX Access Control Lists

カーネルの再コンパイル
$ make zImage

etcの下にinitを作成します.dディレクトリ、init.dでrcSファイルを作成する
$ mkdir /etc/init.d -p
$ vim /etc/init.d/rcS

rcSファイルの内容は次のとおりです.
#!/bin/sh
# This is the first script called by init process
/bin/mount -a

rcSに実行可能権限を追加するには、次の手順に従います.
$ chmod  +x init.d/rcS

etcでprofileファイルを追加する
$ vim /etc/profile

ファイルの内容は次のとおりです.
#!/bin/sh
export HOSTNAME=farsight
export USER=root
export HOME=root
#export PS1="\[\u@\h \W\]\$ "
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH

11、設備ファイルの作成
ルートファイルシステムにはデバイスノードが必要で、devの下でconsoleノードを作成します.
$ mknod   dev/console  c 5 1

重要:新しく作成したファイルシステムサイズが8 Mを超えた場合、不要なライブラリファイルを削除します.