Linuxカーネルとデバイスツリーのコンパイルと書き込みを分析する

Linuxカーネルとデバイスツリーのコンパイルと書き込みを分析する

1. 材料を準備する

必要に応じて対応する資料を準備できます。

開発環境: VMware

オペレーティングシステム: Ubuntu

開発バージョン: PaiTu i2S-6UB

2. Linuxカーネルファイルをダウンロードする

以前にUBootファイルをダウンロードしたことがある方は、各開発バージョンの情報に対応するファイルがあることをご存じでしょう。ない場合は、開発バージョンを購入したストアに問い合わせてください。

ダウンロード後、ファイルを Linux システムにコピーして解凍します。解凍後のディレクトリは下図のようになります。

注意: コンパイルするときは、現在のパスでコンパイルする必要があります。

3. コンパイル

1. クリーンアッププロジェクト

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean を作成します

2. デフォルトの設定ファイルを設定する

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- i2som_imx6_defconfig を作成します

コンパイルが完了すると、以下に示すように「.config」が生成されます。

注意: PaiTu のデフォルトの設定ファイルは「i2som_imx6_defconfig」です。メーカーによってデフォルトの設定ファイルは異なります。対応するドキュメントに従って確認できます。 Paituの公式サイトに記載されているように、下の図に示すように

3. コンパイルしてkernrlファイルを生成する

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage を作成します

4. コンパイルして.dtbファイルを生成する

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs を作成します

注: この時点でカーネルとデバイス ツリーのコンパイルは完了しています。注意して見ると、コマンドが長い理由がわかります。各命令で「ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-」を使用して、コンパイラをクロス コンパイラとして設定します。コンパイル手順をより簡潔にするために、Makefile ファイルに ARCH と CROSS_COMPILE の設定を追加することができます。 今後は、次の図に示すように、コンパイル時にコマンドの「ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-」の部分を省略することができます。

5. ファイルパスを生成する

zImage: /arch/arm/boot/ ディレクトリ内

dtb: /arch/arm/boot/dts ディレクトリ内

4. TFTp 経由で zImage および .dtb ファイルを書き込む

1. zImageファイルと.dtbファイルをtftpサーバーに置きます

2. UBootの開発版のコマンドラインを入力し、TFTPサービスアドレスを設定します。

setenv サーバーのIP 192.168.1.99

保存

3. zImageファイルをダウンロードする

tftp 80800000 zイメージ

4. .dtbファイルをダウンロードする

tftp 83000000 i2c6ulxb-i2s6ull-emmc.dtb

5. zImageとdtbファイルの読み込みを開始する

ブーツ 80800000 - 83000000

6. 成功を確認する

書き込みが完了すると、カーネルの起動時にコンパイル時間が表示されます。時間が正しければ、成功したことを意味します。起動情報は、次の図に示されています。

5. よくある質問

1. zImage をコンパイルして生成するときに発生する可能性のあるエラーを下図に示します。

このエラーは主に、開発環境に「lzop」ツールがインストールされていないために発生します。インストールして再コンパイルするだけで済みます。

sudo apt-get install lzop

2. 起動が「カーネルを起動しています...」で停止します。以下を参照してください。

私の開発環境に問題があるのか​​分かりませんが、コンパイルが正しければ、他のファイルを変更しても設定エラーは発生しないことが多いので、このような状況に遭遇した場合は、何度か試してみて下さい。

3. 図のようにシステムを起動できます。PaiTuの開発バージョンもファイルを置き換えることで更新できます。システムの開発バージョンに入ったら、以下の手順に従ってください。

mkdir /mnt/linux/

/mnt/linux/ をアンマウントします

/dev/mmcblk1p1 /mnt/linux/ をマウントします。

cp i2c6ulxb-i2s6ull-emmc.dtb /mnt/linux/zImage-i2c6ulxb-i2s6ull-emmc.dtb; 同期

/mnt/linux をアンマウントする

リブート

公式チュートリアルは以下の通りです。

4. 起動後、正常に起動できないことがわかります。これは、ルート ファイルが存在しないためです。

上記は、Linuxカーネルとデバイスツリーのコンパイルと書き込みの分析の詳細な内容です。Linuxカーネルとデバイスツリーのコンパイルと書き込みの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Linux カーネルプログラミングにおけるコンテナの of() 関数の紹介
  • Linuxカーネルスケジューラソースコード初期化の分析
  • Hongmengライトカーネル静的メモリの使用分析
  • カーネルスレッド理論の詳細な説明とJavaの例
  • C言語を使用してカーネルを書く方法を説明する記事

<<:  MySQLインデックスの失敗の典型的なケース

>>:  ウェブページをデザインするには?ウェブページを作成するには?

推薦する

JavaScriptにおけるPromiseの使い方と注意点について(推奨)

1. 約束の説明Promise は、非同期操作の最終状態 (失敗または正常完了) とその結果の値を...

React+TS を使用したシンプルな Jira プロジェクトを実装するためのベスト プラクティス

トレーニングのための一連のプロジェクト反応+ts内容は少ないですが、フックのカプセル化、ts ジェネ...

ドロップダウンリストのJavaScript実装

この記事の例では、ドロップダウンリストを実装するためのJavaScriptの具体的なコードを参考まで...

ページのレンダリング時間を短縮してページの実行速度を速めます

ブラウザでのページのレンダリング時間をできるだけ短縮するにはどうすればよいでしょうか? この記事は、...

HTMLでカスタムタグを使用する方法

カスタム タグは XML ファイルと HTML ファイルで自由に使用できますが、いくつか注意すべき点...

LinuxでIPを表示する方法の例

ネットワークの問題のトラブルシューティング、新しい接続のセットアップ、ファイアウォールの構成を行うと...

MySQL ページング制限の実用的な最適化

序文クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要があり...

JS でクリップボード API を使用する方法

目次1. Document.execCommand() メソッド(1)コピー操作(2)貼り付け操作(...

nginx を使用して正規表現で指定された URL リクエストを傍受する方法

nginx サーバーnginx は、静的ファイルの処理に非常に効率的な優れた Web サーバーです。...

Vue3 でタイマーコンポーネントをカプセル化する方法

背景一部のショッピング モールの Web ページで商品の詳細を開くと、購入数量を選択するためのカウン...

Clickhouse Docker クラスターの展開と構成を例を使って説明します

目次前面に書かれた環境の展開Zookeeper クラスタの展開Clickhouse クラスターの展開...

js配列の基本的な使い方のまとめ

序文配列は特別な種類のオブジェクトです。 js には実際の配列はなく、オブジェクトを使用して配列をシ...

Docker で FastDFS ファイル システムを構築する (マルチイメージ チュートリアル)

目次FastDFSについて1. 画像を検索する2. イメージをインストールする3.1. 必要なディレ...

Nginx tp3.2.3 404 問題の解決

最近、Apache を nginx に変更しました。TP プロジェクトを実行に移すと、404 エラー...

MySQL で複数の主キーが定義されているエラーの解決方法

主キーを作成するには 2 つの方法があります。 テーブルテーブル名を作成( フィールド名タイプ、 フ...