Muito do procedimento abaixo é o mesmo para o Orange Pi Zero, com a diferença da arquitetura de build (que passa ser aarch64).

Conseguir os fontes

Supondo que seu Linux já tenha wget, usualmente é padrão mas caso não, instale. Siga a sequencia de comandos abaixo:

mkdir NetBSD
cd NetBSD
wget https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.3/source/sets/src.tgz \
https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.3/source/sets/xsrc.tgz \
https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.3/source/sets/sharesrc.tgz \
https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.3/source/sets/syssrc.tgz \
https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.3/source/sets/gnusrc.tgz
find . -name '*.tgz' -execdir tar -xzf '{}' \;

Ao final, terá duas pasta, uma src e outra xsrc.

Compilar a imagem

Entre na pasta usr/src, digite o seguinte comando para baixar as ferramentas de cross-compilação, iremos usar a pasta “obj” que irá residir no mesmo nível da usr dentro de nossa pasta de projeto “NetBSD_9”:

(o argumento -j é número de processos em paralelo, use o número de núcleos do seu processador)

./build.sh -U -u -O ../../obj.aarch64  -j32 -m evbarm -a aarch64 tools

Feito esse passo, copie os dados do sumário final, serão necessários para compilar pacotes do NetBSD em sua maquina Linux. Duas informações são de especial importância, o DESTDIS e o TOOLDIR.

===> Tools built to /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/tooldir.Linux-5.18.16-gentoo-dist-x86_64
===> build.sh ended:      Wed Aug 10 22:06:05 -03 2022
===> Summary of results:
         build.sh command:    ./build.sh -U -u -O ../obj.aarch64 -j32 -m evbarm -a aarch64 tools
         build.sh started:    Wed Aug 10 22:03:09 -03 2022
         NetBSD version:      9.99.99
         MACHINE:             evbarm
         MACHINE_ARCH:        aarch64
         Build platform:      Linux 5.18.16-gentoo-dist x86_64
         HOST_SH:             /bin/sh
         No $TOOLDIR/bin/nbmake, needs building.
         Bootstrapping nbmake
         MAKECONF file:       /etc/mk.conf (File not found)
         TOOLDIR path:        /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/tooldir.Linux-5.18.16-gentoo-dist-x86_64
         DESTDIR path:        /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/destdir.evbarm
         RELEASEDIR path:     /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/releasedir
         Created /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/tooldir.Linux-5.18.16-gentoo-dist-x86_64/bin/nbmake
         Updated makewrapper: /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/tooldir.Linux-5.18.16-gentoo-dist-x86_64/bin/nbmake-evbarm
         Tools built to /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/tooldir.Linux-5.18.16-gentoo-dist-x86_64
         build.sh ended:      Wed Aug 10 22:06:05 -03 2022
===> .

Ao final terá em sua pasta obj tudo que é necessário para cross compilar um sistema NetBSD a partir de seus Linux.

Hora de partir para a compilar o sistema em si utilizando isto. Ainda dentro de sua pasta src, digite o comando:

./build.sh -U -u -O ../../obj.aarch64  -j32 -x -X ../xsrc -m evbarm -a aarch64 release

Este passo levará um tempo considerável dependendo da velocidade de seu sistema.

===> Successful make release
===> build.sh ended:      Wed Aug 10 22:29:41 -03 2022
===> Summary of results:
         build.sh command:    ./build.sh -U -u -O ../obj.aarch64 -j32 -m evbarm -a aarch64 release
         build.sh started:    Wed Aug 10 22:21:47 -03 2022
         NetBSD version:      9.99.99
         MACHINE:             evbarm
         MACHINE_ARCH:        aarch64
         Build platform:      Linux 5.18.16-gentoo-dist x86_64
         HOST_SH:             /bin/sh
         No $TOOLDIR/bin/nbmake, needs building.
         Bootstrapping nbmake
         MAKECONF file:       /etc/mk.conf (File not found)
         TOOLDIR path:        /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/tooldir.Linux-5.18.16-gentoo-dist-x86_64
         DESTDIR path:        /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/destdir.evbarm
         RELEASEDIR path:     /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/releasedir
         Created /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/tooldir.Linux-5.18.16-gentoo-dist-x86_64/bin/nbmake
         Updated makewrapper: /home/fbugno/Projects/Personal/NetBSD/src/../obj.aarch64/tooldir.Linux-5.18.16-gentoo-dist-x86_64/bin/nbmake-evbarm
         Successful make release
         build.sh ended:      Wed Aug 10 22:29:41 -03 2022
===> .

Hora de compilar o uboot para a OrangePi. Para isso iremos precisar das receitas do pkgsrc do NetBSD. Em sua pasta usr dentro da NetBSD_9.

Preparando o pkgsrc

O NetBSD faz uso de um sistema de pacotes multiplataforma chamado pkgsrc. Temos que preparar ele para uso em Linux.

Comece por pegar uma listagem de pacotes. Na época que este tutorial foi redigido era a 2021Q4.

cd ..
cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot co -r pkgsrc-2022Q1 -P pkgsrc

Então vá em pkgsrc/bootstrap e abra o arquivo bootstrap no nano ou outro editor de seu gosto. Adicione na linha 1304 o seguinte: –without-libb2

Ficará assim:

$shprog ./configure $configure_quiet_flags --enable-static --disable-shared \
--disable-bsdtar --disable-bsdcpio --disable-posix-regex-lib --disable-xattr \
--disable-maintainer-mode --disable-acl --without-zlib --without-bz2lib \
--without-iconv --without-lzma --without-lzo2 --without-lz4 --without-libb2 \
--without-nettle --without-openssl --without-xml2 --without-expat --without-zstd \

Salve, e execute o comando abaixo, o argumento prefix tem de ser absoluto invés de relativo (ou seja, não usar ../../):

./bootstrap --prefix ~/Projects/Personal/NetBSD_9/pkg --unprivileged --cwrappers no --workdir /tmp/bootwork

Ao final, ele emitirá a seguinte mensagem:

===========================================================================

Please remember to add /home/fbugno/Projects/Personal/NetBSD_9/pkg/bin to your PATH environment variable
and /home/fbugno/Projects/Personal/NetBSD_9/pkg/man to your MANPATH environment variable, if necessary.

An example mk.conf file with the settings you provided to "bootstrap"
has been created for you. It can be found in:

      /home/fbugno/Projects/Personal/NetBSD_9/pkg/etc/mk.conf

You can find extensive documentation of the NetBSD Packages Collection
in /home/fbugno/Projects/Personal/NetBSD_9/pkgsrc/doc/pkgsrc.txt.

Thank you for using pkgsrc!

===========================================================================

===> bootstrap started: qui 07 out 2021 23:24:21 -03
===> bootstrap ended:   qui 07 out 2021 23:27:05 -03

Seguindo o que foi pedido na mensagem, adicione o /home/fbugno/Projects/Personal/NetBSD_9/pkg/bin e sbin no PATH de seu ~/.bashrc:

export PATH=~/Projects/Personal/NetBSD_9/pkg/bin:~/Projects/Personal/NetBSD_9/pkg/sbin:$PATH

Feche e abra seu terminal novamente para o PATH ser aplicado, ou caso não queira essa mudança permanente, apenas digite na linha comando o export acima.

Veja se ele encontra o comando bmake agora:

fbugno@Wilhelm ~ $ bmake
bmake: no target to make.

bmake: stopped in /home/fbugno
fbugno@Wilhelm ~ $

Compilando o uboot pra OrangePi PC2

Estamos prontos para cross compilar o uboot para o Orange Pi PC2!

Vá para a pasta do seu pkgsrc e e então em sysutils/u-boot-orangepi-zero, e então dê o seguinte comando para gerar um pacote para NetBSD. Nem tente usar cross compilação para isso pois parte do processo envolve compilar o GCC para armnone, e executar ele.

bmake package

Isto pode levar um tempo, pois todas as dependencias também serão compiladas.

Se ele falhar com multiple definition of `yylloc’; scripts/dtc/dtc-lexer.lex.o: Abra o arquivo work/u-boot-2018.11/Makefile e adicione “-fcommon” no fim da lista do primeiro HOSTCFLAGS que achar. Então tem compilar novamente com bmake package

Isso se deve a muitas distribuições Linux já usarem GCC com versão superior a 10, onde -fno-common é o padrão, e isto dá problemas com DTC antigo. No futuro, o próprio DTC que vem com o pkgsrc pode ser atualizado com o ultimo upstream disponível onde a versão do compilador não é mais problema.

Após a compilação encerrar, ele lhe dará o caminho para um pacote que foi gerado.

=> Creating binary package /home/fbugno/Projects/Personal/NetBSD_9/pkgsrc/packages/All/u-boot-orangepi-zero-2018.11nb4.tgz

Instale ele em seu pkg com o commando

pkg_add /home/fbugno/Projects/Personal/NetBSD_9/pkgsrc/packages/All/u-boot-orangepi-zero-2018.11nb4.tgz

Agora ele foi instalado na pasta ~/Projects/Personal/NetBSD_9/pkg/share/u-boot/orangepi-zero. Ele é o bootloader de sua OrangePi Zero.

Fazer o flash da imagem em um SDCard

Supondo que tudo tenha dado certo até agora, você tem uma imagem do NetBSD pronta e um bootloader para sua OrangePi zero! Hora de testar. Copie a imagem do NetBSD e o u-boot-sunxi-with-spl.bin para sua pasta home.

cp ~/Projects/Personal/NetBSD_9/pkg/share/u-boot/orangepi-zero/u-boot-sunxi-with-spl.bin ~
cp /home/fbugno/Projects/Personal/NetBSD_9/obj.earmv7hf/releasedir/evbarm/binary/gzimg/armv7.img.gz ~

Com isto, o bootload e a imagem devem estar no mesmo local. Hora de copiá-los para um cartão SD, e usá-lo em sua OrangePi Zero.

Em meu PC Linux, o SD card é mapeado em /dev/sda. Veja em qual está eu seu sistema com o comando “dmesg” verificando as ultimas linhas.

[ 4045.924901] scsi 6:0:0:0: Direct-Access              SD Card Reader   1.00 PQ: 0 ANSI: 6
[ 4045.925410] sd 6:0:0:0: Attached scsi generic sg0 type 0
[ 4045.926277] sd 6:0:0:0: [sda] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB)
[ 4045.927062] sd 6:0:0:0: [sda] Write Protect is off

Agora transfira a imagem e o bootload para o sdcard com os seguintes comandos (talvez seja necessário usar sudo em sua máquina antes do comando dd):

gzip -df armv7.img.gz
dd if=./armv7.img of=/dev/sda bs=1M
dd if=./u-boot-sunxi-with-spl.bin of=/dev/sda bs=1K seek=8 conv=sync
sync

Insira o sdcard em sua OrangePi PC2 devidamente preparada com um cabo de console, e o console aberto em seu linux com um aplicativo como putty, minicom ou picocom.

E sim, isso é muito parecido como preparar um Orange Pi Zero e quase todo esse tutorial é uma cópia daquele primeiro com algumas maquiagens.