Prática 11 - Customizando Kernel e Criando Patches
Note
VERIFICAR COM O INSTRUTOR QUAL CONTAINER DEVERÁ SER UTILIZADO.
QEMU
- ~/treinamento/yp/poky/build-toradex
- ~/treinamento/yp/poky/meta-treinamento
Toradex Colibri iMX8X
- ~/treinamento/yp/oe-core/build
- ~/treinamento/yp/oe-core/layers/meta-treinamento
Note
ANTES DE CONTINUAR CASO TODAS AS PRATICAS COM meta-treinamento FORAM EXECUTADAS NO CONTAINER COM QEMU, COPIAR meta-treinamento PARA ~/treinamento/yp/oe-core/layers/ ANTES DE CONTINUAR!
Antes de criar a receita .bbappend para customização do kernel vamos utilizar o proprio bitbake e descobrir o nome (PN) e a versão (PV) do kernel Linux utilizado no hardware.
Aqui esta uma sacada utilizando virtual/kernel que retornará o kernel utilizado, ele é um alias para a receita do MACHINE para Kernel.
MACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake -e virtual/kernel | egrep '^PN.|^PV'
Resultado:
Na camada meta-treinamento criar o diretório meta-treinamento/recipes-kernel/linux e criar o arquivo .bbappend para customização do kernel linux-toradex_6.6-2.2.x.bbappend.
cd ~/treinamento/yp/poky/meta-treinamento/
mkdir -p recipes-kernel/linux/linux-yocto
touch recipes-kernel/linux/linux-yocto_6.6%.bbappend
cd ~/treinamento/yp/poky/build-qemu
cd ~/treinamento/yp/oe-core/layers/meta-treinamento/
mkdir -p recipes-kernel/linux/linux-toradex
touch recipes-kernel/linux/linux-toradex_6.6-2.2.x.bbappend
cd ~/treinamento/yp/oe-core/build
Primeiro limpar qualquer configuração do kernel no build atual:
MACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake -c cleansstate virtual/kernel
Próximo passo executar o comando -c menuconfig para abrir o menu Kconfig para configuração:
MACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake -c menuconfig virtual/kernel

Navegue pelo menu de configurações, no exemplo deverá habilitar suporte ao Driver Touchscreen GOODIX, em Device Drivers -> Input Device Support -> Touchscreens -> Goodix I2C touchscreen e deixe marcado como módulo(M).
Em seguida selecione Save, confirme que o nome do arquivo seja .config e selecione Exit e na sequência Exit até sair do Kernel Configuration.
O arquivo .config modificado está salvo mas em uma região temporária do build, caso queira gerar um defconfig com esta modificação para anexar ao projeto, execute o comando -c savedefconfig.
MACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake -c savedefconfig virtual/kernel
No final do comando uma mensagem será exibida dizendo o local onde foi gerado o defconfig para cópia.
| CONTAINER QEMU | |
|---|---|
| CONTAINER TORADEX | |
|---|---|
Antes de copiar o arquivo abra ele ou visualize no terminal e confirme se CONFIG_TOUCHSCREEN_GOODIX=m está presente no arquivo.
Em seguida copiar o defconfig para meta-treinamento/recipes-kernel/linux/linux-toradex:
cp /home/b2open/treinamento/yp/poky/build-qemu/tmp/work/qemux86_64-poky-linux/linux-yocto/6.6.123+git/build/defconfig ~/treinamento/yp/poky/meta-treinamento/recipes-kernel/linux/linux-toradex/
cp /home/b2open/treinamento/yp/oe-core/build/tmp/work/colibri_imx8x-tdx-linux/linux-toradex/6.6.94+git/build/defconfig ~/treinamento/yp/oe-core/layers/meta-treinamento/recipes-kernel/linux/linux-toradex/
E adicionar a configuração abaixo em linux-toradex_6.6-2.2.x.bbappend.
Acima está adicionando o diretório linux-toradex(Variável PN) do diretório atual da camada (Variável THISDIR) e informando para utilizar o defconfig desta camada para o kernel.
Estrutura final da customização da receita do kernel:
Resultado:
| Executar no HOST - CONTAINER QEMU | |
|---|---|
| Executar no HOST - CONTAINER TORADEX | |
|---|---|
Outra opção importante é não gerar o defconfig completo, mas somente uma configuração parcial com a modificação realizada e gerar o arquivo de fragmento(.cfg).
Novamente execute o comando -c cleansstate na receita do kernel:
MACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake -c cleansstate virtual/kernel
Executar novamente o bitbake da receita do kernel com a opção -c menuconfig e selecionar a opção B.A.T.M.A.N. em:
Networking Support -> Network Options -> B.A.T.M.A.N. Advanced Meshing Protocol marcar a opção como módulo(M), clicar em Save e Exit.
O próximo passo é o comando para gerar apenas o fragmento desta modificação utilizando -c diffconfig:
MACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake -c diffconfig virtual/kernel
No final deste comando irá mostrar o caminho que o fragmento foi gerado.
| CONTAINER QEMU | |
|---|---|
| CONTAINER TORADEX | |
|---|---|
O próximo passo é copiar o fragment.cfg, renomear para o nome que identifica a configuração, exemplo batman_adv.cfg e copiar junto ao diretório do defconfig.
cp /home/b2open/treinamento/yp/poky/build-qemu/tmp/work/qemux86_64-poky-linux/linux-yocto/6.6.123+git/fragment.cfg ~/treinamento/yp/poky/meta-treinamento/recipes-kernel/linux/linux-toradex/batman_adv.cfg
cp /home/b2open/treinamento/yp/oe-core/build/tmp/work/colibri_imx8x-tdx-linux/linux-toradex/6.6.94+git/fragment.cfg ~/treinamento/yp/oe-core/layers/meta-treinamento/recipes-kernel/linux/linux-toradex/batman_adv.cfg
Edite o arquivo linux-toradex_6.6-2.2.x.bbappend e adicione o nome do fragmento como abaixo:
Criando Patch e aplicando Patches
Existem diversas formas de se criar patches do kernel ou qualquer software, acessando o diretório de trabalho (WORKDIR) e depois o diretório git e modificar o arquivo ou executar o kernel com a opção -c devshell.
Executando com opção -c devshell:
MACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake -c devshell virtual/kernel
Como exemplo, edite o arquivo init/calibrate.c onde será adicionada uma mensagem que será exibida durante a inicialização, ao abrir o arquivo procure pela função void calibrate_delay(void) e adicione o código abaixo:
Salve o arquivo, execute o comando git status para verificar o estado atual.
Saída esperada:
Saída esperada:
Faça git add do arquivo modificado, depois git commit e adicione um comentário e para gerar o patch execute git format-patch -1.
Saída esperada:
Em seguida, copiar o arquivo de patch gerado 0001-Add-Print-Msg.patch para o diretório junto ao defconfig e o fragmento .cfg, e adicionar o patch no arquivo .bbappend do kernel:
cp 0001-Add-Print-Msg.patch ~/treinamento/yp/poky/meta-treinamento/recipes-kernel/linux/linux-toradex/
exit
cp 0001-Add-Print-Msg.patch ~/treinamento/yp/oe-core/layers/meta-treinamento/recipes-kernel/linux/linux-toradex/
exit
Editar o arquivo da receita do kernel e adicionar o patch criado.
cd ~/treinamento/yp/oe-core/layers/meta-treinamento/recipes-kernel/linux
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI += " \
file://0001-Add-Print-Msg.patch \
file://defconfig \
file://batman_adv.cfg \
"
Retorno ao diretorio de build e execute o comando para gerar a nova imagem com as alterações no kernel.
Compile o Kernel, na sequência gera a nova imagem b2open-core-image, analise as configurações e customizações após gravação e realizar boot no hardware.
cd
MACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake b2open-core-image