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インデックスの失敗の典型的なケース

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

推薦する

HTML における相対と絶対の使用法と違いの詳細な説明

HTML における相対と絶対の違い: 正直に言うと、HTML は世界で最もシンプルな言語です。タグ言...

シンプルなデータ応答システムを実装する

目次1. デップ2. 観察者を理解する3. 監視と観察者を理解する4. トリガーの依存性5. プロセ...

MySQL をベースにしたシンプルな検索エンジンを実装する

目次MySQL ベースの検索エンジンの実装1. ngram全文パーサー2. 全文インデックスを作成す...

mysql 8.0.15 winx64 解凍バージョン グラフィック インストール チュートリアル

システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...

WeChatアプレット開発の実践スキル:データの転送と保存

日々の開発で遭遇した様々な問題と、その解決策を閲覧しながら、日々の開発でよく使用するスキルや知識ポイ...

モバイルレイアウト用の動的REMの実装

ダイナミックレム1. まず、現在の長さの単位を紹介しましょうpx em Mの幅 / 漢字の幅 1em...

Vue における ref と $refs の紹介と使用例

序文JavaScript では、document.querySelector("#demo...

MySQLデータベースを別のマシンに移行する方法の詳細な説明

1. まず、移行サーバー上のデータ ファイルを見つけます。MySQL 5.7 とデフォルトのインスト...

読み取り専用と無効の微妙な違いの詳細な説明

「読み取り専用」と「無効」はどちらも、ユーザーがフォーム フィールドの内容を変更できないようにします...

Vue Element フロントエンドアプリケーション開発 テーブルリスト表示

1. リストクエリインターフェースの効果コード処理ロジックを紹介する前に、まずは感覚的に理解し、レン...

MySQL MyISAM と InnoDB の違い

違い: 1. InnoDB はトランザクションをサポートしていますが、MyISAM はサポートしてい...

mysql-8.0.15-winx64 解凍バージョンのインストールチュートリアルと終了する 3 つの方法

1.公式サイトからダウンロードして解凍する参考: 2. 環境変数を設定するMYSQL_HOMEをMy...

CSS で要素を垂直方向に中央揃えする 7 つの方法

【1】中央の要素の幅と高さを知る絶対値 + 負のマージンコードの実装 .wrapBox5{ 幅: 3...

Vue3とVue2の利点のまとめ

目次1. なぜ vue3 が必要なのでしょうか? 2. vue3の利点3. 応答原則の違い4. ライ...

CentOS7にNginxを素早くインストールする方法を教えます

目次1. 概要2. Nginxインストールパッケージをダウンロードする3. 依存パッケージをインスト...