Arrancando Raspberry Pi (RPi) en Debian 2014/05/23 Miguel Mateo Contenido Objetivos ● Proceso de arranque de RaspBerry-Pi ● Proceso de arranque en Debian Wheezy ● armpower.blogs.upv.es 2 Objetivo ● ● Describir el sistema de arranque de Raspberry-PI Conocer y modificar los ficheros de arranque de Raspberry-PI ● ● ● Conocer el mecanismo de arranque de LINUX ● Describir las características de arranque del kernel ● Estudiar y modificar la inicialización de aplicaciones en Debian Utilizar programas para acceder al HW y modificar su configuración ● ● Overclocking Modificar la frecuencia de funcionamiento de la CPU Utilizar las X de forma remota desde un PC armpower.blogs.upv.es 3 Proceso de arranque Formato con NOOBS ● Particiones después de arrancar con NOOBS – ● Partición FAT: la de arranque – ● Bootcode.bin, recovery.elf , recovery.img Partición ext4fs de 32MB: configuración – ● Perdemos ~350MB: configuración y recuperación Noobs.conf Esto es antes de instalar NADA armpower.blogs.upv.es 5 NOOBS + Raspbian Tabla de particiones tras arrancar Raspbian en NOOBS cfdisk (util-linux 2.20.1) Disk Drive: /dev/mmcblk0 Size: 7969177600 bytes, 7969 MB Heads: 4 Sectors per Track: 16 Cylinders: 243200 Name Flags Part Type FS Type [Label] Size (MB) --------------------------------------------------------------------------Primary Free Space 4,20 mmcblk0p1 Primary vfat [RECOVERY] 117,81 * Pri/Log Free Space 3,83 * mmcblk0p5 NC Logical vfat [BOOT] 67,11 mmcblk0p6 NC Logical ext4 [root] 7742,69 mmcblk0p3 Primary ext4 [SETTINGS] 33,56 La particiones más importantes son las etiquetadas como [BOOT] y [root], que por defecto están montadas... ¿dónde? ¿Qué hay en cada partición? ● RECOVERY – ● ● SETTINGS: – Utilizada por NOOBS para guardar la configuración de cada sistema operativo instalado – Al ser ext4: difícil acceder desde Windows BOOT: – ● Programas de arranque de NOOBS (vfat) partición de arranque de Raspbian (vfat) Root – Programas y ficheros de Raspbian RECOVERY y BOOT ● Las dos son particiones de arranque por lo que tienen ficheros parecidos – ● ● Busca qué ficheros son iguales y de qué tipo son (orden file) La partición RECOVERY NO se debe editar La partición BOOT permite modificar el funcionamiento inicial de la placa (fase 2) – Edición directa de los archivos – Uso de raspi-config Archivos de BOOT bootcode.bin ● cmdline.txt Extensiones de archivo: config.txt bin : binario de copia a memoria fixup_cd.dat elf: ejecutable fixup.dat issue.txt dat: archivos de configuración binarios kernel_emergency.img img: imagen del kernel de Linux fixup_x.dat kernel.img LICENSE.oracle os_config.json start_cd.elf start.elf start_x.elf ● Programas: – raspi-config – vcgencmd Arranque: manos a la obra ● ● Buscar qué opciones se tienen activadas en config.txt Cambiar una a una las siguientes opciones y rearrancar: – hdmi_force_hotplug – disable_overscan – arm_frec Atender al profesor sobre cómo comprobar cada modificación Arranque de Linux ● ● Linux: Sistema operativo basado en un kernel monolítico modular – Monolítico: todas las funciones y variables se pueden acceder desde cualquier punto – Modular: para su construcción y compilación se ha dividido el sistema en elementos más o menos independientes Kernel.img : imagen comprimida del kernel de Linux – Debe incluir como mínimo lo necesario para arrancar – Las capacidades y funcionamiento del sistema operativo pueden cambiarse en ejecución – El sistema operativo no hace “nada” perceptible por los usuarios Proceso ● Un proceso es un programa en ejecución – ● ● Linux: Multiproceso, multiusuario Tabla de procesos: guarda información sobre cada proceso. Entre otras cosas – PID y UID del proceso – Información del estado de ejecución – Información sobre los recursos que usa o ha usado el proceso La tabla de procesos en Linux se ha hecho accesible mapeandola como ficheros en /proc Procesos (2) ● ● ● Relación jerárquica entre procesos – Única relación posible: padre-hijo – El primer proceso recibe el nombre “init” (PID=1) Tipos de procesos “especiales” – Daemons – Huérfanos → En realidad NO pueden existir – Zombies Los intérpretes de órdenes (shells) NO forman parte de LINUX Discutamos un poco... ● ● ● ● ¿Cuántos procesos pueden estar ejecutando un programa en LINUX? ¿Cuántos programas puede ejecutar un proceso? ¿Cuántos padres diferentes puede tener un proceso? Cuando un proceso acaba de ejecutar todo el código de un programa... ¿qué le pasa? ¿y mis programas cuándo? INIT ● Primer proceso que arranca el Sistema operativo – ● Su PID es 1, el valor más pequeño posible Tres fases en la “vida” de INIT – Inicialización del sistema ● Siempre es init quien la empieza, aunque existen diferentes esquemas para realizarla: init.d, upstart, serviced – Realización de limpieza – Apagado del sistema ● Tienen que realizarse en consonancia con el esquema de arranque Init.d ● Basado en SystemV – ● El más antiguo y en fase de sustitución Fases: – Leer fichero /etc/inittab ● Normalmente esta fase determina “el nivel de ejecución” – Ejecutar los shell-scripts del nivel de inicio de ejecución (arranque) para que INICIEN servicios – Ejecutar los shell-scripts del nivel de ejecución escogido para que INICIEN servicios – Esperar cambio de nivel (de nivel-j a nivel-k) – Ejecutar los shell-scripts del nivel-j para que PAREN servicios – Ejecutar los shell-scripts del nivel-k para que INICIEN servicios init.d ● Basado en System V – ● El más antiguo y en fase de sustitución Fases: – Leer fichero /etc/inittab ● Normalmente esta fase determina “el nivel de ejecución” – Ejecutar los shell-scripts del nivel de inicio de ejecución (arranque) para que INICIEN servicios – Ejecutar los shell-scripts del nivel de ejecución escogido para que INICIEN servicios – Esperar cambio de nivel (de nivel-j a nivel-k) – Ejecutar los shell-scripts del nivel-j para que PAREN servicios – Ejecutar los shell-scripts del nivel-k para que INICIEN servicios init.d : archivos y directorios ● /etc/inittab ● /etc/init.d ● – Directorio que contiene los scripts de los servicios. – Parámetros típicos: start, stop, reload, restart... /etc/rcN.d – Directorio que contiene enlaces para ejecutar los scripts del nivel N ● /etc/rcN.d/K23ServDaemon ● /etc/rcN.d/S23ServicioDaemon – Enlaces del nivel N para gestionar un servicio usando el script ServicioDaemon – El enlace que empieza por S es el usado para iniciar el servicio – El enlace que empieza por K es el usado para terminar el servicio – Los servicios se llaman por orden del número de dos cifras que sigue a la primera letra /etc/rc.local ● ● Shell script que se ejecuta al final de algunos niveles Suele usarse para ejecutar programas cuando no sabemos/queremos crear un servicio en init.d para esa acción ¿En qué niveles se ejecuta en Raspbian? ¿Qué hace por defecto? Y ahora... ¿qué? ● ● ● Depende del nivel de ejecución y de inittab: – inittab: especifica que consolas y terminales – Se pueden haber arrancado servicios de login locales (xdm) o remotos (sshd,telnetd,vncd) Esto sólo son procesos que permiten identificarse (login) Proceso de login: comprueba nombre de usuario y contraseña ¿usuarios? ¿contraseñas?.... Usuarios y contraseñas ● Ficheros /etc/passwd : información pública de usuarios /etc/shadow : alamcen de contraseñas /etc/login.defs : valores por defecto al crear usua. ● Programas útiles adduser : permite crear un nuevo usuario passwd : cambio de contraseña usermod : modificación de datos de un usuario ● Para investigar más: pam Proceso de login ● ● Depende del shell que arranquemos – Los usuarios se leen de /etc/passwd – El acceso se permite según pam LOGIN en terminal no gráfico – Se lee qué shell quiere el usuario de /etc/passwd – Si es bash ● ● ● Se ejecuta el fichero global /etc/profile Se ejecuta $HOME/.profile Se ejecuta $HOME/.bash_rc – ¡¡¡Mentira!!!! Este fichero se ejecuta cada vez que creamos un bash Comprobando ● Añadir la siguiente línea a ~/.profileq (echo `date`"-->"`who -m` ) >> ~/accesos_profile ● Añadir la siguiente línea a ~/.bash_rc (echo `date`"-->"`who -m` ) >> accesos_profile ● Formas de probar: – Conectando por ssh: ¿qué pasa? – Abriendo ventanas de terminal: ¿qué pasa? – Haciendo un login gráfico: ¿qué pasa? Login gráfico ● ● Si al inicio hemos habilitado lightdm o nos conectamos directamente a servidor gráfico NO se ejecuta nuestro shell como primero proceso – ● No se ejecuta lo que tengamos en .profile Cada login gráfico tiene sus archivos de configuración globales y propios del usuario – FreeDesktop: ficheros siguiendo estandar xdg /etc/xdg $HOME/.config lxsession ● ● Este es el programa que arranca por defecto en local lightdm Ficheros de autostart /etc/xdg/lxsession/LXDE/autostart ~/.config/lxsession/LXDE/autostart ● Comprobando Instalar tuxeyes: apt-get install tuxeyes Que se ejecute al principio de las X... – Arrancar las X... MobaXterm y lxsession ● Ejecutar lo siguiente en el MobaXterm: export DISPLAY=:36; start-stop-daemon -q -b -S --exec /bin/XWin.exe -- -silent-dup-error -notrayicon -nolisten inet6 -clipboard -ac -fp /usr/share/fonts/misc $DISPLAY && /bin/waitforX && ssh -Y pi@192.168.x.x "lxsession" cpu_governor /sys – Directorio virtual con información sobre el sistema /sys/devices/system/cpu – ● Información sobre la cpu Cpufreq/scaling_governor – Modifica la frecuencia de la cpu – Existen valores máximos y mínimos de frecuencia – Por defecto: ondeman – Opciones: conservative ondemand userspace powersave performance – Para cambiarlo hay que ser superusuario. Id al directorio y ejecutar: echo performance | sudo tee scaling_governor