実験環境:物理マシン Ubuntu20.04/Windows 10 21H2
1. 最小限の Linux ファイル システムを作成してインストールする
1.1 uboot をコンパイルする
次の 3 つのフォルダーを Ubuntu の同じレベルのディレクトリにコピーします。
図に示すように、コピーが完了したら、次のようにします。
次のコマンドを使用して、uboot ソース コードを解凍します。
tar -vxf iTop4412_uboot_20180320.tar.gz
解凍が完了すると、次のようになります。
You can compile the uboot source code by using the "build_uboot.sh" script in the iTop4412_uboot source code folder. コンパイル中、ボード モデルに応じて次のパラメーターを設定する必要があります。
ハードウェア分類 |
スクリプト実行パラメーター |
コアボード SCP、1G メモリ |
SCP_1GDDR |
コアボード SCP、2G メモリ |
SCP_2GDDR |
コアボードPOP、1Gメモリ |
POP_1GDDR |
コアボードPOP、2Gメモリ |
POP_2GDDR |
筆者が使用している開発ボードはメモリ1GのコアボードSCPなので、コンパイル時のパラメータは「SCP_1GDDR」とし、iToop4412_ubootディレクトリに入り、以下のコマンドでubootのコンパイルを完了します。
./build_uboot.sh SCP_1GDDR
コンパイルが完了したら、図に示すように
図に示すように、コンパイルされた u-boot-iTop-4412.bin ファイルは iTop4412_uboot ディレクトリにあります。
1.2 Linux カーネルをコンパイルする
図に示すように、最初に iTop4412_Kernel_3.0_20191007.tar.gz カーネル ソース コードを Ubuntu にコピーします。
次に、次のコマンドを使用して解凍します。
tar -vxf iTop4412_Kernel_3.0_20191007.tar.gz
解凍が完了すると、次のようになります。
次に、「iTop4412_Kernel_3.0」ディレクトリに入り、コンパイルされたカーネルを構成します。
最小の Linux システム用のカーネルをコンパイルする必要がある場合は、config_for_linux* の構成ファイルを選択する必要があります。Android 用のカーネルをコンパイルする場合は、config_for_android* を選択します。他のシステムについても同様で、エリートはエリートを意味します。 version と super はオールラウンド バージョンを意味します。
最小の Linux システムをコンパイルするために必要なカーネルを例にとると、著者は SCG1G のエリート バージョンを使用しているため、次のコマンドを使用して .config ファイルを構成する必要があります。
cp config_for_linux_scp_elite .config
完了したら、次のコマンドを使用してカーネルをコンパイルします。
zImageを作る
図に示すように、Ubuntu20.04 LTS システムでは、コンパイル中にバージョンの問題が原因でエラーが発生することが測定されています。
解決策: エラー ディレクトリに従って、timeconst.pl ファイルを見つけ、defineed(@array) という文を入力して検索し、括弧内のプロンプトに従って defined を無視し、次のように設定します。
if (!defined(@val)) {
への変更:
if (!(@val)) {
詳細なプロセスは次のとおりです. iTop4412_Kernel_3.0 カーネル ディレクトリで、次のコマンドを使用して timeconst.pl ファイルを編集します。
vim /kernel/timeconst.pl
次に、間違った行数にジャンプします。ここでは 373 です。vim で次のコマンドを使用してジャンプします。
373gg
図に示すように、ジャンプが完了した後:
変更後、図に示すように:
次に、コンパイルが完了した後の図に示すように、保存して終了し、再コンパイルします。
図に示すように、生成された zImage ファイルは ./arch/arm/boot ディレクトリにあります。
1.3 Busybox のダウンロードと設定
最小の Linux ファイル システムの作成は、Busybox オープン ソース ツールボックスを使用して完了できます. Busybox は、一般的に使用されるシェル コマンドを含む、最も一般的に使用される 100 以上の Linux コマンドとツールを統合するソフトウェアです. その公式ウェブサイトは次のとおりです:
図に示すように、公式Webサイトを開きます。最新バージョンは1.35.0です
ダウンロード後、図に示すように Ubuntu にコピーします。
解凍するには、次のコマンドを使用します。
tar -vxf busybox-1.35.0.tar.bz2
解凍完了後、図のように
解凍して生成された busybox-1.35.0 ディレクトリに移動し、次のコマンドを使用します。
メニュー構成を作る
Linux ファイル システムを構成できます。Ubuntu 20.04 LTS の実際の測定では、次のエラーがポップアップ表示されます。
これは、Ubuntu システムに ncurses devel パッケージがないためです。次のコマンドを使用してインストールします。
apt install libncurses5-dev
完了後、make menuconfig を再度使用して、図に示すように、buybox のメニュー構成インターフェイスに入ります。
次に、Settings ディレクトリに入り、下にスクロールして、[---Build Options] の下にある [Cross compiler prefix] を見つけて、クロス コンパイラを構成します。
ここでは、先ほどインストールした「arm-none-linux-gnueabi-」クロスコンパイラを例に、Enterを押して「Cross compiler prefix」と入力し、エディットボックスに「arm-none-linux-gnueabi-」と入力してから、図に示すように、[OK] を選択します。
次に、図に示すように、Busybox のファイル システム インストール ディレクトリを構成します。デフォルトは現在のフォルダの「_install」ディレクトリです。
ここでは、busybox がファイル システムをインストールするために、busybox-1.35.0 ディレクトリの外にファイル システム ディレクトリを作成します。そのため、図に示すように、「./_install」を「../filesystem」に変更する必要があります。
次に「OK」を選択して保存し、図のように「はい」を選択して終了します。
1.4 最小限の Linux ファイル システムを改善する
図に示すように、busybox-1.35.0 と同じディレクトリにファイルシステム ディレクトリを作成します。
次に、次のように、ファイルシステムで最小の Linux システムに必要なファイルを完成させます。
次のコマンドを使用して、ファイル システムに一連のフォルダーを作成します。
mkdir dev etc lib mnt proc sys tmp var
完成後は写真のように
次に、新しく作成した etc ディレクトリに入り、次のコマンドを使用して init.d および rc.d フォルダーを作成します。
mkdir init.d rc.d
完了後、図に示すように:
次に、新しく作成した rc.d フォルダーに入り、次のコマンドを使用して init.d フォルダーを作成します。
mkdir init.d
完了後、図に示すように:
次に、ファイルシステム ディレクトリに戻り、var ディレクトリに入り、次のコマンドを使用して他のシステムに必要なフォルダを作成します。
mkdir lib lock log run tmp
完了後、図に示すように:
次の操作では、図に示すように、Xunwei が提供するいくつかの初期化ファイルを使用する必要があります。解凍後にウィンドウで開かないようにしてください。
作成した etc ディレクトリに入り、eth0-setting passwd プロファイルの 3 つのファイルをそこにコピーし、次のコマンドを使用してこれらのファイルの権限を 755 に変更します。
chmod 755 eth0-setting passwd プロファイル
完了後、図に示すように:
etc ディレクトリの下の init.d ディレクトリに入り、そこに ifconfig-eth0 と rcS の 2 つのファイルをコピーし、次のコマンドを使用してこれらのファイルの権限を 755 に変更します。
chmod 755 ifconfig-eth0 rcS
完了後、図に示すように:
etc/rc.d/init.d ディレクトリに移動し、netd ファイルをコピーして、次のコマンドを使用してファイルのアクセス許可を 755 に変更します。
chmod 755 netd
完了後、図に示すように:
システム ディレクトリに戻り、lib フォルダに入り、次のコマンドを使用してコンパイラのライブラリ ファイルをそこにコピーします。
cp /usr/local/arm/arm-2009q3/arm-none-linux-guneabi/libc/lib/* ./
完了後、図に示すように:
このようにして、最小の Linux システムのファイル システムが完成しました。
1.5 最小限の Linux ファイル システムをコンパイルする
busybox-1.35.0 ディレクトリに入り、次のコマンドを使用して、最小限の Linux システムのコンパイルとインストールを完了します。
作る
インストールする
make コマンドを使用した後、Ubuntu20.04 LTS システムで次のエラーが発生します。
次のコマンドで ipaddress.c ファイルを編集します。
vim ネットワーキング/libiproute/ipaddress.c
次に、図に示すように、345 行目にジャンプします。
IFA_F_DADFAILED の条件付きコンパイルを追加します。プログラムは次のように変更されます。
保存して終了した後、再コンパイルして、新しいエラーがあることを確認します. これらのエラーは主に、クロスツール チェーンとソース コード バージョンの不一致が原因です. busybox 構成で未定義のモジュールを削除するだけです.
ここには nsenter と sync の 2 つがあり、busybox の make menuconfig に "/" を入力してモジュールを検索し、その場所を取得してから、選択された状態を削除します。
以下は nsenter を検索した結果で、その場所は Linux システム ユーティリティとして取得できます。
検索して選択したら、「n」を入力して選択状態を削除し、「y」を入力して選択状態に入ります。
同期を探し続ける
Coreutils メニューの下で、選択解除操作も実行します。
最後に、保存して終了し、make を使用して再度コンパイルします。
コンパイルに合格し、最後に次のコマンドを使用して、busybox のインストールを完了します。
インストールする
成功すると、結果は次の図のようになります。
1.6 最小の Linux ファイルシステムをパックする
上記のコマンドを実行して、busybox をコンパイルおよびインストールした後、make_ext4fs パッケージ ツールを使用して、linux_tools.tgz 圧縮ファイルを「/」ディレクトリにコピーします。
次に、次のコマンドを使用して解凍します。
tar -vxf linux_tools
完了後、図に示すように:
その後、以前のファイル システムと同じレベルのディレクトリに入り、次のコマンドを使用して最小の Linux ファイル システムをパッケージ化します。
make_ext4fs -s -l 314572800 -a root -L linux system.img ファイルシステム
最後のパラメーター filesystem は、ファイル システム テンプレートが配置されているディレクトリ、つまり上記の完全な Linux ファイル システムを示し、最後から 2 番目のパラメーター system.img は、パッケージ化後に生成されるファイル名が system.img であることを示します。
このコマンドが Ubuntu 20.04 LTS システムでエラーを報告し、共有ライブラリ libc++.so.6 をロードするときにエラーが表示されることが実際に測定されています。
次のコマンドを使用して、lib32c-dev と lib32stdc++6 の 2 つのライブラリをインストールします。
apt install lib32c-dev
apt install lib32stdc++6
インストールが完了したら、package コマンドを再度使用して、システム イメージ ファイル system.img をパッケージ化し、生成します (図を参照)。
1.7 最小の Linux ファイル システムを書き込む
HyperTerminal (または minicom) で u-boot モードで使用し (カーネルの更新のみが必要な場合は、パーティションをワイプする必要はありません)、パーティションをワイプし、fastboot モードに入ります。
(1コマンドずつ実行)
fdisk -c 0
ファットフォーマット mmc 0:1
ext3format mmc 0:2
ext3format mmc 0:3
ext3format mmc 0:4
高速起動
cmd.exe の下で使用し、otg ラインを介して必要なイメージを開発ボードに焼き付けます。
一般に、uboot を再プログラムしないでください (最小の linux、android、および QT が 1 つの uboot を共有し、最初の項目は uboot を再プログラムすることです)。
fastboot.exe フラッシュ ブートローダー u-boot-iTOP-4412.bin
fastboot.exe フラッシュ カーネル zImage
fastboot.exe フラッシュ ramdisk ramdisk-uboot.img
fastboot.exe フラッシュ システム system.img
fastboot -w
ファストブート再起動
プログラミングが完了し、開発ボードがカーネルをロードした後、次のコマンドを使用して、busybox のバージョンを確認します。
ls -j
図に示すように、これは、busybox によってパッケージ化されたシステムが正常に実行できることを意味します。