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

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

推薦する

Dockerコンテナのセルフスタートを実装する方法

コンテナの自動起動Docker は、コンテナが終了したとき、または Docker が再起動されたとき...

Mybatisの各SQL文の実行時間の統計

背景最近、面接でデータベース トランザクションについてよく質問されます。通常は、@Transacti...

vue3.0 のウォッチ リスナーの例の詳細な説明

目次序文リスナーと計算プロパティの違いvue3 で watch を使用するにはどうすればいいですか?...

js配列のfind、some、filter、reduceの違いの詳細な説明

Array の filter、find、some、reduce メソッドの違いを区別し、使用シナリオ...

MySQL に接続する際に Navicat for MySQL が 2005 エラーを報告する問題を解決する

前回の記事では、Navicat for Mysql 接続エラー 1251 (接続失敗) の問題を解決...

MySQLデータベース入門:データベースバックアップ操作の詳細な説明

目次1. 単一データベースのバックアップ2. 圧縮バックアップ3. マルチデータベースバックアップ4...

JavaScriptは双方向リンクリストプロセス分析を実装します

目次1. 二重連結リストとは何か2. 双方向リンクリストのカプセル化3. 双方向リンクリストの一般的...

Linux whatisコマンドの使い方

01. コマンドの概要whatis コマンドは、システム コマンドの簡単な説明を含むいくつかの特別な...

Reactは二次的連鎖効果(階段効果)を実現する

この記事では、二次リンク効果を実現するためのReactの具体的なコードを参考までに共有します。具体的...

浮遊要素によって引き起こされる問題と解決策の詳細な説明

1. 問題複数のフローティング要素は親要素の幅を拡張できず、親要素の高さが 0 になる可能性がありま...

MySQL インデックスの詳細な説明

目次1. インデックスの基本1.1 はじめに1.2 インデックスの仕組み1.3 インデックスの種類1...

Linux システムで grub.cfg ファイルの破損を修復する手順

目次1. grub.cfg ファイルの紹介1. grub.cfg ファイルの場所2. grub.cf...

JavaScript ESの新機能letとconstキーワードに基づく

目次1. letキーワード1.1 基本的な使い方1.2 変動昇進はない1.3 一時的なデッドゾーン1...

MySQL データベースで UTF-8 エンコードを設定する方法

/etc/my.cnf または /etc/mysql/my.cnf ファイルを変更する [クライアン...

Reactはいくつかの方法でパラメータを渡します

目次親コンポーネントと子コンポーネント間でパラメータを渡すルーティングパラメータステータスの改善コン...