Da Ubuntu 22.04 nach den GCC11 hat, bootstrapen wir erst den GCC12.2.0-GCC
Wir gehen nach Johannes Bauer vor, müssen aber modifizieren:
cd ~/bautc12.20 mkdir buildutilsarm-elf cd buildutilsarm-elf ../binutils-2.39/configure --prefix=/opt/tc-12.2.0-arm-cortex-m3 --target=arm-none-eabi --disable-werror \ --disable-interwork make -j4 make install
cd ~/bautc12.2.0 mkdir buildgccarmm3 ; cd buildgccarmm3 export PATH=/opt/tc-12.2.0-arm-cortex-m3/bin:$PATH ../gcc-12.2.0/configure --prefix=/opt/tc-12.2.0-arm-cortex-m3 --target=arm-none-eabi --disable-nls --disable-shared \ --disable-threads --with-gnu-ld --with-gnu-as --disable-multilib \ --disable-libspp --disable-libmud-flap --disable-libgomp --with-dwarf2 \ --with-newlib --disable-werror --with-cpu=cortex-m3 \ --with-mode=thumb --enable-target-optspace --with-float=soft \ --enable-languages=c,c++ --disable-interwork make -j4 all-gcc make install-gcc
Nun übersetzt auch das example:
cd ~/test wget https://www.johannes-bauer.com/mcus/cortex/example.c arm-none-eabi-gcc -o example -nostdlib -mtune=cortex-m3 example.c export CROSS=arm-none-eabi- ${CROSS}objdump -d exampleergibt:
example: Dateiformat elf32-littlearm Disassembly of section .text: 00008000: 8000: b480 push {r7} 8002: b083 sub sp, #12 8004: af00 add r7, sp, #0 8006: 2300 movs r3, #0 8008: 607b str r3, [r7, #4] 800a: e00b b.n 8024 800c: 4a11 ldr r2, [pc, #68] ; (8054 ) 800e: 687b ldr r3, [r7, #4] 8010: 6013 str r3, [r2, #0] 8012: 687b ldr r3, [r7, #4] 8014: 43db mvns r3, r3 8016: 4a10 ldr r2, [pc, #64] ; (8058 ) 8018: f003 03c3 and.w r3, r3, #195 ; 0xc3 801c: 6013 str r3, [r2, #0] 801e: 687b ldr r3, [r7, #4] 8020: 3301 adds r3, #1 8022: 607b str r3, [r7, #4] 8024: 687b ldr r3, [r7, #4] 8026: 2b7f cmp r3, #127 ; 0x7f 8028: ddf0 ble.n 800c 802a: 4b0a ldr r3, [pc, #40] ; (8054 ) 802c: 681a ldr r2, [r3, #0] 802e: 4b0a ldr r3, [pc, #40] ; (8058 ) 8030: 681b ldr r3, [r3, #0] 8032: 4013 ands r3, r2 8034: 2b00 cmp r3, #0 8036: d003 beq.n 8040 8038: 4b06 ldr r3, [pc, #24] ; (8054 ) 803a: 2277 movs r2, #119 ; 0x77 803c: 601a str r2, [r3, #0] 803e: e002 b.n 8046 8040: 4b05 ldr r3, [pc, #20] ; (8058 ) 8042: 2299 movs r2, #153 ; 0x99 8044: 601a str r2, [r3, #0] 8046: 2300 movs r3, #0 8048: 4618 mov r0, r3 804a: 370c adds r7, #12 804c: 46bd mov sp, r7 804e: bc80 pop {r7} 8050: 4770 bx lr 8052: bf00 nop 8054: 11223344 .word 0x11223344 8058: 00c0ffee .word 0x00c0ffee
der Code ist anders, aber die Übersetzung und Linking hat funktioniert.
cd ~/Downloads wget ftp://sourceware.org/pub/newlib/newlib-4.2.0.20211231.tar.gz cd /halde/tc-12.2.0/ tar -zxvf ~/Downloads/newlib-4.2.0.20211231.tar.gz mkdir buildnewlib ; cd buildnewlib ../configure --prefix=/opt/tc-12.2.0-arm-cortex-m3 --target=arm-none-eabi --disable-multilib --disable-newlib-supplied-syscalls --disable-interwork make make install
git clone git://sourceware.org/git/newlib-cygwin.git mkdir buildnewlib4.3 ; cd buildnewlib4.3/ ../newlib-cygwin/configure --prefix=/opt/tc-12.2.0-arm-cortex-m3 --target=arm-none-eabi --disable-multilib --disable-newlib-supplied-syscalls --disable-interwork make