Académique Documents
Professionnel Documents
Culture Documents
Tiago Maluta
Voc livre para: 1 Para copiar, distribuir e apresentar este trabalho 2 Fazer trabalhos derivados 3 Fazer uso comercial deste trabalho Com as seguintes condies: Atribuio. Voc deve dar crdito ao autor
Compartilhamento igualitrio. Se voc alterar, transformar, fizer algum trabalho derivado deste, o resultado deve estar em uma licena idntica a esta.
http://creativecommons.org/licenses/by-sa/3.0/
Prembulo
Poder executar vrios sistemas em uma mesma mquina
Estatsticas...
Motivao
Conhecer outra tecnologia sem precisar investir em equipamentos (hardware). O cdigo aberto, pode-se aprender estudando ele.
ARM
Advanced RISC Machines
Muito utilizado nas telecomunicaes. A maioria dos smartphones utilizam plataformas que possuem o processador ARM. Pr: Verstil, com o core do processador, os fabricantes tem facilidade em personalizar implementaes. Contra: Preo das ferramentas de desenvolvimento.
Filosofia
RISC
Especficos para sistemas embarcos, existe um set de instrues chamado Thumb que proporciona mais facilidade no desenvolvimento.
Linux
Software GNU
Em sistemas embarcados dificilmente instala-se uma distruibio na forma tradicional em que conhecemos, geralmente so adaptaes bem especficas que adequam as limitaes de memria, interface com o usurio e conectividade.
Compilar o Kernel
#include <stdio.h>
teste.c
Cdigo-fonte do kernel
printf(HelloSECOMP);
Foi desenvolvido um programa chamado make para facilitar o processo de compilao. Agora toda receita de como compilar fica em um arquivo chamado Makefile $ make
O resultado desse cdigo-fonte compilado a imagem do kernel. Ou seja, nada mais que um programa. A diferena que este programa o responsvel por alocar e gerenciar os recursos do dispositivo.
Instalando o QEMU
Verso utilizada: QEMU PC emulator version 0.9.0, Copyright (c) 2003-2007 Download: http://fabrice.bellard.free.fr/qemu/qemu-0.9.0.tar.gz
M)
(< 2.0
Instalao (via codigo-fonte): $ $ $ $ $ tar zxvf qemu-0.9.0.tar.gz cd qemu-0.9.0 ./configure make make install
Modos de operao
Machine Emulator
QEMU
User-space Simulator
Virtualizer
CPUs suportadas
Como no PC (x86) ?
ON / RESET Inicializao do Computador Estgio 1: bootloader Estgio 2: bootloader Kernel Init Operao BIOS MBR LILO, GRUB, etc Linux User-space
Lista de Material
Distribuio Linux: Gentoo Emulador: QEMU Compilador Cruzado
Compilador Cruzado
Descompacte em uma pasta: /opt Atualize as variveis de ambiente: # export PATH=/opt/arm-2007q1/bin:$PATH No final, o acesso fica assim: # arm-none-linux-gnueabi-<APLICATIVO>
Exemplo:
# arm-none-linux-gnueabi-gcc # arm-none-linux-gnueabi-g++
Lista de Material
Distribuio Linux: Gentoo Emulador: QEMU Compilador Cruzado Cdigo-fonte do Linux
Cdigo-fonte do Kernel
Cdigo-fonte do Kernel
Compilador Cruzado
Binrio (ARM)
Descompactando
# make menuconfig
# make help
Configuraes padro, para alguns tipos plataformas ARM.
$ cp arch/arm/boot/zImage \ /path/to/directory/
Exemplo: init
Suponha o codigo:
#include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]) { printf("Ol SECOMP!\n"); sleep(999999999); }
Prvia
arm-none-linux-eabi-gcc -static hello.c -o init echo init | cpio -o -H newc | gzip > test.cpio.gz # testando no qemu qemu-system-arm -kernel zImage.integrator -initrd test.cpio.gz
O que o cpio ?
GNU cpio is a tool for creating and extracting archives, or copying files from one place to another. It handles a number of cpio formats as well as reading and writing tar files. This is the first edition of the GNU cpio documentation and is consistant with GNU cpio 2.5.
O qu importante saber? - Funcionamento semelhante ao gnu tar - um formato simples e limpo - cpio um padro
Parmetros
`newc' The new (SVR4) portable format, which supports file systems having more than 65536 i-nodes.
SVR4 System V Release 4.0 was announced on October 18, 1988 and was released in 1990. A joint project of Unix System Laboratories and Sun Microsystens, it combined technology from Release 3 as well as 4.3BSD, Xenix and SunOS. http://en.wikipedia.org/wiki/SVR4#SVR4
tar is ugly as hell and not going to be supported on the kernel side
(Al Viro, desenvolvedor do kernel)
Lista de Material
Distribuio Linux: Gentoo Emulador: QEMU Cdigo-fonte do Linux Compilador Cruzado BusyBox
Busybox
Um monte de programas num arquivo s
Download http://www.busybox.net/downloads/ make menuconfig Opes interessantes: BusyBox Settings -> Build Options -> BuildBox as a static binary (no shared libs) Edite o Makefile
Estrutura de diretrios
Pasta raiz
/
etc/ tmp/ sbin/ usr/ root/ bin/ lib/
/
etc/ tmp/ sbin/ usr/ root/ bin/ lib/
Contm as configuraes do sistema: Exemplo: echo root:x:0: > group echo root::0:0:root:/root:/bin/sh > passwd echo SECOMP 2007 > issue
/
etc/ tmp/ sbin/ usr/ root/ bin/ lib/
/
etc/ tmp/ sbin/ usr/ root/ bin/ lib/
Contm alguns dos executveis bsicos do sistema: mdev, ifconfig, halt, reboot, etc; Comentrio: Se o busybox for utilizado, esses comandos so apenas links simblicos.
/
etc/ tmp/ sbin/ usr/ root/ bin/ lib/
/
etc/ tmp/ sbin/ usr/ root/ bin/ lib/
/
etc/ tmp/ sbin/ usr/ root/ bin/ lib/
Contm alguns dos executveis bsicos do sistema: cat, chmod, chown, cp, mkdir, mknod, ping, dd, df, sh, vi, touch, rmdir, kill, etc; Aqui fica o nico executrio de verdade, o busybox, os outros programas so links simblicos para o busybox. Exemplo: cp -> busybox
/
etc/ tmp/ sbin/ usr/ root/ bin/ lib/
Arquivo: /etc/init.d/rcS
#! /bin/sh mkdir -p /proc mount -t proc proc /proc mkdir -p /sys mount -t sysfs sysfs /sys mkdir -p /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s hostname qemu
Finalizando a Imagem
cd root/ ; find . | cpio -o -H newc | gzip > root.img
O que este comando faz: 1 2 3 4 5 Entre na pasta root Busca todo mundo (recursivo) Gera o arquivo cpio no padro newc Comprime com o gzip Grava tudo isso no arquivo root.img
Optimizaes
FAQ #1
What are some key differences between the ARM port and the main x86 branch? Russell King: We have around 120 machine types, many of them quite different. It isn't possible to build one kernel for everything, although we try to allow a kernel to run on as many similar machines as possible.
Quais so algumas das principais diferenas no kernel do ARM e do x86? Russell King: Ns temos por volta de 120 tipos de mquinas, muitas delas bem diferentes. No possvel contruir um kernel nico para todas, embora ns tentemos permitir um kernel, na medida do possvel, executar em muitas dessas mquinas.
FAQ #2
Onde eu posso encontrar informaes?
Documentao do Kernel
* baixe o cdigo-fonte e acesse a pasta Documentation/
www.kernel.org www.arm.linux.org.uk
Outros Links
Em ingls: Site do projeto GNU - www.gnu.org Compilador cruzado - www.codesourcery.com BusyBox - www.busybox.org LinuxDevices - www.linuxdevices.com