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

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

推薦する

MySQLが日付フィールドインデックスを使用しない理由の要約

目次背景探検する要約する背景テーブルでは、dataTime フィールドは varchar 型に設定さ...

CSS スタイルの優先順位とカスケード順序に関する議論

一般的に: [重要なフラグ1つ] > [特別なフラグ4つ] > 宣言順!importan...

Windows10 での MySQL msi インストール チュートリアル (画像とテキスト付き)

1. ダウンロード1. MySQL msi 公式 Web サイトから最新のダウンロードをクリックす...

VMware12 に CentOS8 をインストールする方法 (VM 仮想マシンに CentOS8 をインストールするチュートリアル)

数日前に CentOS8 がリリースされました。8 の最初のバージョンですが、今日は VM12 に ...

IDEA を使用して Web プロジェクトを作成し、Tomcat に公開する方法

目次ウェブ開発1. Web開発の概要Tomcatのインストールと設定Tomcatをインストールする2...

MySQL ストアド プロシージャ、カーソル、トランザクションの例の詳細な説明

MySQL ストアド プロシージャ、カーソル、トランザクションの例の詳細な説明以下は私が作成した M...

RPM パッケージを使用して MySQL 5.7.18 をインストールするチュートリアル

システム:セントOS7 RPM パッケージ: mysql-コミュニティクライアント-5.7.18-1...

Linux で削除できないファイル/フォルダの解決方法

序文最近、弊社のサーバーがハッカーの攻撃を受け、一部のファイルの属性が変更されたため、ウイルスファイ...

メタ宣言注釈の手順

メタ宣言注釈の手順: 1. モバイル ページと 1 対 1 で対応するすべての PC ページを分類し...

フロントエンドページのスライド検証を実装するための JavaScript + HTML

この記事では、フロントエンドページのスライド検証を実装するためのJavaScript + HTMLの...

JavaScript の実行コンテキストとコールスタックの詳細な説明

目次1. 実行コンテキストとは何か2. 実行コンテキスト スタックとは何ですか? 3. 実行コンテキ...

Docker ベースの Redis 1 マスター、2 スレーブ、3 センチネルの実装

現在、Redis とコンテナについて学習中なので、Docker を使用して Redis マスタースレ...

JavaScript 戦略パターンを使用してフォームを検証する方法

目次概要戦略パターンを使用しないフォーム検証戦略パターンを使用して最適化する戦略パターンの利点要約す...

JavaScriptを使って動的にテーブルを生成するケースの詳しい説明

目次序文実装のアイデア実装コード成果を達成する序文これは、テーブルを動的に追加する例です。[追加] ...

JSは10進数を16進数に変換するサンプルコードを実装します

序文コードを書くと、時々基数変換の問題に遭遇します。一般的な変換には、2進数、8進数、10進数、16...