Você está na página 1de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

(http://sergioprado.org/)

SergioPrado.org (http://sergioprado.org/)
atua com desenvolvimento de software para sistemas embarcados h mais de 15 anos. scio-fundador da
Embedded Labworks (http://e-labworks.com/), uma empresa focada em te ajudar a desenvolver software de
qualidade para sistemas embarcados.

(http://e-labworks.com)
Receber atualizaes por e-mail
OK >
E-mail invlido. Tente novamente.
E-mail (mailto:contato@sergioprado.org) RSS (http://feeds.feedburner.com/blog_do_sergio_prado) Twitter
(https://twitter.com/sergioprado) LinkedIn (http://www.linkedin.com/in/sprado/pt)
Home (http://sergioprado.org/)
Sobre (http://sergioprado.org/sobre/)
Consultoria (http://sergioprado.org/consultoria/)
Palestras (http://sergioprado.org/palestras/)
Contato (http://sergioprado.org/contato/)
Embedded Labworks (http://e-labworks.com/)
Twitter (https://twitter.com/sergioprado) RSS (http://feeds.feedburner.com/blog_do_sergio_prado) LinkedIn
(http://www.linkedin.com/in/sprado/pt) E-mail (mailto:contato@sergioprado.org)
< Voltar (javascript:window.history.back())

Como desenvolver um sistema Linux do zero para a Raspberry Pi


04/11/2012 - por Sergio Prado
Categorias: Linux embarcado (http://sergioprado.org/linux-embarcado/), Raspberry Pi
(http://sergioprado.org/raspberry-pi/) Tags: buildroot (http://sergioprado.org/tag/buildroot/), Kernel
(http://sergioprado.org/tag/kernel/), linux (http://sergioprado.org/tag/linux/), raspberry pi
(http://sergioprado.org/tag/raspberry-pi-2/), toolchain (http://sergioprado.org/tag/toolchain/)
A Raspberry Pi j possui diversas distribuies Linux disponveis, para diversos gostos e preferncias, dentre elas Raspbian, Raspbmc, Debian wheezy e Arch Linux (eu escrevi sobre algumas
http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 1 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

delas no meu artigo introdutrio sobre a Raspberry Pi (http://sergioprado.org/raspberry-pi-ocomputador-de-bolso/)).


E o uso de uma distribuio Linux facilita bastante o trabalho, principalmente para quem
comeando seus estudos. Mas junto com a facilidade de uso, vem a falta de flexibilidade.
voc quiser um tempo de boot menor? E se voc quiser apenas um conjunto especfico de
caes? E se voc quiser ter controle sobre os pacotes open source usados na distribuio e
respectivas licenas (atividade essencial em um produto comercial)?

esta
E se
aplisuas

Tudo isso fica mais difcil de atingir quando usamos uma distribuio Linux pronta. Neste caso, o
ideal construir um sistema Linux customizado para as necessidades do projeto. E isso que
faremos neste artigo.
Todos os testes foram realizados em um PC com a distribuio Ubuntu 12.04 rodando nativamente. Se necessrio, adapte os comandos utilizados sua distribuio.
Ento, vamos comear?
UM SISTEMA LINUX

Voc precisa basicamente de 4 componentes para construir um sistema Linux completo (para
qualquer plataforma de hardware):
1.
2.
3.
4.

Toolchain
Bootloader
Kernel
Rootfs

Vamos ento estudar estes componentes mais detalhadamente.


TOOLCHAIN

J escrevi bastante sobre toolchains, incluindo os artigos Desmistificando toolchains em Linux


embarcado (http://sergioprado.org/desmistificando-toolchains-em-linux-embarcado/) e Gerando
e usando toolchains em Linux embarcado (http://sergioprado.org/gerando-e-usando-toolchainsem-linux-embarcado/). Se voc no souber ou quiser conhecer mais sobre o que um toolchain
e o seu uso em Linux embarcado, d uma olhada nestes artigos.
Nossa plataforma de hardware um ARM11 com suporte ponto flutuante. Portanto, precisamos
de um toolchain com estas caractersticas para trabalhar com Linux. E no precisamos ir muito
longe. O projeto da Raspberry Pi j fornece um toolchain pronto para usarmos, baseado no toolchain da Linaro. Este toolchain esta disponvel no repositrio tools da Raspberry Pi no github
(https://github.com/raspberrypi/tools/).
Antes de comear, vamos criar um diretrio de trabalho:
http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 2 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

$ mkdir ~/raspberrypi

Agora vamos baixar o toolchain:


$ cd ~/raspberrypi
$ git clone https://github.com/raspberrypi/tools.git

E instalar em um diretrio na mquina de desenvolvimento:


$ sudo mkdir -p /opt/toolchain
$ sudo chown $USER:$USER /opt/toolchain/
$ cp -a tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian /opt/toolchain/

Antes de us-lo, vamos adicionar o diretrio dos binrios do toolchain no PATH:

$ echo -e '\nexport PATH="/opt/toolchain/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH"\n' >> ~/


$ source ~/.bashrc

Se sua mquina for de 64 bits, voc precisa instalar os bibliotecas de 32 bits:


$ sudo apt-get install ia32-libs libc6-dev-i386

Agora teste o toolchain:

$ arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/opt/toolchain/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../libexec/gcc/arm-li
Target: arm-linux-gnueabihf
Configured with: /cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build
Thread model: posix
gcc version 4.7.2 20120731 (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08)

Com as ferramentas de desenvolvimento instaladas, podemos comear a desenvolver o nosso sistema Linux.

para
BOOTLOADER

O processo de boot da Raspberry Pi um pouco diferente quando comparada outras plataformas ARM disponveis no mercado. Quando voc energiza a placa, quem assume o controle a GPU
do SoC (o ncleo ARM11 esta desabilitado neste momento). A GPU procura na primeira partio do
carto SD um cdigo de boot, e com mais alguns passo adicionais, ir carregar e executar o kernel Linux. Para uma descrio mais completa do processo de boot da Raspberry Pi , leia o artigo
Raspberry Pi e o processo de boot (http://sergioprado.org/raspberry-pi-e-o-processo-de-boot/).
Precisamos ento preparar um carto SD com 2 parties:

http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 3 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

Partio 1 (FAT32): partio de 64M para armazenar o cdigo de boot, arquivos de configurao da GPU e a imagem do kernel Linux.
Partio 2 (EXT2): partio para armazenar o sistema de arquivos (aqui voc pode usar o
resto do espao disponvel no carto SD).
Para formatar o carto SD voc pode usar o gparted, conforme abaixo (altere o sdX pelo nome do
arquivo de dispositivo do seu carto SD):
$ sudo gparted /dev/sdX

O particionamento do carto SD deve ficar assim:

(http://sergioprado.org/wp-content/uploads/2012/11/gparted.png)
Perceba que criamos a primeira partio aps os primeiros 2MB do carto SD. Aparentemente isso
essencial para que a GPU consiga carregar o cdigo de boot da primeira partio do carto (as
distros que testei gravam o carto assim, e sem esta configurao no funcionou nos meus
testes).
Com o carto formatado, s baixar os binrios do bootloader e grav-los na primeira partio do
carto (altere o ponto de montagem do carto SD se necessrio):
$
$
$
$
$

cd ~/raspberrypi
git clone git://github.com/raspberrypi/firmware.git
cd firmware/boot
cp bootcode.bin start.elf fixup.dat /media/BOOT/
echo "gpu_mem=32" > /media/BOOT/config.txt

KERNEL

No momento em que escrevo este artigo, o kernel da Raspberry Pi esta disponvel no repositrio
linux do projeto (https://github.com/raspberrypi/linux) no github.

http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 4 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

Baixe ento os fontes para sua mquina de desenvolvimento:


$ cd ~/raspberrypi
$ git clone git://github.com/raspberrypi/linux.git
$ cd linux

Vamos configurar o kernel para ser compilado para a Raspberry Pi:


$ make ARCH=arm bcmrpi_cutdown_defconfig

Antes de compilar, abra o menu de configurao:


$ make ARCH=arm menuconfig

E habilite o sistema de arquivos ext2:


File systems --->
<*> Second extended fs support

Agora compile:
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

E grave no carto SD (altere o ponto de montagem do carto SD se necessrio):

$ cp -av arch/arm/boot/zImage /media/BOOT/kernel.img


$ echo "console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext2 rootwait" > /media/BOOT/cmdline.t

ROOTFS

Este o nosso ltimo passo. Vamos construir um sistema de arquivos simples baseado no Busybox
(http://www.busybox.net/).
E
para
esta
tarefa,
usaremos
o
Buildroot
(http://buildroot.uclibc.org/).
O Buildroot um sistema de build completo, capaz de gerar o toolchain, bootloader, kernel e
rootfs. Mas para nossos testes, usaremos ele apenas para gerar o rootfs.
Baixe ento o Buildroot para a sua mquina:
$
$
$
$

cd ~/raspberrypi
wget http://buildroot.net/downloads/buildroot-2012.08.tar.bz2
tar xjfv buildroot-2012.08.tar.bz2
cd buildroot-2012.08/

E inicie o processo de configurao:

http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 5 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

$ make menuconfig

Primeiro configure a arquitetura:


Target Architecture (ARM (little endian))
Target Architecture Variant (arm1176jzf-s)

Depois configure o toolchain (apesar do Buildroot ter a capacidade de gerar seu prprio toolchain,
vamos configur-lo para usar o toolchain que instalamos no comeo deste artigo):
Toolchain --->
Toolchain type (External toolchain)
Toolchain (Custom toolchain)
Toolchain origin (Pre-installed toolchain)
(/opt/toolchain/gcc-linaro-arm-linux-gnueabihf-raspbian) Toolchain path
($(ARCH)-linux-gnueabihf) Toolchain prefix
External toolchain C library (glibc)
[*] Toolchain has C++ support?

Configure o sistema a ser gerado:


System configuration --->
(My Raspberry Pi is alive!) System banner
/dev management (Dynamic using devtmpfs only)
(ttyAMA0) Port to run a getty (login prompt) on

Sinta-se livre para acessar o menu Package Selection for the target e habilitar as aplicaes que
achar interessante. Minha sugesto que voc no habilite muitos pacotes neste primeiro teste,
nem nada muito grande ou complexo como o X11. Voc evitar eventuais problemas ou um tempo
de compilao muito grande. E de qualquer forma, depois dos primeiros testes voc poder habilitar outras aplicaes e bibliotecas e recompilar o Buildroot.
Agora s iniciar o processo de compilao:
$ make

No fim da compilao, o Buildroot ir gerar a imagem do rootfs no diretrio abaixo:


$ ls -l output/images/
-rw-rw-r-- 1 sprado sprado 4843520 Nov 3 20:20 rootfs.tar

Por ltimo, s extrair a imagem para a partio do rootfs no carto SD (altere o ponto de montagem do carto SD se necessrio):
$ sudo cp -av output/images/rootfs.tar /media/ROOTFS/
$ cd /media/ROOTFS/
$ sudo tar xfv rootfs.tar && sudo rm rootfs.tar

http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 6 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

TESTANDO

Para testar, voc vai precisar de uma conexo com a console da Raspberry Pi. Na dvida, d uma
olhada no artigo Acessando a console serial na Raspberry Pi (http://sergioprado.org/acessandoa-console-serial-na-raspberry-pi/).
Depois s curtir o boot do sistema (para o login, o usurio root e no tem senha):

Uncompressing Linux... done, booting the kernel.


Initializing cgroup subsys cpu
Linux version 3.2.27-cutdown+ (sprado@sergio-office-notebook) (gcc version 4.7.2 20120731 (prereleas
CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: BCM2708
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 56896
Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1280 bcm2708_fb.fbheight=1024 bcm2708.bo
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 224MB = 224MB total
Memory: 222856k/222856k available, 6520k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000
(
4 kB)
fixmap : 0xfff00000 - 0xfffe0000
( 896 kB)
vmalloc : 0xce800000 - 0xe8000000
( 408 MB)
lowmem : 0xc0000000 - 0xce000000
( 224 MB)
modules : 0xbf000000 - 0xc0000000
( 16 MB)
.text : 0xc0008000 - 0xc03cc000
(3856 kB)
.init : 0xc03cc000 - 0xc03eac80
( 124 kB)
.data : 0xc03ec000 - 0xc04121e0
( 153 kB)
.bss : 0xc0412204 - 0xc045f8cc
( 310 kB)
NR_IRQS:330
sched_clock: 32 bits at 1000kHz, resolution 1000ns, wraps every 4294967ms
timer_set_mode: unhandled mode:1
timer_set_mode: unhandled mode:3
Console: colour dummy device 80x30
Calibrating delay loop... 697.95 BogoMIPS (lpj=3489792)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
devtmpfs: initialized
NET: Registered protocol family 16
bcm2708.uart_clock = 0
mailbox: Broadcom VideoCore Mailbox driver
bcm2708_vcio: mailbox at f200b880
bcm_power: Broadcom power driver
bcm_power_open() -> 0
bcm_power_request(0, 8)
bcm_mailbox_read -> 00000080, 0
bcm_power_request -> 0
Serial: AMBA PL011 UART driver
dev:f1: ttyAMA0 at MMIO 0x20201000 (irq = 83) is a PL011 rev3
console [ttyAMA0] enabled
bio: create slab at 0
http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 7 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

SCSI subsystem initialized


usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Switching to clocksource stc
FS-Cache: Loaded
CacheFiles: Loaded
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
bcm2708_dma: DMA manager at ce808000
bcm2708_gpio: bcm2708_gpio_probe c03f1a78
vc-mem: phys_addr:0x00000000 mem_base=0x0e000000 mem_size:0x10000000(256 MiB)
VFS: Disk quotas dquot_6.5.2
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
FS-Cache: Netfs 'nfs' registered for caching
msgmni has been set to 435
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
Console: switching to colour frame buffer device 160x64
brd: module loaded
loop: module loaded
vcos: [1]: vchiq_init_state: slot_zero = 0xffd80000, is_master = 0
vcos: [1]: vchiq_init_state: called
vcos: [1]: vchiq: initialised - version 2 (min 2), device 253.0
usbcore: registered new interface driver smsc95xx
cdc_ncm: 04-Aug-2011
usbcore: registered new interface driver cdc_ncm
dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
Core Release: 2.80a
Setting default values for core params
Finished setting default values for core params
Using Buffer DMA mode
Periodic Transfer Interrupt Enhancement - disabled
Multiprocessor Interrupt Enhancement - disabled
OTG VER PARAM: 0, OTG VER FLAG: 0
Dedicated Tx FIFOs mode
dwc_otg bcm2708_usb: DWC OTG Controller
dwc_otg bcm2708_usb: new USB bus registered, assigned bus number 1
dwc_otg bcm2708_usb: irq 32, io mem 0x00000000
Init: Port Power? op_state=1
Init: Power Port (0)
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: DWC OTG Controller
usb usb1: Manufacturer: Linux 3.2.27-cutdown+ dwc_otg_hcd
http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 8 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

usb usb1: SerialNumber: bcm2708_usb


hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
usbcore: registered new interface driver uas
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usbcore: registered new interface driver libusual
mousedev: PS/2 mouse device common for all mice
cpuidle: using governor ladder
cpuidle: using governor menu
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci: Enable low-latency mode
bcm_power_open() -> 1
mmc0: SDHCI controller on BCM2708_Arasan [platform] using platform's DMA
mmc0: BCM2708 SDHC host at 0x20300000 DMA 2 IRQ 77
sdhci-pltfm: SDHCI platform and OF driver helper
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
TCP cubic registered
Initializing XFRM netlink socket
NET: Registered protocol family 17
Registering the dns_resolver key type
VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
Waiting for root device /dev/mmcblk0p2...
mmc0: problem reading SD Status register.
mmc0: new high speed SD card at address 0007
mmcblk0: mmc0:0007 SD2GB 1.84 GiB
mmcblk0: p1 p2
EXT2-fs (mmcblk0p2): warning: mounting unchecked fs, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem) on device 179:2.
devtmpfs: mounted
Freeing init memory: 120K
Starting logging: OK
Initializing random number generator... done.
Starting network...
My Raspberry Pi is alive!
buildroot login: root
#

Para ter acesso completo todos os recursos da Raspberry Pi, s faltou incluir no nosso sistema
as bibliotecas de acesso GPU. Estas bibliotecas possibilitam a utilizao da GPU para tarefas
pesadas como decodificao de vdeo e execuo de aplicaes 3D. Este ser o foco do nosso
prximo artigo.
Happy Pi hacking!
Sergio Prado

Compartilhe!

http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 9 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

Twitter 9
(http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/?
share=twitter&nb=1)
Google +1
(http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/?
share=google-plus-1&nb=1)
Facebook 14
(http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/?
share=facebook&nb=1)
LinkedIn 6
(http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/?
share=linkedin&nb=1)
Email
(http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/?
share=email&nb=1)

Posts Relacionados
1. Linux e o suporte device tree Parte 2 (http://sergioprado.org/linux-e-o-suporte-a-device-tree-parte-2/)
2. Linux e o suporte device tree Parte 1 (http://sergioprado.org/linux-e-o-suporte-a-device-tree-parte-1/)
3. Buildroot 2013.02 e integrao com Eclipse (http://sergioprado.org/buildroot-2013-02-e-integracao-com-eclipse/)
< Artigo Anterior (http://sergioprado.org/raspberry-pi-e-o-processo-de-boot/) Raspberry Pi e o processo de boot
(http://sergioprado.org/raspberry-pi-e-o-processo-de-boot/) Prximo Artigo > (http://sergioprado.org/raspberry-pie-a-gpu/) Raspberry Pi e a GPU (http://sergioprado.org/raspberry-pi-e-a-gpu/)

28 comentrios

5 reaes

Deixar uma mensagem...

Mais votados

Comunidade

Sidney Bastos

Compartilhar

um ms atrs

Que beleza de artigo. Vc acha que eu consigo colocar o tomcat e o java no raspberry e ele
funcionaria?
0

Responder

Compartilhar

Sergio Prado Modo

Sidney Bastos um ms atrs

Sim, a nica questo seria a performance destas aplicaes em um dispositivo com


poucos recursos. Neste caso, para testar, eu usaria uma distribuio como a Raspbian.
Um abrao.
0

Marcelo

Responder

Compartilhar

2 meses atrs

Ol Srgio...Excelente artigo!!!
Gostaria de te fazer uma pergunta em relao a hardware de desenvolvimento.
http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 10 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

Gostaria de te fazer uma pergunta em relao a hardware de desenvolvimento.


Posso utilizar um tablet convencional para embarcar Linux? Possuo um tablet com Android e gostaria
de embarcar linux nele. Ser que h possibilidade?
O processador um ARM 11 Telechips tcc9201.
Se houver possibilidade, pode me dar alguma informao de como proceder?
Um abrao e parabns pela site.
Marcelo
0

Responder

Compartilhar

Sergio Prado Modo

Marcelo um ms atrs

Ol Marcelo,
Se roda Android. As possibilidades so grandes de voc conseguir rodar Linux nele. Mas voc
vai precisar de:
1. Acesso aos fontes do kernel.
2. Acesso ao bootloader para poder gravar seu sistema Linux.
Um abrao.
0

Felipe Vargas

Responder

Compartilhar

2 meses atrs

Consegui criar a partir do zero para o Raspberry PI ! Valeu mesmo!!!


0

Responder

Compartilhar

Sergio Prado Modo

Felipe Vargas 2 meses atrs

Legal Felipe! Parabns! :)


0

Murilo

Responder

Compartilhar

4 meses atrs

Minha PI chega na semana que vem. No vejo a hora de colocar em prtica todo o
conhecimento adquirido aqui em algumas horas de leitura. Parabns pelo blog, espetacular! Em breve
espero estar dando trabalho a todos! Rs! Um abrao e at breve!
0

Responder

Compartilhar

Sergio Prado Modo

Murilo 4 meses atrs

Legal Murilo!
Criei um grupo sobre a raspberry pi (abaixo). Cadastre-se nele e qualquer dvida s postar l!
https://groups.google.com/grou...
Um abrao!
0

Responder

Compartilhar

http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 11 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

Celso Varella

Responder

26/03/13 14:26

Compartilhar

4 meses atrs

Srgio
Gostaria de saber se aps a configurao da ToolChain para trabalhar com o kernel, possvel
compilar programas em "C" para rodar no Raspberry-PI, se for possvel quais so as diretivas que devo
inserir no comando para compilar?
0

Responder

Compartilhar

Sergio Prado Modo

Celso Varella 4 meses atrs

Ol Celso,
Sim, voc vai usar o mesmo toolchain. D uma olhada neste meu artigo:
http://sergioprado.org/mini244...
0

Responder

Leonardo Pinheiro

Compartilhar

4 meses atrs

Ol Sergio, como mesmo o nome da empresa que tu falou no curso de Linux embarcado
que fabrica ncleos de hardware para rodar linux? Abrao, Leonardo Pinheiro
0

Responder

Compartilhar

Sergio Prado Modo

Leonardo Pinheiro 4 meses atrs

Ol Leonardo! essa?
http://www.variscite.com/
0

jaisonDala

Responder

Compartilhar

5 meses atrs

Parabns pelo post, fiz e funcionou perfeitamente. Minha pergunta tenho um kernel com
suporte a AUFS+Squashfs eu precisaria apontar o meu rootfs para o meu rootfs.squash, mas no sei
como fazer. O que preciso ter um rootfs idntico ao um livecd que seja somente leitura, o rootfs
execute na ram e a escrita seja feita na ram, consequentemente no prximo reboot as alteraes de
gravao feitas anteriormente no sero salvas, pois foram feitas na ram.
Desde j agradeo e parabns pelo blog.
att.
Jaison
0

Responder

Compartilhar

Sergio Prado Modo

jaisonDala 5 meses atrs

Ol Jaison,
Voc tem duas opes:
1. Criar um initramfs. Tem bastante documentao na Internet sobre isso. Esta a documentao
oficial do kernel:
http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 12 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

oficial do kernel:
http://www.kernel.org/doc/Docu...
2. Montar um rootfs read-only com o squashfs e depois criar um overlay em RAM usando por
exemplo o unionfs ou o aufs. Para montar o rootfs com squashfs, s gravar a imagem no carto
e mudar a linha de comandos do kernel no cmdline.txt. Ex:
$ echo "console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=squashfs rootwait" >
/media/BOOT/cmdline.txt
Depois s fazer o overlay em RAM no boot.
1

Responder

jaisonDala

Compartilhar

Sergio Prado 5 meses atrs

Ol. Obrigado pela ateno.


Fiz a troca do kernel conforme abaixo, com suporte ao squash+aufs.
My Raspberry Pi is alive!
buildroot login: root
# uname -r
3.2.27-cutdown+
# cat /proc/filesystems | grep squash
squashfs
# cat /proc/filesystems | grep aufs
nodev aufs
Agora fiz a alterao trocando o cmdline.txt conforme descrito. Veja o que acontece!
Obs: testei com o kernel "original" igual ao do artigo e o meu cuja configurao descrevi
acima.
Waiting for root device /dev/mmcblk0p2...
mmc0: new high speed SD card at address 0001
mmcblk0: mmc0:0001 00000 968 MiB
0

Responder

Compartilhar

Sergio Prado Modo

see more

jaisonDala 5 meses atrs

Ol Jaison,
Voc gravou a imagem squashfs no carto?
0

jaisonDala

Responder

Compartilhar

Sergio Prado 5 meses atrs

Sim, no lugar do rootfs que fiz com o buildroot coloquei a minha imagem
retirada do OpenElec que se chama SYSTEM onde um arquivo squash. A imagem
est na partio EXT2 conforme seu artigo.
0

Responder

Compartilhar

http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 13 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

Sergio Prado Modo

jaisonDala 5 meses atrs

Ol Jaison,
Neste caso, este no o procedimento correto. Voc deve copiar a sua imagem
diretamente para a partio 2 do carto, e no copiar o arquivo da imagem para a
partio EXT2.
O comando dd pode resolver seu problema:
$ sudo dd if=/dev/sdX2 of=squashfs.img
Substitua o nome do arquivo de dispositivo da segunda partio do carto e o nome
da sua imagem de acordo com seu ambiente.
0

jaisonDala

Responder

Compartilhar

Sergio Prado 4 meses atrs

Obrigado Sergio.
No utilizei sua dica. Funcionou perfeitamente como havias dito, mas ainda assim
gostaria de fazer algo
diferente. Queria apontar para a imagem root.squashfs dentro de uma partio. Ento
descrevo qual foi o procedimento que fiz:
1- Utilizei debian como base (instalei uma verso no QEMU que uma mquina
virtual com suporte a arquitetura arm);
2- Copiei o sistema atravs do rsync (depois fiz toda a configurao de pacotes,
programas, etc...);
3- Criei um initrd, a ferramente que utilizei foi o mkinitramfs para gerar um "mini"
sistema e editar os scripts de inicializao que esto no diretrio /usr/share/initramfstools/scripts e l apontei a imagem rootfs.squashfs para ser o meu sistema raiz.
Obs: meu initrd.gz eu compilei ele direto no kernel . Para quem no sabe o caminho
est no menu General Setup na opacao INITIAL RAM files.(aqui habilite-o com um
*) e na linha abaixo, voc passa o caminho onde est salvo seu initrd.gz criado com o
0

Responder

Sergio Prado Modo

Compartilhar

see more

jaisonDala 4 meses atrs

Legal Jaison, parabens!


1

John

Responder

Compartilhar

5 meses atrs

Ol Sergio,
Tambem estou usando Ubuntu 12.04, mas estou tendo o seguinte erro aps instalar o toolchain:
http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 14 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

$ arm-linux-gnueabihf-gcc -v
bash: /opt/toolchain/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc: Arquivo ou
diretrio no encontrado
Ser que a linha adicionada ao path est incorreta?
abs
0

Responder

Compartilhar

Sergio Prado Modo

John 5 meses atrs

Ol John!
Se o caminho estiver correto, pode ser uma questo da arquitetura da sua mquina host. Este
toolchain foi compilado para rodar em uma mquina de 32 bits. Se sua mquina for de 64 bits,
voc precisa instalar as libs de 32 bits:
$ sudo apt-get install ia32-libs libc6-dev-i386
Teste e me avisa se funcionou. Se funcionar vou atualizar o post.
Um abrao!
0

Responder

John Martius

Compartilhar

Sergio Prado 5 meses atrs

Realmente o toolchain est compilado para 32 bits.


Aps instalar as libs funcionou no 64 bits.
Est bem bacana seu blog ;)
0

Responder

Compartilhar

Sergio Prado Modo

John Martius 5 meses atrs

Legal John. Vou atualizar o post. Obrigado pelo feedback!


0

David Lewin

Responder

Compartilhar

5 meses atrs

Nice 1st Article Sergio. this remind me some other commands from another article with
mini2440 ;o) but after all this is due to the homogeneous side of Linux: "learn once and apply
anywhere"
I hope you'll be able to write something equivalent for the i.MX53.
0

Responder

Compartilhar

Sergio Prado Modo

David Lewin 5 meses atrs

Hi David,
Yes, you are right! Despite the boot process, the rest is pretty much the same! I'll put in my list of
http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 15 de 16

Como desenvolver um sistema Linux do zero para a Raspberry Pi | Blog do Sergio Prado

26/03/13 14:26

next articles to write one for the i.MX53.


Best regards.
0

Cleber

Responder

Compartilhar

5 meses atrs

Poxa, desde que comprei o RPi queria fazer algo deste tipo. No momento estou tentando a
comunicao via I2C para leitura e gravao em 2 EEPROMs.. Na sequncia vou tentar isso..
Parabns pelo post e por compartilhar suas experincias!.
0

Responder

Compartilhar

Sergio Prado Modo

Cleber 5 meses atrs

Legal Cleber! Depois me conta sobre suas experiencias com o I2C!


0

Responder

Comment feed

Compartilhar

Inscrever-se via email

Navegue POR CATEGORIA


PESQUISA

POR TAG
OK >

(http://creativecommons.org/licenses/by-nc-sa/3.0/br/) (http://creativecommons.org/licenses/by-nc-sa/3.0/br/)
Este trabalho de Sergio Prado licenciado pelo
Creative Commons BY-NC-SA 3.0.

http://sergioprado.org/como-desenvolver-um-sistema-linux-do-zero-para-a-raspberry-pi/

Pgina 16 de 16