Escolar Documentos
Profissional Documentos
Cultura Documentos
1/13
2/13
#preparar pen
3/13
#como root, assumindo que a pen corresponde a /dev/sdb
umount /dev/sdb*
dd if=/dev/zero of=/dev/sdb bs=1M count=4 conv=fsync
fdisk /dev/sdb
# criar partição de arranque com 20 MB ('n','p',1,1,+20M, 'a',1)
# criar outra partição com o restante espaço
# concretizar alterações e terminar ('w')
LABEL pico
KERNEL linux26
APPEND ramdisk_size=2048 initrd=picord.gz
LABEL micro
KERNEL linux26
APPEND ramdisk_size=2048 initrd=micrord.gz vga=789
LABEL mini
KERNEL linux26
APPEND ramdisk_size=2048 initrd=minird.gz vga=789
LABEL full
KERNEL linux26
APPEND ramdisk_size=2048 initrd=fullrd.gz vga=789 init=/sbin/init
cd ..
4/13
# pico
# Criar initrd
dd if=/dev/zero of=initrd.img bs=1k count=2000
mkfs.ext2 initrd.img
# Montar initrd
mkdir initrd
mount initrd.img initrd -o loop
cd initrd
#fazer download do ficheiro ash para o directório actual
#
#criar ficheiro linuxrc com o conteúdo abaixo:
#!/ash
# Beep
echo -e "\007"
# Hello
echo ""
echo " Pico ARCOM Linux"
echo ""
echo " ISEP, 2009"
echo ""
echo " Nº dos Alunos"
echo ""
# Shell
/ash
#testar no qemu
qemu -k pt -hda /dev/sdb1 -hdb /dev/sdb2
#testar na ebox
5/13
# micro
# Montar initrd
gunzip initrd.img.gz
mount initrd.img initrd -o loop
cd initrd
#instalar busybox
mkdir -p bin
cd bin
#fazer download do ficheiro busybox
#
chmod 755 busybox
#Coreutils
ln -s busybox cat
ln -s busybox df
ln -s busybox echo
ln -s busybox ls
ln -s busybox pwd
ln -s busybox sleep
ln -s busybox tty
#Shell
ln -s busybox ash
#Editors
ln -s busybox vi
#Linux Module Utilities
ln -s busybox insmod
ln -s busybox lsmod
#Linux System Utilities
ln -s busybox mount
cd ..
mkdir -p proc
mknod dev/null c 1 3
6/13
# alterar linuxrc
#!/bin/ash
# Beep
echo -e "\007"
# Hello
echo ""
echo " Micro ARCOM Linux"
echo ""
echo " ISEP, 2009"
echo ""
echo " Nº dos Alunos"
echo ""
PATH=/bin
export PATH
# Shell
exec /bin/ash </dev/tty1 >/dev/tty1 2>&1
cat linuxrc
cd ..
umount initrd
gzip initrd.img
umount /dev/sdb1
mount /dev/sdb1 pen
cp initrd.img.gz pen/micrord.gz
umount pen
#testar
7/13
# mini
gunzip initrd.img.gz
mount initrd.img initrd -o loop
cd initrd
mknod dev/sda b 8 0
mknod dev/sda1 b 8 1
mknod dev/sda2 b 8 2
mknod dev/hda b 3 0
mknod dev/hdb b 3 64
mkdir -p modules
cd modules
# extrair o conteúdo do ficheiro initrd_kmod.tgz
tar xzvf ../../initrd_kmod.tgz
chmod 755 ide.sh
cd ..
mkdir -p pendrive
mkdir -p proc
# Alterar linuxrc
#!/bin/ash
# Beep
echo -e "\007"
# Hello
echo ""
echo " Mini ARCOM Linux"
echo ""
echo " ISEP, 2009"
echo ""
echo " Nº dos Alunos"
echo ""
PATH=/bin
export PATH
# Insert Modules
insmod /modules/usbcore.ko
insmod /modules/usb-libusual.ko
insmod /modules/usb-storage.ko
insmod /modules/ohci-hcd.ko
insmod /modules/fat.ko
insmod /modules/vfat.ko
#teste na ebox
#sleep 10
#mount -t vfat /dev/sda1 /pendrive
#teste no qemu
/modules/ide.sh
mount -t vfat /dev/hda /pendrive
# Shell
exec /bin/ash </dev/tty1 >/dev/tty1 2>&1
8/13
cat linuxrc
# Desmontar initrd
cd ..
ls -la
umount initrd
gzip initrd.img
# copiar initrd para pendrive
umount /dev/sdb1
mount /dev/sdb1 pen
cp initrd.img.gz pen/minird.gz
ls -la
# Desmontar Pendrive
umount pen
#testar.
###########################################################################
# full
mkdir -p pen_root
# montar pendrive em pen_root
umount /dev/sdb2
mount /dev/sdb2 pen_root
df
# fazer download do ficheiro sda2_files.tgz
#
cd pen_root
tar xzf ../sda2_files.tgz
cd ..
umount pen_root
# Montar initrd
gunzip initrd.img.gz
mount initrd.img initrd -o loop
cd initrd
ls
9/13
# Alterar linuxrc
#!/bin/ash
# Beep
echo -e "\007"
# Hello
echo ""
echo " Mini ARCOM Linux"
echo ""
echo " ISEP, 2009"
echo ""
echo " Nº dos Alunos"
echo ""
PATH=/sbin:/bin
export PATH
# Insert Modules
insmod /modules/usbcore.ko
insmod /modules/usb-libusual.ko
insmod /modules/usb-storage.ko
insmod /modules/ohci-hcd.ko
############################################
#na ebox
#sleep 10
#echo 0x802 > /proc/sys/kernel/real-root-dev
#
#OU
#
#no qemu
/modules/ide.sh
echo 0x340 > /proc/sys/kernel/real-root-dev
############################################
umount /proc
cat linuxrc
# Desmontar initrd
cd ..
ls -la
umount initrd
gzip initrd.img
# copiar initrd para pendrive
umount /dev/sdb1; mount /dev/sdb1 pen
cp initrd.img.gz pen/fullrd.gz
ls -la
# Desmontar Pendrive
umount pen
#testar
10/13
Exercícios e questões adicionais
1) Verifique qual a memória ocupada pelo software do sistema. Use os comandos “free” ou
“cat /proc/meminfo”.
pisca_user.c:
//Compilar com opção -O e executar como root
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>
exit(0);
}
11/13
3) Configure e compile o kernel de forma a obter uma imagem com dimensões mais
reduzidas do que a versão fornecida na página. O ficheiro de configuração do kernel
fornecido pode ser obtido na página das aulas. A opção “Local version - append to kernel
release” deverá ser preenchida com uma sequência de caracteres que identifique o grupo
(e.g., números dos alunos). Documente cada alteração e, após testar o seu correcto
funcionamento (no qemu e na ebox), registe as alterações do tamanho do ficheiro bzImage.
4) Usando as configurações do kernel escolhidas na alínea anterior (note que o kernel deverá
estar configurado para permitir o carregamento de módulos), compile o seguinte módulo de
kernel (“pisca-pisca”) e teste-o na ebox.
pisca.c:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <asm/io.h>
int init_module(void){
init_timer(&my_timer);
my_timer.function = my_timer_func;
my_timer.data = (unsigned long)&led_status;
my_timer.expires = jiffies + BLINK_DELAY;
add_timer(&my_timer);
return 0;
}
void cleanup_module(void){
del_timer(&my_timer);
}
makefile:
obj-m := pisca.o
KDIR := directório_do_codigo_do_kernel
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
12/13
5) Configure a interface de rede do sistema.
##############################
#Configuração da rede no qemu:
cd /modules
#carregar módulos do kernel correspondentes ao driver da placa de rede
insmod af_packet.ko
insmod mii.ko
insmod 8139cp.ko
################################
#Configuração da rede para ebox:
cd /modules
#carregar módulos do kernel correspondentes ao driver da placa de rede
insmod af_packet.ko
insmod mii.ko
insmod 8139too.ko
6) Compile o executável busybox de forma a ter apenas os comandos necessários para a initrd
da distribuição “full”. Deverá escolher a opção para compilar estaticamente.
#Descompactar ficheiro busybox-1.14.1.tar.bz2. Aplicar os “patches”.
Exemplo:
patch -p0 < busybox-1.14.1-ash.patch
# Começar sen nenhuma opção seleccionada
make allnoconfig
# Invocar menu de configuração
make gconfig
#ou “make menuconfig”; poderá ser necessário instalar
# o pacote ncurses-devel (usar yum)
#
#escolher as opções, gravar e sair
make
#copiar para a initrd e testar
7) Uma forma comum de interface com sistemas embebidos é através do servidor web,
podendo-se assim dispensar mostradores e teclados no dispositivo. Adicione a applet do
servidor web ao busybox e crie uma nova versão do executável. Configure a distribuição
“full” de forma a que, quando consultada a partir de um browser, a ebox possa responder com
uma página html mostrando informação diversa (e.g., o nome dos alunos).
13/13