====== 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.