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

この記事の例では、ボタンをクリックすることで画像を切り替えることを実現するJavaScriptの具体...

MySQL テーブルパーティションの使用法と基本原理の詳細な説明

目次パーティションテーブルとはパーティションテーブルの適用シナリオパーティションテーブルの制限パーテ...

element-ui 写真をアップロードした後、座標点をマークします

要素UIとはelement-ui は、Ele.me のフロントエンド チームが開発者、デザイナー、製...

JS 内の Json 文字列 + Cookie + ローカルストレージ

目次1.Json文字列1.1Json構文1.2 例2. クッキー2.1 使い方は? 3. ローカルス...

LAMP ソースコードを使用したエンタープライズレベルのインストールチュートリアル

目次LAMPアーキテクチャ1.ランプの紹介2. WebサービスワークフローWebサーバーのリソースは...

AngularJSにおける括弧の役割の詳細な説明

1. 括弧の役割1.1 角括弧 [ ]属性名が角括弧で囲まれている場合、右側には式の値が割り当てられ...

Linux Crontab シェル スクリプトを使用して第 2 レベルのスケジュールされたタスクを実装する方法

1. シェルスクリプトcrontab.shを書く #!/bin/bash step=1 #ステップ間...

react-beautiful-dnd を使用してリスト間のドラッグ アンド ドロップを実装する

目次react-beautiful-dndを選ぶ理由基本的な使い方基本概念使い方使用中に発生した問題...

純粋な CSS で DIV サスペンションを実装するサンプル コード (固定位置)

DIV フローティング効果 (固定位置) は CSS のみで実装されており、IE8、360、Fir...

Vue要素と多言語切り替えの詳細な説明

目次序文複数の言語を切り替えるにはどうすればいいですか? 1. vue-i18nパッケージをインスト...

HTML フォームタグチュートリアル (4):

ここで、次のような項目をフォームに追加したいとします: 現在いる都市を参照します。ここで私たちが話し...

CSS で子 div の高さを親コンテナの残りのスペースに合わせる方法

1. フローティング方式を使用する効果画像: コードは次のとおりです: (.content の高さは...

Linux での Nginx アンチホットリンクと最適化の実装コード

バージョン番号を非表示バージョン番号は非表示になっていません。セキュリティを強化するために、バージョ...

Docker が MySQL イメージをプルするのが遅すぎる問題を解決する

Docker を使用して MySQL イメージをプルしようとして 30 分経っても失敗したため、代わ...

ログインインターセプションを実装するためのVueルーティング

目次1. 概要2. ログインインターセプションを実装するためのルーティングナビゲーションガード1. ...