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 ファイルが現在のディレクトリに存在します。