forked from elicec/FileBackup
-
Notifications
You must be signed in to change notification settings - Fork 0
/
GNU Tools for ARM Embedded Processors.txt
259 lines (219 loc) · 13.4 KB
/
GNU Tools for ARM Embedded Processors.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
GNU Tools for ARM Embedded Processors
Version: 5.0
Table of Contents
* Installing executables on Linux
* Installing executables on Mac OS X
* Installing executables on Windows
* Invoking GCC
* Architecture options usage
* C Libraries usage
* GCC Plugin usage
* Linker scripts & startup code
* Samples
* GDB Server for CMSIS-DAP based hardware debugger
* Installing executables on Linux *
Unpack the tarball to the install directory, like this:
$ cd $install_dir && tar xjf gcc-arm-none-eabi-*-yyyymmdd-linux.tar.bz2
For 64 bit system, 32 bit libc and libncurses are required to run the tools.
In addition, if you want to use gdb python build (arm-none-eabi-gdb-py), you'd
install 32 bit python2.7. Please refer
https://answers.launchpad.net/gcc-arm-embedded/+faq/2601
For some Ubuntu releases, the toolchain can also be installed via
Launchpad PPA at https://launchpad.net/~team-gcc-arm-embedded/+archive/ubuntu/ppa.
* Installing executables on Mac OS X *
Unpack the tarball to the install directory, like this:
$ cd $install_dir && tar xjf gcc-arm-none-eabi-*-yyyymmdd-mac.tar.bz2
* Installing executables on Windows *
Run the installer (gcc-arm-none-eabi-*-yyyymmdd-win32.exe) and follow the
instructions.
The toolchain in windows zip package is a backup to windows installer for
those who cannot run installer. We need decompress the zip package
in a proper place and then invoke it following instructions in next section.
To use gdb python build (arm-none-eabi-gdb-py), you need install 32 bit
python2.7 no matter 32 or 64 bit Windows. Please get the package from
https://www.python.org/download/.
* Invoking GCC *
On Linux and Mac OS X, either invoke with the complete path like this:
$ $install_dir/gcc-arm-none-eabi-*/bin/arm-none-eabi-gcc
Or set path like this:
$ export PATH=$PATH:$install_dir/gcc-arm-none-eabi-*/bin
$ arm-none-eabi-gcc
On Windows (although the above approaches also work), it can be more
convenient to either have the installer register environment variables, or run
INSTALL_DIR\bin\gccvar.bat to set environment variables for the current cmd.
For windows zip package, after decompression we can invoke toolchain either with
complete path like this:
TOOLCHAIN_UNZIP_DIR\bin\arm-none-eabi-gcc
or run TOOLCHAIN_UNZIP_DIR\bin\gccvar.bat to set environment variables for the
current cmd.
* Architecture options usage *
This toolchain is built and optimized for Cortex-A/R/M bare metal development.
the following table shows how to invoke GCC/G++ with correct command line
options for variants of Cortex-A/R and Cortex-M architectures.
--------------------------------------------------------------------------
| ARM core | Command Line Options | multilib |
| / ARM arch | | |
|------------|--------------------------------------------|--------------|
| Cortex-M0+ | -mthumb -mcpu=cortex-m0plus | armv6-m |
| Cortex-M0 | -mthumb -mcpu=cortex-m0 | |
| Cortex-M1 | -mthumb -mcpu=cortex-m1 | |
| |--------------------------------------------| |
| | -mthumb -march=armv6-m | |
|------------|--------------------------------------------|--------------|
| Cortex-M3 | -mthumb -mcpu=cortex-m3 | armv7-m |
| |--------------------------------------------| |
| | -mthumb -march=armv7-m | |
|------------|--------------------------------------------|--------------|
| Cortex-M4 | -mthumb -mcpu=cortex-m4 | armv7e-m |
| (No FP) |--------------------------------------------| |
| | -mthumb -march=armv7e-m | |
|------------|--------------------------------------------|--------------|
| Cortex-M4 | -mthumb -mcpu=cortex-m4 -mfloat-abi=softfp | armv7e-m |
| (Soft FP) | -mfpu=fpv4-sp-d16 | /softfp |
| |--------------------------------------------| /fpv4-sp-d16 |
| | -mthumb -march=armv7e-m -mfloat-abi=softfp | |
| | -mfpu=fpv4-sp-d16 | |
|------------|--------------------------------------------|--------------|
| Cortex-M4 | -mthumb -mcpu=cortex-m4 -mfloat-abi=hard | armv7e-m |
| (Hard FP) | -mfpu=fpv4-sp-d16 | /fpu |
| |--------------------------------------------| /fpv4-sp-d16 |
| | -mthumb -march=armv7e-m -mfloat-abi=hard | |
| | -mfpu=fpv4-sp-d16 | |
|------------|--------------------------------------------|--------------|
| Cortex-M7 | -mthumb -mcpu=cortex-m7 | armv7e-m |
| (No FP) |--------------------------------------------| |
| | -mthumb -march=armv7e-m | |
|------------|--------------------------------------------|--------------|
| Cortex-M7 | -mthumb -mcpu=cortex-m7 -mfloat-abi=softfp | armv7e-m |
| (Soft FP) | -mfpu=fpv5-sp-d16 | /softfp |
| |--------------------------------------------| /fpv5-sp-d16 |
| | -mthumb -march=armv7e-m -mfloat-abi=softfp | |
| | -mfpu=fpv5-sp-d16 | |
| |--------------------------------------------|--------------|
| | -mthumb -mcpu=cortex-m7 -mfloat-abi=softfp | armv7e-m |
| | -mfpu=fpv5-d16 | /softfp |
| |--------------------------------------------| /fpv5-d16 |
| | -mthumb -march=armv7e-m -mfloat-abi=softfp | |
| | -mfpu=fpv5-d16 | |
|------------|--------------------------------------------|--------------|
| Cortex-M7 | -mthumb -mcpu=cortex-m7 -mfloat-abi=hard | armv7e-m |
| (Hard FP) | -mfpu=fpv5-sp-d16 | /fpu |
| |--------------------------------------------| /fpv5-sp-d16 |
| | -mthumb -march=armv7e-m -mfloat-abi=hard | |
| | -mfpu=fpv5-sp-d16 | |
| |--------------------------------------------|--------------|
| | -mthumb -mcpu=cortex-m7 -mfloat-abi=hard | armv7e-m |
| | -mfpu=fpv5-d16 | /fpu |
| |--------------------------------------------| /fpv5-d16 |
| | -mthumb -march=armv7e-m -mfloat-abi=hard | |
| | -mfpu=fpv5-d16 | |
|------------|--------------------------------------------|--------------|
| ARMv8-M | -mthumb -march=armv8-m.base | armv8-m.base |
| Baseline | | |
|------------|--------------------------------------------|--------------|
| ARMv8-M | -mthumb -march=armv8-m.main | armv8-m.main |
| Mainline | | |
| (No FP) | | |
|------------|--------------------------------------------|--------------|
| ARMv8-M | -mthumb -march=armv8-m.main | armv8-m.main |
| Mainline | -mfloat-abi=softfp -mfpu=fpv5-sp-d16 | /softfp |
| (Soft FP) | | /fpv5-sp-d16 |
| |--------------------------------------------|--------------|
| | -mthumb -march=armv8-m.main | armv8-m.main |
| | -mfloat-abi=softfp -mfpu=fpv5-d16 | /softfp |
| | | /fpv5-d16 |
|------------|--------------------------------------------|--------------|
| ARMv8-M | -mthumb -march=armv8-m.main | armv8-m.main |
| Mainline | -mfloat-abi=hard -mfpu=fpv5-sp-d16 | /fpu |
| (Hard FP) | | /fpv5-sp-d16 |
| |--------------------------------------------|--------------|
| | -mthumb -march=armv8-m.main | armv8-m.main |
| | -mfloat-abi=hard -mfpu=fpv5-d16 | /fpu |
| | | /fpv5-d16 |
|------------|--------------------------------------------|--------------|
| Cortex-R4 | [-mthumb] -march=armv7-r | armv7-ar |
| Cortex-R5 | | /thumb |
| Cortex-R7 | | |
| (No FP) | | |
|------------|--------------------------------------------|--------------|
| Cortex-R4 | [-mthumb] -march=armv7-r -mfloat-abi=softfp| armv7-ar |
| Cortex-R5 | -mfpu=vfpv3-d16 | /thumb |
| Cortex-R7 | | /softfp |
| (Soft FP) | | |
|------------|--------------------------------------------|--------------|
| Cortex-R4 | [-mthumb] -march=armv7-r -mfloat-abi=hard | armv7-ar |
| Cortex-R5 | -mfpu=vfpv3-d16 | /thumb |
| Cortex-R7 | | /fpu |
| (Hard FP) | | |
|------------|--------------------------------------------|--------------|
| Cortex-A* | [-mthumb] -march=armv7-a | armv7-ar |
| (No FP) | | /thumb |
|------------|--------------------------------------------|--------------|
| Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=softfp| armv7-ar |
| (Soft FP) | -mfpu=vfpv3-d16 | /thumb |
| | | /softfp |
|------------|--------------------------------------------|--------------|
| Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=hard | armv7-ar |
| (Hard FP) | -mfpu=vfpv3-d16 | /thumb |
| | | /fpu |
--------------------------------------------------------------------------
* C Libraries usage *
This toolchain is released with two prebuilt C libraries based on newlib:
one is the standard newlib and the other is newlib-nano for code size.
To distinguish them, we rename the size optimized libraries as:
libc.a --> libc_s.a
libg.a --> libg_s.a
To use newlib-nano, users should provide additional gcc link time option:
--specs=nano.specs
Nano.specs also handles two additional gcc libraries: libstdc++_s.a and
libsupc++_s.a, which are optimized for code size.
For example:
$ arm-none-eabi-gcc src.c --specs=nano.specs $(OTHER_OPTIONS)
This option can also work together with other specs options like
--specs=rdimon.specs
Please be noticed that --specs=nano.specs is a linker option. Be sure
to include in linker option if compiling and linking are separated.
** additional newlib-nano libraries usage
Newlib-nano is different from newlib in addition to the libraries' name.
Formatted input/output of floating-point number are implemented as weak symbol.
If you want to use %f, you have to pull in the symbol by explicitly specifying
"-u" command option.
-u _scanf_float
-u _printf_float
e.g. to output a float, the command line is like:
$ arm-none-eabi-gcc --specs=nano.specs -u _printf_float $(OTHER_LINK_OPTIONS)
For more about the difference and usage, please refer the README.nano in the
source package.
Users can choose to use or not use semihosting by following instructions.
** semihosting
If you need semihosting, linking like:
$ arm-none-eabi-gcc --specs=rdimon.specs $(OTHER_LINK_OPTIONS)
** non-semihosting/retarget
If you are using retarget, linking like:
$ arm-none-eabi-gcc --specs=nosys.specs $(OTHER_LINK_OPTIONS)
* GCC Plugin usage
This release includes following Linux GCC plugins for additional performance
optimization:
** tree_switch_shortcut: optimize (Finite State Machine) FSM style program
to reduce condition jump or indirect jumps. Usage:
(GCC option) -fplugin=tree_switch_shortcut_elf
Please be noticed that current GCC plugin can only run on Linux host. They
are not available to Windows or Mac OS hosted GCC.
* Linker scripts & startup code *
Latest update of linker scripts template and startup code is available on
http://www.arm.com/cmsis
* Samples *
Examples of all above usages are available at:
$install_dir/gcc-arm-none-eabi-*/share/gcc-arm-none-eabi/samples
Read readme.txt under it for further information.
* GDB Server for CMSIS-DAP based hardware debugger *
CMSIS-DAP is the interface firmware for a Debug Unit that connects
the Debug Port to USB. More detailed information can be found at
http://www.keil.com/support/man/docs/dapdebug/.
A software GDB server is required for GDB to communicate with CMSIS-DAP based
hardware debugger. The pyOCD is an implementation of such GDB server that is
written in Python and under Apache License.
For those who are using this toolchain and have board with CMSIS-DAP based
debugger, the pyOCD is our recommended gdb server. The pyOCD binary
release is at https://launchpad.net/gcc-arm-embedded-misc/pyocd-binary.
More information can be found at https://github.com/mbedmicro/pyOCD.