Estou tendo dificuldades para instalar uma imagem que construí com o Yocto. No passado eu sempre usei u-boot, MBR e boot legado. Instalar o Yocto significou criar boot
partições rootfs
, instalar o carregador de inicialização u-boot de primeiro estágio e copiar os arquivos para /boot
a partição de inicialização (uma partição FAT32).
Agora estou tentando fazer algo muito diferente para uma máquina Intel que parece não suportar inicialização herdada. Estou usando systemd-boot
, GPT e UEFI.
Se eu escrever diretamente minha .wic
imagem produzida pelo Yocto, ela inicializará corretamente. Mas se eu tentar seguir um processo como acima, onde particiono e copio manualmente os arquivos, ele será executado systemd-boot
, mas quando tentar carregar minha entrada de inicialização, nada acontecerá.
Uma coisa que notei é que o /boot
diretório produzido rootfs.tar.gz
pelo Yocto é diferente do /boot
diretório que está no .wic
arquivo. Os kernels são diferentes (tamanhos diferentes) e o .wic
arquivo inclui um microcode.cpio
arquivo.
Tentei copiar os arquivos de inicialização do .wic
arquivo e instalá-los manualmente durante a instalação, mas isso me levou a um ponto em que diz EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path
, mas nada acontece depois disso.
Existe algum guia para instalar imagens Yocto particionando manualmente em sistemas UEFI?
Não estou fazendo nada incomum além do método de instalação. Estou construindo nanbield
, core-image-base
e adicionei a camada meta-intel.
Este é o meu local.conf:
MACHINE ?= "intel-corei7-64"
MACHINE ??= "qemux86-64"
DISTRO ?= "poky"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
USER_CLASSES ?= "buildstats"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS ??= "\
STOPTASKS,${TMPDIR},1G,100K \
STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \
STOPTASKS,/tmp,100M,100K \
HALT,${TMPDIR},100M,1K \
HALT,${DL_DIR},100M,1K \
HALT,${SSTATE_DIR},100M,1K \
HALT,/tmp,10M,1K"
PACKAGECONFIG:append:pn-qemu-system-native = " sdl"
IMAGE_FEATURES += "read-only-rootfs"
IMAGE_FSTYPES = "tar.xz"
CORE_IMAGE_EXTRA_INSTALL += "kernel-modules"
# OS packages
CORE_IMAGE_EXTRA_INSTALL += "openssh"
CORE_IMAGE_EXTRA_INSTALL += "nginx"
CORE_IMAGE_EXTRA_INSTALL += "openssl"
CORE_IMAGE_EXTRA_INSTALL += "gnupg"
CORE_IMAGE_EXTRA_INSTALL += "iptables"
CORE_IMAGE_EXTRA_INSTALL += "logrotate"
CORE_IMAGE_EXTRA_INSTALL += "mongodb"
CORE_IMAGE_EXTRA_INSTALL += "sudo"
CORE_IMAGE_EXTRA_INSTALL += "rsync"
CORE_IMAGE_EXTRA_INSTALL += "procps"
# Python packages
CORE_IMAGE_EXTRA_INSTALL += "python3"
CORE_IMAGE_EXTRA_INSTALL += "python3-flask"
CORE_IMAGE_EXTRA_INSTALL += "python3-setuptools"
CORE_IMAGE_EXTRA_INSTALL += "python3-pymongo"
CORE_IMAGE_EXTRA_INSTALL += "python3-cryptography"
CORE_IMAGE_EXTRA_INSTALL += "python3-scrypt"
CORE_IMAGE_EXTRA_INSTALL += "python3-pip"
CORE_IMAGE_EXTRA_INSTALL += "python3-pyserial"
CORE_IMAGE_EXTRA_INSTALL += "python3-pyudev"
# Feature services
CORE_IMAGE_EXTRA_INSTALL += "dnsmasq"
CORE_IMAGE_EXTRA_INSTALL += "rsyslog"
CORE_IMAGE_EXTRA_INSTALL += "ntp"
CORE_IMAGE_EXTRA_INSTALL += "ntpq"
CORE_IMAGE_EXTRA_INSTALL += "ntp-utils"
CORE_IMAGE_EXTRA_INSTALL += "freeradius"
CORE_IMAGE_EXTRA_INSTALL += "net-snmp"
# Remove the following packages before 1.0 release
CORE_IMAGE_EXTRA_INSTALL += "coreutils"
CORE_IMAGE_EXTRA_INSTALL += "vim"
Este é o meu bblayers.conf:
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
/data/opis-current/meta \
/data/opis-current/meta-poky \
/data/opis-current/meta-yocto-bsp \
/data/opis-current/meta-openembedded/meta-oe \
/data/opis-current/meta-openembedded/meta-python \
/data/opis-current/meta-openembedded/meta-webserver \
/data/opis-current/meta-openembedded/meta-networking \
/data/opis-current/meta-intel \
"
O problema acabou sendo uma configuração obscura do BIOS, que encontrei consultando a documentação da máquina que estou usando. Eu vi que eles notaram que, para fazer o Ubuntu inicializar naquela máquina, você tinha que ativar o "PinCntrl Driver GPIO Scheme" no BIOS. Fiz essa alteração e minha compilação do Yocto começou a funcionar também.
Portanto, se outras pessoas tiverem esse problema, recomendo examinar vários problemas de BIOS.