This shows you the differences between two versions of the page.
ass:laboratoare:01:tasks:02 [2023/07/11 16:43] radu.mantu |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 01. [??p] Creating the Firmware Image Package ==== | ||
- | |||
- | This package will contain **bl2**, **bl31** and **bl33**. The Secure OS (**bl32**) is outside the scope of this lab; even if we did bother to include it, it would just //be there//, doing nothing. | ||
- | |||
- | Following this exercise, we should be able to reach the first step of the booting sequence that //can// be interactive; meaning that we'll be able to interact with a shell implemented in **bl33**. | ||
- | |||
- | === [??p] Task A - Trusted Firmware-A (bl31) === | ||
- | |||
- | For this component we'll be using the [[https://github.com/nxp-imx/imx-atf|Trusted Firmware-A]] project. Although it contains reference implementations for the other bootloaders as well, we are going to use it strictly for **bl31**. The other have more complete and widely recognized alternatives available. | ||
- | |||
- | We recommend reading [[https://trustedfirmware-a.readthedocs.io/en/latest/getting_started/initial-build.html|the documentation]] moving forward. Take a close look at [[https://trustedfirmware-a.readthedocs.io/en/latest/getting_started/build-options.html|the build options]] in particular. | ||
- | |||
- | Following a successful build process, you should obtain a **bl31.bin**. | ||
- | |||
- | <note warning> | ||
- | Normally, we'd be using the [[https://www.trustedfirmware.org/projects/tf-a/|official TF-A]] but at the moment it seems to have a linker script bug for our platform. Reason why we use the NXP fork of TF-A instead. | ||
- | </note> | ||
- | |||
- | <note tip> | ||
- | The default target platform is ARM's Fixed Virtual Platform (FVP), a simulator. That is not our platform... \\ | ||
- | To specify that we don't have a **bl32** for it to initialize, pass it ''SPD=none''. \\ | ||
- | You don't have to build everything. Just ''make ... bl31''. | ||
- | </note> | ||
- | |||
- | === [??p] Task B - The firmware === | ||
- | |||
- | With **bl31** out of the way, we are going to tackle **bl2** next. Remember however, that the main role of **bl2** is to initialize the hardware using the proprietary firmware offered by the chip manufacturer. Without this firmware, we don't even have access to the DRAM memory. | ||
- | |||
- | Remember that **bl1** is loaded from ROM in the first half of the available SRAM (aka. On-Chip RAM). That SRAM is just 128KB in size, so there's not much space. **bl1** then loads **bl2** (but not the remainder of the FIP) in the upper half of SRAM. At this point it's up to **bl2** to enable the 2GB of DRAM and finish loading the rest of the FIP in main memory. | ||
- | |||
- | For this task, get the latest version of the firmware from [[http://sources.buildroot.net/firmware-imx/|here]]. | ||
- | What we're actually interested in are the following files: | ||
- | * lpddr4_pmu_train_1d_dmem.bin | ||
- | * lpddr4_pmu_train_1d_imem.bin | ||
- | * lpddr4_pmu_train_2d_dmem.bin | ||
- | * lpddr4_pmu_train_2d_imem.bin | ||
- | * signed_hdmi_imx8m.bin | ||
- | |||
- | === [??p] Task C - U-Boot (bl2, bl33) === | ||
- | |||