Orange Pi One Plus
Requisitos
Gentoo
crossdev -P -v -t aarch64-unknown-linux-gnu
PYTHON=python2 emerge u-boot-tools
ArchLinux
pacman -S uboot-tools aarch64-linux-gnu-binutils aarch64-linux-gnu-gcc aarch64-linux-gnu-glibc aarch64-linux-gnu-linux-api-headers
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
mkswap /dev/sdX2
Copiar o Userland
mkdir /mnt/opioneplus
mount /dev/sdX1 /mnt/opioneplus
mkdir ~/opioneplus
cd ~/opioneplus
ArchLinux
wget http://archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C /mnt/opioneplus
Gentoo
Sacar o mais recente de http://distfiles.gentoo.org/releases/arm/autobuilds/current-stage3-arm64/
wget http://distfiles.gentoo.org/releases/arm/autobuilds/current-stage3-arm64/stage3-arm64-????????.tar.bz2
tar xfa stage3-arm64-????????.tar.bz2 -C /mnt/opioneplus
fstab
Editar o /mnt/opioneplus/etc/fstab e usar o seguinte.
<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/opioneplus/boot/boot.cmd com o seguinte conteúdo:
part uuid ${devtype} ${devnum}:${bootpart} uuid
#setenv console tty0
setenv bootargs console=${console} root=PARTUUID=${uuid} rw rootwait
setenv fdtfile allwinner/sun50i-h6-orangepi-one-plus.dtb
if load ${devtype} ${devnum}:${bootpart} ${kernel_addr_r} /boot/Image; 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
booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r};
else
booti ${kernel_addr_r} - ${fdt_addr_r};
fi;
fi;
fi
# Generate with:
# mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Orange Pi One Plus boot script" -d boot.cmd boot.scr
E correr o mkimage para criar o boot.scr.
cd /mnt/opioneplus/boot
mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Orange Pi One Plus boot script" -d boot.cmd boot.scr
ARM Trusted Firmware
cd ~/opioneplus
git clone https://github.com/ARM-software/arm-trusted-firmware
cd arm-trusted-firmware
make CROSS_COMPILE=aarch64-unknown-linux-gnu- PLAT=sun50i_h6 DEBUG=1 bl31
cp build/sun50i_h6/debug/bl31.bin ../u-boot/
U-Boot
cd ~/opioneplus
git clone git://git.denx.de/u-boot.git
cd u-boot
export BL31=~/opioneplus/u-boot/bl31.bin
make ARCH=arm CROSS_COMPILE=aarch64-unknown-linux-gnu- -j4 orangepi_one_plus_defconfig
make ARCH=arm CROSS_COMPILE=aarch64-unknown-linux-gnu- -j4
E gravar o bootloader no cartão com:
dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=8k seek=1
Kernel
# menuconfig, se necessario
make ARCH=arm64 CROSS_COMPILE=aarch64-unknown-linux-gnu- menuconfig
# sem modulos
make ARCH=arm64 CROSS_COMPILE=aarch64-unknown-linux-gnu- Image dtbs -j4
# com modulos
make ARCH=arm64 CROSS_COMPILE=aarch64-unknown-linux-gnu- Image dtbs modules -j4
# instalar modulos
make ARCH=arm64 CROSS_COMPILE=aarch64-unknown-linux-gnu- INSTALL_MOD_PATH=/mnt/opioneplus modules_install -j4
cp arch/arm64/boot/Image /mnt/opioneplus/boot
cp arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-one-plus.dtb /mnt/opioneplus/boot/dtbs/allwinner
MALI
cd ~/opioneplus
git clone https://github.com/mripard/sunxi-mali.git
cd sunxi-mali
export ARCH=arm64
export CROSS_COMPILE=aarch64-unknown-linux-gnu-
export KDIR=/root/opioneplus/linux
export INSTALL_MOD_PATH=/mnt/opioneplus
./build.sh -r r6p2 -b
./build.sh -r r6p2 -i
cd ~/opicp2
git clone https://github.com/free-electrons/mali-blobs.git
cd mali-blobs
cp r6p2/arm64/fbdev/lib* /mnt/opioneplus/usr/lib/
Finalizar
sync
umount /mnt/opioneplus
eject /dev/sdX