Linux auf STM32
Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
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' ~ #