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
LittleKernelpelo 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-teste 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.