最小限のルートファイルシステムを構築するためにbusyboxを移植するための詳細な手順

最小限のルートファイルシステムを構築するためにbusyboxを移植するための詳細な手順

Busybox: 小さなコマンドが詰まったスイスアーミーナイフ。

ステップ1: ディレクトリ構造を作成する

主に以下のディレクトリを含むルートファイルシステムディレクトリを作成します。

/dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /sys
#mkdir /home/rootfs
#cd /home/rootfs
#mkdir dev etc lib usr var proc tmp home root mnt sys

ステップ2:busyboxを使用して/bin /sbin linuxrcをビルドする

busybox-1.16.1ディレクトリに入り、実行します

#defconfig を作成する
#メニュー設定を作成する
ビジーボックス設定 ----->
 ビルドオプション -----> 
  //1 busyboxを静的にコンパイルすることを選択する [*]BusyBoxを静的バイナリとしてビルドする(共有ライブラリなし) 
  //2. クロスコンパイラを (/usr/local/arm/4.3.2/bin/arm-linux-) として指定します。クロスコンパイラプレフィックス
インストール オプション -----> (生成されたファイルを保存するディレクトリを選択するか、コピーせずに直接 rootfs に置くこともできます)

  //3. /usrを使用しないを選択する 
Busybox ライブラリのチューニング ---> 
 [*]ユーザー名補完 
 [*]派手なシェルプロンプト 
 [*]端末からカーソル位置を照会する 
  //4. コンパイルされたbusyboxシェルコマンドインタープリタは、現在のパスとホスト情報の表示をサポートします。

保存して終了

#make #make インストール

busybox ディレクトリには、/bin、/sbin、linuxrc の 3 つのファイルを含む _install ディレクトリがあります。これらの 3 つのディレクトリまたはファイルを、最初の手順で作成した rootfs フォルダにコピーします。

#cp bin/ sbin/ linuxrc /home/rootfs -ra

bin ディレクトリのほとんどはリンクなので、-a パラメータを忘れずに指定してください。-a パラメータを指定しないと、コピー後にそれに応じてコピーされ、リンクの形式ではなくなります。

ステップ 3 etc ディレクトリを構築します (主に etc/inittab ファイル、etc/init.d/rcs、etc/fstab)

1) ルートファイルシステム rootfs の etc ディレクトリに入り、次の操作を実行します。

Busybox-1.16.1/examples/bootfloopy/etc/*現在のディレクトリにコピーします。

 #cp –r busybox-1.16.1/examples/bootfloopy/etc/* rootfs/etc

inittab を変更する (それに基づいて他のサブプロセスを作成する)

元のファイルは次のとおりです:

1 ::sysinit:/etc/init.d/rcS 2 ::respawn:-/bin/sh 
    3 tty2::askfirst:-/bin/sh 4 ::ctrlaltdel:/bin/umount -a -r

変更後:

---(1): ログインせずにコンピュータを起動し、直接シェルを開く(先頭の数字は行番号)

1 ::sysinit:/etc/init.d/rcS 
        2 #::respawn:-/bin/sh 
        3 #::respawn:-/bin/ログイン 
        4 コンソール::askfirst:-/bin/sh 
        5 #tty2::askfirst:-/bin/sh 6 ::ctrlaltdel:/bin/umount -a -r

---(2): 起動するにはログインが必要です(先頭の数字は行番号です)

 1 ::sysinit:/etc/init.d/rcS 
        2 #::respawn:-/bin/sh 
      3 ::respawn:-/bin/ログイン 
        4 #console::askfirst:-/bin/sh 
       5 #tty2::askfirst:-/bin/sh 
       6 ::ctrlaltdel:/bin/umount -a -r

2) 仮想マシン上の/etc/passwd、/etc/group、/etc/shadowをrootfs/etcにコピーします。

  # cp /etc/passwd ルートファイルシステム/etc
  # cp /etc/group ルートファイルシステム/etc 
  # cp /etc/shadow 屋根/etc

以下の 3 つのファイルを変更し、ルートに関連する項目のみを保存します。内容は具体的な状況によって異なります。

passwd を root:x:0:0:root:/root:/bin/sh に変更します。これは、root に関連する項目のみを保存することを意味します。最後に、/bin/ash に変更します。

グループをroot:x:0:rootに変更する

シャドウをroot:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::

開発ボードにログインするときは、仮想マシンと同じユーザー名とパスワードを入力する必要があります。

3) プロフィールを変更する

PATH=/bin:/sbin:/usr/bin:/usr/sbin //実行可能プログラム環境変数 export LD_LIBRARY_PATH=/lib:/usr/lib //ダイナミックリンクライブラリ環境変数 /bin/hostname osee
  USER="`id -un`"
  ログ名=$USER
  ホスト名='/bin/ホスト名'
  PS1='[\u@\h \W]# ' //ホスト名、現在のパス、その他の情報を表示します。

4) etc/init.d/rc.S ファイルを変更します (自動実行コマンドを追加します) #!バイナリ

/bin/mount -n -t ramfs ramfs /var 
   /bin/mount -n -t ramfs ramfs /tmp
  /bin/mount -n -t sysfs なし /sys
  /bin/mount -n -t ramfs なし /dev
  /bin/mkdir /var/tmp
  /bin/mkdir /var/modules
  /bin/mkdir /var/run
  /bin/mkdir /var/log
  /bin/mkdir -p /dev/pts //telnet サービスで必要 /bin/mkdir -p /dev/shm //telnet サービスで必要 #echo /sbin/mdev > /proc/sys/kernel/hotplug //USB 自動マウントには /sbin/mdev -s が必要です //mdev を起動して /dev の下にデバイス ファイル ノードを自動的に作成します /bin/mount -a 
  #########ネットワークを構成する##################################
  /sbin/ifconfig lo 127.0.0.1 ネットマスク 255.0.0.0
  /sbin/ifconfig eth0 192.168.1.70
  /sbin/ifconfig eth0 ネットマスク 255.255.255.0
  /sbin/route にデフォルトの gw 1​​92.168.1.1 eth0 を追加します
  /sbin/ifconfig eth1 192.168.1.71 ネットマスク 255.255.255.0
  /sbin/route にデフォルトの gw 1​​92.168.1.1 eth1 を追加します

5) etc/fstabファイルを変更し、次のファイルを追加してproc tmpfsファイルシステムをマウントします。

#デバイス マウントポイント タイプ オプション ダンプ fsck 順序
  なし /dev/pts devpts モード=0622 0 0
  tmpfs /dev/shm tmpfs デフォルト 0 0
  proc /proc proc デフォルト 0 0

ステップ 4 lib ディレクトリを構築します。

(~/at91/x-tools/arm-zch-linux-gnueabi/arm-zch-linux-gnueabi/sysroot/lib、このディレクトリに SO ファイルをコピーするだけです)

1 )#cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

以下の動的ライブラリをrootfs/libにコピーします。

#cp *so* roofs/lib -a

2 )#cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib

以下の動的ライブラリをrootfs/libにコピーします。

#cp ./libstdc++.so.* rootfs/lib -a

ステップ 5 lmdev ディレクトリを構築します。

方法1: デバイスファイルを静的に作成する cat /proc/devices

mknod コンソール c 5 1
mknod ヌル c 1 3
mknod ttySAC0 c 204 64
mknod mtdblock0 b 31 0

方法2: mdevを使用してデバイスファイルを作成する

カーネルがCONFIG_SYSFS CONFIG_TMPFS設定していることを確認してください。

カーネルが起動すると、mdevが自動的に実行される。

etc/fstab を変更して、ルート ファイル システムを自動的にマウントします。etc/init.d/rcS を変更して、自動的に実行するコマンドを追加します。

要約する

上記は、編集者が紹介したbusyboxを移植して最小限のルートファイルシステムを構築する詳細な手順です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Linux システムの busybox に mkfs.vfat コマンドを移植する
  • Dockerはbusyboxを使用してベースイメージを作成します
  • Telnet は Alpine イメージの busybox-extras に移動されました
  • Androidデバイスがawkコマンドを認識せず、busyboxがない場合の対処方法

<<:  MySQL は、あるテーブルのデータに基づいて別のテーブルの特定のフィールドを更新します (SQL ステートメント)

>>:  Ember.js と Vue.js の詳細な比較

推薦する

2 級コンピュータ試験のための MySQL の知識ポイントとよく使用される MYSQL コマンド

2級コンピュータ試験のMySQL知識ポイントの基礎、一般的なMYSQLコマンドは次のとおりです。よく...

Tomcatの全体構造の簡単な紹介

Tomcat は Web コンテナとして広く知られています。Java を学び始めたときから現在の仕事...

Nginxドメイン名転送のhttpsアクセスの実装

事前に一言:突然、複数のドメイン名のアクセスを https に転送するというタスクを受け取りました。...

MySQL ストアド プロシージャの原理と使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...

CSS マージンの重複とその防止方法

2 つ以上のブロックレベル ボックスの垂直に隣接するエッジが重なり合っています。結果として得られる境...

MySQL を暗号化および復号化するいくつかの方法 (要約)

目次前面に書かれた双方向暗号化エンコード/デコードAES_ENCRYPT/AES_DECRYPT D...

CentOS 7.4 で MySQL 5.7.28 バイナリモードをインストールする方法

Linuxシステムバージョン: CentOS7.4 MySQL バージョン: 5.7.28 Linu...

Vueトップタグ閲覧履歴の実装

目次ナンセンス実装された機能文章要点ナンセンスデモプレビュー実装された機能デフォルトでホームページが...

MySQL 8.0.16 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.16圧縮パッケージのインストールと設定方法を参考までに紹介します。...

ミニプログラムにより、製品属性の選択や仕様の選択が可能

この記事では、ミニプログラムで製品属性選択または仕様選択を実装するための具体的なコードを参考までに共...

ウィンドウの中央にブロック要素の位置を設定する方法

ウィンドウの中央にブロック要素の位置を設定する方法ブロック要素をウィンドウの中央に配置する上記の方法...

JavaScript クロージャの詳細

目次1. クロージャとは何ですか? 2. 閉鎖の役割序文: JavaScript部分ではクロージャが...

CentOS に Memcached と PHP Memcached 拡張機能をインストールする

高性能分散メモリオブジェクトキャッシュシステムMemcachedについては、別の記事「Windows...

Vue を使用して Web ページのスクリーンショットを撮る方法をご存知ですか?

目次1. html2Canvasをインストールする2. 必要なVueコンポーネントを導入する3. ス...

MySQLの実行原理、論理階層化、データベース処理エンジンの変更について詳しく説明します

長い間 MySQL を使ってきたので、SQL 文はすでに覚えていると思います。そこで、その実行原理を...