====== Linux auf STM32 - STM32F429I-DISC1 Discovery Board ====== Basierend auf der Anleitung von Mikrocontroller.net: * [[https://mikrocontroller.net/articles/Linux_auf_STM32|Linux auf STM32]] habe ich Demo auf meinem Discovryboard installiert. Hier noch das komplette Binary zum Testen: * {{ :public:projekte:stm32:discoveryf4_moving_tux_demo.bin |MovinTux.bin}} - getestet mit STM32F429I-DISC1 Board Hier folgen ein paar Stichpunkte zur Installation der "MovingTux" Demo Applikation basierend auf µCLinux auf dem STM32F429I-Disco1 Board. Mein Buildsystem ist: * Ubuntu 16.04 LTS Ich musste noch folgende zusätliche Pakete installieren: * sudo apt install automake sudo apt install libtool sudo apt install libusb-1.0-0-dev\\ da das normale libusb nicht ausgereicht hatte. * Und bei Ubuntu 18.04 in der VirtualBox war noch: sudo apt install libc6-i386 erforderlich. (nur bei der Fehlermeldung: ** make[4]: arm-uclinuxeabi-gcc: Command not found **). Ebenso hatte ich abweichend zur Beschreibung die USART3 belassen, d.h.: * PC10 - **Tx** (vom Board) muss mit Rx vom UART-Adapter verbunden werden (+3,3V beachten) * PC11 - **Rx** (vom Board) muss mit Tx vom UART-Adapter verbunden werden (+3,3V beachten) * **115200 8N1** * Als Terminal verwende ich den PuTTY im seriellen Modus (ein normales terminal empfiehlt sich wegen den Steuersquencen in der Ausgabe nicht) Durch die neuerer Ubuntu Version (Perl Version) kommt es zu einer Inkompatibilität, d.h. der build Prozess wird mit mehreren Fehlermeldungen abgebrochen. Nach eine Anpassung in der Datei **kernel/timeconst.pl**: * Holzhammer Methode, geht eleganter in dem man die Perl-Anweisung "richtig" anpasst. Hier mal meine Änderungen:diff --git a/kernel/timeconst.pl b/kernel/timeconst.pl index eb51d76..abc1c8e 100644 --- a/kernel/timeconst.pl +++ b/kernel/timeconst.pl @@ -370,9 +370,9 @@ if ($hz eq '--can') { } @val = @{$canned_values{$hz}}; - if (!defined(@val)) { + #if (!defined(@val)) { @val = compute_values($hz); - } + #} output($hz, @val); } exit 0; Hintergrundinformationen sind hier zu finden: [[https://www.perlmonks.org/?node=1077762|Define(@array) is Deprecated]]\\ ist der Build-Prozess erfolgreich durchgelaufen. cat /proc/version Linux version 2.6.33-arm1 (andreas@andi-ubuntu) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-189) ) #1 Wed Aug 15 21:41:27 CEST 2018 Das Flashen des Boards hatte auf Anhieb mit OpenOCD geklappt. Danach ist der Tux auf dem LCD sichtbar und die Bootmessages wurden über das Terminal ausgegeben. Noch ein paar Hinweise zur Demo: * Der Tux wird da platziert wo man den Touchscreen berührt * Mit der blauen Taste wird der "auto" Modus umgeschaltet * dies geht aber auch über die Konsole: * Einschalten: echo 1 >/sys/class/graphics/moving_tux/kickstart * Ausschalten: echo 0 >/sys/class/graphics/moving_tux/kickstart Der ganze Bootprozess dauert ca. 1s. Hier noch die Konsoleausgabe beim Startup: ~ # U-Boot 2010.03-00003-g934021a (Aug 15 2018 - 21:25:21) CPU : STM32F4 (Cortex-M4) Freqs: SYSCLK=180MHz,HCLK=180MHz,PCLK1=45MHz,PCLK2=90MHz Board: STM32F429I-DISCOVERY board,Rev 1.0 DRAM: 8 MB Using default environment Hit any key to stop autoboot: 0 ## Booting kernel from Legacy Image at 08020000 ... Image Name: Linux-2.6.33-arm1 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 764256 Bytes = 746.3 kB Load Address: 08020040 Entry Point: 08020041 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Linux version 2.6.33-arm1 (andreas@andi-ubuntu) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-189) ) #1 Wed Aug 15 21:41:27 CEST 2018 CPU: ARMv7-M Processor [410fc241] revision 1 (ARMv7M) CPU: NO data cache, NO instruction cache Machine: STMicro STM32 Ignoring unrecognised tag 0x54410008 Built 1 zonelists in Zone order, mobility grouping off. Total pages: 1778 Kernel command line: stm32_platform=stm32429-disco mem=7M console=ttyS2,115200n8 consoleblank=0 root=/dev/mtdblock0 rdinit=/sbin/init video=vfb:enable,fbmem:0x90700000,fbsize:0x100000 PID hash table entries: 32 (order: -5, 128 bytes) Dentry cache hash table entries: 1024 (order: 0, 4096 bytes) Inode-cache hash table entries: 1024 (order: 0, 4096 bytes) Memory: 7MB = 7MB total Memory: 6972k/6972k available, 196k reserved, 0K highmem Virtual kernel memory layout: vector : 0x00000000 - 0x00001000 ( 4 kB) fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB) vmalloc : 0x00000000 - 0xffffffff (4095 MB) lowmem : 0x90000000 - 0x90700000 ( 7 MB) modules : 0x90000000 - 0x90800000 ( 8 MB) .init : 0x9000a000 - 0x9000c000 ( 8 kB) .text : 0x08029000 - 0x080ca000 ( 644 kB) .data : 0x90008000 - 0x900189a0 ( 67 kB) Hierarchical RCU implementation. NR_IRQS:99 Console: colour dummy device 80x30 Calibrating delay loop... 168.34 BogoMIPS (lpj=841728) Mount-cache hash table entries: 512 bio: create slab at 0 Switching to clocksource cm3-systick ROMFS MTD (C) 2007 Red Hat, Inc. io scheduler noop registered io scheduler deadline registered (default) Console: switching to colour frame buffer device 60x53 fb0: Virtual frame buffer device, using 1024K of video memory STM32 Hardware RNG initialized Serial: STM32 USART driver stm32serial.2: ttyS2 at MMIO 0x40004800 (irq = 39) is a STM32 USART Port console [ttyS2] enabled brd: module loaded uclinux[mtd]: ROM probe address=0x8120000 size=0x59000 Creating 1 MTD partitions on "ROM": 0x000000000000-0x000000059000 : "ROMfs" stmpe 2-0041: stmpe811 detected, chip id: 0x811 input: stmpe-ts as /devices/virtual/input/input0 i2c_stm32 i2c_stm32.2: I2C Controller i2c-2 at 40005c00,irq=72 ARMv7-M VFP Extension supported VFS: Mounted root (romfs filesystem) readonly on device 31:0. Freeing init memory: 8K starting pid 29, tty '/dev/ttyS2': '/bin/login -f root' Welcome to ____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_| For further information check: http://www.uclinux.org/ Jan 1 00:00:01 login[29]: root login on 'ttyS2' ~ # ====== Linux auf STM32MP1 ====== ===== Links ===== * [[https://bootlin.com/blog/building-a-linux-system-for-the-stm32mp1-basic-system/|building-a-linux-system-for-the-stm32mp1-basic-system]] ====== Linux - STM32 ====== * [[https://stm32-base.org/|STM32-BASE]] - STM32 Grundstruktur um unter Linux mit der "[[https://developer.arm.com/downloads/-/gnu-rm|GNU ARM Embedded Toolchain]]" STM32 Sourcen zu compilieren.