Linux auf STM32

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Für dem Einsatz von Linux bzw. ucLinux eignen sich derzeit inbesondere folgende HW-Platformen:

Folgendes youtube video zeigt beim STM32F429I Discovery die Verwendung des Displays mit touch und der seriellen Schnittstelle.

Dieses Linux-Image kann z.B. unter einem Debian (Jessie) Linux-Host wie folgt erstellt und auf das Board installiert werden [1]:

clone repository
git clone https://github.com/AdrianHuang/stm32f429-linux-builder
cd stm32f429-linux-builder/
git checkout MovingTux
cd ..
install toolchain
wget http://www.codesourcery.com/sgpp/lite/arm/portal/package6503/public/arm-uclinuxeabi/arm-2010q1-189-arm-uclinuxeabi-i686-pc-linux-gnu.tar.bz2
sudo tar -xjf arm-2010q1-189-arm-uclinuxeabi-i686-pc-linux-gnu.tar.bz2
sudo apt-get install genromfs
install openocd
git clone http://git.code.sf.net/p/openocd/code openocd
cd openocd
./bootstrap
./configure --prefix=/usr/local --enable-stlink
echo -e "all:\ninstall:" > doc/Makefile
make
sudo make install
cd ..
build linux & install on target
export PATH=`pwd`/arm-2010q1/bin:$PATH
cd stm32f429-linux-builder/
make
sudo env "PATH=$PATH" make install
cd ..

Um die serielle Konsole zu verwenden benötigt man z.B. noch einen RS232(TTL)/USB Wandler. Dieser wird mit 3 Pins an PA9, PA10 und GND für die Verwendung des USART1 angeschlossen. Ändert man noch in 3 Dateien den seriellen Port von USART3 auf USART1 erhält man nach dem Start (bootet unter 1s) folgendes Bootlog:

U-Boot 2010.03-00003-g934021a-dirty (Nov 06 2015 - 19:19:03)

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 (user@debian) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-189) ) #1 Fri Nov 6 19:21:05 CET 2015
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=ttyS0,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 <bio-0> 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.0: ttyS0 at MMIO 0x40011000 (irq = 37) is a STM32 USART Port
console [ttyS0] 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/ttyS0': '/bin/login -f root'
Welcome to
          ____ _  _
         /  __| ||_|
    _   _| |  | | _ ____  _   _  _  _
   | | | | |  | || |  _ \| | | |\ \/ /
   | |_| | |__| || | | | | |_| |/    \
   |  ___\____|_||_|_| |_|\____|\_/\_/
   | |
   |_|

For further information check:
http://www.uclinux.org/

Jan  1 00:00:01 login[29]: root login on 'ttyS0'
~ #