AVR crosscompile
Crosscompile chain pro AVR na Gentoo (+update)
Code:
# USE="-nls -openmp -pch -sanitize -vtv" crossdev -t avr -s4 --without-headers ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * crossdev version: 20151026 * Host Portage ARCH: amd64 * Target Portage ARCH: * * Target System: avr * Stage: 4 (C/C++ compiler) * ABIs: default * binutils: binutils-[latest] * gcc: gcc-[latest] * libc: avr-libc-[latest] * CROSSDEV_OVERLAY: /usr/local/portage-crossdev * PORT_LOGDIR: /var/log/portage * PORTAGE_CONFIGROOT: * Portage flags: _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ * leaving sys-devel/binutils in /usr/local/portage-crossdev * leaving sys-devel/gcc in /usr/local/portage-crossdev * leaving dev-embedded/avr-libc in /usr/local/portage-crossdev * leaving sys-devel/gdb in /usr/local/portage-crossdev * leaving metadata/layout.conf alone in /usr/local/portage-crossdev _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ * Log: /var/log/portage/cross-avr-binutils.log * Emerging cross-binutils ... [ ok ] * Log: /var/log/portage/cross-avr-gcc-stage1.log * Emerging cross-gcc-stage1 ... [ ok ] * Log: /var/log/portage/cross-avr-avr-libc.log * Emerging cross-avr-libc ... [ ok ] * Log: /var/log/portage/cross-avr-gcc-stage2.log * Emerging cross-gcc-stage2 ... [ ok ] # updatedb # locate ldscripts/avr5.x ... /usr/lib64/binutils/avr/2.26.1/ldscripts/avr5.x # ln -s /usr/lib64/binutils/avr/2.26.1/ldscripts /usr/avr/lib/ldscripts
simple self test na ověření, že to aspoň nějak funguje: simple_self_test.sh a jeho zdroj
example build:
#!/bin/bash -x # vim: fileencoding=utf-8:nomodified:nowrap:textwidth=0:foldmethod=marker:foldcolumn=4:syntax=sh:filetype=sh:ruler:showcmd:lcs=tab\:|- list #| if [ "$1" == "clean" ] ; then rm *.elf *.asm *.dump *.hdump *.hex *.o #* exit fi avr-gcc -c example.cpp -o example.o avr-gcc -c lib_4DM8010.cpp -o lib_4DM8010.o avr-gcc example.o lib_4DM8010.o -o example.elf avr-objcopy -O ihex -R .eeprom example.elf example.hex avr-gcc -S -c example.cpp -o example.asm avr-objdump -DCfhlSwz example.elf >example.dump avr-objdump -DCfhlSwz -m avr example.hex >example.hdump
Update troubleshooting:
Nějak mi přestalo kompilování jít, projevovalo se to následující chybou (ostatně proto vzniknul simple_self_test.sh, viz výše)
Řešení: nakonec jsem zjistil, že mám v systému nejméně dvě verze těch crossutils (avr-*) nakonec jsem odinstaloval co se dalo, promazal ručně artefakty a znova nainstaloval, teď už to zase jde
Po reinstalaci a spuštění testu nastala tato chyba:
/usr/libexec/gcc/avr/ld: cannot open linker script file ldscripts/avr5.xn: No such file or directory collect2: error: ld returned 1 exit status
Řešení: