]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPlatformPkg/Documentation/ArmVExpressInstructions.txt
EmulatorPkg: Fix build break.
[mirror_edk2.git] / ArmPlatformPkg / Documentation / ArmVExpressInstructions.txt
1 =======================================
2 = ARM Versatile Express Documentation =
3 =======================================
4
5 Status
6 ------
7 Build and Run on EDK2 Subversion revision 11837
8 Requirements
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
13 Serial Terminal settings
14 - Baud Rates: 38400
15 - Data: 8 bit
16 - Parity: None
17 - Flow Control: None
18
19
20 Use ICE debugger with Versatile Express
21 ---------------------------------------
22 Prior to use ICE debugger with Versatile Express, you will need to update the version of the ICE's firmware.
23 If you have not installed RealView 4.0 SP3, do it.
24 Open "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
27 Howto build UEFI Versatile Express
28 ----------------------------------
29 For Linux
30 ---------
31
32 For the first time
33 ******************
34 1. Get EDK2 from Tianocore Subversion repository
35 svn co https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2 edk2 --username guest
36
37 2. Get FatPkg from EDK2 SVN repository:
38 cd edk2
39 svn co https://edk2-fatdriver2.svn.sourceforge.net/svnroot/edk2-fatdriver2/trunk/FatPkg FatPkg --username guest
40
41 3. Apply some BaseTools patches
42 patch -p0 < ArmPlatformPkg/Documentation/patches/BaseTools-armgcc_build_rule_template.patch
43 patch -p1 < ArmPlatformPkg/Documentation/patches/BaseTools-Define-the-CodeSourcery-toolchain-path-with-ENV.patch
44 patch -p1 < ArmPlatformPkg/Documentation/patches/BaseTools-Add-mword-relocations-to-ARMGCC.patch
45
46 4. Set up the environment. And build the EDK2\92s tools
47 export EDK_TOOLS_PATH=`pwd`/BaseTools
48 . edksetup.sh `pwd`/BaseTools/
49 make -C $EDK_TOOLS_PATH
50
51 5. Ensure the ARMGCC toolchain is in your PATH environment variable or defined by the ARMGCC_TOOLS_PATH environment variable. Example:
52 export ARMGCC_TOOLS_PATH=/opt/toolchains/arm-2010.09-arm-none-eabi-i686-pc-linux-gnu/bin/
53
54 6. Build the ARM Versatile Express UEFI Firmware
55 build -a ARM -p ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc -t ARMGCC
56
57 7. Edit the ARM Versatile Express configuration file config.txt to declare the location of the UEFI firmware in NOR Flash
58 TOTALIMAGES: 5 ;Number of Images (Max : 32)
59 NOR0UPDATE: AUTO ;Image Update:NONE/AUTO/FORCE
60 NOR0ADDRESS: BOOT ;Image Flash Address
61 NOR0FILE: \SOFTWARE\bm_v209.axf ;Image File Name
62 NOR1UPDATE: AUTO ;IMAGE UPDATE:NONE/AUTO/FORCE
63 NOR1ADDRESS: 44000000 ;Image Flash Address
64 NOR1FILE: \SOFTWARE\sec_uefi.bin ;Image File Name
65 NOR1LOAD: 0 ;Image Load Address
66 NOR1ENTRY: 0 ;Image Entry Point
67 NOR2UPDATE: AUTO ;IMAGE UPDATE:NONE/AUTO/FORCE
68 NOR2ADDRESS: 45000000 ;Image Flash Address
69 NOR2FILE: \SOFTWARE\uefi.bin ;Image File Name
70 NOR2LOAD: 45000000 ;Image Load Address
71 NOR2ENTRY: 45000000 ;Image Entry Point
72 NOR3UPDATE: AUTO ;IMAGE UPDATE:NONE/AUTO/FORCE
73 NOR3ADDRESS: 46000000 ;Image Flash Address
74 NOR3FILE: \SOFTWARE\kernel.bin ;Image File Name
75 NOR3LOAD: 46000000 ;Image Load Address
76 NOR3ENTRY: 46000000 ;Image Entry Point
77 NOR4UPDATE: AUTO ;IMAGE UPDATE:NONE/AUTO/FORCE
78 NOR4ADDRESS: 40000000 ;Image Flash Address
79 NOR4NAME: BOOTSCRIPT ;Image Name
80 NOR4FILE: \SOFTWARE\bootscr.txt ;Image File Name
81
82 8. To select second NOR Flash as a booting device, replace in the ARM Versatile Express file \SITE1\HBI0191B\board.txt:
83 SCC: 0x004 0x00001F09
84 By:
85 SCC: 0x004 0x10001F09
86
87 9. 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:
88 cp Build/ArmVExpress-CTA9x4/DEBUG_ARMGCC/FV/SEC_ARMVEXPRESS_EFI.fd /cygdrive/e/SOFTWARE/sec_uefi.bin
89
90 10. Start the ARM Versatile Express board. You should read \93Waiting for firmware at 0x80000000 ...\94 on the serial port.
91
92 11. Copy ARMVEXPRESS_EFI.fd at 0x80000000 with RealView Debugger
93 readfile,raw,nowarn "[EDK2_PATH]\Build\ArmVExpress-CTA9x4\DEBUG_ARMGCC\FV\ARMVEXPRESS_EFI.fd"=0x80000000
94
95 12. Resume the execution from RealView Debugger
96
97 For all subsequent times
98 ************************
99 1. Build ARM Versatile Express UEFI Firmware
100 build -a ARM -p ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc -t ARMGCC
101
102 2. Start the ARM Versatile Express board. You should read \93Waiting for firmware at 0x80000000 ...\94 on the serial port.
103
104 3. Copy ARMVEXPRESS_EFI.fd at 0x80000000 with RealView Debugger
105 readfile,raw,nowarn "[EDK2_PATH]\Build\ArmVExpress-CTA9x4\DEBUG_ARMGCC\FV\ARMVEXPRESS_EFI.fd"=0x80000000
106
107 4. Resume the execution
108
109
110 For RealView Compiler Toolchain on Windows
111 ------------------------------------------
112 The 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`).
113 The 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':
114 set RVCT_TOOLS_PATH=[YOUR_TOOLCHAIN_PATH]
115
116
117 For RealView Compiler Toolchain on Linux
118 ----------------------------------------
119 The 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':
120 export RVCT_TOOLS_PATH=[YOUR_TOOLCHAIN_PATH]
121
122
123 For RVCT on Cygwin
124 ------------------
125 The 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':
126 export RVCT_TOOLS_PATH=[YOUR_TOOLCHAIN_PATH]
127
128
129 To support the standalone mode:
130 -------------------------------
131 The full ArmVe UEFI firmware can be written into NOR Flash to allow the entire boot sequence to be done after a cold boot.
132
133 build -a ARM -p ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc -t ARMGCC -D EDK2_ARMVE_STANDALONE=1
134 ARMVEXPRESS_EFI.fd is required to be copied into the ARM Versatile Express board:
135 cp Build/ArmVExpress-CTA9x4-Standalone/DEBUG_ARMGCC/FV/SEC_ARMVEXPRESS_EFI.fd /cygdrive/e/SOFTWARE/sec_uefi.bin
136 cp Build/ArmVExpress-CTA9x4-Standalone/DEBUG_ARMGCC/FV/ARMVEXPRESS_EFI.fd /cygdrive/e/SOFTWARE/uefi.bin
137
138
139 Trustzone Support
140 -----------------
141 ArmVE'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:
142 SCC: 0x004 0x10001F09
143 For:
144 SCC: 0x004 0x10003F09
145
146
147 Booting Linux
148 -------------
149 The default entry in the ARM Boot Manager is defined by the PCDs:
150
151 - gArmPlatformTokenSpaceGuid.PcdDefaultBootDescription|L"NorFlash"
152 - gArmPlatformTokenSpaceGuid.PcdDefaultBootDevicePath|L"VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)/MemoryMapped(0,0x46000000,0x462F0000)"
153 - gArmPlatformTokenSpaceGuid.PcdDefaultBootArgument|"root=/dev/sda2 rootwait debug earlyprintk console=ttyAMA0,38400 mem=1G"
154 - gArmPlatformTokenSpaceGuid.PcdDefaultBootType|1
155
156 The PCD PcdDefaultBootDevicePath expects a Device Path conforms to the UEFI specification.
157 PcdDefaultBootType defines the type of the image pointed by PcdDefaultBootDevicePath.
158 - PcdDefaultBootDevicePath = 0 for an EFI Application
159 - PcdDefaultBootDevicePath = 1 for a legacy kernel with ATAG support
160 - PcdDefaultBootDevicePath = 2 for a kernel with Flat Device Tree (FDT) support
161
162 Example of UEFI Device Path:
163
164 // Load FDT binary from the Firmware Volume (mapped at 0x80000000)
165 #define LINUX_KERNEL L"MemoryMapped(11,0x80000000,0x6FEFFFFF)\\zImage.fdt"
166
167 // Linux Kernel from a SD Card
168 #define LINUX_KERNEL L"VenHw(621B6FA5-4DC1-476F-B9D8-52C557D81070)/HD(1,MBR,0x00000000,0xF9,0x3C8907)\\boot\\zImage.fdt"
169
170 // Kernel from SATA HD - Partition 2
171 #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"
172
173 // Kernel from NOR Flash
174 #define LINUX_KERNEL L"VenHw(02118005-9DA7-443a-92D5-781F022AEDBB)/MemoryMapped(0,0x46000000,0x462F0000)"