1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. PetaLinux® FSBLを変更する方法

TECHブログ

PetaLinux® FSBLを変更する方法

PetaLinux® FSBLを変更する方法

皆さん、こんにちは。
本ブログではPetaLinux® 2020.2を使用する際のFSBLを変更する方法を紹介します。

目次

はじめに

PetaLinux® ツールは、AMD社のプロセッシング システム上でエンベデッド Linux ソリューションをカスタマイズ、ビルドおよびデプロイするために必要なものをすべて提供します。

設計生産性の加速を目的とするこのソリューションは、AMD社のハードウェア設計ツールと連動し、Versal®、Zynq® UltraScale+™ MPSoC、Zynq®-7000 SoC、および MicroBlaze™向けのLinuxシステム開発を容易にします。

背景

AMD社のVivado® ML EditionでXSAファイル(ハードウェア情報)を作成し、PetaLinux®ビルドするときに、デフォルトの設定では、FSBLは自動生成されて変更ができません。
以下の方法で、PetaLinux®ビルド時にFSBLをカスタマイズすることが可能ですので紹介します。

手順

1. FSBLのフォルダを作成する

以下のコマンドでpath project-spec/meta-user/recipes-bsp/fsbl/ にfilesのフォルダを作成します。

左右にスクロールしてご覧ください
[linux@pc project]$ mkdir -p project-spec/meta-user/recipes-bsp/fsbl/files

2. 変更した差分 FSBL.patch を project-spec/meta-user/recipes-bsp/fsbl/files にコピーする

sample source code FSBL.patch


以下の四角枠は、サンプルソースコード FSBL.patch の内容です。

左右にスクロールしてご覧ください
diff --git a/lib/sw_apps/zynqmp_fsbl/src/xfsbl_config.h b/lib/sw_apps/zynqmp_fsbl/src/xfsbl_config.h
index 7ee817c..01f6691 100644
--- a/lib/sw_apps/zynqmp_fsbl/src/xfsbl_config.h
+++ b/lib/sw_apps/zynqmp_fsbl/src/xfsbl_config.h
@@ -117,7 +117,8 @@ extern "C" {
 #define FSBL_BS_EXCLUDE_VAL				(0U)
 #define FSBL_EARLY_HANDOFF_EXCLUDE_VAL	(1U)
 #define FSBL_WDT_EXCLUDE_VAL			(0U)
-#define FSBL_PERF_EXCLUDE_VAL			(1U)
+//#define FSBL_PERF_EXCLUDE_VAL			(1U)
+#define FSBL_PERF_EXCLUDE_VAL			(0U)
 #define FSBL_A53_TCM_ECC_EXCLUDE_VAL	(1U)
 #define FSBL_PL_CLEAR_EXCLUDE_VAL		(1U)
 #define FSBL_USB_EXCLUDE_VAL			(1U)
diff --git a/lib/sw_apps/zynqmp_fsbl/src/xfsbl_hooks.c b/lib/sw_apps/zynqmp_fsbl/src/xfsbl_hooks.c
index 80a1314..b9e04a5 100644
--- a/lib/sw_apps/zynqmp_fsbl/src/xfsbl_hooks.c
+++ b/lib/sw_apps/zynqmp_fsbl/src/xfsbl_hooks.c
@@ -46,7 +46,7 @@ u32 XFsbl_HookBeforeBSDownload(void )
 	/**
 	 * Add the code here
 	 */
-
+       Xil_Out32(0xFFCA0004,0x1);
 
 	return Status;
 }
diff --git a/lib/sw_apps/zynqmp_fsbl/src/xfsbl_qspi.c b/lib/sw_apps/zynqmp_fsbl/src/xfsbl_qspi.c
index 0b6aac4..29f13e8 100644
--- a/lib/sw_apps/zynqmp_fsbl/src/xfsbl_qspi.c
+++ b/lib/sw_apps/zynqmp_fsbl/src/xfsbl_qspi.c
@@ -244,8 +244,9 @@ u32 XFsbl_Qspi24Init(u32 DeviceFlags)
 	/*
 	 * Set the pre-scaler for QSPI clock
 	 */
-	Status = XQspiPsu_SetClkPrescaler(&QspiPsuInstance, XQSPIPSU_CLK_PRESCALE_8);
-
+//	Status = XQspiPsu_SetClkPrescaler(&QspiPsuInstance, XQSPIPSU_CLK_PRESCALE_8);
+//	Status = XQspiPsu_SetClkPrescaler(&QspiPsuInstance, XQSPIPSU_CLK_PRESCALE_4);
+		Status = XQspiPsu_SetClkPrescaler(&QspiPsuInstance, XQSPIPSU_CLK_PRESCALE_2);
 	if (Status != XFSBL_SUCCESS) {
 		UStatus = XFSBL_ERROR_QSPI_PRESCALER_CLK;
 		XFsbl_Printf(DEBUG_GENERAL,"XFSBL_ERROR_QSPI_PRESCALER_CLK\r\n");
@@ -929,8 +930,9 @@ u32 XFsbl_Qspi32Init(u32 DeviceFlags)
 	/*
 	 * Set the pre-scaler for QSPI clock
 	 */
-	Status = XQspiPsu_SetClkPrescaler(&QspiPsuInstance, XQSPIPSU_CLK_PRESCALE_8);
-
+//	Status = XQspiPsu_SetClkPrescaler(&QspiPsuInstance, XQSPIPSU_CLK_PRESCALE_8);
+//	Status = XQspiPsu_SetClkPrescaler(&QspiPsuInstance, XQSPIPSU_CLK_PRESCALE_4);
+		Status = XQspiPsu_SetClkPrescaler(&QspiPsuInstance, XQSPIPSU_CLK_PRESCALE_2);
 	if (Status != XFSBL_SUCCESS) {
 		UStatus = XFSBL_ERROR_QSPI_PRESCALER_CLK;
 		XFsbl_Printf(DEBUG_GENERAL,"XFSBL_ERROR_QSPI_PRESCALER_CLK\r\n");

sample FSBL.patch の変更内容

(ubuntu18.04のKompareでFSBL.patchを開いて変更内容表示する)


以下は、ubuntu18.04の画面キャプチャとなります。




3. fsbl_%.bbappend ファイルを作成する

project-spec/meta-user/recipes-bsp/fsbl/にfsbl_%.bbappendファイルを作成します。

fsbl_%.bbappend ファイルの中身は以下のように記述してください。

左右にスクロールしてご覧ください
#Enable appropriate FSBL debug flags YAML_COMPILER_FLAGS_append = " -DFSBL_DEBUG"
#Add debug for FSBL
#XSCTH_BUILD_DEBUG = "1"
 
#To add compiler flags in FSBL:
#YAML_COMPILER_FLAGS_append = " -DFSBL_PROT_BYPASS"
#FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
#SRC_URI += " file://fsbl.patch"
  
#FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
# Patch for FSBL

#do_configure_prepend() {
#    if [ -d "${S}/patches" ]; then
#       rm -rf ${S}/patches
#    fi
#
#    if [ -d "${S}/.pc" ]; then
#       rm -rf ${S}/.pc
#    fi
#}

SRC_URI_append = " file://fsbl.patch "

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

4. plnx-proj-root/components/plnx_workspace を削除する

左右にスクロールしてご覧ください
[linux@pc project]$ petalinux-build -x mrproper
[linux@pc project]$ rm -rf components/plnx_workspace

5. FSBLを再ビルドする

左右にスクロールしてご覧ください
[linux@pc project]$ petalinux-build
[linux@pc project]$ petalinux-build -c bootloader
INFO: Sourcing build tools
[INFO] Building bootloader
[INFO] Sourcing build environment
[INFO] Generating workspace directory
INFO: bitbake virtual/fsbl
Loading cache: 100% |#############################################################################| Time: 0:00:00
Loaded 4273 entries from dependency cache.
Parsing recipes: 100% |###########################################################################| Time: 0:00:03
Parsing of 3004 .bb files complete (3003 cached, 1 parsed). 4274 targets, 174 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |########################################################################| Time: 0:00:01
Checking sstate mirror object availability: 100% |################################################| Time: 0:00:00
Sstate summary: Wanted 149 Found 37 Missed 112 Current 884 (24% match, 89% complete)
NOTE: Executing Tasks
NOTE: Setscene tasks completed
NOTE: Tasks Summary: Attempted 3146 tasks of which 3146 didn't need to be rerun and all succeeded.
INFO: copy to TFTP-boot directory is not enabled !!
[INFO] Successfully built bootloader
[linux@pc project]$

以上でカスタマイズしたbootloaderが生成されました。


弊社ではFPGA設計や回路図設計、レイアウト設計、ソフトウェア設計、筐体設計などを受託開発しています。サービス内容をWEBサイトに掲載していますので、ぜひご覧ください。

設計受託・ODMの概要については
こちら

FPGAの活用に際して設計検討などありましたら、お気軽にお問い合わせください。

FPGAの活用・設計検討の
お問い合わせはこちら

最後までお付き合いいただきありがとうございました。

このブログのシリーズ

関連ブログ