mirror of https://github.com/wolfSSL/wolfBoot.git
Support Renesas RA6M4 with SCE use
parent
edcdba28fc
commit
170bb9a585
|
@ -10,6 +10,8 @@ In this demo, you may download two versions of application binary file by Renesa
|
|||
You can download and excute wolfBoot by e2Studio debugger. Use a USB connection between PC and the
|
||||
board for the debugger and flash programmer.
|
||||
|
||||
Please see `Readme_wSCE.md` for Renesas SCE use case.
|
||||
|
||||
## 2. Components and Tools
|
||||
|
||||
|
||||
|
@ -110,7 +112,7 @@ Project properties are preset for the demo.
|
|||
SEGGER_RTT.h\
|
||||
SEGGER_RTT_Conf.h\
|
||||
SEGGER_RTT_printf.c
|
||||
|
||||
+ Open `SEGGER_RTT_Conf.h` and Set `SEGGER_RTT_MEMCPY_USE_BYTELOOP` to `1`
|
||||
+ To connect RTT block, you can configure RTT viewer configuration based on where RTT block is in map file\
|
||||
|
||||
e.g.[app_RA.map]
|
||||
|
|
|
@ -0,0 +1,310 @@
|
|||
# wolfBoot for Renesas RA6M4 with SCE
|
||||
|
||||
## 1. Overview
|
||||
|
||||
It demonstrates simple secure firmware update by wolfBoot and uses Renesas SCE. A sample application v1 is
|
||||
securely updated to v2. Both versions behave the same except displaying its version of v1 or v2.
|
||||
They are compiled by e2Studio and running on the target board.
|
||||
|
||||
In this demo, you may download two versions of application binary file by Renesas Flash Programmer.
|
||||
You can download and excute wolfBoot by e2Studio debugger. Use a USB connection between PC and the
|
||||
board for the debugger and flash programmer.It is only available RSA with Renesas SCE now.
|
||||
|
||||
## 2. Components and Tools
|
||||
|
||||
|
||||
|Item|Name/Version|Note|
|
||||
|:--|:--|:--|
|
||||
|Board|Renesas EK-RA6M4||
|
||||
|Device|R7FA6M4AF3CFB||
|
||||
|Toolchain|GCC ARM Embedded 10.3.1.20210824|Included in GCC for Renesas RA|
|
||||
|FSP Version|3.6.0|Download from Renesas site|
|
||||
|IDE|e2studio 2022-01|Download from Renesas site|
|
||||
|Flash Writer|Renesas Flash Programmer v3|Download from Renesas site|
|
||||
|Binary tool|aarch64-none-elf-objcopy 10.3-2021.07|Download from GNU site|
|
||||
|Key tool|keygen and sign|Included in wolfBoot|
|
||||
|
||||
|
||||
|
||||
|FIT Components|Version|
|
||||
|:--|:--|
|
||||
|Board Support Package Common Files|v3.6.0|
|
||||
|I/O Port|v3.6.0|
|
||||
|Arm CMSIS Version 5 - Core (M)|v5.8.0+fsp.3.6.0|
|
||||
|RA6M4-EK Board Support Files|v3.6.0|
|
||||
|Board support package for R7FA6M4AF3CFB|v3.6.0|
|
||||
|Board support package for RA6M4|v3.6.0|
|
||||
|Board support package for RA6M4 - FSP Data|v3.6.0|
|
||||
|Flash Memory High Performance|v3.6.0|
|
||||
|Secure Cryptography Engine on RA6 Protected Mode (CAVP Certified) | v1.0.0+fsp.3.6.0 |
|
||||
|
||||
|
||||
e2Studio Project:\
|
||||
wolfBoot IDE/Renesas/e2studio/RA6M4/wolfBoot\
|
||||
Sample app IDE/Renesas/e2studio/RA6M4/app_RA
|
||||
|
||||
|
||||
Flash Allocation:
|
||||
```
|
||||
+---------------------------+------------------------+-----+
|
||||
| B |H| |H| | |
|
||||
| o |e| Primary |e| Update |Swap |
|
||||
| o |a| Partition |a| Partition |Sect |
|
||||
| t |d| |d| | |
|
||||
+---------------------------+------------------------+-----+
|
||||
0x00000000: wolfBoot
|
||||
0x00020000: Primary partition (Header)
|
||||
0x00020200: Primary partition (Application image)
|
||||
0x00090000: Update partition (Header)
|
||||
0x00090200: Update partition (Application image)
|
||||
0x000F0000: Swap sector
|
||||
0x08010000: Wrapped Key
|
||||
```
|
||||
|
||||
## 2. How to build and use
|
||||
This section describes about how to build wolfBoot and application and use them.
|
||||
|
||||
### 1) Key generation
|
||||
It has key tools running under the host environment such as Linux, Windows or MacOS.
|
||||
For comiling the tools, follow the instruction described in the user manual.
|
||||
|
||||
|
||||
```
|
||||
$ cd <wolfBoot>
|
||||
$ make keytools RENESAS_KEY=1
|
||||
$ export PATH=$PATH:<wolfBoot>/tools/keytools
|
||||
$ keygen --rsa2048 -g ./pri-rsa2048.der # RSA2048
|
||||
```
|
||||
|
||||
It generates a pair of private and public key with -g option. The private key is stored
|
||||
in the specified file. The public key is stored in a key store as a C source code
|
||||
in "src/keystore.c" so that it can be compiled and linked with wolfBoot.
|
||||
If you have an existing key pair, you can use -i option to import the pablic
|
||||
key to the store.
|
||||
|
||||
|
||||
### 2) Compile wolfBoot
|
||||
|
||||
Open project under IDE/Renesas/e2studio/RA6M4/wolfBoot with e2Studio, and build the project.
|
||||
Project properties are preset for the demo.\
|
||||
|
||||
WOLFBOOT_PARTION_INFO is for debug information about partitions.
|
||||
Eliminate them for operational use.
|
||||
|
||||
Enabled `WOLFBOOT_RENESAS_SCEPROTECT` expects to use Renesas SCE.
|
||||
|
||||
### 3) Compile the sample application
|
||||
|
||||
Open project under IDE/Renesas/e2studio/RA6M4/app_RA with e2Studio. Open `script` folder and copy orignal `fsp.ld` to `fsp.ld.org`. Copy `fsp_wsce.ld` to `fsp.ld`, and then build the project.
|
||||
Project properties are preset for the demo.
|
||||
|
||||
#### 3-1). Prepare SEGGER_RTT for logging
|
||||
+ Download J-Link software from [Segger](https://www.segger.com/downloads/jlink)
|
||||
+ Choose `J-Link Software and Documentation Pack`
|
||||
+ Copy sample program files below from `Installed SEGGER` folder, `e.g C:\Program Files\SEGGER\JLink\Samples\RTT`, to /path/to/wolfBoot/IDE/Reenesas/e2studio/RA6M4/app_RA/src/SEGGER_RTT\
|
||||
|
||||
SEGGER_RTT.c\
|
||||
SEGGER_RTT.h\
|
||||
SEGGER_RTT_Conf.h\
|
||||
SEGGER_RTT_printf.c
|
||||
+ Open `SEGGER_RTT_Conf.h` and Set `SEGGER_RTT_MEMCPY_USE_BYTELOOP` to `1`
|
||||
+ To connect RTT block, you can configure RTT viewer configuration based on where RTT block is in map file\
|
||||
|
||||
e.g.[app_RA.map]
|
||||
|
||||
```
|
||||
.bss._SEGGER_RTT
|
||||
0x2000094c 0xa8 ./src/SEGGER_RTT/SEGGER_RTT.o
|
||||
0x2000094c _SEGGER_RTT
|
||||
````
|
||||
|
||||
you can specify "RTT control block" to 0x2000094c by Address
|
||||
OR
|
||||
you can specify "RTT control block" to 0x20000000 0x1000 by Search Range
|
||||
|
||||
|
||||
Need to set:
|
||||
#define BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW (1)\
|
||||
|
||||
Code Origin and entry point is "0x00010200". app_RA.elf is gnerated under Debug.
|
||||
|
||||
### 4) Generate Wrapped Key for SCE
|
||||
|
||||
SCE needs to have a wrapped key for sign verification installed in advance.
|
||||
This section describes how to use wolfBoot with SCE.
|
||||
Current version supports RSA2048. RSA Signature supports #PKCS 1, v1.5.
|
||||
You can generate a RSA key pair by wolfBoot "keygen" command along with Renesas Security Key Management Tool "skmt".
|
||||
|
||||
"skmt" command wraps the RAW key and generates C language initial data and a header file for an application program with SCE.
|
||||
Please refer SCE User Manual for generating product provisioning.
|
||||
|
||||
```
|
||||
$ export PATH:$PATH:<wolfBoot>/tools/keytools
|
||||
$ export PATH:$PATH:<skmt>
|
||||
$ cd <wolfBoot>
|
||||
$ keygen --rsa2048 -g ./rsa-pri2048.der
|
||||
$ openssl rsa -in rsa-pri2048.der -pubout -out rsa-pub2058.pem
|
||||
$ skmt.exe /genkey /ufpk file=./ufpk.key /wufpk file=./ufpk.key_enc.key -key file=./pub-rsa2048.pem -mcu RA-SCE9 -keytype RSA-2048-public /output rsa_pub2048.rkey /filetype "rfp"
|
||||
```
|
||||
|
||||
Please refer Renesas Manual to generate ufpk.key and upfk.key_enc.key.
|
||||
After generating "rfp" format key, you can download it to flash data area by using Renesas flash programmer.
|
||||
|
||||
### 4) Generate Signature for app V1
|
||||
You can derive bair binary file (app_RA.bin) by objcopy command as follows.
|
||||
|
||||
```
|
||||
$ aarch64-none-elf-objcopy.exe -O binary -j .text -j .data app_RA.elf app_RA.bin
|
||||
```
|
||||
|
||||
"sign" command under tools/keytools benerates a signature for the binary with a specified version.
|
||||
It generates a file contain a partition header and application image. The partition header
|
||||
contain generated signature and other control fields. Output file name is made up from
|
||||
the input file name and version like app_RenesasRx01_v1.0_signed.bin. It needs to specify `--rsa2048enc` option to sign the image because SCE assumes to have DigestInfo structure before hashed data.
|
||||
|
||||
```
|
||||
$ sign --rsa2048enc app_RA.bin ../../../../../pri-rsa2048.der 1.0
|
||||
wolfBoot KeyTools (Compiled C version)
|
||||
wolfBoot version 10E0000
|
||||
Update type: Firmware
|
||||
Input image: app_RA.bin
|
||||
Selected cipher: RSA2048
|
||||
Selected hash : SHA256
|
||||
Public key: ./pri-rsa2048.der
|
||||
Output image: app_RA_v1.0_signed.bin
|
||||
Target partition id : 1
|
||||
Calculating SHA256 digest...
|
||||
Signing the digest...
|
||||
Output image(s) successfully created.
|
||||
```
|
||||
|
||||
### 5) Download the app V1
|
||||
|
||||
You can convert the binary file to hex format and download it to the board by Flash Programmer.
|
||||
The partition starts at "0x00020000".
|
||||
|
||||
```
|
||||
$ aarch64-none-elf-objcopy.exe -I binary -O srec --change-addresses=0x00020000 app_RA_v1.0_signed.bin app_RA_v1.0_signed.hex
|
||||
```
|
||||
|
||||
|
||||
### 6) Execute inital boot
|
||||
|
||||
Now, you can download and start wolfBoot program by e2Studio debugger.
|
||||
After starting the program, you can see the partition information as follows.
|
||||
If the boot program succeeds integlity and authenticity check, it initiate the
|
||||
application V1.
|
||||
|
||||
```
|
||||
| ----------------------------------------------------------------------- |
|
||||
| Renesas RA SCE User Application in BOOT partition started by wolfBoot |
|
||||
| ----------------------------------------------------------------------- |
|
||||
|
||||
|
||||
WOLFBOOT_PARTITION_SIZE: 0x00060000
|
||||
WOLFBOOT_PARTITION_BOOT_ADDRESS: 0x00020000
|
||||
WOLFBOOT_PARTITION_UPDATE_ADDRESS: 0x00090000
|
||||
|
||||
Application Entry Address: 0x00020200
|
||||
|
||||
=== Boot Partition[00020000] ===
|
||||
Magic: WOLF
|
||||
Version: 01
|
||||
Status: FF
|
||||
Tail Mgc:
|
||||
|
||||
=== Update Partition[00090000] ===
|
||||
Magic:
|
||||
Version: 00
|
||||
Status: FF
|
||||
Tail Mgc:
|
||||
Current Firmware Version : 1
|
||||
|
||||
Calling wolfBoot_success()
|
||||
|
||||
```
|
||||
|
||||
The application is calling wolfBoot_success() to set boot partition state.
|
||||
|
||||
|
||||
```
|
||||
Called wolfBoot_success()
|
||||
=== Boot Partition[00020000] ===
|
||||
Magic: WOLF
|
||||
Version: 01
|
||||
Status: 00
|
||||
Tail Mgc: BOOT
|
||||
|
||||
=== Update Partition[00090000] ===
|
||||
Magic:
|
||||
Version: 00
|
||||
Status: FF
|
||||
Tail Mgc:
|
||||
```
|
||||
You can see the state is Success("00") and Tail Magic number becomes "BOOT". You can also see flashing each LED light in 1 second.
|
||||
Notable things about V1 application, it will also call wolfBoot_update_trigger() so that it tells wolfBoot that new version exists.
|
||||
We are going to generate and download V2 application into "Update pertition".
|
||||
|
||||
### 7) Generate Signed app V2 and download it
|
||||
|
||||
Similar to V1, you can signe and generate a binary of V2. The update partition starts at "0x00090000".
|
||||
You can download it by the flash programmer.
|
||||
|
||||
Updtate partition:
|
||||
-change-addresses=0x00090000
|
||||
|
||||
```
|
||||
$ sign --rsa2048enc app_RA.bin ../../../../../pri-rsa2048.der 2.0
|
||||
$ aarch64-none-elf-objcopy.exe -I binary -O srec --change-addresses=0x00090000 app_RA_v2.0_signed.bin app_RA_v2.0_signed.hex
|
||||
```
|
||||
|
||||
|
||||
### 8) Re-boot and secure update to V2
|
||||
|
||||
The boot program checks integlity and authenticity of V2, swap the partition
|
||||
safely and initiates V2. You will see following message after the partition
|
||||
information.
|
||||
|
||||
```
|
||||
| ----------------------------------------------------------------------- |
|
||||
| Renesas RA SCE User Application in BOOT partition started by wolfBoot |
|
||||
| ----------------------------------------------------------------------- |
|
||||
|
||||
|
||||
WOLFBOOT_PARTITION_SIZE: 0x00060000
|
||||
WOLFBOOT_PARTITION_BOOT_ADDRESS: 0x00020000
|
||||
WOLFBOOT_PARTITION_UPDATE_ADDRESS: 0x00090000
|
||||
|
||||
Application Entry Address: 0x00020200
|
||||
|
||||
=== Boot Partition[00020000] ===
|
||||
Magic: WOLF
|
||||
Version: 02
|
||||
Status: 10
|
||||
Tail Mgc: BOOT
|
||||
|
||||
=== Update Partition[00090000] ===
|
||||
Magic: WOLF
|
||||
Version: 01
|
||||
Status: FF
|
||||
Tail Mgc:
|
||||
Current Firmware Version : 2
|
||||
|
||||
Calling wolfBoot_success()
|
||||
Called wolfBoot_success()
|
||||
=== Boot Partition[00020000] ===
|
||||
Magic: WOLF
|
||||
Version: 02
|
||||
Status: 00
|
||||
Tail Mgc: BOOT
|
||||
|
||||
=== Update Partition[00090000] ===
|
||||
Magic: WOLF
|
||||
Version: 01
|
||||
Status: 70
|
||||
Tail Mgc: BOOT
|
||||
```
|
||||
You can see "Current Firmware Version : 2". The state is Success("00") and Tail Magic number becomes "BOOT".
|
||||
You can also see flashing each LED light in 5 second at this new version.
|
||||
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting.799199296" name="Create extended listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting" useByScannerDiscovery="false"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.563426046" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.showCommand.499830157" name="Echo tool command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.showCommand" useByScannerDiscovery="false"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.406648949" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.none" valueType="enumerated"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.406648949" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.more" valueType="enumerated"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.453769055" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.1103667993" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.1090133688" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||
|
@ -87,12 +87,12 @@
|
|||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ra_gen}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ra_cfg/fsp_cfg/bsp}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ra_cfg/fsp_cfg}""/>
|
||||
<listOptionValue builtIn="false" value=""../../../../../wolfboot\include""/>
|
||||
<listOptionValue builtIn="false" value=""../../../../../../include""/>
|
||||
<listOptionValue builtIn="false" value=""../../../../../lib/wolfssl""/>
|
||||
<listOptionValue builtIn="false" value=""../../../../../../lib/wolfssl""/>
|
||||
</option>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.709848985" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
|
||||
<listOptionValue builtIn="false" value="_RA_CORE=CM33"/>
|
||||
<listOptionValue builtIn="false" value="WOLFBOOT_RENESAS_APP"/>
|
||||
<listOptionValue builtIn="false" value="_RENESAS_RA_"/>
|
||||
<listOptionValue builtIn="false" value="PRINTF_ENABLED"/>
|
||||
</option>
|
||||
|
@ -100,6 +100,7 @@
|
|||
<listOptionValue builtIn="false" value=""${workspace_loc:/wolfBoot_RA/src/target.h}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/wolfBoot_RA/src/user_settings.h}""/>
|
||||
</option>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.verbose.2075072940" name="Verbose (-v)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.verbose" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.1244653003" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input"/>
|
||||
</tool>
|
||||
<tool commandLinePattern="${COMMAND} ${cross_toolchain_flags} ${FLAGS} -c ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} -x c++ ${INPUTS}" id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.2139703253" name="GNU Arm Cross C++ Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler">
|
||||
|
@ -115,7 +116,7 @@
|
|||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.paths.1458139763" name="Library search path (-L)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.paths" useByScannerDiscovery="false" valueType="libPaths">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}}/script""/>
|
||||
</option>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.verbose.376174350" name="Verbose (-v)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.verbose" value="true" valueType="boolean"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.verbose.376174350" name="Verbose (-v)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.input.2054992656" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.input">
|
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||
|
@ -146,6 +147,24 @@
|
|||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
<fileInfo id="com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.861131010.1869645702" name="renesas-ra.c" rcbsApplicability="disable" resourcePath="src/renesas-ra.c" toolsToInvoke="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.519327326.1299383337">
|
||||
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.519327326.1299383337" name="GNU Arm Cross C Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.519327326">
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths.1309257426" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/SEGGER_RTT}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ra/fsp/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ra/fsp/inc/api}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ra/fsp/inc/instances}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ra/arm/CMSIS_5/CMSIS/Core/Include}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ra_gen}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ra_cfg/fsp_cfg/bsp}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ra_cfg/fsp_cfg}""/>
|
||||
<listOptionValue builtIn="false" value="../../../../../../include"/>
|
||||
<listOptionValue builtIn="false" value="../../../../../../lib/wolfssl"/>
|
||||
</option>
|
||||
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.1618102024" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input"/>
|
||||
</tool>
|
||||
</fileInfo>
|
||||
<sourceEntries>
|
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="ra"/>
|
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="ra_gen"/>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[BREAKPOINTS]
|
||||
ForceImpTypeAny = 0
|
||||
ShowInfoWin = 1
|
||||
EnableFlashBP = 2
|
||||
EnableFlashBP = 0
|
||||
BPDuringExecution = 0
|
||||
[CFI]
|
||||
CFISize = 0x00
|
||||
|
@ -15,6 +15,8 @@ OverrideMemMap = 0
|
|||
AllowSimulation = 1
|
||||
ScriptFile=""
|
||||
[FLASH]
|
||||
RMWThreshold = 0x200
|
||||
Loaders=""
|
||||
EraseType = 0x00
|
||||
CacheExcludeSize = 0x00
|
||||
CacheExcludeAddr = 0x00
|
||||
|
@ -26,8 +28,8 @@ EnableFlashDL = 2
|
|||
Override = 0
|
||||
Device="ARM7"
|
||||
[GENERAL]
|
||||
WorkRAMSize = 0x00
|
||||
WorkRAMAddr = 0x00
|
||||
WorkRAMSize = 0x3000
|
||||
WorkRAMAddr = 0x2003D000
|
||||
RAMUsageLimit = 0x00
|
||||
[SWO]
|
||||
SWOLogFile=""
|
||||
|
|
|
@ -39,10 +39,10 @@
|
|||
<stringAttribute key="com.renesas.cdt.launch.dsf.launchSeqType" value="com.renesas.cdt.launch.dsf.launchSequence.e2GdbServer"/>
|
||||
<stringAttribute key="com.renesas.cdt.launch.dsf.serverPath" value="${renesas.support.targetLoc:com.renesas.ide.supportfiles.ra.debug.debugSupportFileTarget}\e2-server-gdb"/>
|
||||
<listAttribute key="com.renesas.cdt.launch.ui.address.mruList.memoryMonitorExpression">
|
||||
<listEntry value="0x30200"/>
|
||||
<listEntry value="6fffc"/>
|
||||
<listEntry value="0xdfffc"/>
|
||||
<listEntry value="0x10200"/>
|
||||
<listEntry value="10200"/>
|
||||
</listAttribute>
|
||||
<booleanAttribute key="com.renesas.hardwaredebug.arm.e2.traceMTB" value="false"/>
|
||||
<stringAttribute key="com.renesas.hardwaredebug.arm.e2.traceSizeMTB" value="1024"/>
|
||||
|
@ -151,6 +151,6 @@
|
|||
<listEntry value="4"/>
|
||||
</listAttribute>
|
||||
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
|
||||
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><memoryBlockExpressionList context="reserved-for-future-use"><gdbmemoryBlockExpression address="66048" core_thread_id="1_i1" label="0x10200"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="536924908" core_thread_id="1_i1" label="0x2000d2ec"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="917500" core_thread_id="1_i1" label="0xdfffc"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression></memoryBlockExpressionList>"/>
|
||||
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><memoryBlockExpressionList context="reserved-for-future-use"><gdbmemoryBlockExpression address="66048" core_thread_id="1_i1" label="0x10200"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="536924908" core_thread_id="1_i1" label="0x2000d2ec"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="917500" core_thread_id="1_i1" label="0xdfffc"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="197120" core_thread_id="1_i1" label="0x30200"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression></memoryBlockExpressionList>"/>
|
||||
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
|
||||
</launchConfiguration>
|
||||
|
|
|
@ -0,0 +1,623 @@
|
|||
/*
|
||||
Linker File for Renesas FSP
|
||||
*/
|
||||
|
||||
INCLUDE memory_regions.ld
|
||||
|
||||
/* Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.*/
|
||||
/*
|
||||
XIP_SECONDARY_SLOT_IMAGE = 1;
|
||||
*/
|
||||
|
||||
QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH);
|
||||
OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH);
|
||||
OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH);
|
||||
|
||||
/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */
|
||||
__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0);
|
||||
|
||||
RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0;
|
||||
RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0;
|
||||
RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH;
|
||||
RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH;
|
||||
|
||||
OPTION_SETTING_START_NS = 0x0100A180;
|
||||
|
||||
/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings.
|
||||
* Bootloader images do not configure option settings because they are owned by the bootloader.
|
||||
* FSP_BOOTABLE_IMAGE is only defined in bootloader images. */
|
||||
__bl_FSP_BOOTABLE_IMAGE = 1;
|
||||
__bln_FSP_BOOTABLE_IMAGE = 1;
|
||||
PROJECT_SECURE_OR_FLAT = !DEFINED(PROJECT_NONSECURE) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE);
|
||||
USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE);
|
||||
|
||||
__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
|
||||
FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
|
||||
FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
|
||||
__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
|
||||
FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH;
|
||||
__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
|
||||
__bl_XIP_SECONDARY_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
|
||||
FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
|
||||
__bl_XIP_SECONDARY_FLASH_IMAGE_END = __bl_XIP_SECONDARY_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
|
||||
__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
|
||||
FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
|
||||
__bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH;
|
||||
__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
|
||||
FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
|
||||
__bl_FLASH_NS_START - FLASH_APPLICATION_NSC_LENGTH;
|
||||
__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
|
||||
FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
|
||||
RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH;
|
||||
__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
|
||||
FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
|
||||
__bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH;
|
||||
__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
|
||||
FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
|
||||
__bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2;
|
||||
__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START;
|
||||
__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
|
||||
FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
|
||||
FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2;
|
||||
|
||||
XIP_SECONDARY_SLOT_IMAGE = DEFINED(XIP_SECONDARY_SLOT_IMAGE) ? XIP_SECONDARY_SLOT_IMAGE : 0;
|
||||
FLASH_ORIGIN = !DEFINED(FLASH_IMAGE_START) ? FLASH_START :
|
||||
XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START :
|
||||
FLASH_IMAGE_START;
|
||||
LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH :
|
||||
DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH :
|
||||
FLASH_LENGTH;
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
FLASH (rx) : ORIGIN = 0x20200, LENGTH = LIMITED_FLASH_LENGTH
|
||||
RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
|
||||
DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH
|
||||
QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH
|
||||
OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
|
||||
OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
|
||||
OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
|
||||
OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
|
||||
SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH
|
||||
OPTION_SETTING (r): ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH
|
||||
OPTION_SETTING_S (r): ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH
|
||||
ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH
|
||||
}
|
||||
|
||||
/* Library configurations */
|
||||
GROUP(libgcc.a libc.a libm.a libnosys.a)
|
||||
|
||||
/* Linker script to place sections and symbol values. Should be used together
|
||||
* with other linker script that defines memory regions FLASH and RAM.
|
||||
* It references following symbols, which must be DEFINED in code:
|
||||
* Reset_Handler : Entry of reset handler
|
||||
*
|
||||
* It defines following symbols, which code can use without definition:
|
||||
* __exidx_start
|
||||
* __exidx_end
|
||||
* __copy_table_start__
|
||||
* __copy_table_end__
|
||||
* __zero_table_start__
|
||||
* __zero_table_end__
|
||||
* __etext
|
||||
* __data_start__
|
||||
* __preinit_array_start
|
||||
* __preinit_array_end
|
||||
* __init_array_start
|
||||
* __init_array_end
|
||||
* __fini_array_start
|
||||
* __fini_array_end
|
||||
* __data_end__
|
||||
* __bss_start__
|
||||
* __bss_end__
|
||||
* __HeapLimit
|
||||
* __StackLimit
|
||||
* __StackTop
|
||||
* __stack
|
||||
* __Vectors_End
|
||||
* __Vectors_Size
|
||||
* __qspi_flash_start__
|
||||
* __qspi_flash_end__
|
||||
* __qspi_flash_code_size__
|
||||
* __qspi_region_max_size__
|
||||
* __qspi_region_start_address__
|
||||
* __qspi_region_end_address__
|
||||
* __ospi_device_0_start__
|
||||
* __ospi_device_0_end__
|
||||
* __ospi_device_0_code_size__
|
||||
* __ospi_device_0_region_max_size__
|
||||
* __ospi_device_0_region_start_address__
|
||||
* __ospi_device_0_region_end_address__
|
||||
* __ospi_device_1_start__
|
||||
* __ospi_device_1_end__
|
||||
* __ospi_device_1_code_size__
|
||||
* __ospi_device_1_region_max_size__
|
||||
* __ospi_device_1_region_start_address__
|
||||
* __ospi_device_1_region_end_address__
|
||||
*/
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text :
|
||||
{
|
||||
__tz_FLASH_S = .;
|
||||
__ROM_Start = .;
|
||||
|
||||
/* Even though the vector table is not 256 entries (1KB) long, we still allocate that much
|
||||
* space because ROM registers are at address 0x400 and there is very little space
|
||||
* in between. */
|
||||
KEEP(*(.fixed_vectors*))
|
||||
__Vectors_End = .;
|
||||
|
||||
/* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */
|
||||
. = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400;
|
||||
KEEP(*(.application_vectors*))
|
||||
KEEP(*(.rom_registers*))
|
||||
|
||||
/* Reserving 0x100 bytes of space for ROM registers. */
|
||||
. = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x500;
|
||||
|
||||
/* Allocate flash write-boundary-aligned
|
||||
* space for sce9 wrapped public keys for mcuboot if the module is used.
|
||||
*/
|
||||
|
||||
/*ALIGN(128);*/
|
||||
KEEP(*(.mcuboot_sce9_key*))
|
||||
*(.text*)
|
||||
|
||||
KEEP(*(.version))
|
||||
KEEP(*(.init))
|
||||
KEEP(*(.fini))
|
||||
|
||||
/* .ctors */
|
||||
*crtbegin.o(.ctors)
|
||||
*crtbegin?.o(.ctors)
|
||||
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
|
||||
*(SORT(.ctors.*))
|
||||
*(.ctors)
|
||||
|
||||
/* .dtors */
|
||||
*crtbegin.o(.dtors)
|
||||
*crtbegin?.o(.dtors)
|
||||
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
|
||||
*(SORT(.dtors.*))
|
||||
*(.dtors)
|
||||
|
||||
*(.rodata*)
|
||||
__usb_dev_descriptor_start_fs = .;
|
||||
KEEP(*(.usb_device_desc_fs*))
|
||||
__usb_cfg_descriptor_start_fs = .;
|
||||
KEEP(*(.usb_config_desc_fs*))
|
||||
__usb_interface_descriptor_start_fs = .;
|
||||
KEEP(*(.usb_interface_desc_fs*))
|
||||
__usb_descriptor_end_fs = .;
|
||||
__usb_dev_descriptor_start_hs = .;
|
||||
KEEP(*(.usb_device_desc_hs*))
|
||||
__usb_cfg_descriptor_start_hs = .;
|
||||
KEEP(*(.usb_config_desc_hs*))
|
||||
__usb_interface_descriptor_start_hs = .;
|
||||
KEEP(*(.usb_interface_desc_hs*))
|
||||
__usb_descriptor_end_hs = .;
|
||||
|
||||
KEEP(*(.eh_frame*))
|
||||
|
||||
__ROM_End = .;
|
||||
} > FLASH = 0xFF
|
||||
|
||||
__Vectors_Size = __Vectors_End - __Vectors;
|
||||
|
||||
.ARM.extab :
|
||||
{
|
||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||
} > FLASH
|
||||
|
||||
__exidx_start = .;
|
||||
.ARM.exidx :
|
||||
{
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
} > FLASH
|
||||
__exidx_end = .;
|
||||
|
||||
/* To copy multiple ROM to RAM sections,
|
||||
* uncomment .copy.table section and,
|
||||
* define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
|
||||
/*
|
||||
.copy.table :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__copy_table_start__ = .;
|
||||
LONG (__etext)
|
||||
LONG (__data_start__)
|
||||
LONG (__data_end__ - __data_start__)
|
||||
LONG (__etext2)
|
||||
LONG (__data2_start__)
|
||||
LONG (__data2_end__ - __data2_start__)
|
||||
__copy_table_end__ = .;
|
||||
} > FLASH
|
||||
*/
|
||||
|
||||
/* To clear multiple BSS sections,
|
||||
* uncomment .zero.table section and,
|
||||
* define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
|
||||
/*
|
||||
.zero.table :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__zero_table_start__ = .;
|
||||
LONG (__bss_start__)
|
||||
LONG (__bss_end__ - __bss_start__)
|
||||
LONG (__bss2_start__)
|
||||
LONG (__bss2_end__ - __bss2_start__)
|
||||
__zero_table_end__ = .;
|
||||
} > FLASH
|
||||
*/
|
||||
|
||||
__etext = .;
|
||||
|
||||
__tz_RAM_S = ORIGIN(RAM);
|
||||
|
||||
/* If DTC is used, put the DTC vector table at the start of SRAM.
|
||||
This avoids memory holes due to 1K alignment required by it. */
|
||||
.fsp_dtc_vector_table (NOLOAD) :
|
||||
{
|
||||
. = ORIGIN(RAM);
|
||||
*(.fsp_dtc_vector_table)
|
||||
} > RAM
|
||||
|
||||
/* Initialized data section. */
|
||||
.data :
|
||||
{
|
||||
__data_start__ = .;
|
||||
. = ALIGN(4);
|
||||
|
||||
__Code_In_RAM_Start = .;
|
||||
|
||||
KEEP(*(.code_in_ram*))
|
||||
__Code_In_RAM_End = .;
|
||||
|
||||
*(vtable)
|
||||
/* Don't use *(.data*) because it will place data meant for .data_flash in this section. */
|
||||
*(.data.*)
|
||||
*(.data)
|
||||
|
||||
. = ALIGN(4);
|
||||
/* preinit data */
|
||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||
KEEP(*(.preinit_array))
|
||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||
|
||||
. = ALIGN(4);
|
||||
/* init data */
|
||||
PROVIDE_HIDDEN (__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE_HIDDEN (__init_array_end = .);
|
||||
|
||||
|
||||
. = ALIGN(4);
|
||||
/* finit data */
|
||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
KEEP(*(.fini_array))
|
||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||
|
||||
KEEP(*(.jcr*))
|
||||
|
||||
. = ALIGN(4);
|
||||
|
||||
/* All data end */
|
||||
__data_end__ = .;
|
||||
|
||||
} > RAM AT > FLASH
|
||||
|
||||
|
||||
/* TrustZone Secure Gateway Stubs Section. */
|
||||
.gnu.sgstubs : ALIGN (1024)
|
||||
{
|
||||
. = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024);
|
||||
__tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024);
|
||||
_start_sg = .;
|
||||
*(.gnu.sgstubs*)
|
||||
. = ALIGN(32);
|
||||
_end_sg = .;
|
||||
} > FLASH
|
||||
|
||||
__tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768);
|
||||
FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N;
|
||||
|
||||
/* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
|
||||
__tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH);
|
||||
|
||||
/* QSPI_FLASH section to be downloaded via debugger */
|
||||
.qspi_flash :
|
||||
{
|
||||
__qspi_flash_start__ = .;
|
||||
KEEP(*(.qspi_flash*))
|
||||
KEEP(*(.code_in_qspi*))
|
||||
__qspi_flash_end__ = .;
|
||||
} > QSPI_FLASH
|
||||
__qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__;
|
||||
|
||||
/* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */
|
||||
__qspi_flash_code_addr__ = __etext + (__data_end__ - __data_start__);
|
||||
.qspi_non_retentive : AT (__qspi_flash_code_addr__)
|
||||
{
|
||||
__qspi_non_retentive_start__ = .;
|
||||
KEEP(*(.qspi_non_retentive*))
|
||||
__qspi_non_retentive_end__ = .;
|
||||
} > QSPI_FLASH
|
||||
__qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__;
|
||||
|
||||
__qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */
|
||||
__qspi_region_start_address__ = __qspi_flash_start__;
|
||||
__qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__;
|
||||
|
||||
/* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
|
||||
__tz_QSPI_FLASH_N = __qspi_non_retentive_end__;
|
||||
|
||||
/* Support for OctaRAM */
|
||||
.OSPI_DEVICE_0_NO_LOAD (NOLOAD):
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__ospi_device_0_start__ = .;
|
||||
*(.ospi_device_0_no_load*)
|
||||
. = ALIGN(4);
|
||||
__ospi_device_0_end__ = .;
|
||||
} > OSPI_DEVICE_0_RAM
|
||||
|
||||
.OSPI_DEVICE_1_NO_LOAD (NOLOAD):
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__ospi_device_1_start__ = .;
|
||||
*(.ospi_device_1_no_load*)
|
||||
. = ALIGN(4);
|
||||
__ospi_device_1_end__ = .;
|
||||
} > OSPI_DEVICE_1_RAM
|
||||
|
||||
/* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
|
||||
__tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0);
|
||||
|
||||
/* OSPI_DEVICE_0 section to be downloaded via debugger */
|
||||
.OSPI_DEVICE_0 :
|
||||
{
|
||||
__ospi_device_0_start__ = .;
|
||||
KEEP(*(.ospi_device_0*))
|
||||
KEEP(*(.code_in_ospi_device_0*))
|
||||
__ospi_device_0_end__ = .;
|
||||
} > OSPI_DEVICE_0
|
||||
__ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__;
|
||||
|
||||
/* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
|
||||
__ospi_device_0_code_addr__ = __etext + (__data_end__ - __data_start__);
|
||||
.ospi_device_0_non_retentive : AT (__ospi_device_0_code_addr__)
|
||||
{
|
||||
__ospi_device_0_non_retentive_start__ = .;
|
||||
KEEP(*(.ospi_device_0_non_retentive*))
|
||||
__ospi_device_0_non_retentive_end__ = .;
|
||||
} > OSPI_DEVICE_0
|
||||
__ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__;
|
||||
|
||||
__ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */
|
||||
__ospi_device_0_region_start_address__ = __ospi_device_0_start__;
|
||||
__ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__;
|
||||
|
||||
/* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
|
||||
__tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__;
|
||||
|
||||
/* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
|
||||
__tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1);
|
||||
|
||||
/* OSPI_DEVICE_1 section to be downloaded via debugger */
|
||||
.OSPI_DEVICE_1 :
|
||||
{
|
||||
__ospi_device_1_start__ = .;
|
||||
KEEP(*(.ospi_device_1*))
|
||||
KEEP(*(.code_in_ospi_device_1*))
|
||||
__ospi_device_1_end__ = .;
|
||||
} > OSPI_DEVICE_1
|
||||
__ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__;
|
||||
|
||||
/* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
|
||||
__ospi_device_1_code_addr__ = __etext + (__data_end__ - __data_start__);
|
||||
.ospi_device_1_non_retentive : AT (__ospi_device_1_code_addr__)
|
||||
{
|
||||
__ospi_device_1_non_retentive_start__ = .;
|
||||
KEEP(*(.ospi_device_1_non_retentive*))
|
||||
__ospi_device_1_non_retentive_end__ = .;
|
||||
} > OSPI_DEVICE_1
|
||||
__ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__;
|
||||
|
||||
__ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */
|
||||
__ospi_device_1_region_start_address__ = __ospi_device_1_start__;
|
||||
__ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__;
|
||||
|
||||
/* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
|
||||
__tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__;
|
||||
|
||||
.noinit (NOLOAD):
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__noinit_start = .;
|
||||
KEEP(*(.noinit*))
|
||||
. = ALIGN(8);
|
||||
/* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */
|
||||
KEEP(*(.heap.*))
|
||||
__noinit_end = .;
|
||||
} > RAM
|
||||
|
||||
.bss :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__bss_start__ = .;
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
. = ALIGN(4);
|
||||
__bss_end__ = .;
|
||||
} > RAM
|
||||
|
||||
.heap (NOLOAD):
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__HeapBase = .;
|
||||
/* Place the STD heap here. */
|
||||
KEEP(*(.heap))
|
||||
__HeapLimit = .;
|
||||
} > RAM
|
||||
|
||||
/* Stacks are stored in this section. */
|
||||
.stack_dummy (NOLOAD):
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__StackLimit = .;
|
||||
/* Main stack */
|
||||
KEEP(*(.stack))
|
||||
__StackTop = .;
|
||||
/* Thread stacks */
|
||||
KEEP(*(.stack*))
|
||||
__StackTopAll = .;
|
||||
} > RAM
|
||||
|
||||
PROVIDE(__stack = __StackTopAll);
|
||||
|
||||
/* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used
|
||||
at run time for things such as ThreadX memory pool allocations. */
|
||||
__RAM_segment_used_end__ = ALIGN(__StackTopAll , 4);
|
||||
|
||||
/* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects.
|
||||
* If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary.
|
||||
* In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
|
||||
__tz_RAM_C = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024);
|
||||
|
||||
/* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects.
|
||||
* RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not
|
||||
* specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary.
|
||||
* In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
|
||||
__tz_RAM_N = DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__tz_RAM_C, 8192);
|
||||
|
||||
/* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects.
|
||||
* The EDMAC is a non-secure bus master and can only access non-secure RAM. */
|
||||
.ns_buffer (NOLOAD):
|
||||
{
|
||||
/* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */
|
||||
. = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .;
|
||||
|
||||
KEEP(*(.ns_buffer*))
|
||||
} > RAM
|
||||
|
||||
/* Data flash. */
|
||||
.data_flash :
|
||||
{
|
||||
. = ORIGIN(DATA_FLASH);
|
||||
__tz_DATA_FLASH_S = .;
|
||||
__Data_Flash_Start = .;
|
||||
KEEP(*(.data_flash*))
|
||||
__Data_Flash_End = .;
|
||||
|
||||
__tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024);
|
||||
} > DATA_FLASH
|
||||
|
||||
/* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
|
||||
__tz_SDRAM_S = ORIGIN(SDRAM);
|
||||
|
||||
/* SDRAM */
|
||||
.sdram (NOLOAD):
|
||||
{
|
||||
__SDRAM_Start = .;
|
||||
KEEP(*(.sdram*))
|
||||
KEEP(*(.frame*))
|
||||
__SDRAM_End = .;
|
||||
} > SDRAM
|
||||
|
||||
/* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
|
||||
__tz_SDRAM_N = __SDRAM_End;
|
||||
|
||||
/* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */
|
||||
__tz_ID_CODE_S = ORIGIN(ID_CODE);
|
||||
|
||||
.id_code :
|
||||
{
|
||||
__ID_Code_Start = .;
|
||||
KEEP(*(.id_code*))
|
||||
__ID_Code_End = .;
|
||||
} > ID_CODE
|
||||
|
||||
/* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */
|
||||
__tz_ID_CODE_N = __ID_Code_End;
|
||||
|
||||
/* Symbol required for RA Configuration tool. */
|
||||
__tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING);
|
||||
|
||||
.option_setting :
|
||||
{
|
||||
__OPTION_SETTING_Start = .;
|
||||
KEEP(*(.option_setting_ofs0))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_Start + 0x10 : __OPTION_SETTING_Start;
|
||||
KEEP(*(.option_setting_dualsel))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_Start + 0x34 : __OPTION_SETTING_Start;
|
||||
KEEP(*(.option_setting_sas))
|
||||
__OPTION_SETTING_End = .;
|
||||
} > OPTION_SETTING = 0xFF
|
||||
|
||||
/* Symbol required for RA Configuration tool. */
|
||||
__tz_OPTION_SETTING_N = OPTION_SETTING_START_NS;
|
||||
|
||||
.option_setting_ns :
|
||||
{
|
||||
__OPTION_SETTING_NS_Start = .;
|
||||
KEEP(*(.option_setting_ofs1))
|
||||
. = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start;
|
||||
KEEP(*(.option_setting_banksel))
|
||||
. = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start;
|
||||
KEEP(*(.option_setting_bps0))
|
||||
. = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start;
|
||||
KEEP(*(.option_setting_bps1))
|
||||
. = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start;
|
||||
KEEP(*(.option_setting_bps2))
|
||||
. = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start;
|
||||
KEEP(*(.option_setting_pbps0))
|
||||
. = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start;
|
||||
KEEP(*(.option_setting_pbps1))
|
||||
. = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start;
|
||||
KEEP(*(.option_setting_pbps2))
|
||||
__OPTION_SETTING_NS_End = .;
|
||||
} > OPTION_SETTING = 0xFF
|
||||
|
||||
/* Symbol required for RA Configuration tool. */
|
||||
__tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S);
|
||||
|
||||
.option_setting_s :
|
||||
{
|
||||
__OPTION_SETTING_S_Start = .;
|
||||
KEEP(*(.option_setting_ofs1_sec))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_banksel_sec))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_bps_sec0))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_bps_sec1))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_bps_sec2))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_pbps_sec0))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_pbps_sec1))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_pbps_sec2))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_ofs1_sel))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_banksel_sel))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_bps_sel0))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_bps_sel1))
|
||||
. = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start;
|
||||
KEEP(*(.option_setting_bps_sel2))
|
||||
__OPTION_SETTING_S_End = .;
|
||||
} > OPTION_SETTING_S = 0xFF
|
||||
|
||||
/* Symbol required for RA Configuration tool. */
|
||||
__tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End;
|
||||
}
|
|
@ -133,9 +133,15 @@ void app_RA(void)
|
|||
|
||||
hal_init();
|
||||
|
||||
#ifndef WOLFBOOT_RENESAS_SCEPROTECT
|
||||
myprintf("| ------------------------------------------------------------------- |\n");
|
||||
myprintf("| Renesas RA User Application in BOOT partition started by wolfBoot |\n");
|
||||
myprintf("| ------------------------------------------------------------------- |\n\n");
|
||||
#else
|
||||
myprintf("| ----------------------------------------------------------------------- |\n");
|
||||
myprintf("| Renesas RA SCE User Application in BOOT partition started by wolfBoot |\n");
|
||||
myprintf("| ----------------------------------------------------------------------- |\n\n");
|
||||
#endif
|
||||
|
||||
myprintf("\n");
|
||||
myprintf("WOLFBOOT_PARTITION_SIZE: 0x%08x\n",
|
||||
|
|
|
@ -6,24 +6,36 @@
|
|||
# This script is an example. You can update the script based on your environment.
|
||||
#
|
||||
# usage
|
||||
# elf2hex.sh <WOLFBOOT_DIR> <AARCH64_BIN_DIR>
|
||||
# elf2hex.sh <SCE:0,1> <WOLFBOOT_DIR> <AARCH64_BIN_DIR>
|
||||
#
|
||||
|
||||
|
||||
if [ $# -ne 2 ];then
|
||||
echo "Usage: $0 $WOLFBOOT_DIR $AARCH64_BIN_DIR";
|
||||
if [ $# -ne 3 ];then
|
||||
echo "Usage: $0 <0 or 1 for SCE use> WOLFBOOT_DIR AARCH64_BIN_DIR";
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SCEUSE_OFFSET=0x20000
|
||||
VER1_ADDR=0x00010000
|
||||
VER2_ADDR=0x00080000
|
||||
RSA_SIGN="--rsa2048"
|
||||
|
||||
WOLFBOOT_DIR=$1
|
||||
AARCH64_BIN_DIR=$2
|
||||
SCEUSE=$1
|
||||
WOLFBOOT_DIR=$2
|
||||
AARCH64_BIN_DIR=$3
|
||||
CURRENT=$(cd $(dirname $0);pwd)
|
||||
APP_RA=${CURRENT}/app_RA
|
||||
AARCH64_OBJCPY_BIN=${AARCH64_BIN_DIR}/aarch64-none-elf-objcopy.exe
|
||||
|
||||
PATH=$PATH:${WOLFBOOT_DIR}/tools/keytools
|
||||
|
||||
if [ $SCEUSE -eq 1 ]; then
|
||||
VER1_ADDR=0x00020000
|
||||
VER2_ADDR=0x00090000
|
||||
RSA_SIGN="--rsa2048enc"
|
||||
echo $VER1_ADDR $VER2_ADDR $RSA_SIGN
|
||||
fi
|
||||
|
||||
echo
|
||||
echo COPY app_RA.elf to AARCH64_BIN_DIR to convert bin file
|
||||
cp ${APP_RA}/Debug/app_RA.elf ${AARCH64_BIN_DIR}
|
||||
|
@ -42,11 +54,11 @@ pushd ${WOLFBOOT_DIR}
|
|||
|
||||
echo
|
||||
echo sign app_RA.bin for version 1
|
||||
sign --rsa2048 app_RA.bin ./pri-rsa2048.der 1.0
|
||||
sign ${RSA_SIGN} app_RA.bin ./pri-rsa2048.der 1.0
|
||||
|
||||
echo
|
||||
echo sign app_RA.bin for version 2
|
||||
sign --rsa2048 app_RA.bin ./pri-rsa2048.der 2.0
|
||||
sign ${RSA_SIGN} app_RA.bin ./pri-rsa2048.der 2.0
|
||||
|
||||
echo
|
||||
echo copy app_RA_v1.0/v2.0_signed.bin AARCH64_BIN_DIR
|
||||
|
@ -57,11 +69,11 @@ popd
|
|||
|
||||
echo
|
||||
echo Run aarch64-none-elf-objcopy.exe to generate hex for version 1
|
||||
${AARCH64_OBJCPY_BIN} -I binary -O srec --change-addresses=0x00010000 app_RA_v1.0_signed.bin app_RA_v1.0_signed.hex
|
||||
${AARCH64_OBJCPY_BIN} -I binary -O srec --change-addresses=${VER1_ADDR} app_RA_v1.0_signed.bin app_RA_v1.0_signed.hex
|
||||
|
||||
echo
|
||||
echo Run aarch64-none-elf-objcopy.exe to generate hex for version 2
|
||||
${AARCH64_OBJCPY_BIN} -I binary -O srec --change-addresses=0x00080000 app_RA_v2.0_signed.bin app_RA_v2.0_signed.hex
|
||||
${AARCH64_OBJCPY_BIN} -I binary -O srec --change-addresses=${VER2_ADDR} app_RA_v2.0_signed.bin app_RA_v2.0_signed.hex
|
||||
|
||||
echo
|
||||
echo move *.hex to ${CURRENT}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting.1450522969" name="Create extended listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting" useByScannerDiscovery="false"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.1726825799" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.showCommand.919977152" name="Echo tool command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.showCommand" useByScannerDiscovery="false"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.386638919" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.none" valueType="enumerated"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.386638919" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.more" valueType="enumerated"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.1429101946" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.934453695" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.1733032276" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||
|
@ -154,6 +154,12 @@
|
|||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
<fileInfo id="com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.818569754.1677394828" name="renesas-ra.c" rcbsApplicability="disable" resourcePath="src/hal/renesas-ra.c" toolsToInvoke="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.1942117472.1656437334">
|
||||
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.1942117472.1656437334" name="GNU Arm Cross C Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.1942117472">
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.verbose.1161649528" name="Verbose (-v)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.verbose" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.325034392" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input"/>
|
||||
</tool>
|
||||
</fileInfo>
|
||||
<fileInfo id="com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.818569754.434537494" name="target.h" rcbsApplicability="disable" resourcePath="src/target.h" toolsToInvoke=""/>
|
||||
<folderInfo id="com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.818569754.1222259797" name="/" resourcePath="src/wolfcrypt">
|
||||
<toolChain id="com.renesas.cdt.managedbuild.gnuarm.toolchain.elf.debug.581387658" name="GCC ARM Embedded" superClass="com.renesas.cdt.managedbuild.gnuarm.toolchain.elf.debug" unusedChildren="">
|
||||
|
|
|
@ -82,11 +82,6 @@
|
|||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/src/spi_flash.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfboot/string.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/src/string.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfboot/uart_flash.c</name>
|
||||
<type>1</type>
|
||||
|
@ -117,6 +112,11 @@
|
|||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/asn.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/cryptocb.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/cryptocb.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/ecc.c</name>
|
||||
<type>1</type>
|
||||
|
@ -167,6 +167,11 @@
|
|||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/hash.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/memory.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/memory.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/rsa.c</name>
|
||||
<type>1</type>
|
||||
|
@ -192,10 +197,40 @@
|
|||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/sp_int.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/wc_port.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/wc_port.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/wolfmath.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/wolfmath.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/port/renesas_common.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/port/Renesas/renesas_common.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/port/renesas_sce_aes.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/port/Renesas/renesas_sce_aes.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/port/renesas_sce_rsa.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/port/Renesas/renesas_sce_rsa.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/port/renesas_sce_sha.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/port/Renesas/renesas_sce_sha.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/wolfcrypt/port/renesas_sce_util.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/port/Renesas/renesas_sce_util.c</locationURI>
|
||||
</link>
|
||||
</linkedResources>
|
||||
</projectDescription>
|
||||
|
|
|
@ -78,8 +78,8 @@
|
|||
<property id="config.bsp.fsp.mcu.gpt.pin_count_source_channels" value="0xFFFF"/>
|
||||
</config>
|
||||
<config id="config.bsp.ra">
|
||||
<property id="config.bsp.common.main" value="0x8000"/>
|
||||
<property id="config.bsp.common.heap" value="0x4000"/>
|
||||
<property id="config.bsp.common.main" value="0x2000"/>
|
||||
<property id="config.bsp.common.heap" value="0x10000"/>
|
||||
<property id="config.bsp.common.vcc" value="3300"/>
|
||||
<property id="config.bsp.common.checking" value="config.bsp.common.checking.enabled"/>
|
||||
<property id="config.bsp.common.assert" value="config.bsp.common.assert.none"/>
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
#ifndef H_TARGETS_TARGET_
|
||||
#define H_TARGETS_TARGET_
|
||||
|
||||
#include "user_settings.h"
|
||||
|
||||
#ifndef WOLFBOOT_NO_PARTITIONS
|
||||
# define WOLFBOOT_FIXED_PARTITIONS
|
||||
#endif
|
||||
|
@ -36,8 +38,14 @@
|
|||
#define WOLFBOOT_SECTOR_SIZE 0x10000
|
||||
#define WOLFBOOT_PARTITION_SIZE 0x60000
|
||||
|
||||
#define WOLFBOOT_PARTITION_BOOT_ADDRESS 0x10000
|
||||
#define WOLFBOOT_PARTITION_UPDATE_ADDRESS 0x80000
|
||||
#define WOLFBOOT_PARTITION_SWAP_ADDRESS 0xf0000
|
||||
#ifndef WOLFBOOT_RENESAS_SCEPROTECT
|
||||
# define WOLFBOOT_PARTITION_BOOT_ADDRESS 0x10000
|
||||
# define WOLFBOOT_PARTITION_UPDATE_ADDRESS 0x80000
|
||||
# define WOLFBOOT_PARTITION_SWAP_ADDRESS 0xf0000
|
||||
#else
|
||||
# define WOLFBOOT_PARTITION_BOOT_ADDRESS 0x20000
|
||||
# define WOLFBOOT_PARTITION_UPDATE_ADDRESS 0x90000
|
||||
# define WOLFBOOT_PARTITION_SWAP_ADDRESS 0xf0000
|
||||
#endif
|
||||
|
||||
#endif /* !H_TARGETS_TARGET_ */
|
||||
|
|
|
@ -28,6 +28,9 @@
|
|||
|
||||
#define WOLFBOOT_LOADER_MAIN
|
||||
|
||||
/* For SCE use, please enable the following line. */
|
||||
/* #define WOLFBOOT_RENESAS_SCEPROTECT */
|
||||
|
||||
#define WOLFBOOT_SIGN_RSA2048
|
||||
/* #defube WOLFBOOT_SIGN_RSA3072 */
|
||||
/* #defube WOLFBOOT_SIGN_RSA4096 */
|
||||
|
@ -39,6 +42,19 @@
|
|||
|
||||
#define WOLFBOOT_FIXED_PARTITIONS
|
||||
|
||||
#define VECTOR_SP ((uint32_t *) (0x00000))
|
||||
#define VECTOR_Reset_Handler ((uint32_t *) (0x10204))
|
||||
|
||||
#ifdef WOLFBOOT_RENESAS_SCEPROTECT
|
||||
# define WOLFSSL_RENESAS_SCEPROTECT_CRYPTONLY
|
||||
# define WOLFBOOT_SMALL_STACK
|
||||
# define WOLF_CRYPTO_CB
|
||||
# define RENESAS_SCE_INSTALLEDKEY_ADDR 0x08001000U
|
||||
# define SCE_ID 7890
|
||||
# undef VECTOR_Reset_Handler
|
||||
# define VECTOR_Reset_Handler ((uint32_t *)(0x20204))
|
||||
#endif
|
||||
|
||||
#ifdef WOLFBOOT_DUALBOOT
|
||||
#define FLASH_IN_DUAL_BANK_MODE (1)
|
||||
#define DUALBANK_SWAP
|
||||
|
@ -156,7 +172,9 @@
|
|||
#ifdef WOLFBOOT_SIGN_RSA2048
|
||||
# define RSA_LOW_MEM
|
||||
# define WOLFSSL_RSA_VERIFY_INLINE
|
||||
# ifndef WOLFBOOT_RENESAS_SCEPROTECT
|
||||
# define WOLFSSL_RSA_VERIFY_ONLY
|
||||
# endif
|
||||
# define WC_NO_RSA_OAEP
|
||||
# define FP_MAX_BITS (2048 * 2)
|
||||
/* sp math */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[BREAKPOINTS]
|
||||
ForceImpTypeAny = 0
|
||||
ShowInfoWin = 1
|
||||
EnableFlashBP = 1
|
||||
EnableFlashBP = 0
|
||||
BPDuringExecution = 0
|
||||
[CFI]
|
||||
CFISize = 0x00
|
||||
|
@ -15,6 +15,8 @@ OverrideMemMap = 0
|
|||
AllowSimulation = 1
|
||||
ScriptFile=""
|
||||
[FLASH]
|
||||
RMWThreshold = 0x200
|
||||
Loaders=""
|
||||
EraseType = 0x00
|
||||
CacheExcludeSize = 0x00
|
||||
CacheExcludeAddr = 0x00
|
||||
|
|
|
@ -38,10 +38,10 @@
|
|||
<stringAttribute key="com.renesas.cdt.launch.dsf.launchSeqType" value="com.renesas.cdt.launch.dsf.launchSequence.e2GdbServer"/>
|
||||
<stringAttribute key="com.renesas.cdt.launch.dsf.serverPath" value="${renesas.support.targetLoc:com.renesas.ide.supportfiles.ra.debug.debugSupportFileTarget}\e2-server-gdb"/>
|
||||
<listAttribute key="com.renesas.cdt.launch.ui.address.mruList.memoryMonitorExpression">
|
||||
<listEntry value="F0000"/>
|
||||
<listEntry value="0x80000"/>
|
||||
<listEntry value="0x20000bcc"/>
|
||||
<listEntry value="0x0"/>
|
||||
<listEntry value="0x10204"/>
|
||||
<listEntry value="0x20204"/>
|
||||
<listEntry value="0x20000"/>
|
||||
<listEntry value="21c2d"/>
|
||||
</listAttribute>
|
||||
<booleanAttribute key="com.renesas.hardwaredebug.arm.jlink.break.allowSimulation" value="false"/>
|
||||
<booleanAttribute key="com.renesas.hardwaredebug.arm.jlink.break.useFlashBreakpoints.resetorrepurposed" value="false"/>
|
||||
|
@ -123,6 +123,6 @@
|
|||
<listEntry value="4"/>
|
||||
</listAttribute>
|
||||
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
|
||||
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><memoryBlockExpressionList context="reserved-for-future-use"><gdbmemoryBlockExpression address="66052" core_thread_id="1_i1" label="0x10204"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="31144" core_thread_id="1_i1" label="&amp;Reset_Handler"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="70337" core_thread_id="1_i1" label="0x112c1"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="0" core_thread_id="1_i1" label="0x0"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="536873932" core_thread_id="1_i1" label="0x20000bcc"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="524288" core_thread_id="1_i1" label="0x80000"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression></memoryBlockExpressionList>"/>
|
||||
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><memoryBlockExpressionList context="reserved-for-future-use"><gdbmemoryBlockExpression address="131072" core_thread_id="1_i1" label="0x20000"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="131588" core_thread_id="1_i1" label="0x20204"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression><gdbmemoryBlockExpression address="66052" core_thread_id="1_i1" label="0x10204"><memoryRendering id="org.eclipse.debug.ui.rendering.hexint"><renderingInstance containerId="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1" viewId="org.eclipse.debug.ui.MemoryView" viewSecondaryId=""/></memoryRendering></gdbmemoryBlockExpression></memoryBlockExpressionList>"/>
|
||||
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
|
||||
</launchConfiguration>
|
||||
|
|
|
@ -33,8 +33,17 @@
|
|||
|
||||
#include "r_flash_hp.h"
|
||||
|
||||
#if defined(WOLFSSL_RENESAS_SCEPROTECT_CRYPTONLY) && \
|
||||
!defined(WOLFBOOT_RENESAS_APP)
|
||||
|
||||
#define DEBUG_FLASH_WRITE_VERIFY
|
||||
# include "wolfssl/wolfcrypt/wc_port.h"
|
||||
# include "wolfssl/wolfcrypt/port/Renesas/renesas-sce-crypt.h"
|
||||
# include "wolfssl/wolfcrypt/port/Renesas/renesas_sync.h"
|
||||
User_SCEPKCbInfo pkInfo;
|
||||
sce_rsa2048_public_wrapped_key_t wrapped_rsapub2048;
|
||||
#endif
|
||||
|
||||
/* #define DEBUG_FLASH_WRITE_VERIFY */
|
||||
|
||||
static inline void hal_panic(void)
|
||||
{
|
||||
|
@ -49,6 +58,10 @@ void hal_init(void)
|
|||
{
|
||||
fsp_err_t err;
|
||||
|
||||
#if defined(WOLFBOOT_RENESAS_SCEPROTECT) && !defined(WOLFBOOT_RENESAS_APP)
|
||||
/* retrive installed pubkey from flash */
|
||||
uint32_t *pubkey = keystore_get_buffer(0);
|
||||
#endif
|
||||
err = R_FLASH_HP_Close(&g_flash0_ctrl);
|
||||
err = R_FLASH_HP_Open(&g_flash0_ctrl, &g_flash0_cfg);
|
||||
|
||||
|
@ -63,6 +76,30 @@ void hal_init(void)
|
|||
printf("ERROR: %d\n", err);
|
||||
hal_panic();
|
||||
}
|
||||
#if defined(WOLFBOOT_RENESAS_SCEPROTECT) && !defined(WOLFBOOT_RENESAS_APP)
|
||||
err = wolfCrypt_Init();
|
||||
if (err != 0) {
|
||||
printf("ERROR: wolfCrypt_Init %d\n", err);
|
||||
hal_panic();
|
||||
}
|
||||
|
||||
XMEMSET(&pkInfo, 0, sizeof(pkInfo));
|
||||
pkInfo.sce_wrapped_key_rsapub2048 =
|
||||
(sce_rsa2048_public_wrapped_key_t*)&wrapped_rsapub2048;
|
||||
XMEMCPY(&wrapped_rsapub2048.value, (uint32_t*)pubkey,
|
||||
sizeof(wrapped_rsapub2048.value));
|
||||
|
||||
wrapped_rsapub2048.type =SCE_KEY_INDEX_TYPE_RSA2048_PUBLIC;
|
||||
pkInfo.flags2.bits.rsapub2048_installedkey_set = 1;
|
||||
pkInfo.flags2.bits.message_type = 1;
|
||||
err = wc_CryptoCb_CryptInitRenesasCmn(NULL, &pkInfo);
|
||||
|
||||
if (err < 0) {
|
||||
printf("ERROR: wc_CryptoCb_CryptInitRenesasCmn %d\n", err);
|
||||
hal_panic();
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void hal_prepare_boot(void)
|
||||
|
|
|
@ -195,7 +195,11 @@ extern "C" {
|
|||
|
||||
/* KeyStore API */
|
||||
int keystore_num_pubkeys(void);
|
||||
#if defined(WOLFBOOT_RENESAS_SCEPROTECT)
|
||||
uint32_t *keystore_get_buffer(int id);
|
||||
#else
|
||||
uint8_t *keystore_get_buffer(int id);
|
||||
#endif
|
||||
int keystore_get_size(int id);
|
||||
uint32_t keystore_get_mask(int id);
|
||||
|
||||
|
|
|
@ -35,8 +35,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define VECTOR_SP ((uint32_t)(0x0))
|
||||
#define VECTOR_Reset_Handler ((uint32_t *)(0x10204))
|
||||
|
||||
|
||||
void do_boot(const uint32_t *app_offset)
|
||||
{
|
||||
|
|
22
src/image.c
22
src/image.c
|
@ -353,6 +353,8 @@ static void wolfBoot_verify_signature(uint8_t key_slot,
|
|||
word32 in_out = 0;
|
||||
int res = 0;
|
||||
|
||||
#if !defined(WOLFBOOT_RENESAS_SCEPROTECT)
|
||||
|
||||
ret = wc_InitRsaKey(&rsa, NULL);
|
||||
if (ret < 0) {
|
||||
/* Failed to initialize key */
|
||||
|
@ -369,6 +371,19 @@ static void wolfBoot_verify_signature(uint8_t key_slot,
|
|||
XMEMCPY(output, sig, IMAGE_SIGNATURE_SIZE);
|
||||
RSA_VERIFY_FN(ret, wc_RsaSSL_VerifyInline, output, IMAGE_SIGNATURE_SIZE,
|
||||
&digest_out, &rsa);
|
||||
#else
|
||||
ret = wc_InitRsaKey_ex(&rsa, NULL, SCE_ID);
|
||||
if (ret < 0) {
|
||||
/* Failed to initialize key */
|
||||
return;
|
||||
}
|
||||
XMEMCPY(output, sig, IMAGE_SIGNATURE_SIZE);
|
||||
RSA_VERIFY_FN(ret, wc_RsaSSL_Verify, img->sha_hash,
|
||||
WOLFBOOT_SHA_DIGEST_SIZE, output, IMAGE_SIGNATURE_SIZE, &rsa);
|
||||
/* SCE SignatureVerify API has verified */
|
||||
if (ret == 0)
|
||||
wolfBoot_image_confirm_signature_ok(img);
|
||||
#endif /* WOLFBOOT_RENESAS_SCEPROTECT_CRYPTONLY */
|
||||
}
|
||||
#endif /* WOLFBOOT_TPM */
|
||||
|
||||
|
@ -1399,10 +1414,17 @@ int wolfBoot_verify_authenticity(struct wolfBoot_image *img)
|
|||
return -1;
|
||||
pubkey_hint_size = get_header(img, HDR_PUBKEY, &pubkey_hint);
|
||||
if (pubkey_hint_size == WOLFBOOT_SHA_DIGEST_SIZE) {
|
||||
#if !defined(WOLFBOOT_RENESAS_SCEPROTECT)
|
||||
key_slot = keyslot_id_by_sha(pubkey_hint);
|
||||
if (key_slot < 0) {
|
||||
return -1; /* Key was not found */
|
||||
}
|
||||
#else
|
||||
/* SCE wrapped key is installed at
|
||||
* RENESAS_SCE_INSTALLEDKEY_ADDR
|
||||
*/
|
||||
key_slot = 0;
|
||||
#endif
|
||||
} else {
|
||||
return -1; /* Invalid hash size for public key hint */
|
||||
}
|
||||
|
|
|
@ -359,11 +359,11 @@ static uint8_t* RAMFUNCTION get_trailer_at(uint8_t part, uint32_t at)
|
|||
sel_sec = nvm_select_fresh_sector(part);
|
||||
#endif
|
||||
if (part == PART_BOOT) {
|
||||
return (void *)(PART_BOOT_ENDFLAGS -
|
||||
return (void *)(PART_BOOT_ENDFLAGS -
|
||||
(WOLFBOOT_SECTOR_SIZE * sel_sec + (sizeof(uint32_t) + at)));
|
||||
}
|
||||
else if (part == PART_UPDATE) {
|
||||
return (void *)(PART_UPDATE_ENDFLAGS -
|
||||
return (void *)(PART_UPDATE_ENDFLAGS -
|
||||
(WOLFBOOT_SECTOR_SIZE * sel_sec + (sizeof(uint32_t) + at)));
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,10 @@ endif
|
|||
CFLAGS+=-DIMAGE_HEADER_SIZE=$(IMAGE_HEADER_SIZE)
|
||||
CFLAGS+=-DDELTA_UPDATES
|
||||
|
||||
ifeq ($(RENESAS_KEY),1)
|
||||
CFLAGS+=-DWOLFBOOT_RENESAS_SCEPROTECT
|
||||
endif
|
||||
|
||||
# Sources
|
||||
SRC=$(WOLFDIR)wolfcrypt/src/asn.c \
|
||||
$(WOLFDIR)wolfcrypt/src/aes.c \
|
||||
|
|
|
@ -129,6 +129,7 @@ const char Keystore_API[] =
|
|||
"{\n"
|
||||
" return NUM_PUBKEYS;\n"
|
||||
"}\n\n"
|
||||
#if !defined(WOLFBOOT_RENESAS_SCEPROTECT)
|
||||
"uint8_t *keystore_get_buffer(int id)\n"
|
||||
"{\n"
|
||||
" if (id >= keystore_num_pubkeys())\n"
|
||||
|
@ -141,6 +142,16 @@ const char Keystore_API[] =
|
|||
" return -1;\n"
|
||||
" return (int)PubKeys[id].pubkey_size;\n"
|
||||
"}\n\n"
|
||||
#else
|
||||
"uint32_t *keystore_get_buffer(int id)\n"
|
||||
"{\n"
|
||||
" return (uint32_t *)RENESAS_SCE_INSTALLEDKEY_ADDR;\n"
|
||||
"}\n\n"
|
||||
"int keystore_get_size(int id)\n"
|
||||
"{\n"
|
||||
" return (int)260;\n"
|
||||
"}\n\n"
|
||||
#endif
|
||||
"uint32_t keystore_get_mask(int id)\n"
|
||||
"{\n"
|
||||
" if (id >= keystore_num_pubkeys())\n"
|
||||
|
|
Loading…
Reference in New Issue