Desde que NetBSD anunciara que estaban haciendo de ARM una arquitectura de nivel 1, he estado siguiendo su trabajo de desarrollo. Hace unas semanas, en la lista de correo de los desarrolladores de ARM de NetBSD, Jared McNeill dijo: “... el kernel GENERIC64 ahora admite el SoC Amlogic S905 utilizado en la placa ODROID-C2. Ethernet, USB y SD / eMMC funcionan..." Inmediatamente me hice con una imagen y empecé a hacer pruebas. Quiera comentar cual ha sido el resultado y animar a otros a que lo prueben. No es habitual que ODROID reciba un nuevo sistema operativo que no sea Linux.
$ uname -a NetBSD odroid-c2 8.99.37 NetBSD 8.99.37 (GENERIC64) #0: Sat Apr 6 17:42:28 UTC 2019 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/evbarm/compile/GENERIC64 evbarmEn el par de semanas que lo he estado usando, a pesar de que actualmente es una imagen de desarrollo, da la impresión de que es bastante estable. No he tenido ningún problema con Ethernet, USB o SD /eMMC. Todavía no hay un driver de memoria de imagen, así que toda la interacción se realiza a través de la consola serie o ssh. Recientemente, tanto Armv7 como Arm64 para NetBSD han sido movidos a un arranque EFI utilizando el último U-Boot y lo que parece ser el U-Boot Driver Model (DM). Hay una presentación de FOSDEM'19 U-Boot y diapositivas que cubren algunas de estas características.
https://video.fosdem.org/2019/K.4.401/hw_uboot.mp4https://fosdem.org/2019/schedule/event/hw_uboot/attachments/slides/3324/export/events/attachments/hw_uboot/slides/3324/Jagan_Teki___U_Boot_from_Scratch_v2019_01_edition_v2.pdf
Actualización de NetBSD de Benny Siegert en FOSDEM'19 https://video.fosdem.org/2019/K.3.401/netbsd_update.mp4
U-Boot NetBSD Odroid-C2
=> version U-Boot 2019.04-rc1-00141-g63f7e3fca3 (Feb 15 2019 - 20:11:48 -0400) odroid-c2
=> dm tree Class Index Probed Driver Name ----------------------------------------------------------- root 0 [ + ] root_driver root_driver firmware 0 [ ] psci |-- psci clk 0 [ ] fixed_rate_clock |-- xtal-clk simple_bus 0 [ + ] generic_simple_bus |-- soc simple_bus 1 [ ] generic_simple_bus | |-- bus@c1100000 reset 0 [ ] meson_reset | | |-- reset-controller@4404 i2c 0 [ ] i2c_meson | | `-- i2c@8500 simple_bus 2 [ + ] generic_simple_bus | |-- bus@c8100000 simple_bus 3 [ ] generic_simple_bus | | |-- sys-ctrl@0 syscon 0 [ ] syscon | | |-- ao-secure@140 serial 0 [ + ] serial_meson | | |-- serial@4c0 pinctrl 0 [ + ] meson-gxbb-pinctrl | | `-- pinctrl@14 pinconfig 0 [ ] pinconfig | | |-- bank@14 pinconfig 1 [ ] pinconfig | | | `-- usb-hub pinconfig 2 [ + ] pinconfig | | |-- uart_ao_a pinconfig 3 [ ] pinconfig | | | `-- mux pinconfig 4 [ ] pinconfig | | |-- uart_ao_a_cts_rts pinconfig 5 [ ] pinconfig | | | `-- mux pinconfig 6 [ ] pinconfig | | |-- uart_ao_b pinconfig 7 [ ] pinconfig | | | `-- mux pinconfig 8 [ ] pinconfig | | |-- uart_ao_b_cts_rts pinconfig 9 [ ] pinconfig | | | `-- mux pinconfig 10 [ ] pinconfig | | |-- remote_input_ao pinconfig 11 [ ] pinconfig | | | `-- mux pinconfig 12 [ ] pinconfig | | |-- i2c_ao pinconfig 13 [ ] pinconfig | | | `-- mux pinconfig 14 [ ] pinconfig | | |-- pwm_ao_a_3 pinconfig 15 [ ] pinconfig | | | `-- mux pinconfig 16 [ ] pinconfig | | |-- pwm_ao_a_6 pinconfig 17 [ ] pinconfig | | | `-- mux pinconfig 18 [ ] pinconfig | | |-- pwm_ao_a_12 pinconfig 19 [ ] pinconfig | | | `-- mux pinconfig 20 [ ] pinconfig | | |-- pwm_ao_b pinconfig 21 [ ] pinconfig | | | `-- mux pinconfig 22 [ ] pinconfig | | |-- i2s_am_clk pinconfig 23 [ ] pinconfig | | | `-- mux pinconfig 24 [ ] pinconfig | | |-- i2s_out_ao_clk pinconfig 25 [ ] pinconfig | | | `-- mux pinconfig 26 [ ] pinconfig | | |-- i2s_out_lr_clk pinconfig 27 [ ] pinconfig | | | `-- mux pinconfig 28 [ ] pinconfig | | |-- i2s_out_ch01_ao pinconfig 29 [ ] pinconfig | | | `-- mux pinconfig 30 [ ] pinconfig | | |-- i2s_out_ch23_ao pinconfig 31 [ ] pinconfig | | | `-- mux pinconfig 32 [ ] pinconfig | | |-- i2s_out_ch45_ao pinconfig 33 [ ] pinconfig | | | `-- mux pinconfig 34 [ ] pinconfig | | |-- spdif_out_ao_6 pinconfig 35 [ ] pinconfig | | | `-- mux pinconfig 36 [ ] pinconfig | | |-- spdif_out_ao_13 pinconfig 37 [ ] pinconfig | | | `-- mux pinconfig 38 [ ] pinconfig | | |-- ao_cec pinconfig 39 [ ] pinconfig | | | `-- mux pinconfig 40 [ ] pinconfig | | |-- ee_cec pinconfig 41 [ ] pinconfig | | | `-- mux gpio 0 [ ] meson-gx-gpio | | `-- meson-gpio simple_bus 4 [ + ] generic_simple_bus | |-- periphs@c8834000 pinctrl 1 [ + ] meson-gxbb-pinctrl | | `-- pinctrl@4b0 pinconfig 42 [ ] pinconfig | | |-- bank@4b0 pinconfig 43 [ + ] pinconfig | | |-- emmc pinconfig 44 [ ] pinconfig | | | `-- mux pinconfig 45 [ + ] pinconfig | | |-- emmc-ds pinconfig 46 [ ] pinconfig | | | `-- mux pinconfig 47 [ ] pinconfig | | |-- emmc_clk_gate pinconfig 48 [ ] pinconfig | | | |-- mux pinconfig 49 [ ] pinconfig | | | `-- cfg-pull-down pinconfig 50 [ ] pinconfig | | |-- nor pinconfig 51 [ ] pinconfig | | | `-- mux pinconfig 52 [ ] pinconfig | | |-- spi-pins pinconfig 53 [ ] pinconfig | | | `-- mux pinconfig 54 [ ] pinconfig | | |-- spi-ss0 pinconfig 55 [ ] pinconfig | | | `-- mux pinconfig 56 [ + ] pinconfig | | |-- sdcard pinconfig 57 [ ] pinconfig | | | `-- mux pinconfig 58 [ ] pinconfig | | |-- sdcard_clk_gate pinconfig 59 [ ] pinconfig | | | |-- mux pinconfig 60 [ ] pinconfig | | | `-- cfg-pull-down pinconfig 61 [ ] pinconfig | | |-- sdio pinconfig 62 [ ] pinconfig | | | `-- mux pinconfig 63 [ ] pinconfig | | |-- sdio_clk_gate pinconfig 64 [ ] pinconfig | | | |-- mux pinconfig 65 [ ] pinconfig | | | `-- cfg-pull-down pinconfig 66 [ ] pinconfig | | |-- sdio_irq pinconfig 67 [ ] pinconfig | | | `-- mux pinconfig 68 [ ] pinconfig | | |-- uart_a pinconfig 69 [ ] pinconfig | | | `-- mux pinconfig 70 [ ] pinconfig | | |-- uart_a_cts_rts pinconfig 71 [ ] pinconfig | | | `-- mux pinconfig 72 [ ] pinconfig | | |-- uart_b pinconfig 73 [ ] pinconfig | | | `-- mux pinconfig 74 [ ] pinconfig | | |-- uart_b_cts_rts pinconfig 75 [ ] pinconfig | | | `-- mux pinconfig 76 [ ] pinconfig | | |-- uart_c pinconfig 77 [ ] pinconfig | | | `-- mux pinconfig 78 [ ] pinconfig | | |-- uart_c_cts_rts pinconfig 79 [ ] pinconfig | | | `-- mux pinconfig 80 [ ] pinconfig | | |-- i2c_a pinconfig 81 [ ] pinconfig | | | `-- mux pinconfig 82 [ ] pinconfig | | |-- i2c_b pinconfig 83 [ ] pinconfig | | | `-- mux pinconfig 84 [ ] pinconfig | | |-- i2c_c pinconfig 85 [ ] pinconfig | | | `-- mux pinconfig 86 [ + ] pinconfig | | |-- eth-rgmii pinconfig 87 [ ] pinconfig | | | `-- mux pinconfig 88 [ ] pinconfig | | |-- eth-rmii pinconfig 89 [ ] pinconfig | | | `-- mux pinconfig 90 [ ] pinconfig | | |-- pwm_a_x pinconfig 91 [ ] pinconfig | | | `-- mux pinconfig 92 [ ] pinconfig | | |-- pwm_a_y pinconfig 93 [ ] pinconfig | | | `-- mux pinconfig 94 [ ] pinconfig | | |-- pwm_b pinconfig 95 [ ] pinconfig | | | `-- mux pinconfig 96 [ ] pinconfig | | |-- pwm_d pinconfig 97 [ ] pinconfig | | | `-- mux pinconfig 98 [ ] pinconfig | | |-- pwm_e pinconfig 99 [ ] pinconfig | | | `-- mux pinconfig 100 [ ] pinconfig | | |-- pwm_f_x pinconfig 101 [ ] pinconfig | | | `-- mux pinconfig 102 [ ] pinconfig | | |-- pwm_f_y pinconfig 103 [ ] pinconfig | | | `-- mux pinconfig 104 [ ] pinconfig | | |-- hdmi_hpd pinconfig 105 [ ] pinconfig | | | `-- mux pinconfig 106 [ ] pinconfig | | |-- hdmi_i2c pinconfig 107 [ ] pinconfig | | | `-- mux pinconfig 108 [ ] pinconfig | | |-- i2sout_ch23_y pinconfig 109 [ ] pinconfig | | | `-- mux pinconfig 110 [ ] pinconfig | | |-- i2sout_ch45_y pinconfig 111 [ ] pinconfig | | | `-- mux pinconfig 112 [ ] pinconfig | | |-- i2sout_ch67_y pinconfig 113 [ ] pinconfig | | | `-- mux pinconfig 114 [ ] pinconfig | | |-- spdif_out_y pinconfig 115 [ ] pinconfig | | | `-- mux gpio 1 [ + ] meson-gx-gpio | | `-- meson-gpio simple_bus 5 [ ] generic_simple_bus | |-- bus@c8838000 simple_bus 6 [ + ] generic_simple_bus | |-- bus@c883c000 simple_bus 7 [ + ] generic_simple_bus | | `-- system-controller@0 clk 1 [ + ] meson_clk | | |-- clock-controller syscon 1 [ + ] syscon | | `-- system-controller@0 clk 2 [ ] meson_clk | | `-- clock-controller eth 0 [ + ] eth_designware | |-- ethernet@c9410000 simple_bus 8 [ + ] generic_simple_bus | `-- apb@d0000000 mmc 0 [ + ] meson_gx_mmc | |-- mmc@72000 blk 0 [ ] mmc_blk | | `-- mmc@72000.blk mmc 1 [ + ] meson_gx_mmc | `-- mmc@74000 blk 1 [ ] mmc_blk | `-- mmc@74000.blk regulator 0 [ ] fixed regulator |-- regulator-usb-pwrs regulator 1 [ ] fixed regulator |-- regulator-tflash_vdd regulator 2 [ ] fixed regulator |-- regulator-vcc1v8 regulator 3 [ ] fixed regulator `-- regulator-vcc3v3En pruebas posteriores descubrí que el módulo WiFi 3 de Hardkernel funciona bien y que el módulo 0 es reconocido, pero tiene un problema de conexión. No he dedicado mucho tiempo intentando solucionar el problema. No dispongo de un módulo 4 para probarlo y los módulos 5 y 5a no los reconoce. Sospecho que es porque no hay driver de kernel para ellos. Tienes los resultados de algunas pruebas básicas con LAN, WiFI, eMMC y USB publicados en un hilo de los Foros Hardkernel https://forum.odroid.com/viewtopic.php?f=138&t=34457
Carga y configuración básica de NetBSD
Para cualquier persona que quiera probar NetBSD en un ODROID-C2, aquí tiene una guía básica de instalación y configuración. Necesitas una consola serie para iniciar esta imagen. No es una imagen liberada, de modo que las imágenes actuales solo se pueden encontrar en el servidor NetBSD Arm Current. También tienes una imagen ODROID-XU4 y ODROID-C1+. La imagen ODROID-XU4 no se puede utilizar en este momento. La imagen ODROID-C2 funciona con una tarjeta SD o eMMC. En el primer arranque, se cambiará automáticamente el tamaño del sistema de archivos raíz y luego se reiniciará. http://www.invisible.ca/arm/
Descomprime y escribe la imagen usando dd, o utiliza una aplicación como etcher.io o Win32DiskImager:
$ gzip -d NetBSD-evbarm-aarch64-201904061750Z-odroidc2.img.gz $ dd if=./NetBSD-evbarm-aarch64-201904061750Z-odroidc2.img of=/dev/< your card reader location > e.g. sdb $ syncUna vez arrancada, root no tiene contraseña. Para asignarle una contraseña:
$ passwdPara cambiar el nombre del host:
$ vi /etc/rc.conf $ hostname=< your hostname >Para añadir un usuario, el directorio por defecto es /home/
$ useradd -m -G wheel < username > $ passwd < username >Ajusta la configuración regional de todo el sistema según tu ubicación.
$ echo "export LANG=\"en_US.UTF-8\"" >> /etc/profile $ echo "export LC_CTYPE=\"en_US.UTF-8\"" >> /etc/profile $ echo "export LC_ALL=\"\"" >> /etc/profile
Carga de aplicaciones informáticas
Puesto que se trata de una imagen en desarrollo, no dispones de un entorno de usuario completo. Es una imagen de sistema operativo básica. Además, no existe una lista de binarios de aplicaciones disponibles, así que me centrare en la instalación de binarios (pkg_add), la compilación de código fuente (pkgsrc) y la actualización con conjuntos tar completos.
Obtener paquetes binarios para Aarch64
Los archivos binarios proceden de un servidor no liberado y requiere de una ligera modificación de las prácticas normales.
$ export PKG_PATH="http://www.invisible.ca/arm/packages/arm64/current" $ pkg_add -v < package name >Usando un navegador web de otro ordenador, también puede ver lo que hay disponible. Los paquetes se agregan a medida que se van compilando, así que revisalos regularmente si no tienes pensado compilar desde la fuente. http://www.invisible.ca/arm/packages/arm64/current
Coger pkgsrc de CVS (código fuente)
El espacio de usuario completo es de aproximadamente 3.7 GB, así que asegúrese de tener suficiente espacio. Las aplicaciones se agrupan por funcionalidad, de modo que tómate un minuto para familiarizarte con el diseño.
$ cd /usr $ cvs -d anoncvs@anoncvs.netbsd.org:/cvsroot checkout -P pkgsrcPara compilar una aplicación específica
$ cd /usr/pkgsrc/< group directory >/< app name > $ make installTodas las dependencias se compilarán para la aplicación en concreto e incluso se descargarán si es necesario, así que asegúrate de tener conexión a Internet durante el proceso. Yo compilé bastantes paquetes sin problemas. Si has configurado PKG_PATH previamente, debes desconfigurarla antes de usar pkgsrc o te lo recordará.
$ unset PKG_PATH
Utilizar los conjuntos tar
Puedes usar los conjuntos tar para actualizar al último kernel y el entorno de usuario. En las imágenes de desarrollo, se recomienda actualizar el kernel y el entorno de usuario
Actualizar el kernel
$ mkdir -p /root/tmp/kernel $ cd /root/tmp/kernel $ cp /netbsd /onetbsd $ ftp $ https://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/latest/evbarm-aarch64/binary/sets/kern-GENERIC64.tgz $ tar xzvf /root/tmp/kernel/kern-GENERIC64.tgz $ cp ./netbsd /netbsd $ cp meson-gxbb-odroidc2.dtb /boot/dtb/amlogic/ $ rebootActualizar el entorno excepto para /etc
$ mkdir -p /root/tmp/sets $ cd /root/tmp/sets $ for x in base comp games man misc modules tests text xbase xcomp xfont xserver; do ftp https://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/latest/evbarm-aarch64/binary/sets/$x.tgz; done $ for x in base comp games man misc modules tests text xbase xcomp xfont xserver; do tar -C / -zxvpf $x.tgz; doneActualizar configuración /etc/
$ for x in etc xetc; do ftp https://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/latest/evbarm-aarch64/binary/sets/$x.tgz; done $ etcupdate -s etc.tgz -s xetc.tgz $ rm -Rf /root/tmp $ reboot
Ejemplo con sudo
Una de las típicas aplicaciones que puedes cargar es sudo. Aquí tienes ejemplos usando el repositorio actual de binarios y pkgsrc.
Obteniendo el binario sudo
$ export PKG_PATH="http://www.invisible.ca/arm/packages/arm64/current" $ pkg_add -v sudoCompilando sudo desde pkgsrc. Nota: Se supone que has descargado pkgsrc como he descrito con anterioridad
$ unset PKG_PATH $ cd /usr/pkgsrc/security/sudo $ make installIndependientemente del método de instalación, debes configurar sudo para que funcione. Usando visudo como se muestra a continuación, elimina el comentario de la línea 88 para permitir que los miembros del grupo sudo puedan ejecutar cualquier comando y el resto de opciones como miembros del grupo wheel (línea 82)
$ groupadd sudo $ usermod -G sudo < username > $ visudo $ %sudo ALL=(ALL) ALLFutura actualización de aplicaciones Actualizando el paquete binario sudo:
$ pkg_add -uv sudoActualizando sudo y todas sus dependencias:
$ pkg_add -fuuv sudo
Notas
Algunos paquetes requieren una configuración adicional y generalmente se te informará de ello en el momento de la instalación. Muchas veces se proporcionan ejemplos, como el ejemplo de instalación de dbus que se indica a continuación:
$ cp /usr/pkg/share/examples/rc.d/dbus /etc/rc.d/Si vas a cargar y usar git, curl o wget, recuerda cargar los certificados root de CA.
$ pkg_add -v mozilla-rootcerts openssl mozilla-rootcerts-opensslOtras aplicaciones típicas que se pueden cargar usando pkg_add
$ pkg_add -v bash htop zip p7zip gzip dos2unix
Configuración del WiFi
Localiza el nombre del dispositivo usando ifconfig. Si no está en la lista, probablemente no exista un driver de kernel; revisar dmesg.
$ ifconfig -aEdita wpa_supplicant y añade las entradas apropiadas
$ vi /etc/wpa_supplicant.conf ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=wheel network={ ssid=< network name > scan_ssid=1 key_mgmt=WPA-PSK psk=< passwordkey > }Habilitar en el arranque
$ vi /etc/rc.conf wpa_supplicant=YES wpa_supplicant_flags="-i < device name > -c /etc/wpa_supplicant.conf"Inicia el servicio WiFi
$ chmod 600 /etc/wpa_supplicant.conf $ /etc/rc.d/wpa_supplicant starto para la depuración
$ wpa_supplicant -Bd -c /path/to/wpa-supplicant.conf -i < device name >Añadir "-f file" enviará mensajes de depuración (usar -d) al archivo.
Una última nota, esta es una imagen de desarrollo, así que no es para producción. Como he dicho antes, no he tenido ningún problema ... hasta hoy, cuando he tirado de un reciente lanzamiento con un nuevo kernel. He tenido mi primer fallo de segmentación, aunque el sistema operativo todavía seguía funcionando. Podría tener sentido mantener la versión anterior en estas ocasiones. Estoy seguro de que aparecerán más problemas a medida que avance el desarrollo. Quiero tomarme un minuto y enviarle un gran agradecimiento a la Fundación NetBSD, a su equipo de desarrollo y especialmente a Jared McNeill. ¡Ayudemos respaldando su maravilloso trabajo de llevar NetBSD a ARM y a los ODROIDs de Hardkernel!
Referencias
NetBSD Project https://www.netbsd.org/ NetBSD Guide https://www.netbsd.org/docs/guide/en/index.html NetBSD pkgsrc guide http://www.netbsd.org/docs/pkgsrc/index.html NetBSD pkgsrc browser http://pkgsrc.se/ NetBSD Mailing List https://www.netbsd.org/mailinglists/#port-arm NetBSD Arm Bootable Images http://www.invisible.ca/arm/ NetBSD Index of Arm64 Current http://www.invisible.ca/arm/packages/arm64/current/
Be the first to comment