農産物へのルート・ファイル・システム(A)

以前のカーネルの移植では、自分自身のルートファイルシステムを作成する方法を説明するためにここに、元のルート・ファイル・システムの開発ボードを使用しました。
ルートファイルシステムは、ルートファイルシステムを作成するための選択肢UBIFSファイルシステムがまだある、JFFS2、YAFFS2、UBIFSおよび他のファイルシステムのサポートを行うことができます。UBIFSソートされていないブロック画像ファイルシステム(順不同ブロック・イメージ・ファイル・システム)の頭文字で、比較的新しいファイルシステムです。デザインと性能比較YAFFS2内の1つの後継UBIFS JFFS2ファイルシステムとして、MLC NANDフラッシュメモリのためのより適切なJFFS2。Linuxはそれを達成することは簡単だったので、そのためのサポートを提供してそれ以降のバージョンから2.6.27カーネル。
ルート・ファイル・システムは、実際には、ツリーのルートのLinux、特定のディレクトリ、ファイルノード装置、カーネルモジュールファイル、ライブラリファイル、コマンド、およびその他の設定ファイルの集まりです。このコレクションは、最終的には、ルートファイルシステムUBIFSファイルシステムに基づいて、以下の具体的な生産プロセスを議論するために、達成するために、ファイルシステムの特定の種類に依存します。
まず、あなたがルートディレクトリにrootfsの名前のディレクトリを作成し、ルートディレクトリに保存されたファイルのセットを確立するために、全体のルートファイルシステムは、このディレクトリに配置されています。次に、rootfsのディレクトリを入力し、最初のディレクトリのディレクトリツリーのルートディレクトリに作成し、「は、mkdirのビンsbinになどDEV PROC LIBの実装 SYS VAR MNT USR tmpのメディア・ホームは、」 これらのディレクトリを作ります。
そして、次の人生コマンドコンソールデバイスノードと2つのヌル・ファイルで、それぞれ、二つのファイルをデフォルトのデバイスノードを作る「5 1 Cのmknodコンソール」を行い、「1 3 Cのmknodヌル」することが必要にdevディレクトリ、ディレクトリを入力します。これは、ノードが続くデバイスノードコマンドの製造のためのmknodは、デバイスファイルの名前で、デバイスはメジャー番号とマイナー番号の後ろに、文字型デバイスであることをC手段。
次はあなたが特定のアプリケーションの動作をサポートするために、ライブラリglibcのlibディレクトリにファイルをコピーする必要があります。、クロスコンパイラツールチェーンに配置ライブラリLIBディレクトリのglibcクロスコンパイラツール(この場合4.4.3 /アームなし-linux-ディレクトリに鎖 gnueabi /)、 及び、コマンド「CPの./lib/*を実行します。そう* / rootfsの/ libに-d「あなたはrootfsの/ libディレクトリにダウンにクロスコンパイラツールチェーンのライブラリファイルをコピーすることができ、パラメータは」「そのままをコピーするときにソフトリンクファイルの属性を維持するための手段を-d。ここでは、クロスコンパイラツールチェーンのディレクトリには、(このチュートリアル使用中のクロスコンパイルツール4.4をサポートして使用するファイルシステムとLinuxカーネルのライブラリファイルのルートであるLinuxカーネルが使用するツールチェーンのディレクトリを、コンパイルするときに最もよく使用されています。 3バージョン)。クロスコンパイラツールチェーンの下でこれらのライブラリがなければ、あなたはこれらのライブラリを生成するソースからのクロスコンパイラツールチェーンを再作成する必要があります。
ライブラリファイルのコピーが完了したら、あなたは、Linuxカーネルモジュールファイルがコピーされて置くことができます。これらのモジュールファイルの「M」にメイクmenuiconfigでLinuxカーネルを設定するとき、我々は唯一のそれは「メイクを行うこれらのカーネルモジュールファイルを生成しないので、カーネルイメージファイルをコンパイルのmake zImageの目の前に行うため、カーネルモジュールファイルは、チェックされていますモジュール「コマンドは、カーネルモジュールをコンパイルしてモジュールファイルを生成することができます。カーネルモジュールファイルが生成された後、「メイクmodules_install ARCH =アームINSTALL_MOD_PATH =の実装 / rootfsの」 コマンドのインストール、インストールは実際にコピーされ、完了後に、rootfsの/ libディレクトリに、よりカーネルモジュールであるモジュールと呼ばれるディレクトリのだろうファイル。必要でない場合は、カーネルモジュールファイルが大きい、多くは、コピー、および回避消耗スペースフラッシュません。
コマンドの次のセットを作るために、一般的なLinuxの実行可能プログラムのコマンドは、binディレクトリとsbinにディレクトリにありますが、プラットフォームが異なるので、ここでは単に、使用上のディレクトリおよびコピーsbinに仮想マシンのbinディレクトリにファイルを置くことはできませんされています。組み込みシステムのコマンドセットで使用され、通常はBusyboxのを生成するために、サードパーティ製のソフトウェアが提供されます。それが必要なコマンドのbusyboxで実行可能ファイルを提供され、コマンドは実際にメイクbusyboxのにに以下の、として機能するbusyboxのためのソフトリンクファイルです。
公式サイトからのダウンロードに(https://busybox.net)利用可能busyboxのソースコードは、ここ1.20.2バージョンに、例えば、busyboxの-1.20.2.tar.bz2を取得するためにファイルをダウンロードした後、コマンドを実行する「タール-jxvf busybox- 1.20.2.tar.bz2「解凍は、抽出液にディレクトリを入力が完了した後、あなたはbusyboxのソースコードファイルを見ることができます。カーネルのソースコードと同じように、クロスコンパイルするMakefileのファイルを変更する必要があり、「CROSS_COMPILE?=」でトップのMakefileで見つかったその補数を完了するための一つは、「CROSS_COMPILE?=アーム-linux-」で 、 そして「ARCH?= $(SUBARCHを見つけます)、ARCH?=アーム」「一つは、それを変更する」の完成時に保存して終了。次のファイル名を指定して実行「メークdefconfig」使用既定の参照構成は、図に示すように、設定変更「menuconfigの作成」の実装前に完了されます。

在上图中可见,其菜单形式与内核配置完全一样。在配置菜单中,命令是以功能来分类的,比如与编辑相关的命令(如vi)都在Editors选项下,与网络相关的命令(如ifconfig)都在Networking Utilities选项下,如此等等。需要的命令进行勾选,不需要的不勾选。在生成busybox可执行程序时,有动态库和静态库两种方式可选。若要使用静态库方式,需要勾选Busybox Settings->Build Options->Build Busybox as a static binary(no shared libs)一项,若要使用动态库方式,需要勾选Busybox Settings->Build Options->Build shared libbusybox一项。动态库在运行时需要库文件的支持,但文件小;静态库可独立运行,但文件大。如果在根文件系统的lib目录下提供了库文件(libcrypt.so.1、libm.so.6、libc.so.6及ld-linux.so.2)的支持,busybox可编译成动态库形式,否则须编译成静态库形式。当然,如果为了确保命令集能够顺利运行,也可直接编译成静态库形式,文件也比动态库形式大不了多少。还有一点要注意,若想在嵌入式Linux中也实现提示符下显示路径的功能,在配置Busybox时还要勾选Busybox Settings->Busybox Library Tuning下的“Username completion”和“Fancy shell prompts”两项,这两项默认是不勾选的。还有,若前面嫌改Makefile文件麻烦,也可在Busybox Settings->Build Options->Cross Compiler prefix一项中把前缀设置为“arm-linux-”就可以了。
配置完成后执行make命令进行编译,编译完成后执行“make CONFIG_PREFIX=/rootfs install”命令进行安装,安装完成后,在rootfs目录下就会多出一个名为linuxrc的链接文件,并在bin目录和sbin目录中出现了命令文件。仔细观察会发现,除了bin目录下的busybox是一个可执行文件,其余的命令文件都是指向busybox的一些符号链接文件,这也是Busybox的独到之处。
编译Busybox时要注意一下交叉编译工具版本的选择,不同的busybox及不同的交叉编译工具版本都会直接影响到是否能编译成功,本例使用busybox为1.20.2版本,交叉编译工具为4.4.3版本,经测试能够成功编译。若要更换其他版本请自行尝试。
命令集安装完成后,接下来还需要对根文件系统进行配置。首先执行命令“vi /rootfs/etc/inittab”,在rootfs的etc目录下新建一个名为inittab的文件,并在其中录入以下四行内容:
::sysinit:/etc/init.d/rcS
console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
录完后保存退出。inittab文件是Linux启动后的第一个进程init执行时所依赖的文件,init进程根据inittab文件的内容来创建其他进程,比如挂接文件系统、启动shell等。inittab内容的格式是固定的,其中定义的登记项都是以冒号隔开的四个段,即:“id:runlevels:action:process”的形式。其中,id段是每个登记项的标识符,用于唯一标识每个登记项,不能重复;runlevels段表示系统的运行级别,分为0~6共七个级别;action段表示对应登记项的process在一定条件下所要执行的动作,该项的动作较多,如sysinit表示系统启动,respawn表示当process终止后会马上重新启动,askfirst会在控制台上显示“Please press Enter to active this console”并在重新启动进程之前等待用户按下回车键,ctrlaltdel表示键盘同时按下组合键ctrl+alt+del的动作,shutdown表示关机的动作等等;process段表示具体启动哪个程序、脚本,或执行哪个命令,如果本段以“-”符号开头,则表示后面的程序是“交互”式的。id段如果为空,表示使用与init进程一样的控制台。runlevels段如果为空,表示所有的级别都执行。如果在根文件系统中没有inittab文件,则Busybox的init进程将会使用其默认的条目进行启动。
在上面的inittab文件中,sysinit项会去执行一个名为/etc/init.d/rcS的脚本文件,因此还要去创建这个文件。先执行命令“mkdir /rootfs/etc/init.d”创建目录,然后执行“vi /rootfs/etc/init.d/rcS”创建rcS脚本文件,并在其中录入以下内容:
#!/bin/sh
mount –a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev –s
ifconfig eth0 192.168.1.90
完成后还需要给rcS脚本文件加上可执行属性,执行“chmod 755 rcS”即可。rcS文件定义了系统启动后所需要执行的一系列命令,主要任务是挂载文件系统及自动创建设备节点文件。在rcS文件中,第一行“#!/bin/sh”是指下面的脚本用/bin/sh来执行。第二行必须是“mount -a”,即首先要进行文件系统的挂载,所挂载的具体文件系统由/etc目录下的文件fstab来确定。所以还需要创建该文件,执行“vi /etc/fstab”创建fstab文件,并在其中录入以下内容:
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
录入时要注意,上述文件中每列(共6列)应该是对齐的(即每列之间的空格应以tab键来充当)。在fstab文件中,第1列表示要挂载的设备名称,第2列表示挂载点,第3列表示文件系统类型,第4列表示挂载的参数,第5列表示一个用来备份文件的程序,第6列表示一个用来检查磁盘的程序。
在上述fstab文件中,第一行表示挂载proc文件系统,挂载的目录(挂载点)为“/proc”。proc文件系统是一个系统自动生成和管理的虚拟文件系统,它没有实际的设备,里面的目录、文件都是由内核临时生成的,用来表示系统的运行状态。
第二行表示挂载tmpfs文件系统,挂载的目录(挂载点)为“/tmp”。tmpfs文件系统是一个临时文件系统,挂载后一些需要生成临时文件的程序就可都放到“/tmp”目录下,这样可减少系统对Flash存储器的操作,延长使用寿命。
第三行表示挂载sysfs文件系统,挂载的目录(挂载点)为“/sys”。sysfs文件系统是一个系统级的文件系统,它是udev机制所依赖的文件系统。udev是用户程序,它能够根据系统中硬件设备状态动态地更新设备文件,并在“/dev”目录下自动地创建设备节点。在Busybox中是使用mdev来实现udev功能的,mdev可认为是udev的一个简化版。
第四行表示根文件系统下的“/dev”目录也挂载tmpfs文件系统。由于使用mdev机制来自动生成“/dev”目录下的设备节点文件,为了减少对每次启动时对Flash存储器的操作,也把“/dev”目录挂载成为临时文件系统。
有了文件以上这些文件系统的支持,就可以使用mdev机制来动态的创建设备节点文件了,这是由前面rcS文件中的最后一行“mdev -s”来实现的,实现后就可以在“/dev”目录下看到自动建立的设备节点文件了。 有一点要说明一下,在“/dev”目录下原来手动创建的console和null两个设备节点文件不变,其余的文件才是由mdev机制动态建立的。由于init进程在执行时需要依赖console和null两个文件,所以在mdev实现之前就得先创建出这两个文件,所以它们不能通过mdev来创建。
在rcS文件中,第三行“mkdir /dev/pts”是创建devpts文件系统的挂载点(注:由于前面执行了mount -a,所以此时的dev目录是由临时文件系统担任的)。第四行“mount -t devpts devpts /dev/pts”是挂载devpts文件系统。pts是远程虚拟终端,devpts即远程虚拟终端文件设备,它是目前最常见的pseudo终端(PTYs)实现方式,通过“/dev/pts”目录可以了解目前远程虚拟终端的基本情况。此处挂载devpts主要是让系统支持远程外部网络连接的虚拟终端,如telnet、ssh等。第五行“echo /sbin/mdev > /proc/sys/kernel/hotplug”是设置内核,它将用户空间的应用程序路径传递给内核,之后kernel会在每次设备出现变动时调用已传递到用户空间的应用程序/sbin/mdev来处理对应的信息,进而mdev应用程序操作/dev目录下的设备,进行添加或删除。第六行“mdev -s”是启用mdev机制。最后一行“ifconfig eth0 192.168.1.90”是在启动系统设定系统的IP地址。
通过创建以上三个文件(inittab、inittab、fstab),就完成了对根文件系统的基本配置,然而有时候为方便使用,我们还会对其进行一定的功能扩充,比如一般会让开发板具备外存储器(SD卡及U盘等)的自动挂载功能。要实现这个功能,除了在rcS文件中加入“echo /sbin/mdev > /proc/sys/kernel/hotplug”一句以外,还需额外建立两个文件。执行“vi /etc/mdev.conf”新建一个mdev的配置文件,在其中输入以下内容:
mmcblk[0-9]p[1-9] 0:0 666 */etc/mdev.sh
sd[a-x][1-9] 0:0 666 */etc/mdev.sh
录入时同样注意,上述文件中每列(共4列)应该是对齐的(即每列之间的空格应以tab键来充当)。第一行表示SD卡(MMC卡)的设备节点,第二行表示U盘的设备节点。系统中的hotplug就是依据mdev.conf文件来生成设备节点的。
mdev.conf的格式为:<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]
其中,<device regex>为设备名称,支持正则表达式,例如上面的mmcblk[0-9]p[1-9];<uid>:<gid>分别为用户ID和用户所在组ID,默认为0:0;<octal permissions>为设备属性,即权限,数字表示与普通文件的一样,666表示可读可写;[<@|$|*> <command>]这个选项是当设备匹配成功时所执行的指令(command),指令可以是自己编写的脚本,指令前面有三个符号,@表示在设备节点创建完执行,$表示在设备节点删除前执行,*表示在设备节点创建完和删除前执行,该符号只能选其中的一个。
接下来执行“vi /etc/mdev.sh”创建在mdev.conf中调用的执行脚本文件,并在其中输入以下内容:
#!/bin/sh
if [ "$ACTION" = "remove" ] ; then
echo -e "umount /media/$MDEV\n" > /dev/ttySAC1
/bin/umount /media/$MDEV
/bin/rm -rf /media/$MDEV
else
echo -e "mount /dev/$MDEV /media/$MDEV\n" > /dev/ttySAC1
/bin/mkdir -p /media/$MDEV
/bin/mount /dev/$MDEV /media/$MDEV
fi
脚本中的变量ACTION表征了拔插的动作,如果是移除则进行自动反挂载并在console端打印出提示信息,如果是插入则进行自动设备挂载并在console端打印出提示信息。最后还要给mdev.sh脚本文件加上可执行属性,执行“chmod 755 mdev.sh”即可。这样配置后,在插入外存储器时,就会自动将其挂载到“/media”下,挂载点以设备节点名称命名,移除时会自动进行反挂载。
至此,根文件系统的全部配置就完成了,接下来就可以进行根文件系统移植了。

おすすめ

転載: www.cnblogs.com/fxzq/p/12293567.html