1. Desarrollo de entornos Linux Embebidos Formación in Company Linux kernel and driver development training Juan Sánchez - jsancheznav@gmail.com
2.
3. Semana 2 de 4 / Sesión 3 de 8 Agenda Juan Sánchez - [email_address] Módulos del kernel de linux Bloqueo: proceso, progr, parado e interrupción Introducción al kernel de linux (1h) Detalles del arranque del núcleo Dispositivos de caracter. Kernel driver frameworks Conf, compilación y arranque del núcleo de linux Gestión memoria y acceso al hardware ✓ Controladores. Dispositivos, modelos y depuración Dispositivos DMA Estudio de un tipo específico de controlador (3h) 10 Mapa desarrollo de núcleo 2.6 7 6 5 4 3 2 1 9 8
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14. Compilación Instalación de los módulos compilados previamente en /lib/modules/ Creación de la imagen iniciable del núcleo bzImage = Imagen Grande comprimida con gzip Borrado ficheros de salida de compilaciones precedentes (core files, system map files, …) Your own footer make clean make dep make bzImage make modules make modules_ install Configuración, compiliación y arranque del núcleo Compilación de los módulos (contralores, fs, …) Revisión dependencias Creación .depend en cada directorio
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25. #!/bin/bash RDSIZE=4000 BLKSIZE=1024 dd if=/dev/zero of=/tmp/ramdisk.img bs=$BLKSIZE count=$RDSIZE /sbin/mke2fs -F -m 0 -b $BLKSIZE /tmp/ramdisk.img $RDSIZE mount /tmp/ramdisk.img /mnt/initrd -t ext2 -o loop=/dev/loop0 cd /mnt/initrd mkdir bin sys dev proc # Grab busybox and create the symbolic links pushd /mnt/initrd/bin cp /usr/local/src/busybox-1.1.1/busybox . ln -s busybox ash ln -s busybox mount ln -s busybox echo ln -s busybox ls ln -s busybox cat ln -s busybox ps ln -s busybox dmesg ln -s busybox sysctl popd Configuración, compiliación y arranque del núcleo Creación de initrd Juan Sánchez - jsancheznav@gmail.com
26. cp -a /dev/console /mnt/initrd/dev cp -a /dev/ramdisk /mnt/initrd/dev cp -a /dev/ram0 /mnt/initrd/dev cp -a /dev/null /mnt/initrd/dev cp -a /dev/tty1 /mnt/initrd/dev cp -a /dev/tty2 /mnt/initrd/dev pushd /mnt/initrd ln -s bin sbin popd cat >> /mnt/initrd/linuxrc << EOF #!/bin/ash echo echo "Simple initrd is active" echo mount -t proc /proc /proc mount -t sysfs none /sys /bin/ash --login EOF chmod +x /mnt/initrd/linuxrc umount /mnt/initrd gzip -9 /tmp/ramdisk.img cp /tmp/ramdisk.img.gz /boot/ramdisk.img.gz Configuración, compiliación y arranque del núcleo Creación de initrd Juan Sánchez - jsancheznav@gmail.com