linux之rootfs(UBIFS)

大小さまざまなことがあります。更新するのに長い時間がかかりました。今回は、ubifsファイルシステムを移植する手順を記録します。

通常、最初にカーネル、次にrootfsですが、カーネルを継続的に変更する場合は、rootfsが最初に存在する必要があるため、rootfsを最初に修正する必要があります。rootfsは、nandフラッシュで最も高度なubifsであると言われています。

 

http://www.busybox.net/にアクセスしてbusyboxのソースコードダウンロードます。最新の安定バージョンは1.18.1で、Workspacesに解凍します。

 

以下は、rootユーザーに切り替えて操作する方法です(他のユーザーモードでコンパイルされたrootfsは、ログイン時にrootとしてログインされません。これは面倒なようですが、簡単にしましょう)。

 

Makefileを変更します。

CROSS_COMPILE = / opt / arm-2010q1 / bin / arm-none-linux-gnueabi-

ARCH =アーム

保存して終了した後:

menuconfigを作成します

1.18.1は、デフォルトでmakeinstallディレクトリを./_installに変更しました。また、静的ライブラリに変更する予定はないので、変更する必要はありません。保存して終了した後、確認してください。

make (生成busybox)

make install(_installディレクトリにファイルを生成します)

 

次に、_install / bin / busyboxの権限を変更します。

chmod 4755 _install / bin / busybox

(busyboxに読み取りと実行、所有者の読み取り、書き込み、実行、4読み取り、2書き込み、1実行、7 = 4 + 2 + 1、5 = 4 + 1、3人が所有者、すべてのユーザーを指定しますグループ、他のグループ。最初の4つは、他のユーザーがファイルを実行するときに、アクセス許可が所有者と同じであることを意味します)

 

_installディレクトリを入力して、Linuxに必要ないくつかのディレクトリを作成します。

mkdir -p dev etc home lib mnt proc root sys tmp usr var / lib / misc var / lock var / log var / run var / tmp
そして権限を変更します:

chmod 1777 tmp
chmod 1777 var / tmp

(最初の1つは、他のユーザーによる削除を防ぎます)

devの下にコンソールデバイスとnullデバイスを作成します
。mknod-m660console c 5 1
mknod -m 660 null c 1 3     

(これらの2つのデバイスは、initの開始時に呼び出されるために使用されます)

 

次に、busyboxが必要とするダイナミックリンクライブラリを見て、busyboxディレクトリに戻って次のように入力します。

/ opt / arm-2010q1 / bin / arm-none-linux-gnueabi-readelf -abusybox | grep共有

libm.so.6とlibc.so.6が必要であることを示す

クロスコンパイラのライブラリを、codesourceryの_install / libディレクトリarm-2010q1にコピーします。デフォルトはarmv5teで、ライブラリの
/ opt / arm-2010q1 / arm-none-linux-gnueabi / libc(対応するARMv4T)の下にあります。はarmv4tにあり、armv7(thumb2のthumb2)に対応します。将来のアプリケーションがlibm.so.6とlibc.so.6を除くこれらのライブラリを使用する可能性があるため、_installExecutionでそれらをすべてコピーします。

cp /opt/arm-2010q1/arm-none-linux-gnueabi/libc/lib/*.so* lib -a

 

次に、_install / etcの下にいくつかの構成ファイルを作成します。

 

 

1 #
2 # /etc/fstab: static file system information.
3 #
4 #
5 #
6 # file system mount type options dump pass
7  
8 #for mdev
9 proc /proc proc defaults 0 0
10 sysfs /sys sysfs defaults 0 0
11
12 #make sure /dev /tmp /var are tmpfs(tmpfs use ram as media) thus can be r/w
13 tmpfs /tmp tmpfs defaults 0 0
14 tmpfs /dev tmpfs defaults 0 0
15 tmpfs /var tmpfs defaults 0 0
16
17  #usbfs /proc/bus/usb usbfs defaults 0 0

 

 

fstabのファイルシステムは、mount-aによってマウントされます。

 

 

1 # see busybox/examples/inittab
2  
3  # Boot-time system configuration/initialization script.
4 # This is run first except when booting in single-user mode.
5  ::sysinit:/etc/init.d/rcS
6
7  #Start an "askfirst" shell on the console (whatever that may be)
8 #use respawn instead askfirst to make sure console always active
9  ::respawn:-bin/sh
10
11  # Stuff to do when restarting the init process
12  ::restart:/sbin/init
13
14 # Stuff to do before rebooting
15 ::ctrlaltdel:/sbin/reboot
16 ::shutdown:/bin/umount -a -r
17 ::shutdown:/sbin/swapoff -a
18
19

 

 

inittabはinitによって実行されます

 

1 #!/bin/sh
2
3 #add setting here for auto start program
4 PATH=/sbin:/bin:/usr/sbin:/usr/bin
5 runlevel=S
6 prevlevel=N
7 umask 022
8 export PATH runlevel prevlevel
9
10 #See docs/mdev.txt
11 #mount all fs in fstab,proc and sysfs are must for mdev
12 mount -a
13
14 #create device nodes
15 echo /sbin/mdev > /proc/sys/kernel/hotplug
16
17 #seed all device nodes
18 mdev -s
19
20 #create pts directory for remote login such as SSH and telnet
21 mkdir -p /dev/pts
22 mount -t devpts devpts /dev/pts
23
24
25
26 if [ -f /etc/hostname ]; then
27 /bin/hostname -F /etc/hostname
28 fi
29
30 if [ -e /sys/class/net/eth0 ]; then
31 ifconfig eth0 192.168.1.15
32 fi
33
34 echo "etc init.d rcS done"
35

 

 

init.d/rcS会在开机时自动执行。


更改rcS和inittab的权限为777:

chmod 777 init.d/rcS

chmod 777 inittab


另外还有几个文件和目录:

rc.d目录,可以存放自启动的一些脚本

mdev.conf(内容可为空,也可参考busybox docs/mdev.txt)

profile
 
1 #id -un = whoami
2 export USER="id -un"
3 export LOGNAME=$USER
4 export PATH=$PATH
5
6 #a colorful prompt begin with "\e[" end with "m"
7 export PS1='\e[1;32m\u@\e[1;31m\h#\e[0m'

 

 

resolve.conf(dnsサーバーをマークすることです。ネームサーバー202.96.134.133の1文だけです)

ホスト名(init.d / rcSが読み取るための、mx27などのホスト名のみ)

passwd、group、shadow user / group / passwordは、PC上のものに置き換えることができます。いくつかの手順は次のとおりです。

 

 

1 passwd一共由7个字段组成,6个冒号将其隔开。它们的含义分别为:
2 1 用户名
3 2 是否有加密口令,x表示有,不填表示无,采用MD5、DES加密。
4 3 用户ID
5 4 组ID
6 5 注释字段
7 6 登录目录
8 7 所使用的shell程序
9
10 Group一共由4个字段组成,3个冒号将其隔开,它们的含义分别为:
11 1 组名
12 2 是否有加密口令,同passwd
13 3 组ID
14 4 指向各用户名指针的数组
15
16 shadow一共由9个字段组成,8个冒号将其隔开,它们的含义分别为:
17 1 用户名
18 2 加密后的口令,若为空,表示该用户不需要口令即可登陆,若为*号,表示该账号被禁用。 上面的表示的是123456加密后的口令。
19 3 从1970年1月1日至口令最近一次被修改的天数
20 4 口令在多少天内不能被用户修改
21 5 口令在多少天后必须被修改(0为没有修改过)
22 6 口令过期多少天后用户账号被禁止
23 7 口令在到期多少天内给用户发出警告
24 8 口令自1970年1月1日被禁止的天数
25 9 保留域

 

 

これで、lib / modules / `uname -r` / kernelの下のファイル(` uname -r`は開発ボードのLinuxバージョンであり、echo `uname -r`と入力して表示できます)を除いて、このrootfsは基本的に完了しています。 。www.infradead.org gitのmkfsのアドレス(汗、容易ではない見つけること)でのFAQを見つけます:

git clone go to://git.infradead.org/mtd-utils.git

cd mtd-utils

git describe master(バージョン番号はv1.3.1-138-gf0cc488です)

エラーをコンパイルするにはmkfs.ubifsと入力します。FAQで3つのライブラリが必要であることを確認し、それらをインストールします。

sudo apt-get install zlib1g-dev

sudo apt-get install liblzo2-dev

sudo apt-get install uuid-dev

makeはmkfs.ubifsを正常に生成します

 

次に、_installをubifsファイルシステムにします。

./mkfs.ubifs -r <path> / _ install -m 512 -e 15360 -c 3897 -o ubifs.img

このうち、-mはページサイズ、-eは論理消去ブロックサイズ、-cは論理消去ブロックの最大数を表します。これは、ベアボックスを介してubiattachを実行したときに表示されます。

 

電源を入れてベアボックスに入る:

/dev/nand0.rootを消去します

ubiattach /dev/nand0.root

ubimkvol / dev / ubi0 root 0(ここでの名前はbootargsと一致する必要があることに注意してください。デフォルトはubi0.rootです)

dhcp

tftp ubifs.img /dev/ubi0.root

おすすめ

転載: blog.csdn.net/daocaokafei/article/details/114844896