blob: a3fe9d77a123f476f079b5c59e73b44994ff730d [file] [log] [blame]
Vishal Bhoj82c80712015-12-15 21:13:33 +05301=======================================
2= ARM Versatile Express Documentation =
3=======================================
4
5Status
6------
7Build and Run on EDK2 Subversion revision 11837
8Requirements
9- RVCTv3 (untested) or RVCTv4 or ARMGCC (Code Sourcery q201009)
10- Using Ubuntu: gcc, make, uuid-dev
11- Using Cygwin: gcc, make, e2fsprogs (needed for uuid.h)
12
13Serial Terminal settings
14- Baud Rates: 38400
15- Data: 8 bit
16- Parity: None
17- Flow Control: None
18
19
20Use ICE debugger with Versatile Express
21---------------------------------------
22Prior to use ICE debugger with Versatile Express, you will need to update the version of the ICE's firmware.
23If you have not installed RealView 4.0 SP3, do it.
24Open "RealView ICE Update" and "Install Firmware Update ...". Install "[ARM_INSTALL_PATH]\RVI\Firmware\3.4\11\ARM-RVI-3.4.0-25-base.rvi" and "[ARM_INSTALL_PATH]\RVI\Firmware\3.4\22\ARM-RVI-3.4.59-59-patch.rvi".
25
26
27Howto build UEFI Versatile Express
28----------------------------------
29For Linux
30---------
31
32For the first time
33******************
341. Get EDK2 from Tianocore Subversion repository
35svn co https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2 edk2 --username guest
36
372. Get FatPkg from EDK2 SVN repository:
38cd edk2
39svn co https://edk2-fatdriver2.svn.sourceforge.net/svnroot/edk2-fatdriver2/trunk/FatPkg FatPkg --username guest
40
413. Set up the environment. And build the EDK2’s tools
42export EDK_TOOLS_PATH=`pwd`/BaseTools
43. edksetup.sh
44make -C $EDK_TOOLS_PATH
45
464. Ensure the ARMGCC toolchain is in your PATH environment variable or defined by the ARMGCC_TOOLS_PATH environment variable. Example:
47export ARMGCC_TOOLS_PATH=/opt/toolchains/arm-2010.09-arm-none-eabi-i686-pc-linux-gnu/bin/
48
495. Build the ARM Versatile Express UEFI Firmware
50build -a ARM -p ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc -t ARMGCC
51
526. Edit the ARM Versatile Express configuration file config.txt to declare the location of the UEFI firmware in NOR Flash
53TOTALIMAGES: 5 ;Number of Images (Max : 32)
54NOR0UPDATE: AUTO ;Image Update:NONE/AUTO/FORCE
55NOR0ADDRESS: BOOT ;Image Flash Address
56NOR0FILE: \SOFTWARE\bm_v209.axf ;Image File Name
57NOR1UPDATE: AUTO ;IMAGE UPDATE:NONE/AUTO/FORCE
58NOR1ADDRESS: 44000000 ;Image Flash Address
59NOR1FILE: \SOFTWARE\sec_uefi.bin ;Image File Name
60NOR1LOAD: 0 ;Image Load Address
61NOR1ENTRY: 0 ;Image Entry Point
62NOR2UPDATE: AUTO ;IMAGE UPDATE:NONE/AUTO/FORCE
63NOR2ADDRESS: 45000000 ;Image Flash Address
64NOR2FILE: \SOFTWARE\uefi.bin ;Image File Name
65NOR2LOAD: 45000000 ;Image Load Address
66NOR2ENTRY: 45000000 ;Image Entry Point
67NOR3UPDATE: AUTO ;IMAGE UPDATE:NONE/AUTO/FORCE
68NOR3ADDRESS: 46000000 ;Image Flash Address
69NOR3FILE: \SOFTWARE\kernel.bin ;Image File Name
70NOR3LOAD: 46000000 ;Image Load Address
71NOR3ENTRY: 46000000 ;Image Entry Point
72NOR4UPDATE: AUTO ;IMAGE UPDATE:NONE/AUTO/FORCE
73NOR4ADDRESS: 40000000 ;Image Flash Address
74NOR4NAME: BOOTSCRIPT ;Image Name
75NOR4FILE: \SOFTWARE\bootscr.txt ;Image File Name
76
777. To select second NOR Flash as a booting device, replace in the ARM Versatile Express file \SITE1\HBI0191B\board.txt:
78SCC: 0x004 0x00001F09
79By:
80SCC: 0x004 0x10001F09
81
828. Copy Build/ArmVExpress-CTA9x4/DEBUG_ARMGCC/FV/SEC_ARMVEXPRESS_EFI.fd to the ARM Versatile Express mass storage (available when the board is connected through USB to your host machine) under the folder SOTWARE and name sec_uefi.bin. Example for cygwin:
83cp Build/ArmVExpress-CTA9x4/DEBUG_ARMGCC/FV/SEC_ARMVEXPRESS_EFI.fd /cygdrive/e/SOFTWARE/sec_uefi.bin
84
859. Start the ARM Versatile Express board. You should read “Waiting for firmware at 0x80000000 ...” on the serial port.
86
8710. Copy ARMVEXPRESS_EFI.fd at 0x80000000 with RealView Debugger
88readfile,raw,nowarn "[EDK2_PATH]\Build\ArmVExpress-CTA9x4\DEBUG_ARMGCC\FV\ARMVEXPRESS_EFI.fd"=0x80000000
89
9011. Resume the execution from RealView Debugger
91
92For all subsequent times
93************************
941. Build ARM Versatile Express UEFI Firmware
95build -a ARM -p ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc -t ARMGCC
96
972. Start the ARM Versatile Express board. You should read “Waiting for firmware at 0x80000000 ...” on the serial port.
98
993. Copy ARMVEXPRESS_EFI.fd at 0x80000000 with RealView Debugger
100readfile,raw,nowarn "[EDK2_PATH]\Build\ArmVExpress-CTA9x4\DEBUG_ARMGCC\FV\ARMVEXPRESS_EFI.fd"=0x80000000
101
1024. Resume the execution
103
104
105For RealView Compiler Toolchain on Windows
106------------------------------------------
107The command line window needs to be the one from Visual Studio to get the environment variables required to get some development tools (the windows compiler for BaseTools and `nmake`).
108The EDK2 toolchain name for ARM RealView Compiler Toolchain under a Windows environment is `RVCT`. The EDK2 build system will automatically pick up the RVCT toolchain defined in your PATH. If you want to use a specific version, set the environment variable 'RVCT_TOOLS_PATH':
109set RVCT_TOOLS_PATH=[YOUR_TOOLCHAIN_PATH]
110
111
112For RealView Compiler Toolchain on Linux
113----------------------------------------
114The EDK2 toolchain name for ARM RealView under a Linux environment is `RVCTLINUX`. The EDK2 build system will automatically pick up the RVCT toolchain defined in your PATH. If you want to use a specific version, set the environment variable 'RVCT_TOOLS_PATH':
115export RVCT_TOOLS_PATH=[YOUR_TOOLCHAIN_PATH]
116
117
118For RVCT on Cygwin
119------------------
120The EDK2 toolchain name for ARM RealView under a Cygwin environment is `RVCTCYGWIN`. The EDK2 build system will automatically pick up the RVCT toolchain defined in your PATH. If you want to use a specific version, set the environment variable 'RVCT_TOOLS_PATH':
121export RVCT_TOOLS_PATH=[YOUR_TOOLCHAIN_PATH]
122
123
124To support the standalone mode:
125-------------------------------
126The full ArmVe UEFI firmware can be written into NOR Flash to allow the entire boot sequence to be done after a cold boot.
127
128build -a ARM -p ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc -t ARMGCC -D EDK2_ARMVE_STANDALONE=1
129ARMVEXPRESS_EFI.fd is required to be copied into the ARM Versatile Express board:
130cp Build/ArmVExpress-CTA9x4-Standalone/DEBUG_ARMGCC/FV/SEC_ARMVEXPRESS_EFI.fd /cygdrive/e/SOFTWARE/sec_uefi.bin
131cp Build/ArmVExpress-CTA9x4-Standalone/DEBUG_ARMGCC/FV/ARMVEXPRESS_EFI.fd /cygdrive/e/SOFTWARE/uefi.bin
132
133
134Trustzone Support
135-----------------
136ArmVE's UEFI supports booting Trustzone (two worlds: Secure and Normal Worlds) and No Trustzone (one world: the CPU remains in Secure World) supports. Trustzone support is enabled by Enabling SMC TZASC in the Test Chip SCC Register 1. This register can only be changed by editing the configuration file of your Versatile Express board: E:\SITE1\HBI0191B\board.txt Changing:
137SCC: 0x004 0x10001F09
138For:
139SCC: 0x004 0x10003F09
140
141
142Booting Linux
143-------------
144The default entry in the ARM Boot Manager is defined by the PCDs:
145
146- gArmPlatformTokenSpaceGuid.PcdDefaultBootDescription|L"NorFlash"
147- gArmPlatformTokenSpaceGuid.PcdDefaultBootDevicePath|L"VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)/MemoryMapped(0,0x46000000,0x462F0000)"
148- gArmPlatformTokenSpaceGuid.PcdDefaultBootArgument|"root=/dev/sda2 rootwait debug earlyprintk console=ttyAMA0,38400 mem=1G"
149- gArmPlatformTokenSpaceGuid.PcdDefaultBootType|1
150
151The PCD PcdDefaultBootDevicePath expects a Device Path conforms to the UEFI specification.
152PcdDefaultBootType defines the type of the image pointed by PcdDefaultBootDevicePath.
153- PcdDefaultBootDevicePath = 0 for an EFI Application
154- PcdDefaultBootDevicePath = 1 for a legacy kernel with ATAG support
155- PcdDefaultBootDevicePath = 2 for a kernel with Flat Device Tree (FDT) support
156
157Example of UEFI Device Path:
158
159// Load FDT binary from the Firmware Volume (mapped at 0x80000000)
160#define LINUX_KERNEL L"MemoryMapped(11,0x80000000,0x6FEFFFFF)\\zImage.fdt"
161
162// Linux Kernel from a SD Card
163#define LINUX_KERNEL L"VenHw(621B6FA5-4DC1-476F-B9D8-52C557D81070)/HD(1,MBR,0x00000000,0xF9,0x3C8907)\\boot\\zImage.fdt"
164
165// Kernel from SATA HD - Partition 2
166#define LINUX_KERNEL L"Acpi(PNP0A03,0)/Pci(0|0)/Pci(0|0)/Pci(5|0)/Pci(0|0)/Sata(0,0,0)/HD(2,MBR,0x00076730,0x1F21BF,0x1F21BF)\\boot\\zImage.fdt"
167
168// Kernel from NOR Flash
169#define LINUX_KERNEL L"VenHw(02118005-9DA7-443a-92D5-781F022AEDBB)/MemoryMapped(0,0x46000000,0x462F0000)"