LittleKernel
Introdução
Recentemente descobri que grandes empresas utilizam uma alternativa ao U-Boot
para bootloader. Por isso, resolvi escrever esse post sobre o LittleKernel
. Ele não tem a popularidade do U-Boot
, mas é tão antigo quanto.
Devido sua impopularidade, vamos primeiro seguir o tutorial que utiliza o QEMU. Para que tenhamos um ambiente minimamente funcional.
Baixando o LittleKernel
O LittleKernel
está hospedado no github. Para baixa-lo, basta utilizar o comando:
git clone https://github.com/littlekernel/lk.git
Checando o diretórios com o comando tree -L 1 .
, temos a seguinte configuração:
.
├── app
├── arch
├── build-qemu-virt-arm32-test
├── dev
├── docs
├── engine.mk
├── external
├── kernel
├── lib
├── LICENSE
├── lk_inc.mk.example
├── make
├── makefile
├── platform
├── project
├── README.md
├── scripts
├── target
├── tools
└── top
Instalando as dependências
Para esse post, vou utilizar o qemu-system-arm
. Para isso, é preciso instala-lo:
sudo apt-install qemu-system-arm
Na própria página do Littekernel
tem uma sugestão para toolchain:
sudo apt-get install gcc-arm-none-eabi
E essas são as dependências iniciais.
Buildando
Os desenvolvedores do LittleKernel
fornecem um script para rodar o bootloader no QEMU. Basta entrar na pasta do repositório e digitar:
scripts/do-qemuarm
Esse comando irá compilar o LittleKernel
e carrega-lo no QEMU. Como resultado o terminal (ou console) do bootloader será carregado e as seguintes mensagens devem parecer:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
Pode digitar o comando help
e começar a desbravá-lo.
Para sair, é preciso usar as seguintes teclas: CTRL + A e depois c. O terminal sairá do LittleKernel
e entrará no QEMU:
QEMU 4.2.1 monitor - type 'help' for more information
(qemu)
Por fim, bast digitar quit.
Decifrando o do-qemuarm
Esse script possui muitas linhas, mas as 3 últimas linhas resumem o processo:
132 133 134 |
|
Na linha 132:
$MAKE_VARS
é vazio$PROJECT
é"qemu-virt-arm32-test"
- Esse nome é referente a um arquivo dentro do diretório
projects/
na pasta raiz.
- Esse nome é referente a um arquivo dentro do diretório
- Esses são os parâmetros para compilar o
LittleKernel
.
Na linha 133:
- Mostra o comando completo para emulação do
LittleKernel
pelo QEMU:
qemu-system-arm -cpu cortex-a15 -m 512 -smp 1 -machine virt,highmem=off -kernel build-qemu-virt-arm32-test/lk.elf -net none -nographic
-
Baseado no comando gerado, pode-se observar que é criado a pasta
build-qemu-virt-arm32-test
e dentro dela o arquivolk.elf
. Esse arquivo é o binário gerado pela compilação doLittleKernel
. Na linha 134: -
Executa a emulação.
Conclusão
Com esses passos é possível começar a explorar o LittleKernel
e tirar as primeiras impressões. Particularmente, achei a estrutura de pastas mais amigável que o do U-Boot
. Isso não quer dizer que seja melhor ou pior, mas parece mais fácil de organizar.