Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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) === 
- 
  
ass/laboratoare/01/tasks/02.1689083019.txt.gz ยท Last modified: 2023/07/11 16:43 by radu.mantu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0