Mediacreate, sua nova ferramenta para criar e formatar cartões SD

- por Sergio Prado

Categorias: Linux Tags: ,

Seja nos treinamentos que ministro, projetos em que atuo ou mesmo reviews de placas que escrevo aqui no blog, lido no dia-a-dia com diversas placas que rodam o sistema operacional do pinguim mais querido do mundo.

E se tem algo que sempre senti falta ao trabalhar com Linux embarcado, é uma ferramenta para automatizar o processo de particionamento, formatação e gravação de imagens em cartões SD (ou qualquer outro dispositivo de armazenamento).

Mais do que isso, uma ferramenta que, dado o bootloader, kernel e rootfs, saiba formatar e criar os cartões para as principais placas de baixo custo do mercado. Com um único comando, formatar e criar um cartão para a Beaglebone Black ou para a Raspberry Pi. Simples assim.

Bom, se Maomé não vai até a montanha, a montanha vem até Maomé! Eis que lhes apresento a ferramenta mediacreate.

MEDIACREATE

A ferramenta esta hospedada no GitHub. O primeiro passo é clonar o repositório do projeto:

$ git clone git@github.com:sergioprado/mediacreate.git
$ cd mediacreate/
$ ls
configs LICENSE mediacreate README.md

A ferramenta foi escrita em shell script, e sua interface é simples:

$ ./mediacreate -h
mediacreate version 1.0
usage: mediacreate [options]
	-d, --device	device node file
	-c, --config	config filename
	-f, --force	do not ask before partitioning device
	-z, --zero	clear first blocks of disk before starting
	-g, --debug	show debug messages
	-h, --help	this help

O primeiro passo é criar um arquivo de configuração com as informações sobre como particionar, formatar e copiar as imagens da sua placa para o cartão SD. A versão inicial já vem com alguns exemplos no diretório configs (Beaglebone Black, i.MX53 Quick Start Board e Raspberry Pi).

Por exemplo, este é o arquivo de configuração padrão da Beaglebone Black (configs/bbb_linux.cfg):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#
# Config file example 
#
#   Board: Beaglebone Black
#   OS:    GNU/Linux 
#
 
# set disk information
DOS=true
GEOMETRY=255,63
 
# create disk partitions
PARTITION=,70,0x0C,*
PARTITION=,,0x83,-
 
# format partitions
FORMAT=1,boot,vfat
FORMAT=2,rootfs,ext4
 
# copy images to disk partitions
IMAGE=1,MLO,file,/
IMAGE=1,u-boot.img,file,/
IMAGE=1,uEnv.txt,file,/
IMAGE=1,uImage,file,/
IMAGE=1,am335x-boneblack.dtb,file,/
IMAGE=2,rootfs.ext4,raw,0
 
# images location
IMGDIR=~/beagleboneblack/images

Os parâmetros DOS e GEOMETRY configuram o disco com a geometria necessária para o Sitara AM335x acessar a partição FAT e carregar o X-Loader. As variáveis do tipo PARTITION definem as partições do disco, no formato interpretado pela ferramenta sfdisk. As variáveis do tipo FORMAT definem a formatação das partições, e as variáveis do tipo IMAGE definem as imagens que devem ser gravadas no cartão.

Uma descrição completa sobre como usar cada um dos parâmetros encontra-se no arquivo de configuração padrão em configs/default.cfg.

Então é só executar a ferramenta passando o nome do dispositivo do cartão e o arquivo de configuração:

$ sudo ./mediacreate -d /dev/sdd -c configs/bbb_linux.cfg -f -z
[Qua Out 2 19:34:45 BRT 2013] Starting mediacreate V1.0
[Qua Out 2 19:34:45 BRT 2013] Reading config file
[Qua Out 2 19:34:45 BRT 2013] Umounting disk partitions
[Qua Out 2 19:34:45 BRT 2013] Clearing first blocks of disk
[Qua Out 2 19:34:48 BRT 2013] Creating disk partitions
[Qua Out 2 19:34:48 BRT 2013] Formating disk partitions
[Qua Out 2 19:34:48 BRT 2013] Formatting disk partition [/dev/sdd1] to [vfat]
[Qua Out 2 19:34:51 BRT 2013] Formatting disk partition [/dev/sdd2] to [ext4]
[Qua Out 2 19:35:35 BRT 2013] Copying images to disk
[Qua Out 2 19:35:35 BRT 2013] Copying [/home/sprado/workspace/build/boards/bbb/images/MLO] to [/] at partition [/dev/sdd1]
[Qua Out 2 19:35:35 BRT 2013] Copying [/home/sprado/workspace/build/boards/bbb/images/u-boot.img] to [/] at partition [/dev/sdd1]
[Qua Out 2 19:35:36 BRT 2013] Copying [/home/sprado/workspace/build/boards/bbb/images/uEnv.txt] to [/] at partition [/dev/sdd1]
[Qua Out 2 19:35:36 BRT 2013] Copying [/home/sprado/workspace/build/boards/bbb/images/uImage] to [/] at partition [/dev/sdd1]
[Qua Out 2 19:35:37 BRT 2013] Copying [/home/sprado/workspace/build/boards/bbb/images/am335x-boneblack.dtb] to [/] at partition [/dev/sdd1]
[Qua Out 2 19:35:37 BRT 2013] Copying [/home/sprado/workspace/build/boards/bbb/images/rootfs.ext4] at position [0] to [/dev/sdd2] at block [0]
[Qua Out 2 19:35:39 BRT 2013] Media successfully created!

Simples assim!

PRÓXIMOS PASSOS

A ferramenta esta bem funcional. Sinta-se livre para testá-la.

Tenho algumas idéias de melhorias, como alterar a forma como é realizada a configuração do particionamento. O sfdisk não uma das ferramentas mais agradáveis para se trabalhar…:)

Pretendo também liberar novos arquivos de configuração conforme vou trabalhando em outras placas.

A ferramenta é liberada sob licença Apache 2.0. Use o github para contribuir ou reportar bugs. Qualquer dúvida é só me escrever!

Um abraço,

Sergio Prado

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.