各サービスを起動:
syslog -カーネルとアプリケーションのデバッグ情報を記録
netd - inetd、各ネットワーク関連サービスをマウントするガードプロセス
httpd - http server ガードプロセス
leds -マーボタンガードプロセス
inetd設定ファイル/etc/inetd.conf、内容は下記通り:
起動したネットワークサービスは2つある: 1)ftp server と 2)telnet server。
ネットワークデバイス(NIC)設定:
1)ローカル•ループバック•アドレスを127.0.0.1に設定する
2)NICのセットアップスクリプトを実行する。 /etc/init.d/ifconfig-eth0
/etc/init.d/ifconfig-eth0 の内容は下記の通り。
NFSの自動認識は/etc/mtabにNFSマウントされたかどうかのことにより実現する。
下記は root qtopia ファイルシステムの/etc/eth0-settingsファイル
最後に、Qtopia GUI 起動
ここで、 Qtopiaは/bin/qtopiaを実行することで実現する。そして/bin/qtopiaもスクリプトとなり、このスクリプトにはQtopia 実行の必要な環境を設定することである。最後にqpeという実行可能のファイルでQtopiaを起動する。内容は下記通り:
ここまで、ファイルシステムは初期化からQtopia GUI環境の最終起動までは全部終わる。
4.2 Busyboxでファイル•システムを構築
4.2.1 busyboxソースコードをダウンロード
ダウンロード先:http://www.busybox.net/downloads/ 、バージョン:busybox-1.13.3.tar.gz、mini2440 開発ボードと同じのバージョン。
4.2.2ルート•ファイル•システム•ディレクトリ・ヘルプ
組込みLinuxはルートファイルシステムを構築する必要がある、ルートファイルシステム構築のルールは FHS(Filesystem Hierarchy Standard) ドキュメント内にある、下記はルートファイルシステムの最上位ディレクトリである。
4.2.3ルート•ファイル•システム•ディレクトリ作成
/opt/studyarmディレクトリに入る、ルート•ファイル•システム•ディレクトリのスクリプトファイルを作成:create_rootfs_bash。コマンド chmod +x create_rootfs_bash でファイルの実行権限を変更する、./create_rootfs_bashスクリプトを実行し、ルート•ファイル•システム•ディレクトリの作成完了。
tmpディレクトリ使用権が変更され、stickyビットを開く、tmpディレクトリの下に作成されたファイルを作成者だけから削除権限がある。組込みシステムにはほとんどシングルユーザーであるが、いくつかの組み込みアプリケーションは、必ずしもroot権限で実行しないため、従って、ルート•ファイル•システムのアクセス許可ビットは基本的な仕様を満たして設計する必要がある。
4.2.4ダイナミック•リンク•ライブラリーの作成
ダイナミック・リンク・ライブラリーは付属DVD中のルート・ファイル・パッケージを使用する。libの内容を作成したルート•ファイル•ディレクトリlib にコピーする。
4.2.5 Bosyboxクロスコンパイラ
BosyboxはGPL v2ライセンスに従うオープンソースプロジェクトで、開発中ファイルサイズを最適化し、そして限られたシステムリソース(メモリーなど)を配慮して、Busyboxで自動的にルート•ファイル•システム必要なbin、sbin、usrディレクトリとlinuxrcファイルを生成することができる
1、busybox解凍
cd /mnt/hgfs/share
tar –zxvf busybox-1.13.3.tar.tgz –C /opt/studyarm
2、ソースコードに入り、Makefileを修正:
cd /opt/studyarm/busybox-1.13.3
修正:
CROSS_COMPILE ?=arm-linux- //第 164 行
ARCH ?=arm //第 189 行
3、busybox設定
注:付属DVD中 busybox のソースコードパッケージは\linux ディレクトリにある、ファイル名:busybox-1.13.3-mini2440.tgz、デフォルトのコンフィギュレーションファイルが含まれている:fa_config(コマンド゛cp fa.config .config゛でコンフィグを使用可能で)。詳しい手順は:
make menuconfigでコンフィグする
(1)、Busybox Settings--->
General Configuration--->
[*] Show verbose applet usage messages
[*] Store applet usage messages in compressed form
[*] Support –install [-s] to install applet links at runtime
[*] Enable locale support(system needs locale for this to work)
[*] Support for –long-options
[*] Use the devpts filesystem for unix98 PTYs
[*] Support writing pidfiles
[*] Runtime SUID/SGID configuration via /etc/busybox.config
[*] Suppress warning message if /etc/busybox.conf is not readable
Build Options--->
[*] Build BusyBox as a static binary(no shared libs)
[*] Build with Large File Support(for accessing files>2GB)
Installation Options->
[]Don’t use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
Busybox Library Tuning --->
(6)Minimum password legth
(2)MD5:Trade Bytes for Speed
[*]Fsater /proc scanning code(+100bytes)
[*]Command line editing
(1024)Maximum length of input
[*] vi-style line editing commands
(15) History size
[*] History saving
[*] Tab completion
[*]Fancy shell prompts
(4) Copy buffer size 、in kilobytes
[*]Use ioctl names rather than hex values in error messages
[*]Support infiniband HW
(2)、Linux Module Utilities--->
(/lib/modules)Default directory containing modules
(modules.dep)Default name of modules.dep
[*] insmod
[*] rmmod
[*] lsmod
[*] modprobe
-----options common to multiple modutils
[ ] support version 2.2/2.4 Linux kernels
[*]Support tainted module checking with new kernels
[*]Support for module .aliases file
[*] support for modules.symbols file
(3)、busybox でdev下ディスクタイプのサポートコンフィギュレーション
devの作成方法は3つある:
手動作成:ルート•ファイル•システムを作成するとき、devディレクトリ内に使用するデバイスファイルを作成する、システムがルートファイルシステムをマウントした後、devディレクトリのデバイスファイルを使用することができる。
devfsファイルシステムを使用する:この方法ディスクマッピングは未定で、メジャー/マイナーデバイス番号の欠如、大量のメモリを消費する。現在この方法は古くなっています。
udev:ユーザ•プログラムである、システム•ハードウェアの状態に基づいて動的にディスク•ファイルを更新する。機能はディスクファイル削除、作成などで、。その操作は比較的複雑であるが、非常に高い柔軟性がある。
mdev は busybox付属の簡易版udev、組み込みアプリケーションに適し、使用は簡単である。機能はシステムは起動時に、ホット•スワップまたは動的にドライバをロードする時、自動的に必要なドライバノードファイルを生成することである。busyboxに基づき組み込みLinuxのルート•ファイル•システムを構築する時、それが一番良い選択である。
次のオプションは mdev のサポートを追加する。
Linux System Utilities --->
[*]Support /etc/mdev.conf
[*]Support command execution at device addition/removal
4、busyboxコンパイル
busyboxを指定したディレクトリにコンパイル:
cd /opt/studyarm/busybox-1.13.3
make CONFIG_PREFIX=/opt/studyarm/rootfs install
rootfsのディレクトリにディレクトリbin、sbin、usr とファイル linuxrcを生成する。
4.2.6 etcディレクトリ内の設定ファイル作成
1、etc/mdev.confファイル、中身は空。
2、/ etcディレクトリにの passwd、group、shadow ファイルをrootfsの/ etc にコピーする
3、etc/sysconfigディレクトリにファイルHOSTNAMEを作成、内容は゛H3-Studio゛。
4、etc/inittab 文件:
#etc/inittab
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
5、etc/init.d/rcS 文件:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
echo "----------munt all----------------"
mount –a
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
echo "***********************************************"
echo "****************Studying ARM*********************"
echo "Kernel version:linux-2.6.29.1"
echo "Student:Huang huahai"
echo "Date:2009.10.1"
echo "***********************************************"
/bin/hostname -F /etc/sysconfig/HOSTNAME
(または/bin/hostname H3-Studio )
以下のコマンドを使ってrcSの執行権限を変える:
Chmod +x rcS
6、etc/fstab ファイル:
#device mount-point type option dump fsck order
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
mdev /dev ramfs defaults 0 0
7、 etc/profile ファイル:
#Ash profile
#vim:syntax=sh
#No core file by defaults
#ulimit -S -c 0>/dev/null 2>&1
USER="id -un"
LOGNAME=$USER
PS1='[\u@\h=W]#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
4.2.7ルート•ファイル•システム•イメージ•ファイル作成
下記のコマンドを使用しyaffsファイルシステム作成ツールをインストールする:
コマンドmkyaffs2image rootfsのrootfs.imgを使用し、/opt/studyarmディレクトリでルート•ファイル•システム•イメージ•ファイルを生成する。
スタートアップ情報:
4.3 mdevの使用方法および原理
mdevはbusybox付属のudevの簡易版であり、組み込みアプリケーションに適する。機能は使用の際に簡単である。その機能は、システム起動時およびホット•スワップまたは動的にドライバをロードしている時に、自動的にドライバーが必要とするノードのファイルを生成する。 busyboxに基づいて組込みLinuxのルートファイルシステムを構築する時には一番良い選択である。
4.3.1 mdev使用
mdevの使用はbusyboxのmdev.txtドキュメント内には詳しい説明:
(1) コンパイル時MDEVのサポートを追加
説明: busybox1.10.1を使用
Linux System Utilities ---> mdev
Support /etc/mdev.conf
Support command execution at device addition/removal
(2) スタートの時mdevを使用するコマンドを追加する
作成のルートファイルシステムに(nfs)の/linuxrcファイルに下記のコマンドを追加する:
#/sysをsysfsファイルシステムにマウント
echo "----------mount /sys as sysfs"
/bin/mount -t tmpfs mdev /dev
/bin/mount -t sysfs sysfs /sys
echo "----------Starting mdev......"
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
注:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
busyboxドキュメントエラー!!
(3) ドライバにクラスのデバイスインタフェースサポートを追加する
ドライバーの中初期化関数中、クラスデバイスディレクトリ下にデバイス番号を含むプロパティファイルを追加する、ファイル名は"dev"である。そして mdevで /devディレクトリにデバイスノードファイルgpio_dev0 を生成する。
my_class = class_create(THIS_MODULE、 "gpio_class");
if(IS_ERR(my_class)) {
printk("Err: failed in creating class.\n");
return -1;
}
/* register your own device in sysfs、 and this will cause mdev to create corresponding
device node */
class_device_create(my_class、 MKDEV(gpio_major_number、 0)、 NULL、
"gpio_dev%d" 、0);
ドライバーの中でクリアブロックで次のステートメントを追加し、クリーンアップを完了する。
class_device_destroy(my_class、 MKDEV(gpio_major_number、 0));
class_destroy(my_class);
必要なヘッダファイルはlinux/device.h、プログラムの先頭には、次の内容を追加する必要がある:#include <linux/device.h>
一方、my_class は class型の構造体へのポインタ、プログラムの先頭でグローバル変数に宣言する必要がある。
struct class *my_class;
上記コマンドに gpio_major_numberは デバイスのメインノード番号である。必要なノード番号に変更できる。
gpio_dev は最終のデバイスノードファイル名である。%dは同じデバイスを自動ナンバリング機能である。gpio_classはclass の名称を生成する、ドライバがロードされたとき、/sys/class ディレクトリに確認できる。
上記のステートメントは、必ずしも、初期化とクリーンアップフェーズで使用するわけではなく、別の場合でも使用できる。
(4)/etc/mdev.conf 文件
/etc/mdev.confがなくても使用上に支障はありません。
4.3.2 mdev 原理
(1)mdev –s実行
説明:‘-s’をパラメータとして、/sbin ディレクトリの mdevを呼び出し(実はリンクで、機能は/ binディレクトリの下にbusyboxのプログラムにパラメータを渡して呼び出すこと)、mdev は/sys/class と/sys/blockの中すべてのクラスのデバイスカタログをスキャンし、ディレクトリに "dev"という名前のファイルが含まれている場合、そしてファイルは、デバイス番号が含まれている場合、 mdev はこの情報を使用してこのデバイス用の/ devファイルにデバイスノードを作成する。一般的に起動する時一度だけで゛mdev -s゛を起動する。
(2) ホットプラグイベント
起動時にコマンドを実行:echo /sbin/mdev > /proc/sys/kernel/hotplug 、ホットプラグイベントを発生する時、カーネルは/ sbinディレクトリのmdevを呼び出する。mdevは環境変数ACTION
とDEVPATHを通じて、(システム・デフォルト・アブリ)今回のhotplugイベントが/ sysのどのディレクトリに影響したのを判断する。次にこのディレクトリ内 "dev"という属性ファイルがあるかどうかを確認し、あればこのデバイスの/devファイルにデバイスノードを作成する。
----------続く