5.1. Arrancar o Instalador em 64-bit ARM

5.1.1. Configuração da consola

O instalador gráfico não está activo por defeito nas imagens debian-installer arm64 para jessie por isso é utilizada a consola série. O dispositivo de consola deve ser detectado automaticamente pelo firmware, mas se não for então quando arrancar o linux a partir do menu do GRUB irá ver a mensagem Booting Linux, e depois mais nada.

Se tiver este problema irá necessitar de definir uma configuração especifica de consola na linha de comandos do kernel. Carregue em e para Edit Kernel command-line no menu do GRUB, e altere

--- quiet

para

console=<device>,<speed>

e.g.

console=ttyAMA0,115200n8

. Quando terminar carregue em Control+x para continuar a arrancar com a nova definição.

5.1.2. Instalação do Juno

Juno tem UEFI por isso a instalação é pacífica. O método mais prático é instalar a partir de pen USB. Para funcionar necessitará de firmware actualizado para o arranque por USB funcionar. As compilações de http://releases.linaro.org/latest/members/arm/ após Março de 2015 foram testadas com sucesso. Consulte a documentação do Juno sobre a actualização de firmware.

Prepare uma imagem standard de CD arm64 numa pen USB. Insira-a numa das portas USB que estão atrás. Ligue o cabo série na porta série de 9 pinos, atrás. Se necessitar de rede (imagem netboot) ligue o cabo de rede na porta na parte da frente da máquina.

Run a serial console at 115200, 8bit no parity, and boot the Juno. It should boot from the USB stick to a GRUB menu. The console config is not correctly detected on Juno so just hitting Enter will show no kernel output. Set the console to

console=ttyAMA0,115200n8

(as described in Secção 5.1.1, “Configuração da consola”). Control+x to boot should show you the debian-installer screens, and allow you to proceed with a standard installation.

5.1.3. Instalação do Applied Micro Mustang

Está disponível UEFI para esta máquina mas é normalmente lançado com U-Boot por isso irá necessitar de instalar primeiro o firmware UEFI e depois utilizar os métodos de arranque/instalação standard, ou utilizar os métodos de arranque por U-Boot. Além disso o USB não é suportado no kernel jessie por isso instalar a partir de uma pen USB não iria funcionar. Terá de utilizar uma consola série para controlar a instalação pois o instalador gráfico não está activo na arquitectura arm64.

O método de instalação recomendado é copiar o kernel e o initrd do debian-installer para o disco rígido, utilizando o sistema openembedded fornecido com a máquina, e depois arrancar daí e correr o instalador. Em alternativa, pode utilizar TFTP para obter o kernel/dtb/initrd e arrancar (Secção 5.1.4.1, “Arranque por TFTP em U-Boot”). Após a instalação, são necessárias alterações manuais para arrancar a partir da imagem instalada.

Corra uma consola série a 115200, 8bit sem paridade, e arranque a máquina. Reinicie a máquina e quando vir Hit any key to stop autoboot: carregue numa tecla para obter uma prompt Mustang#. Depois utilize os comandos U-Boot para carregar e iniciar o kernel, dtb e initrd.

5.1.4. Arrancar por TFTP

Arrancar pela rede requer que tenha uma ligação de rede e um servidor TFTP de arranque por rede (e provavelmente também um servidor de DHCP, RARP ou BOOTP para a configuração automática de rede).

A configuração do servidor para suportar arranque pela rede é descrita em Secção 4.3, “Preparar Ficheiros para Arrancar Através da Rede por TFTP”.

5.1.4.1. Arranque por TFTP em U-Boot

O arranque pela rede em sistemas que utilizam o firmware U-Boot consiste em três passos: a) configurar a rede, b) carregar as imagens (kernel/ramdisk inicial/dtb) para a memória e c) efectivamente executar o código carregado.

Primeiro tem de configurar a rede, quer automaticamente por DHCP ou correndo

setenv autoload no
dhcp

ou manualmente definindo várias variáveis de ambiente

setenv ipaddr <endereço ip do cliente>
setenv netmask <máscara de rede>
setenv serverip <endereço ip do servidor de tftp>
setenv dnsip <endereço ip do servidor de nomes (dns)>
setenv gatewayip <endereço ip da gateway predefinida>

saveenv

Depois tem de carregar as imagens (kernel/ramdisk inicial) para a memória. Isto é feito com o comando tftpboot, ao qual tem de ser passado o endereço a partir de onde é guardada na memória a imagem. Infelizmente o mapa de memória pode variar entre sistemas, por isso não há uma regra genérica com os endereços que possam ser utilizados para isto.

On some systems, U-Boot predefines a set of environment variables with suitable load addresses: kernel_addr_r, ramdisk_addr_r and fdt_addr_r. You can check whether they are defined by running

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

If they are not defined, you have to check your system's documentation for appropriate values and set them manually. For systems based on Allwinner SunXi SOCs (e.g. the Allwinner A10, architecture name sun4i or the Allwinner A20, architecture name sun7i), you can e.g. use the following values:

setenv kernel_addr_r 0x46000000
setenv fdt_addr_r 0x47000000
setenv ramdisk_addr_r 0x48000000

Quando estiverem definidos os endereços de carregamento, pode assim carregar as imagens para a memória a partir do servidor tftp anteriormente definido:

tftpboot ${kernel_addr_r} <nome de ficheiro da imagem do kernel>
tftpboot ${fdt_addr_r} <nome de ficheiro de dtb>
tftpboot ${ramdisk_addr_r} <nome de ficheiro da imagem inicial de ramdisk>

A terceira parte é definir a linha de comandos do kernel e executar o código carregado. U-boot passa o conteúdo da variável de ambiente bootargs como linha de comandos do kernel, por isso quaisquer parâmetros para o kernel e instalador - tais como dispositivo de consola (veja Secção 5.3.1, “Consola de arranque”) ou opções de preseeding (seja Secção 5.3.2, “Parâmetros de instalação Debian” e Apêndice B, Automatizar a instalação utilizando 'preseeding') - pode ser definido com um comando como

setenv bootargs console=ttyS0,115200 rootwait panic=10

O comando exato a executar o código carregado anteriormente depende do formato de imagem utilizado. Com uImage/uInitrd o comando é

bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}

e com imagens nativas de Linux é

bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}

Nota: Quando arrancar imagens standard de linux, é importante carregar a imagem ramdisk inicial após o kernel e o dtb já que U-Boot define a variável de tamanho de ficheiro ao tamanho do último ficheiro carregado e o comando bootz necessita o tamanho da imagem ramdisk para funcionar correctamente. Em caso de arrancar um kernel específico da plataforma, i.e. um kernel sem device-tree, simplesmente omita o parâmetro ${fdt_addr_r}.