TDC2016SP - Trilha Linux Embarcado

47
Linux 4.6 em Microcontroladores: Um caso prático. CPS | CERTI 2016 COPYRIGHT 2016 – Fundação CERTI

Transcript of TDC2016SP - Trilha Linux Embarcado

Page 1: TDC2016SP - Trilha Linux Embarcado

Linux 4.6 em Microcontroladores:

Um caso prático.CPS | CERTI 2016

COPYRIGHT 2016 – Fundação CERTI

Page 2: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

DISCLAIMERThe information in this presentation was compiled from sources believed to be reliable for informational purposes only.

Content includes opinions, presentations, articles, hyperlinks or other third party content (“Third Party Material”) that is not intended to, nor constitutes an endorsement by CERTI of the author or the Third Party Materials. The content and views within the Third Party Material are solely those of the third party and do not reflect the opinions of CERTI. The opinions expressed in this presentation and on the following slides are solely those of the

presenter and not necessarily those of CERTI. CERTI does not guarantee the accuracy or

reliability of the information provided herein.

Presentation Notes

Page 3: TDC2016SP - Trilha Linux Embarcado

WARMUP

www.linkedin.com/in/bherrera

COPYRIGHT 2016 – Fundação CERTI

Present how Linux can be ported to MCUs with low memory and low storage how can it leverage the MCU development environment and avoid fragmentation(kind of).

Goal

BrunoMHerrera

Page 4: TDC2016SP - Trilha Linux Embarcado

WARMUP

www.linkedin.com/in/bherrera

COPYRIGHT 2016 – Fundação CERTI

I’m a Computer Engeneer I’m a Computer Enginere I’m a Computer EngenereI’m good with Computers ….

Who I Am

BrunoMHerrera

Page 5: TDC2016SP - Trilha Linux Embarcado

MCUChapter 1

ActionChapter 4

LinuxChapter 2

Wrap upChapter 5

WIPChapter 3

AGENDA

COPYRIGHT 2016 – Fundação CERTI

Page 6: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Photo credit: Adam Greig via VisualHunt / CC BY-SA

MCU – Microcontroller Unit

“Microcontrollers are designed for embedded applications, in contrast to the microprocessors used in personal computers or other general purpose applications consisting of various discrete chips.”-Wikipedia

Page 7: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Microcontrollers usually contain MPU (memory protection unit)

MMU-less

Reduced RAM <192k Flash (ROM) <2Mb

ASP 2014 - $0.83ASP 2015 - $0.65*7 to 8 times in Brazilhttp://www.icinsights.com/news/bulletins/Microcontroller-Unit-Shipments-Surge-But-Falling-Prices-Sap-Sales-Growth/

Microcontrollers usually contain from several to dozens of general purpose input/output pins (GPIO). GPIO pins are software configurable to either an input or an output state.[1]

Microcontrollers usually contain several peripherals integrated (U[S]ART, ADC, USB, SDIO, etc…)

AutomationHealthcareAutomotiveAerospaceWellnessInternet of Things

MCU - Traits

Small Footprint Low Price

ApplicationsSoCGPIO

Page 8: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

BSP(board support package) / HAL (hardware abstraction layer) provided by the “Chip” vendor

Hardware dependent code, not portable

No operating system

Hard to port applications

Hard to update on the field

Do not forget: it is all about registers!!

without addition; basic and simple

Chapter 1 | MCU

Bare Metal

Page 9: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

eLua www.eluaproject.netEmbedded power, driven by Lua

Quickly prototype and develop embedded software applications with the power of Lua and run them on a wide range of microcontroller architecturesMicroPython micropython.orgMicroPython is a lean and efficient implementation of the Python 3 programming language that includes a small subset of the Python standard library and is optimised to run on microcontrollers and in constrained environments.

Netduino www.netduino.comNetduino, an open-source electronics platform using the .NET Micro Framework.

Cont: JavaME,

Chapter 1 | MCU

Bare Metal

Not so bare

Page 10: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

ATmega328P

14 Digital I/O Pins

6 PWM Digital I/O Pins

6 Analog Input Pins

32 KB Flash Memory of which 0.5 KB used by bootloader

2KB SRAM

1KB EEPROM

16MHz Clock Speed

U$ 3.38

Chapter 1 | MCU

Arduino Uno

“The UNO is the best board to get started with electronics and coding. If this is your first experience tinkering with the platform, the UNO is the most robust board you can start playing with”https://www.arduino.cc/en/Main/ArduinoBoardUno

Page 11: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Real Time Operating System

FreeRTOS www.freertos.orgFreeRTOS is the market leading real time operating system (or RTOS), and the de-facto standard solution for microcontrollers and small microprocessors.

Nuttx nuttx.orgNuttX is a real-time operating system (RTOS) with an emphasis on standards compliance and small footprint. Scalable from 8-bit to 32-bit microcontroller environments, the primary governing standards in NuttX are Posix and ANSI standards.

Zypher www.zephyrproject.orgZephyr Project is a small, scalable real-time operating system for use on resource-constrained systems supporting multiple architectures.

Cont: Contiki (IoT), BROS, ChibiOs

Chapter 1 | MCU

RTOS

Page 12: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

VxWorks windriver.com/products/vxworks

VxWorks is designed for use in embedded systems requiring real-time, deterministic performance and, in many cases, safety and security certification, for industries, such as aerospace and defense, medical devices, industrial equipment, robotics, energy, transportation, network infrastructure, automotive, and consumer electronics.[X]

Nucleus mentor.com/embedded-software/nucleus/

The Nucleus RTOS is designed for deeply embedded systems applications including consumer electronics, set-top boxes, cellular phones, and other portable and handheld devices. For limited memory systems Nucleus RTOS can be scaled down to a memory footprint as small as 13 KB for both code and data.

Cont: QNX, SAFERTOS,

Chapter 1 | MCU

RTO$

Real Time Operating System

Page 13: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

“as one of key benefits of an MMU: an operating system can use it to protect against errant programs by disallowing access to memory that a particular program should not have access to”

“Given the need for a high security bar in IoT we try and design Brillo in way that promotes a strong security architecture in the final products. I’m afraid if we offered a MMU-less variant of Brillo we'd be promoting a very insecure architecture, and for that reason its not something we'd consider.”

[Brillo Mailist]

Chapter 1 | MCU

MMU-less

WARNING:No memory management!

Page 14: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

you-see-linux

www.uclinux.orgThe Embedded Linux/Microcontroller project is a port of Linux to systems without a Memory Management Unit (MMU).

No elf support

Not in mainstream(2.6.x)

uClibc

Emcraft (Commercial and Opensource)https://github.com/EmcraftSystems/linux-emcraft/

Chapter 1 | MCU

uClinux

Page 15: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Photo credit: Derek K. Miller via VisualHunt.com / CC BY-NC

Linux

“That's what makes Linux so good: you put in something, and that effort multiplies. It's a positive feedback cycle.” - Linus Torvalds

Page 16: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Linus was wrong

Chapter 2 | Linux

History

https://groups.google.com/forum/#!msg/comp.os.minix/dlNtH7RRrGA/SwRavCzVE7gJ

Page 17: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Video

Chapter 2 | Linux

History

The Story of Linux: Commemorating 20 Years of the Linux Operating System

Page 18: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 2 | Linux

History

1995 > BusyBox a collection of command line utilies - Bruce Perens (1.44Mb) Debian Installer

> MIPS

1996> M68k, PPC

1998> uClinux at m68k DragonBall on 3Com palm pilot

1999> ARM

2000> iPaq H3600 running X11

2005> Nokia 770 Internet Tablet running Maemo Linux

embedded

Page 19: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 2 | Linux

History

1995 > BusyBox a collection of command line utilies - Bruce Perens (1.44Mb) Debian Installer

> MIPS

1996> M68k, PPC

1998> uClinux at m68k DragonBall on 3Com palm pilot

1999> ARM

2000> iPaq H3600 running X11

2005> Nokia 770 Internet Tablet running Maemo Linux

embedded

Page 20: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Pros

Chapter 2 | Linux

Why Linux?

Strong Community / Big Players contributing / Stable versions and release cycles

Portable (ARM Cortex M3/M4 support is now mainstream)

POSIX Compliant

OSS Environment and Tools

Huge drivers support

XIP (execution in Place)

Free

Page 21: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Cons

Chapter 2 | Linux

Why not Linux?

Big footprint (linux-tiny)

Latency / Not real time (linux-rt)

Bloated subsystems (procps, printk, comand line parser)

Not designed for MCU : “The Linux community is skeptical about MCUs “[x]

Too many config parameters, hard to find the optimal configuration

Do try this without and external RAM (8Mb)

Page 22: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

www.devicetree.orgThe devicetree is a data structure for describing hardware. Rather than hard coding every detail of a device into an operating system, many aspects of the hardware can be described in a data structure that is passed to the operating system at boot time.

The kernel no longer contains the description of the hardware,it is located in a separate binary: the device tree blob

The Device Tree Blob is produced by the compiler, and is

the binary that gets loaded by the bootloader and parsed by

the kernel at boot time.

model = “TDC 2016 Linux Embarcado”;

Chapter 2 | Linux

Device Tree

Page 23: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

www.devicetree.orgThe devicetree is a data structure for describing hardware. Rather than hard coding every detail of a device into an operating system, many aspects of the hardware can be described in a data structure that is passed to the operating system at boot time.

The kernel no longer contains the description of the hardware,it is located in a separate binary: the device tree blob

The Device Tree Blob is produced by the compiler, and is

the binary that gets loaded by the bootloader and parsed by

the kernel at boot time.

model = “TDC 2016 Linux Embarcado”;

Chapter 2 | Linux

Device Tree

Page 24: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

make menuconfig

Chapter 2 | Linux

KConfig

The configuration database is a collection of configuration optionsorganized in a tree structure

[Kernel Doc]

“Can't use strategy of manual tuning(i.e.config options)

3.9 has about 13,000 options”

[X Tim Bird]

Start from one known configuration

stm32_defconfig

Don’t Panic

Page 25: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 2 | Linux

BootLoader

Essentially, the boot loader should provide (as a minimum) the

following:

1. Setup and initialize the RAM.2. Initialize one serial port.

3. Detect the machine type.

4. Setup the kernel tagged list.

5. Load initramfs.

6. Call the kernel image.

https://www.kernel.org/doc/Documentation/arm/Booting

Run Lola Run

Page 26: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

fast

Chapter 2 | Linux

BootLoader

Forget about u-Boot! It is big!

Directly load Linux kernel by really small program

AFBoot (only works with XIP now)

Tiny Linux bootloader for the STM32F429-Discoveryhttps://github.com/mcoquelin-stm32/afboot-stm32

Bootloader + Kernel in less than 1sec. (I can prove)

Page 27: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 2 | Linux

BootLoader

Essentially, the boot loader should provide (as a minimum) the

following:

1. Setup and initialize the RAM.2. Initialize one serial port.

3. Detect the machine type.

4. Setup the kernel tagged list.

5. Load initramfs.

6. Call the kernel image.

https://www.kernel.org/doc/Documentation/arm/Booting

Eclipse

Page 28: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 3 | Wip

mainstream

STM32F429 support added to mainstream kernel by Maxime Coquelin at 2015

Peripherals already supported:RCC

GPIO

RNG

UART

Ethernet

DMA

On Going:USB

I2C

SDIO

WIP

Page 29: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 3 | Wip

mainstream

https://patchwork.kernel.org/project/linux-arm-kernel/list/?q=stm32WIP

Page 30: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

80386DX

32Bits MPU

1985

12 MHz to 40 MHz

FPU Co Processor 80387

STM32F429

32Bits MCU

??

Up to 180MHz

FPU

192Kb RAM

512Kb to 2Mb FLASH

MAC(Ethernet), SDIO, TFT, USB, SERIAL

tale of the tape

Clash of Titans

Page 31: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

Target

Action

Page 32: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

Tools

Toolchainhttps://launchpad.net/gcc-arm-embedded/4.9/4.9-2014-q4-major

sudo add-apt-repository ppa:terry.guo/gcc-arm-embeddedsudo apt-get updatesudo apt-get install gcc-arm-none-eabi

Open OCDgit clone git://git.code.sf.net/p/openocd/code openocd

cd openocdgit submodule init && git submodule update && ./bootstrap && ./configure --enable-stlink && make && sudo make install

Action

Page 33: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

Talk is cheap…

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

cd linuxmake ARCH=arm CROSS_COMPILE=arm-none-eabi- stm32_defconfig

make ARCH=arm CROSS_COMPILE=arm-none-eabi-

Action

Page 34: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

Page 35: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

Page 36: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

Page 37: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

GPIO

What is a GPIO?===============

A "General Purpose Input/Output" (GPIO) is a flexible software-controlled

digital signal. They are provided from many kinds of chip, and are familiar

to Linux developers working with embedded and custom hardware. Each GPIOrepresents a bit connected to a particular pin, or "ball" on Ball Grid Array

(BGA) packages. Board schematics show which external hardware connects to

which GPIOs. Drivers can be written generically, so that board setup code

passes such pin configuration data to drivers.

https://www.kernel.org/doc/Documentation/gpio/gpio.txt

Action

Page 38: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

GPIO

The famous hello world “led blink” at user space

gpio = (bank * 16) + pingpio = 6 * 16 + 14(LD4) = 110

cd /sys/class/gpio

echo 110 > export

echo out > gpio110/direction

echo 1 > gpio110/value

Action

Page 39: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

GPIO

The famous hello world “led blink” at user space (cont)

while echo blink

> do

> echo 1 > gpio110/value; sleep 1

> echo 0 > gpio110/value; sleep 1

> done

Action

Page 40: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

LEDs

LED handling under Linux========================

In its simplest form, the LED class just allows control of LEDs fromuserspace. LEDs appear in /sys/class/leds/. The maximum brightness of the

LED is defined in max_brightness file. The brightness file will set the brightness

of the LED (taking a value 0-max_brightness). Most LEDs don't have hardware

brightness support so will just be turned on for non-zero brightness settings.

https://www.kernel.org/doc/Documentation/leds/leds-class.txt

Action

Page 41: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

LEDs

The famous hello world “led blink” using the DT

Action

Page 42: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 4 | Action

Optimization

The tip of the iceberg

./scripts/bloat-o-meterAction

Page 43: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Photo credit: Derek K. Miller via VisualHunt.com / CC BY-NC

Wrap Up

“People who are really serious about software should make their own hardware”- Alan Kay

Page 44: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Chapter 5 | Wrap Up

When developing your hardware select components that are supported (device drivers)

Linux has a lot of space for optimization and tinyfication

Cannot run without external RAM(yet)

Hardware is hard, so take care of your design.

Try first in development boards

One size does not fit all! Linux may not be the best option for your case

Take away

Page 45: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

References

https://en.wikipedia.org/wiki/Microcontroller

https://events.linuxfoundation.org/sites/events/files/slides/petazzoni-device-tree-dummies.pdf

http://2net.co.uk/embedded-history

http://elinux.org/STM32

http://www.emcraft.com/stm32f429discovery/controlling-gpio-from-linux-user-space

http://elinux.org/Kernel_Size_Tuning_Guide

Page 46: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Thanks! Obrigado!

Page 47: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Sorteio

Good Luck!

Powered bySTMicroelectronics