RK3399移植u-boot


0.序文

  最近、海鮮市場で SW799 ボードを購入しましたが、スマート ターミナルの分解ボードのようなもので、メイン コントロールは rk3399、デュアルコア 1.8GHz A72 + クアッドコア 1.4GHz A53、4G RAM + 16G eMMC 構成です。性能はかなり良さそうです 前のi.mx6q-sdbが発売されたので、国産のコントローラーに変えてプレイしたいと思っていたところです。このボードを選んだ最大の理由は、誰かがデバイスツリーファイルを逆コンパイルして移植条件を整えており、たとえ文鎮化していても修復方法が残っているからです。関連する移植症例もいくつか見つけたので、まずは試してみましょう。

一、移植

注:
  移植手順は主に@大ULTerman の小さなモンスターブロガーの投稿を参照しており、rk3399 に関するチップの原理部分をステップごとに読むこともできます。非常にレベルが高く、参考価値があります。著者は、参考のためにここで一部の手順を簡略化しているだけです。
  なお、この記事の内容はボスの事例を基に暫定的に作成したものであり、公式evb評価ボードの構成を基に移植したものですので、開発プロセスをよく理解してからSW799に適応させてください。同じボードを直接移植する場合は、最初に自分で探索する必要がある場合があります。

1. クロスツールチェーンの取り付け

GNU Arm Embedded Toolchain 公式 Web サイトから提供されるクロスコンパイル ツール チェーン  をダウンロードします。チップ アーキテクチャに応じて選択する必要があります。
ここに画像の説明を挿入します
ダウンロード後、/usr/local/arm ディレクトリに解凍し、/etc/ ファイルを変更します。プロファイル ファイルを作成し、ツール チェーンを環境変数に追加します。

sudo vim /etc/profile
export PATH=$PATH:/usr/local/arm/arm-gnu-xxxx/bin
#保存后重新加载环境变量
source /etc/profile

インストールが成功したかどうかを確認します。

aarch64-none-linux-gnu-gcc -v

2. bl31.elfを入手する

  rk3399 は Armv8-A アーキテクチャであり、arm-trusted-firmware 検証も必要です。したがって、後で u-boot とマージするために、最初に TF-A をコンパイルして bl31.elf を取得する必要があります。arm-trusted-fireware
ソース コード   をダウンロードし、ディレクトリに入り、次のコマンドを使用してコンパイルします。

make CROSS_COMPILE=aarch64-none-linux-gnu- PLAT=rk3399

エラー: arm-none-eabi-gcc ツール チェーンが見つかりません
ここに画像の説明を挿入します

sudo apt-get install gcc-arm-none-eabi

次に、後で使用できるように build/rk3399/release/bl31/bl31.elf ファイルを再コンパイルしてコピーします。

3.移植u-boot

u-boot ソフトウェア パッケージのダウンロード Web サイト: https://ftp.denx.de/pub/u-boot/

1) ダウンロード:

wget https://ftp.denx.de/pub/u-boot/u-boot-2023.07.tar.bz2
tar -jxf u-boot-2023.07.tar.bz2

2) 構成:

make evb-rk3399_defconfig V=1
make menuconfig

シリアルポートのボーレートを変更します。

Ctrl + Enter で変更を入力します

Device Drivers  ---> 
      Serial --->     
           (115200) Default baudrate 

emmc を変更します。

CONFIG_MMC_HS400_SUPPORT および CONFIG_MMC_SDHCI_SDMA 構成をオフにします。これら 2 つのオプションは、emmc の読み取りおよび書き込み方法に関連します。ここでこれらをオンにすると、emmc を読み取れなくなる問題が発生します。関連するドライバーを移植した後に適応することを試みます。

Device Drivers  ---> 
      MMC Host controller Support  --->
            [ ] MMC debugging
            [ ] enable HS400 support  
            [ ] Support IO voltage configuration
            [ ] Support SDHCI SDMA  

FIT を構成します。

Rockchip の公式 U-Boot をダウンロードし、公式ソース コードから Fit ファイルを生成するスクリプトをコピーします。

git clone https://github.com/rockchip-linux/u-boot.git
cp rockchip-linux/u-boot/arch/arm/mach-rockchip/make_fit_atf.py u-boot-2023.07/arch/arm/mach-rockchip/

次に、menuconfig にスクリプト パスを追加します。

Boot options  --->    
     Boot images  --->
         [*] Use a script to generate the .its script                                                 
        (arch/arm/mach-rockchip/make_fit_atf.py) .its file generator script for U-Boot FIT image

起動遅延を構成します: (オプション)

Boot options  --->    
     Autoboot options --->
         (5) delay in seconds before automatically booting

設定が完了したら、この構成を my-rk3399_defconfig として保存すると、以降の移植はこの構成に基づいて変更されます。

3) コンパイル:

make ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu-

エラー: atf-bl31 ファイルが見つかりません。
ここに画像の説明を挿入します
前の手順で保存した bl31.elf を u-boot のルート ディレクトリにコピーし、名前を変更して再コンパイルします。

cp <path>/bl31.elf u-boot-2023.07/
cp bl31.elf atf-bl31

エラーが報告された場合はFailed to read ELF file: Python: No module named 'elftools'、そのままpip3 install pyelftoolsインストールを使用してください。

4) idbloader.img ファイルを生成します。

  TPL/SPL は uboot ソース コードに基づいてコンパイルされます。TPL は DDR の初期化を担当します。TPL の初期化が完了すると、BootROM プログラムに戻ります。BootROM プログラムは SPL のロードを続けます。SPL は u-boot.itb ファイルをロードします。そして、実行のために uboor にジャンプします。
  idbloader.img は tpl/u-boot-tpl.bin および spl/u-boot-spl.bin ファイルから生成され、tools ディレクトリ内の mkimage ツールを使用する必要があります。

tools/mkimage -n rk3399 -T rksd -d tpl/u-boot-tpl.bin idbloader.img
  • -n rk3399 は、イメージ ファイルの名前を「rk3399」に設定します。
  • -T rksd は、イメージ タイプを Rockchip SD カード ブート イメージとして指定します。
  • -d tpl/u-boot-tpl.bin は、生成された TPL イメージ ファイル「tpl/u-boot-tpl.bin」を入力ファイルとして指定し、idbloader.img を出力ファイルとして指定します。

spl/u-boot-spl.bin を idbloader.img にマージします。

cat spl/u-boot-spl.bin >> idbloader.img

ここに画像の説明を挿入します

5) u-boot.its ファイルを生成します

make u-boot.itb ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu-

スクリプトは一度に複数のファイルをコンパイルでき、入力されたパラメータはそのファイルにのみ関連するため、このコマンドはコンパイル時にエラーを報告します。コンパイルが完了すると、u-boot.its および u-boot.itb ファイルが現在のディレクトリに存在します。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_45682654/article/details/131881797