Orange Pi PC
As linhas começadas por # são para correr como root e as $ como user.
Requisitos
Gentoo
# crossdev -P -v -t armv7a-hardfloat-linux-gnueabi # PYTHON=python2 emerge u-boot-tools
Preparar o cartão
Limpar
Escrever zeros no inicio do cartão para ter a certeza que não tem restos de outro bootloader.
# dd if=/dev/zero of=/dev/sdX bs=1M count=8
Criar Partição
Criar a partição com o inicio a partir do sector 4096.
# fdisk /dev/sdX
Filesystem
Criar o filesystem com esta opção hacker que ripei de outro artigo.
# mkfs.ext4 -O ^metadata_csum /dev/sdX1
Copiar o Userland
# mkdir /mnt/opipc # mount /dev/sdX1 /mnt/opipc $ mkdir ~/opipc $ cd ~/opipc
Gentoo
Sacar o mais recente de http://distfiles.gentoo.org/releases/arm/autobuilds/current-stage3-armv7a_hardfp/
$ wget http://distfiles.gentoo.org/releases/arm/autobuilds/current-stage3-armv7a_hardfp/stage3-armv7a_hardfp-????????.tar.bz2 # tar xfa stage3-armv7a_hardfp-????????.tar.bz2 -C /mnt/opipc
fstab
Editar o /mnt/opipc/etc/fstab e usar o seguinte, ou então editar conforme necessario (tipo adicionar swap).
<file system> <dir> <type> <options> <dump> <pass> /dev/mmcblk0p1 / ext4 defaults,noatime 0 1 #/dev/mmcblk0p2 none swap defaults 0 0
boot.scr
Criar o ficheiro /mnt/opipc/boot/boot.cmd com o seguinte conteudo:
part uuid ${devtype} ${devnum}:${bootpart} uuid
setenv bootargs console=${console} root=PARTUUID=${uuid} rw rootwait
if load ${devtype} ${devnum}:${bootpart} ${kernel_addr_r} /boot/zImage; then
if load ${devtype} ${devnum}:${bootpart} ${fdt_addr_r} /boot/dtbs/${fdtfile}; then
if load ${devtype} ${devnum}:${bootpart} ${ramdisk_addr_r} /boot/initramfs-linux.img; then
bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r};
else
bootz ${kernel_addr_r} - ${fdt_addr_r};
fi;
fi;
fi
if load ${devtype} ${devnum}:${bootpart} 0x48000000 /boot/uImage; then
if load ${devtype} ${devnum}:${bootpart} 0x43000000 /boot/script.bin; then
setenv bootm_boot_mode sec;
bootm 0x48000000;
fi;
fi
E correr o mkimage para criar o boot.scr.
$ cd /mnt/opipc/boot # mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Orange Pi PC boot script" -d boot.cmd boot.scr
U-Boot
$ cd ~/opipc $ git clone git://git.denx.de/u-boot.git u-boot $ cd u-boot $ make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- -j4 orangepi_pc_defconfig $ PYTHON=python2 make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- -j4
E gravar o bootloader no cartão com:
# dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
Kernel
$ cd ~/opipc # Já não estou a usar este $ git clone https://github.com/megous/linux -b orange-pi-4.17 linux # Passei a usar o mainline $ wget https://git.kernel.org/torvalds/t/linux-4.20-rc4.tar.gz $ tar xfv linux-4.20-rc4.tar.gz $ cd linux-4.20-rc4 # Sacar o config anexado a esta pagina $ wget https://wikipeida.deadbsd.org/images/8/81/Config.txt $ mv Config.txt .config # menuconfig, se necessario $ make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- menuconfig # sem modulos $ make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- zImage dtbs -j4 # com modulos $ make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- zImage dtbs modules -j4 # cp arch/arm/boot/zImage /mnt/opipc/boot # cp arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb /mnt/opipc/boot/dtbs/sun8i-h3-orangepi-pc.dtb # instalar modulos # make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- INSTALL_MOD_PATH=~/opipc/root modules_install -j4 # make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- INSTALL_MOD_PATH=/mnt/opipc modules_install -j4
Mali
Ler primeiro as instruções em sunxi-mali, não esquecer que é necessário activar as opções CONFIG_CMA e CONFIG_DMA_CMA no Kernel.
$ cd ~/opipc $ git clone https://github.com/mripard/sunxi-mali.git || https://github.com/mansr/sunxi-mali.git $ cd sunxi-mali $ export ARCH=arm $ export CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- $ export KDIR=/root/opipc/linux-4.20-rc4 $ export INSTALL_MOD_PATH=/mnt/opipc $ ./build.sh -r r6p2 -b # ./build.sh -r r6p2 -i # Ignorar por enquanto ... $ cd ~/opicp $ git clone https://github.com/free-electrons/mali-blobs.git $ cd mali-blobs # cp r6p2/arm/fbdev/lib* /mnt/opipc/usr/lib/
Cedrus
Ainda muito experimental (só está no 4.20-rc*), mas ver mais info em sunxi-cedrus. Primeiro ainda vou ter que descobrir como "empacotar" as linux-headers do Kernel para passar para a board sem dramas.
Finalizar
# sync # umount /mnt/opipc # eject /dev/sdX