.. vim: set noexpandtab fileencoding=utf-8 nomodified wrap textwidth=200 foldmethod=marker foldcolumn=4 ruler showcmd lcs=tab\:|- list: .. title: AVR crosscompile Cobra mk3 .. slug: 2020-09-20-AVR-crosscompile-cobra .. date: 2020-09-20 13:02:44 .. tags: AVR,gentoo .. category: AVR .. link: .. description: Instaluju AVR crosscompile na Cobru mk3 .. type: text .. author: Gilhad .. |logo| image:: /images/logo/gilhad.png Crosscompile chain pro AVR na Cobru mk3 ======================================= Jak jsem rozcházel crosscompile na svém novém počítači podle http://micro-corner.gilhad.cz/blog/AVR/2019-02-01-AVR-crosscompile.html - aneb příprava na další práci. .. TEASER_END .. section-numbering:: .. contents:: Content Aby šlo AVR programovat, musí se připojit, takže kernel musí mít nastavené příslušné ovladače: Kernel: ------- .. code-block:: text su - cd /usr/src/linux make menuconfig Device Drivers ---> [*] USB support ---> <*> USB Modem (CDC ACM) support <*> USB Serial Converter support ---> <*> USB FTDI Single Port Serial Driver <*> USB Winchiphead CH341 Single Port Serial Driver make -j25 # -j25 se dá vynechat, řiká kolik vláken se má použít, u počítače s 24 core mi přijde škoda je nevytížit všechna a jedno navíc pro režii make modules_install Já používám UEFI, takže kernel nainstaluju příslušným způsobem: .. code-block:: text cp /usr/src/linux/arch/x86/boot/bzImage /boot/bzImage.efi efibootmgr # BootCurrent: 0008 # Timeout: 1 seconds # BootOrder: 0008,0007,0003,0000,0001,0002,0006 # Boot0000* NVM-Gentoo-NVM-SYSTEM # Boot0001* NVM-Gentoo-SDA2 # Boot0002* NVM-Gentoo-NVM-SYSBCK # Boot0003* SDA-Gentoo-NVM-SYSTEM # Boot0004* SDA-Gentoo-SDA2 # Boot0005* SDA-Gentoo-NVM-SYSBCK # Boot0006 Windows Boot Manager # Boot0007* SDA-Gentoo-NVM-TeachMePCB # Boot0008* NVM-Gentoo-NVM-TeachMePCB efibootmgr -b 7 -B efibootmgr -b 8 -B mount /dev/sda1 /boot mkdir -p /boot/EFI/'Gentoo-NVM-TeachMePCB' # or any other name under /boot/EFI cp /usr/src/linux/arch/x86/boot/bzImage /boot/EFI/'Gentoo-NVM-TeachMePCB'/bzImage.efi efibootmgr -c -L "SDA-Gentoo-NVM-TeachMePCB" -l '\EFI\Gentoo-NVM-TeachMePCB\bzImage.efi' -d /dev/sda1 umount /boot mount /dev/nvme0n1p1 /boot mkdir -p /boot/EFI/'Gentoo-NVM-TeachMePCB' # or any other name under /boot/EFI cp /usr/src/linux/arch/x86/boot/bzImage /boot/EFI/'Gentoo-NVM-TeachMePCB'/bzImage.efi efibootmgr -c -L "NVM-Gentoo-NVM-TeachMePCB" -l '\EFI\Gentoo-NVM-TeachMePCB\bzImage.efi' -d /dev/nvme0n1p1 umount /boot efibootmgr # Check BootCurrent: 0008; BootOrder: 0008,..; Boot0008* NVM-Gentoo-NVM-TeachMePCB Repository: ----------- .. code-block:: text cd ~/GIT-arduino portage-tools-new-repository.sh -u arduino BareAVR "Arduino as AVR only\n see http://micro-corner.gilhad.cz/blog/AVR/2019-02-01-AVR-crosscompile.html" cd BareAVR mkdir simple_self_test cd simple_self_test wget http://micro-corner.gilhad.cz/blog/AVR/listings/simple_self_test2.sh -O simple_self_test2.sh ./simple_self_test2.sh # fail, no compiler Simple self test na ověření, že to aspoň nějak funguje: `simple_self_test2.sh `_ a jeho `zdroj `_ samozřejmě selhal, protože mu chybí kompilátor a utility, takže to hned napravím Intel Hex konverze ------------------ .. code:: echo >>/etc/portage/package.accept_keywords/AVR "dev-python/intelhex ~amd64" emerge -avq dev-python/intelhex Crosschain: ----------- .. code-block:: text # * error: please convert //etc/portage/package.mask to a directory emerge -avq sys-devel/crossdev mkdir -p /var/db/repos/portage-crossdev/{profiles,metadata} echo 'crossdev' > /var/db/repos/portage-crossdev/profiles/repo_name echo 'masters = gentoo' > /var/db/repos/portage-crossdev/metadata/layout.conf chown -R portage:portage /var/db/repos/portage-crossdev ############################################### # /etc/portage/repos.conf/crossdev.conf ############################################## # [crossdev] # location = /var/db/repos/portage-crossdev # priority = 10 # masters = gentoo # auto-sync = no # AVR (Arduino/Genuino/ATmicro/ATmega/etc.) crossdev -s4 --stable --portage --verbose --target avr # ARM (STM32/GD32/etc.) crossdev -s4 --stable --portage --verbose --target arm Troubleshooting # If issues are encountered when crossdev is compiling the gcc stages, try: # USE="-openmp -hardened -sanitize -vtv" crossdev -s4 --stable --portage --verbose --target avr Tentokrát by simple_self_test2.sh měl projít bez problémů a přeložit dva jednoduché prográmky, plus k nim přidat výpisy (a vidím, že dostávám něco dost rozdílného, podle toho co po překladači chci, jednou tam jsou i vektory přerušní, podruhé nikoli) Potlačení akcelerace Arduino myši ---------------------------------- Zatímco u normální myši je akcelerace přijemná, protože dosáhneme na celou obrazovku a přitom se dá kurzor umístit celkem přesně, tak u robotické myši je dost nevýhodná, protože chybí zpětná vazba a velice záleží na délce pohybů, pauzách mezi nimi a i jejich řazení. Myš umožňuje pohyb jen o +/- 127 v každém směru v jedné akci, přitom přez celou obrazovku to může být i několik tisíc - jednoduché řešní je si napsat funkci, která delší požadovaný pohyb rozloží na několik menších, které SW zvládne. Nejjednodušší funkce vezme cíl, ořízne nějakou hodnotou (127, 100, ...), udělá tento pohyb a odečte od cíle, takto pokračuje, dokud nezbude 0,0 a má hotovo. Problém je, že s výjimkou pohybu po osách a úhlopříčkách se cesta tam a zpátky liší a kvůli urychlení se nevrátíte do počátečního bodu. Nemluvě o tom, že skládání pohybů obecně vede k dost nepředvidatelným výsledkům - nejde například jednoduše proskákat a proklikat pravoúhlou síť tlačítek. Myš totiž neumožňuje zjištění aktuální polohy, ani pohyb na absolutní souřadnice. Řešením je akceleraci vypnout, ale jen pro robotickou myš (ta si bude muset jet lineární rychlostí, tedy víc úseků, ale zato budou přesně dlouhé), normální nechat pohodlnou, akcelerovanou. Nejdřív je potřeba zjistit, jak se nám robomyš hlásí v systému: .. code:: xinput --list - Virtual core pointer id=2 [master pointer (3)] - - Virtual core XTEST pointer id=4 [slave pointer (2)] - - SONiX USB DEVICE Consumer Control id=11 [slave pointer (2)] - - SONiX USB DEVICE Mouse id=12 [slave pointer (2)] - - BY Tech Usb Gaming Keyboard Consumer Control id=15 [slave pointer (2)] - - BY Tech Usb Gaming Keyboard Mouse id=17 [slave pointer (2)] - - USB Optical Mouse id=20 [slave pointer (2)] - - Arduino LLC Arduino Micro Mouse id=19 [slave pointer (2)] - Virtual core keyboard id=3 [master keyboard (2)] - Virtual core XTEST keyboard id=5 [slave keyboard (3)] - Power Button id=6 [slave keyboard (3)] - Power Button id=7 [slave keyboard (3)] - SONiX USB DEVICE id=8 [slave keyboard (3)] - SONiX USB DEVICE Keyboard id=9 [slave keyboard (3)] - SONiX USB DEVICE System Control id=10 [slave keyboard (3)] - BY Tech Usb Gaming Keyboard id=13 [slave keyboard (3)] - BY Tech Usb Gaming Keyboard System Control id=14 [slave keyboard (3)] - BY Tech Usb Gaming Keyboard id=16 [slave keyboard (3)] - SONiX USB DEVICE Consumer Control id=21 [slave keyboard (3)] - BY Tech Usb Gaming Keyboard Consumer Control id=22 [slave keyboard (3)] - Arduino LLC Arduino Micro Keyboard id=18 [slave keyboard (3)] Myš je zjevně **Arduino LLC Arduino Micro Mouse** a má **id=19**. Znázvu je první slovo do mezery **Vendor**, zbytek **Produkt**, takže vytvoříme soubor **/etc/X11/xorg.conf.d/mouse-acceleration.conf**, který ji akceleraci zakáže a restartujeme Xka .. code:: Section "InputClass" Identifier "My Mouse" MatchIsPointer "yes" MatchVendor "Arduino" MatchProduct "LLC Arduino Micro Mouse" Option "AccelerationProfile" "-1" Option "AccelerationScheme" "none" Option "AccelSpeed" "-1" EndSection # Stop acceleration on mouse * https://wiki.archlinux.org/index.php/Talk:Mouse_acceleration * https://xorg.freedesktop.org/wiki/Development/Documentation/PointerAcceleration/#Introduction * http://www.webupd8.org/2016/08/how-to-completely-disable-mouse.html * https://wiki.archlinux.org/index.php/Mouse_acceleration