Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Este tutorial cobrirá o processo de construção e instalação do kernel em tempo real de 64 bits no Raspberry Pi. O kernel RT é crucial para a funcionalidade completa do ROS2 e outras soluções IOT em tempo real.
O kernel foi instalado em Raspbian baseado em x64 que pode ser obtido aqui
Observação. Este tutorial, embora seja simples, requer conhecimento básico do sistema operacional Linux.
Também devido às limitações desta plataforma, todos os links http não possuem h. Para corrigi-los, basta adicionar "h" no início do link
Suprimentos
PC baseado em x64 com Linux
Raspberry Pi 4B com Raspbian 64 já instalado
Conexão com a Internet.
Etapa 1: Obtendo as ferramentas necessárias
Primeiro, precisamos optar por ferramentas de desenvolvimento neccecery.
Eles podem ser obtidos executando os seguintes comandos no terminal Linux
sudo apt-get install build-essential libgmp-dev libmpfr-dev libmpc-dev libisl-dev libncurses5-dev bc git-core bison flexsudo apt-get install libncurses-dev libssl-dev
Etapa 2: compilar ferramentas nativas de compilação para compilação cruzada
O próximo passo é pré-preparar e compilar ferramentas para compilação cruzada de nosso kernel.
A primeira ferramenta que iremos instalar é o Binutils. Este tutorial foi testado com o binutils versão 2.35.
cd ~ / Downloadswget ttps: //ftp.gnu.org/gnu/binutils/binutils-2.35.tar.bz2tar xf binutils-2.35.tar.bz2cd binutils-2.35 /./ configure --prefix = / opt / aarch64 - target = aarch64-linux-gnu --disable-nls
Após a conclusão da configuração, precisamos compilar o programa usando os seguintes comandos
make -jx
sudo make install
onde -jx significa quantos jobs você deseja executar i parrarell. A regra é não ultrapassar a quantidade de threads que seu sistema possui. (por exemplo make -j16)
e, finalmente, precisamos exportar o caminho
export PATH = $ PATH: / opt / aarch64 / bin /
Em seguida, prosseguimos com a construção e instalação do GCC
cd..wget ttps: //ftp.gnu.org/gnu/gcc/gcc-8.4.0/gcc-8.4.0.tar.xztar xf gcc-8.4.0.tar.xzcd gcc-8.4.0 /. /contrib/download_prerequisites./configure --prefix = / opt / aarch64 --target = aarch64-linux-gnu --with-newlib --without-headers / --disable-nls --disable-shared --disable-threads --disable-libssp --disable-decimal-float / --disable-libquadmath --disable-libvtv --disable-libgomp --disable-libatomic / --enable-languages = c --disable-multilib
Do que o mesmo de antes de fazer e instalar nosso compilador
make all-gcc -jx
sudo make install-gcc
Se tudo correu bem seguindo o comando
/ opt / aarch64 / bin / aarch64-linux-gnu-gcc -v
deve resoult em responder semelhante a este.
ux-gnu-gcc -v Usando especificações integradas. COLLECT_GCC = / opt / aarch64 / bin / aarch64-linux-gnu-gcc COLLECT_LTO_WRAPPER = / opt / aarch64 / libexec / gcc / aarch64-linux-gnu / 8.4.0 / lto-wrapper Destino: aarch64-linux-gnu Configurado com:./configure --prefix = / opt / aarch64 --target = aarch64-linux-gnu --with-newlib --without-headers --disable-nls --disable-shared --disable-threads --disable-libssp --disable-decimal-float --disable-libquadmath --disable-libvtv --disable-libgomp --disable-libatomic --enable-languages = c --disable-multilib Modelo de thread: gcc único versão 8.4.0 (GCC)
Etapa 3: corrigindo e configurando o kernel
Agora é hora de obter nosso kernel e patch RT.
Este tutorial usará o kernel rpi v 5.4 e o patch RT32 do RT. Essa combinação funcionou bem para mim. No entanto, tudo deve funcionar bem com versões diferentes.
mkdir ~ / rpi-kernel
cd ~ / rpi-kernel git clone ttps: //github.com/raspberrypi/linux.git -b rpi-5.4.y wget ttps: //mirrors.edge.kernel.org/pub/linux/kernel/projects/rt /5.4/older/patch-5.4.54-rt32.patch.gz mkdir kernel-out cd linux
em seguida, descompacte o patch.
gzip -cd../patch-5.4.54-rt32.patch.gz | patch -p1 --verbose
E inicializar a configuração para Rpi 4B
make O =.. / kernel-out / ARCH = arm64 CROSS_COMPILE = / opt / aarch64 / bin / aarch64-linux-gnu- bcm2711_defconfig
Depois disso, precisamos entrar no menuconfig
make O =.. / kernel-out / ARCH = arm64 CROSS_COMPILE = / opt / aarch64 / bin / aarch64-linux-gnu- menuconfig
Quando for lançado, precisamos da configuração existente, então vá para
General -> Preemtion Model e selecione a opção Real Time.
então salvamos a nova configuração e saímos do menu.
Etapa 4: Construindo Kernel RT
Agora é hora de compilação. Observe que pode demorar muito, dependendo dos recursos do seu PC.
make -jx O =.. / kernel-out / ARCH = arm64 CROSS_COMPILE = aarch64-linux-gnu-
Como antes, -jx significa número de empregos. Após a compilação bem-sucedida, precisamos empacotar nosso kernel e enviá-lo para Raspberry Pi. Para fazer isso, executamos os seguintes comandos.
export INSTALL_MOD_PATH = ~ / rpi-kernel / rt-kernelexport INSTALL_DTBS_PATH = ~ / rpi-kernel / rt-kernelmake O =.. / kernel-out / ARCH = arm64 CROSS_COMPILE = aarch64-linux-gnu- modules_install dtbs_installcp../kernel- out / arch / arm64 / boot / Image../rt-kernel/boot/kernel8.imgcd $ INSTALL_MOD_PATHtar czf../rt-kernel.tgz * cd..
Agora nosso kernel deve estar dentro do arquivo rt-kernel.tgz e pronto para ser enviado e instalado.
Etapa 5: Instalando o Novo Kernel
A maneira mais fácil de enviar nosso kernel para o raspbperry é usando scp.
Simplesmente executamos o seguinte comando.
scp rt-kernel.tgz pi @: / tmp
Agora precisamos fazer o login em nosso pi via ssh e descompactar nosso Kernel.
ssh pi @
Quando conectado, copiamos nossos arquivos usando os seguintes comandos.
cd / tmptar xzf rt-kernel.tgz cd boot sudo cp -rd * / boot / cd../lib sudo cp -dr * / lib / cd../overlays sudo cp -dr * / boot / overlays cd../ broadcom sudo cp -dr bcm * / boot /
Depois disso, o que resta fazer é editar o arquivo /boot/config.txt e adicionar a linha a seguir.
kernel = kernel8.img
Depois de reiniciar o pi, tudo deve estar funcionando bem.
Para verificar se o novo kernel foi instalado com sucesso você pode executar
uname -a
comando