Slide 1

Slide 1 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CIAA NXP Alcances y limitaciones de un port basado en Buildroot/Linux Ezequiel García VanguardiaSur 12 de agosto de 2015

Slide 2

Slide 2 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rompiendo el hielo

Slide 3

Slide 3 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ezequiel García ▶ Programador ▶ Sistemas embebidos Linux ▶ Desarrollo device drivers Linux kernel ▶ Contribuciones open-source ▶ Maintainer driver pxa3xx-nand (NAND) ▶ Maintainer driver stk1160 (video4linux) ▶ Soporte de SoCs ARM Marvell mvebu ▶ Soporte de SoCs MIPS Pistachio ▶ UBI block device ▶ strace para arquitectura Nios-II ▶ ... y algunas contribuciones a Buildroot y Barebox

Slide 4

Slide 4 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ezequiel García ▶ Programador ▶ Sistemas embebidos Linux ▶ Desarrollo device drivers Linux kernel ▶ Contribuciones open-source ▶ Maintainer driver pxa3xx-nand (NAND) ▶ Maintainer driver stk1160 (video4linux) ▶ Soporte de SoCs ARM Marvell mvebu ▶ Soporte de SoCs MIPS Pistachio ▶ UBI block device ▶ strace para arquitectura Nios-II ▶ ... y algunas contribuciones a Buildroot y Barebox ▶ Responsable CIAA NXP Linux

Slide 5

Slide 5 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . poll() Levanten la mano los estudiantes

Slide 6

Slide 6 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . poll() Levanten la mano los que usan Windows en forma regular

Slide 7

Slide 7 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . poll() Levanten la mano los que usan Linux en forma regular

Slide 8

Slide 8 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¿De qué vamos a hablar?

Slide 9

Slide 9 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Para los que vieron luz y entraron 1. Componentes del port Linux para la CIAA NXP

Slide 10

Slide 10 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Para los que vieron luz y entraron 2. Alcances. Es decir, todas las cosas geniales que podemos hacer.

Slide 11

Slide 11 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Para los que vieron luz y entraron 3. Limitaciones. Es decir, todas las cosas geniales que NO podemos hacer.

Slide 12

Slide 12 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Empezamos con algunas definiciones

Slide 13

Slide 13 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linux Todos sabemos exactamente qué es Linux...

Slide 14

Slide 14 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linux Todos sabemos exactamente qué es Linux...¿o no?

Slide 15

Slide 15 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Todos los sistemas embebidos basados en Linux tienen más o menos los mismos componentes fundamentales ▶ Bootloader ▶ Linux Kernel ▶ Filesystem

Slide 16

Slide 16 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Todos los sistemas embebidos basados en Linux tienen más o menos los mismos componentes fundamentales ▶ Bootloader ▶ Linux Kernel ▶ Filesystem ¿Eso es todo? ¿No nos falta algo?

Slide 17

Slide 17 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Todos los sistemas embebidos basados en Linux tienen más o menos los mismos componentes fundamentales ▶ Bootloader ▶ Linux Kernel ▶ Filesystem ¿Eso es todo? ¿No nos falta algo? ▶ Toolchain

Slide 18

Slide 18 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Todos los sistemas embebidos basados en Linux tienen más o menos los mismos componentes fundamentales ▶ Bootloader ▶ Linux Kernel ▶ Filesystem ¿Eso es todo? ¿No nos falta algo? ▶ Toolchain Cada uno de estos componentes es desarrollado por un grupo de personas diferentes, y en forma más o menos independiente.

Slide 19

Slide 19 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¿Qué hace cada componente?

Slide 20

Slide 20 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bootloader El objetivo del bootloader es simple: encontrar y cargar un kernel.

Slide 21

Slide 21 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bootloader El objetivo del bootloader es simple: encontrar y cargar un kernel. Una vez que se carga el kernel, el bootloader no permanece residente en memoria.

Slide 22

Slide 22 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kernel El objetivo del kernel es bastante menos simple: manejar el hardware y administrar el acceso a los recursos de CPU, memoria y periféricos.

Slide 23

Slide 23 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kernel El objetivo del kernel es bastante menos simple: manejar el hardware y administrar el acceso a los recursos de CPU, memoria y periféricos. Permanece residente en memoria durante toda la vida del sistema.

Slide 24

Slide 24 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filesystem El Filesystem tiene todos los programas y aplicaciones de usuario necesarios para que el sistema haga algo útil. /lib/modules/x.y.z/ /usr/bin/uptime /usr/bin/find /bin/cat /bin/cp /bin/sh /etc/init.d/...

Slide 25

Slide 25 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filesystem Vemos que un filesystem se compone de quichicientos paquetes diferentes. Necesitamos una herramienta para: ▶ seleccionar ▶ configurar ▶ compilar ▶ instalar

Slide 26

Slide 26 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filesystem Busybox: La navaja suiza de los embebidos Linux. Provee más de 300 herramientas típicas de Unix, en un único binario. https://en.wikipedia.org/wiki/BusyBox

Slide 27

Slide 27 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¿De dónde obtenemos cada componente?

Slide 28

Slide 28 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Cada componente que usamos en un proyecto o producto tiene una fuente u origen. ▶ Bootloader ▶ Oficial o upstream ▶ Community fork ▶ Vendor fork

Slide 29

Slide 29 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Cada componente que usamos en un proyecto o producto tiene una fuente u origen. ▶ Bootloader ▶ Oficial o upstream ▶ Community fork ▶ Vendor fork ▶ Linux Kernel ▶ Oficial o upstream ▶ Community fork ▶ Vendor fork

Slide 30

Slide 30 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Cada componente que usamos en un proyecto o producto tiene una fuente u origen. ▶ Bootloader ▶ Oficial o upstream ▶ Community fork ▶ Vendor fork ▶ Linux Kernel ▶ Oficial o upstream ▶ Community fork ▶ Vendor fork ▶ Filesystem ▶ Buildroot ▶ Yocto ▶ Debian, Fedora, etc.

Slide 31

Slide 31 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Cada componente que usamos en un proyecto o producto tiene una fuente u origen. ▶ Bootloader ▶ Oficial o upstream ▶ Community fork ▶ Vendor fork ▶ Linux Kernel ▶ Oficial o upstream ▶ Community fork ▶ Vendor fork ▶ Filesystem ▶ Buildroot ▶ Yocto ▶ Debian, Fedora, etc. ▶ Hecho a mano (aunque espero que nadie lo haga)

Slide 32

Slide 32 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Las elecciones para nuestra querida CIAA NXP

Slide 33

Slide 33 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Cada componente que usamos en un proyecto o producto tiene una fuente u origen. ▶ Bootloader ▶ Oficial o upstream ▶ Community fork ▶ Vendor fork ←− ▶ Linux Kernel ▶ Oficial o upstream ←− ▶ Community fork ▶ Vendor fork ▶ Filesystem ▶ Buildroot ←− ▶ Yocto ▶ Debian, Fedora, etc. ▶ Hecho a mano

Slide 34

Slide 34 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . U-Boot Usamos un ”vendor fork”que ofrece una empresa llamada Emcraft. El repositorio está disponible en github: https://github.com/EmcraftSystems/u-boot

Slide 35

Slide 35 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linux Usamos Linux upstream, con algunos parches encima.

Slide 36

Slide 36 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Buildroot Usamos Buildroot upstream, con algunos parches encima.

Slide 37

Slide 37 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Toolchain Usamos una toolchain especial para cortex-M, OSELAS de Pengutronix. http://www.pengutronix.de/oselas/toolchain/

Slide 38

Slide 38 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . uCLinux uCLinux nació como un fork del kernel. Breve historia: ▶ 1991: Nace Linux. ▶ 1998: Release de un kernel basado en Linux 2.0.33, para Motorola DragonBall. ▶ 2002: Se integra al Linux oficial en la versión v2.5.46.

Slide 39

Slide 39 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . uCLinux uCLinux nació como un fork del kernel. Breve historia: ▶ 1991: Nace Linux. ▶ 1998: Release de un kernel basado en Linux 2.0.33, para Motorola DragonBall. ▶ 2002: Se integra al Linux oficial en la versión v2.5.46. ▶ 2015: ¡Hace más de una década que Linux soporta plataformas sin MMU!

Slide 40

Slide 40 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . uCLinux Como vemos esto pasó hace mucho tiempo.

Slide 41

Slide 41 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . uCLinux Como vemos esto pasó hace mucho tiempo. Esto pasó hace tanto tiempo, ¡que no se había inventado git!

Slide 42

Slide 42 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . uCLinux Actualmente, uCLinux es una distribución de paquetes fuente, orientada a sistemas sin MMU. El proyecto no tiene demasiada popularidad, aunque sigue activo.

Slide 43

Slide 43 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Repasando

Slide 44

Slide 44 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux La CIAA NXP tiene los mismos componentes fundamentales que cualquier otro sistema embebido. ▶ Bootloader ▶ Linux Kernel ▶ Filesystem

Slide 45

Slide 45 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Una ventaja a medias Usar el mismo código base que se usa en el resto de los sistemas embebidos, significa que la cantidad de usuarios y desarrolladores es enorme.

Slide 46

Slide 46 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Una ventaja a medias Usar el mismo código base que se usa en el resto de los sistemas embebidos, significa que la cantidad de usuarios y desarrolladores es enorme. Usar el mismo código base que se usa en el resto de los sistemas embebidos, no necesariamente implica que esté muy testeado.

Slide 47

Slide 47 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Linux v4.3 soportará varios periféricos de la CIAA: ▶ GPIO ▶ UART ▶ Ethernet ▶ USB ▶ RTC ▶ SPI/SSP ▶ SPIFI ▶ ...

Slide 48

Slide 48 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ecosistema Embedded Linux Y la lista sigue: ▶ ... ▶ DMA ▶ I2C ▶ Watchdog ▶ PWM basado en SCT Para más detalles consultar: https://github.com/manabian/linux-lpc/wiki/Status

Slide 49

Slide 49 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Requisitos mínimos

Slide 50

Slide 50 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Requisitos mínimos ¿Qué se necesita para que funcione Linux?

Slide 51

Slide 51 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Requisitos mínimos ¿Qué se necesita para que funcione Linux? ▶ CPU

Slide 52

Slide 52 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Requisitos mínimos ¿Qué se necesita para que funcione Linux? ▶ CPU ▶ RAM

Slide 53

Slide 53 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Requisitos mínimos ¿Qué se necesita para que funcione Linux? ▶ CPU ▶ RAM ▶ Algunos periféricos básicos

Slide 54

Slide 54 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RAM Necesitamos 4 MiB como mínimo.

Slide 55

Slide 55 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RAM Necesitamos 4 MiB como mínimo. Necesitamos 8 o 16 MiB para hacer algo útil.

Slide 56

Slide 56 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MMU No hace falta.

Slide 57

Slide 57 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MMU No hace falta. ¿Magia negra?

Slide 58

Slide 58 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MMU No hace falta. ¿Magia negra? Portabilidad

Slide 59

Slide 59 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MMU ¿Qué es la MMU?. ▶ Conversión entre direcciones virtuales y direcciones físicas. Esto permite que cada proceso corra en su propio espacio de direcciones, en forma aislada al resto del sistema. ▶ Protección ante accesos a direcciones no autorizadas.

Slide 60

Slide 60 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Portabilidad (la magia negra) /* Un poco simplificado. */ #ifdef CONFIG_MMU unsigned long copy_from_user(...); unsigned long copy_to_user(...); unsigned long clear_user(...); #else #define copy_from_user(to,from,n) (memcpy(to, from, n), 0) #define copy_to_user(to,from,n) (memcpy(to, from, n), 0) #define clear_user(addr,n) (memset(addr, 0, n), 0) #endif

Slide 61

Slide 61 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Portabilidad (la magia negra) /* En arch/arm/mm/Makefile */ ifneq ($(CONFIG_MMU),y) obj-y += nommu.o endif /* En arch/arm/mm/nommu.c */ void *__arm_ioremap(phys_addr_t phys_addr, size_t size, unsigned int mtype) { return phys_addr; }

Slide 62

Slide 62 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitaciones de Linux en la CIAA NXP

Slide 63

Slide 63 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitaciones: MMU No hay MMU.

Slide 64

Slide 64 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitaciones: Stack fijo La MMU es necesaria para la implementación de un stack variable. Sin MMU, los procesos no tienen stack variable, sino estático.

Slide 65

Slide 65 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitaciones: threads ¿Tenemos alguna implementación de POSIX threads?

Slide 66

Slide 66 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitaciones: threads ¿Tenemos alguna implementación de POSIX threads? No en forma oficial, pero hay algunas implementaciones extra-oficiales (out-of-tree).

Slide 67

Slide 67 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitaciones: fork() Sin MMU no podemos implementar fork().

Slide 68

Slide 68 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitaciones: fork() Sin MMU no podemos implementar fork(). Para ejecutar procesos, podemos reemplazar fork() por vfork().

Slide 69

Slide 69 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitaciones: referencias y bibliografías Para más detalles acerca de estas limitaciones, hay extensa bibliografía al respecto. ▶ http://www.linuxjournal.com/article/7221 ▶ http://free-electrons.com/doc/uclinux_introduction.pdf ▶ http://events.linuxfoundation.org/sites/events/files/ slides/optimize-uclinux.pdf ▶ http://events.linuxfoundation.org/sites/events/files/ slides/uClinux%20ELC_43_small.pdf ▶ http://electronicdesign.com/embedded/practical-advice- running-uclinux-cortex-m3m4

Slide 70

Slide 70 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusión

Slide 71

Slide 71 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusión 1. Componentes del port Linux para la CIAA NXP. Se usan los mismos que en cualquier sistema embebido Linux (con una configuración especial)

Slide 72

Slide 72 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusión 2. Alcances. Disponemos de una cantidad importante de features, drivers y utilidades.

Slide 73

Slide 73 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusión 2. Alcances. Disponemos de una cantidad importante de features, drivers y utilidades. Tenemos soporte para casi todos los bloques de hardware del MCU NXP LPC4337.

Slide 74

Slide 74 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusión 2. Alcances. Disponemos de una cantidad importante de features, drivers y utilidades. Tenemos soporte para casi todos los bloques de hardware del MCU NXP LPC4337. No tenemos que aprender nuevas APIs, sino que podemos usar las mismas que en cualquier otro Linux.

Slide 75

Slide 75 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusión 3. Limitaciones. Es decir, todas las cosas geniales que NO podemos hacer. ▶ No hay MMU ▶ Los procesos tienen un stack fijo ▶ No hay fork. Para lanzar un proceso se usa vfork + exec ▶ No hay pthreads

Slide 76

Slide 76 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¿Preguntas? Ahora o en cualquier momento :-) [email protected] [email protected]