Портируем FreeBSD на Allwinner H5

February 19th, 2019

NanoPi-K1-Plus – это маленький одноплатный компьютер от FriendlyElec.

Он использует 64-битный четырехъядерный SoC Allwinner H5 (ARM Cortex-A53), который имеет шестиядерное графическое ядро Mali450.

Кроме того на плате формата RaspberryPi имеются 1Gbps Ethernet, 2Gb DDR3 RAM, три порта USB-2.0, HDMI, Wi-Fi, разьёмы для подключения MMC и eMMC памяти.

Эти функции делают его особенно подходящим для приложений, требующих высокой пропускной способности данных, быстрой передачи данных и высокой производительности.
Для него готовы образы UbuntuCore и Armbian.

Явно не хватает поддержки FreeBSD. Как это сделать описал Emmanuel Vadot в своей серии статей “Porting FreeBSD to a new ARM BoardРart1 , Part2 , Part3. Будем делать так как написал guru.

И так,


FreeBSD

Install FreeBSD on Helios64.

September 24th, 2020

Helios64 is a powerful ARM board specially designed for Network Attached Storage (NAS). It harnesses its processing capabilities from the Rockchip RK3399 SoC.

Helios64 is our latest design for the ultimate ARM powered NAS. It has a number of unique features such as:

  • Six-core 64-bit ARM processor,
  • 4GB LPDDR4 Memory,
  • Two Network Interfaces 1 and 2.5GbЕ.
  • Five 5 bays for SATA Hard drives,
  • 16GB eMMC 5.1 NAND Flash,
  • 3xUSB 3.0 interfaces and USB Type-C,
  • Reinforced reliability with Built-in UPS.

Он использует 64-битный шестиядерный SoC RK3399.
Эти функции делают его особенно подходящим для приложений, требующих высокой пропускной способности данных, и высокой производительности. Для него готовы образы Armbian.

Явно не хватает поддержки FreeBSD. Как это сделать описал Emmanuel Vadot в своей серии статей “Porting FreeBSD to a new ARM BoardРart1 , Part2 , Part3. Будем делать так как написал guru.

И так,


FreeBSD

Портируем FreeBSD на Rockchip RK3399

May 12th, 2020

KHADAS EDGE-V крохотный одноплатный компьютер от китайской компании Shenzhen Wesion Technology Co.,Ltd

Он использует 64-битный шестиядерный ARM процессор Rockchip RK3399 построенный по архитектуре big.LITTLE. Особенность этой архитектуры состоит в наличии процессорных ядер двух типов: относительно медленных (LITTLE) и относительно мощных и прожорливых (big)

  • Процессор RK3399 был представлен в январе 2016 года на CES 2016. Rockchip RK3399 содержит два ядра ARM Cortex A72, работающие на частоте до 2 ГГц, и четыре ядра ARM Cortex A53. Графическая подсистема ARM Mali-T864 GPU. Первые устройства на базе RK3399 появились в 2016 году.
  • Кроме того на плате имеются 4Gb LPDDR4 RAM, 1Gbps Ethernet, один порт USB-2.0, один USB-3.0, HDMI 2.0, USB-C (3.0 &DP), Wi-Fi, eMMC память не менее 16Gbyte, разъём для подключения карты MMC, IR порт. Питание подаётся через отдельный разъём USB-C.

FreeBSD

Шаг третий – crochet

April 30th, 2019

После того как мы собрали загрузщик u-boot и создали конфигурационный файл ядра NANOPI, мы можем перейти к третьему шагу – сборке файла образа SD диска.

FreeBSD

Шаг второй – kernel config

April 29th, 2019

Для второго этапа нам понадобятся исходные коды ядра. Будем использовать FreeBSD 12.0-RELEASE. Скопируем их с помощью svnlite.

# svnlite checkout https://svn.freebsd.org/base/releng/12.0 /usr/src
# cp /use/src/sys/arm64/conf/GENERIC NANOPI

Берём конфигурацию GENERIC и убираем всё лишнее нe относящееся к Allwinner H3/H5. Получаем вот такой конфигурационный файл NANOPI.

#
# NANOPI - Kernel configuration file for NanoPI Allwinner H5/A64
#
cpu		ARM64
ident		NANOPI

#makeoptions	DEBUG=-g		# Build kernel with gdb(1) debug symbols
#makeoptions	WITH_CTF=1		# Run ctfconvert(1) for DTrace support

options 	SCHED_ULE		# ULE scheduler
options 	PREEMPTION		# Enable kernel thread preemption
options 	VIMAGE			# Subsystem virtualization, e.g. VNET
options 	INET			# InterNETworking
#options 	INET6			# IPv6 communications protocols
options 	IPSEC			# IP (v4/v6) security
options 	IPSEC_SUPPORT		# Allow kldload of ipsec and tcpmd5
options 	TCP_HHOOK		# hhook(9) framework for TCP
options 	TCP_OFFLOAD		# TCP offload
options		TCP_RFC7413		# TCP Fast Open
options 	SCTP			# Stream Control Transmission Protocol
options 	FFS			# Berkeley Fast Filesystem
options 	SOFTUPDATES		# Enable FFS soft updates support
options 	UFS_ACL			# Support for access control lists
options 	UFS_DIRHASH		# Improve performance on big directories
options 	UFS_GJOURNAL		# Enable gjournal-based UFS journaling
options 	QUOTA			# Enable disk quotas for UFS
options 	MD_ROOT			# MD is a potential root device
options 	NFSCL			# Network Filesystem Client
options 	NFSD			# Network Filesystem Server
options 	NFSLOCKD		# Network Lock Manager
options 	NFS_ROOT		# NFS usable as /, requires NFSCL
options 	MSDOSFS			# MSDOS Filesystem
options 	CD9660			# ISO 9660 Filesystem
options 	PROCFS			# Process filesystem (requires PSEUDOFS)
options 	PSEUDOFS		# Pseudo-filesystem framework
options 	GEOM_RAID		# Soft RAID functionality.
options 	GEOM_LABEL		# Provides labelization
options 	COMPAT_FREEBSD32	# Incomplete, but used by cloudabi32.ko.
options 	COMPAT_FREEBSD11	# Compatible with FreeBSD11
options 	SCSI_DELAY=5000		# Delay (in ms) before probing SCSI
options 	KTRACE			# ktrace(1) support
options 	STACK			# stack(9) support
options 	SYSVSHM			# SYSV-style shared memory
options 	SYSVMSG			# SYSV-style message queues
options 	SYSVSEM			# SYSV-style semaphores
options 	_KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options 	PRINTF_BUFR_SIZE=128	# Prevent printf output being interspersed.
options 	KBD_INSTALL_CDEV	# install a CDEV entry in /dev
options 	HWPMC_HOOKS		# Necessary kernel hooks for hwpmc(4)
options 	AUDIT			# Security event auditing
options 	CAPABILITY_MODE		# Capsicum capability mode
options 	CAPABILITIES		# Capsicum capabilities
options 	MAC			# TrustedBSD MAC Framework
options 	KDTRACE_FRAME		# Ensure frames are compiled in
options 	KDTRACE_HOOKS		# Kernel DTrace hooks
options 	VFP			# Floating-point support
options 	RACCT			# Resource accounting framework
options 	RACCT_DEFAULT_TO_DISABLED # Set kern.racct.enable=0 by default
options 	RCTL			# Resource limits
options 	SMP
options 	INTRNG

# Debugging support.  Always need this:
#options 	KDB			# Enable kernel debugger support.
#options 	KDB_TRACE		# Print a stack trace for a panic.

# For full debugger support use (turn off in stable branch):
#options 	DDB			# Support DDB.
#options 	DEADLKRES		# Enable the deadlock resolver
#options 	INVARIANTS		# Enable calls of extra sanity checking
#options 	INVARIANT_SUPPORT	# Extra sanity checks of internal structures, required by INVARIANTS
#options 	WITNESS			# Enable checks to detect deadlocks and cycles
#options 	WITNESS_SKIPSPIN	# Don't run witness on spinlocks for speed
#options 	MALLOC_DEBUG_MAXZONES=8	# Separate malloc(9) zones
#options 	ALT_BREAK_TO_DEBUGGER	# Enter debugger on keyboard escape sequence
#options 	USB_DEBUG		# enable debug msgs

# Kernel dump features.
options 	EKCD			# Support for encrypted kernel dumps
options 	GZIO			# gzip-compressed kernel and user dumps
options 	ZSTDIO			# zstd-compressed kernel and user dumps
options 	NETDUMP			# netdump(4) client support

# SoC support
options 	SOC_ALLWINNER_A64
options 	SOC_ALLWINNER_H5

# Timer drivers
device          a10_timer

# VirtIO support
device		virtio
device		virtio_pci
device		virtio_mmio
device		virtio_blk
device		vtnet

# CPU frequency control
device		cpufreq

# Ethernet NICs
device		mii
device		miibus		# MII bus support
device		mdio		#	
device		awg		# Allwinner EMAC Gigabit Ethernet

# Wireless NIC cards
#device		wlan                    # 802.11 support
#options	IEEE80211_DEBUG         # enable debug msgs
#options	IEEE80211_AMPDU_AGE     # age frames in AMPDU reorder q's
#options	IEEE80211_SUPPORT_MESH  # enable 802.11s draft support
#device		wlan_wep                # 802.11 WEP support
#device		wlan_ccmp               # 802.11 CCMP suppor
#device		wlan_tkip               # 802.11 TKIP support
#device		wlan_amrr               # AMRR transmit rate control algorithm
#device		rtwn			# Realtek wireless NICs
#device		rtwnfw			# Realtek firmware

# EVDEV support
device		evdev			# input event device support
options		EVDEV_SUPPORT		# evdev support in legacy drivers
device		uinput			# install /dev/uinput cdev
device		aw_ir                                                               

# Block devices
device		ahci
device		scbus
device		da

# ATA/SCSI peripherals
device		pass			# Passthrough device (direct ATA/SCSI access)

# MMC/SD/SDIO Card slot support
device		sdhci
device		mmc			# mmc/sd bus
device		mmcsd			# mmc/sd flash cards
device		aw_mmc			# Allwinner SD/MMC controller

# Serial (COM) ports
device		uart		# Generic UART driver
device		uart_snps

# USB support
device		aw_ehci			# Allwinner EHCI USB interface (USB 2.0)
device		aw_usbphy		# Allwinner USB PHY
device		dwcotg			# DWC OTG controller
device		ohci			# OHCI USB interface
device		ehci			# EHCI USB interface (USB 2.0)

device		usb			# USB Bus (required)
device		ukbd			# Keyboard
device		umass			# Disks/Mass storage - Requires scbus and da

# GPIO
device		aw_gpio		# Allwinner GPIO controller
device		gpio
device		gpioled
device		gpiokeys
device		fdt_pinctrl

# I2C
device		iic
device		iicbus
device		aw_rsb		# Allwinner Reduced Serial Bus
device		twsi		# Allwinner I2C controller
device          sy8106a

# Clock and reset controllers
device		aw_ccu		# Allwinner clock controller

# Interrupt controllers
device		aw_nmi		# Allwinner NMI support

# Real-time clock support
device		aw_rtc		# Allwinner Real-time Clock

# Watchdog controllers
device		aw_wdog		# Allwinner Watchdog

# SOUND
#device		sound
#device		a10_codec	# Allwinner Analog Sound

# EFUSE
device		aw_sid		# Allwinner Secure ID EFUSE

# Thermal sensors
device		aw_thermal	# Allwinner Thermal Sensor Controller

# SPI
device		spibus
device		aw_spi		# Allwinner SPI

# Console
device		vt
device		kbdmux

# EFI Framebuffer
device		vt_efifb

# Pseudo devices.
device		crypto		# core crypto support
device		loop		# Network loopback
device		random		# Entropy device
device		ether		# Ethernet support
device		vlan		# 802.1Q VLAN support
#device		tun		# Packet tunnel.
device		md		# Memory "disks"
#device		gif		# IPv6 and IPv4 tunneling
device		firmware	# firmware assist module
options 	EFIRT		# EFI Runtime Services

# EXT_RESOURCES pseudo devices
options 	EXT_RESOURCES
device		clk
device		phy
device		hwreset
device		nvmem
device		regulator
device		gpioregulator

device		syscon
device		aw_syscon

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device		bpf		# Berkeley packet filter

options 	FDT
device		acpi

# DTBs
makeoptions     MODULES_EXTRA="dtb/allwinner"

Это пример конфигурационного файла для FreeBSD 12.0-RELEASE. В отличии от GENERIC в него добавленны некоторые функции.

  • Мы хотим управлять часторой процессора и видеть его температура. Добавляем.
# CPU frequency control
device		cpufreq

# EFUSE
device		aw_sid		# Allwinner Secure ID EFUSE

# Thermal sensors
device		aw_thermal	# Allwinner Thermal Sensor Controller

device		gpioregulator
device          sy8106a
  • В будуюшем мы захотим использоват инфракрасный пульт управления. Поэтому….
# EVDEV support
device		evdev			# input event device support
options		EVDEV_SUPPORT		# evdev support in legacy drivers
device		uinput			# install /dev/uinput cdev
device		aw_ir                                                               

Файл конфигурации ядра готов, можно проверить компиляцию ядра. Создадим shell script build.sh

#!/bin/sh

# Setup the environ for building freebsd
export TARGET=arm64
export TARGET_ARCH=aarch64
export SRCROOT=/usr/src
export MAKESYSPATH=$SRCROOT/share/mk
export MAKEOBJDIRPREFIX=/usr/obj
export KERNCONF=NANOPI

# Select some subset: the following used to be good, but now isn't
export MAKEFLAGS="-DNO_CLEAN -DWITHOUT_PROFILE -DWITHOUT_DEBUG_FILES"

cd ${SRCROOT}

make -j `sysctl -n hw.ncpu` -C $SRCROOT buildkernel

exit
 

FreeBSD

Шаг первый – U-boot.

April 29th, 2019

Das U-Boot, универсальный загрузчик, возможно, является самым богатым, самым гибким и наиболее активно развивающимся из загрузчиков с открытым исходным кодом. На FreeBSD WiKi есть статья описывающая всё многообразие портов u-boot для ARM. В ней написано, что нет портов для Allwinner H5. Это не верно. На самом деле OpangePi-PC2 – это Allwinner H5, а не Allwinner A64. Поэтому для своего порта в качестве прототипа мы можем взять порт u-boot-orangepi-pc2.

Устанавливаем коллекцию портов

# svnlite checkout https://svn.FreeBSD.org/ports/head /usr/ports

Посмотрим на порт подробно.

root@dev:/usr/ports/sysutils # cat u-boot-orangepi-pc2/Makefile
# $FreeBSD: head/sysutils/u-boot-orangepi-pc2/Makefile 472714 2018-06-18 20:22:13Z linimon $

MASTERDIR=      ${.CURDIR}/../u-boot-master

MODEL=          orangepi-pc2
BOARD_CONFIG=   orangepi_pc2_defconfig
FAMILY=         allwinner64

.include "${MASTERDIR}/Makefile"

Сделаем аналогично.

root@dev:/usr/ports/sysutils # cat u-boot-nanopi-k1-plus/Makefile 

MASTERDIR=      ${.CURDIR}/../u-boot-master

MODEL=          nanopi-k1-plus
BOARD_CONFIG=   nanopi_k1_plus_defconfig
FAMILY=         allwinner64

UBOOT_ARCH=     aarch64
EXTRA_PATCHES=  ${.CURDIR}/files/

.include "${MASTERDIR}/Makefile"

Сделаем правки в Makefile, и добавим недостающие конфигурационные файлы.

root@dev:/usr/ports/sysutils # ls u-boot-nanopi-k1-plus/files/*
u-boot-nanopi-k1-plus/files/patch-arch__arm__dts__Makefile
u-boot-nanopi-k1-plus/files/patch-arch__arm__dts__sun50i-h5-nanopi-k1-plus.dts
u-boot-nanopi-k1-plus/files/patch-configs__nanopi_k1_plus_defconfig
root@dev:/usr/ports/sysutils #

Всё наш порт готов.

Оригинал порта доступен по адресу https://github.com/S199pWa1k9r/ports

Проверяем что загрузщик собитается.

  • Устанавливает git.
# pkg install git
  • Скачиваем мой вариант порта.
# git clone https://github.com/S199pWa1k9r/ports.git /usr/tmp
  • Компилируем и устанавливает загрузщик.
# cd /usr/tmp/sysutils/u-boot-nanopi-k1-plus ; make install clean

После этого в каталоге /usr/local/share/u-boot/u-boot-nanopi-k1-plus должны появиться файлы.

# ls -lsa /usr/local/share/u-boot/u-boot-nanopi-k1-plus
total 656
  4 drwxr-xr-x  2 root  wheel     512 Feb 16 17:18 .
  4 drwxr-xr-x  7 root  wheel     512 Mar 27 12:27 ..
  4 -rw-r--r--  1 root  wheel     381 Feb 16 17:17 README
  4 -rw-r--r--  1 root  wheel      66 Feb 16 17:17 metadata
640 -rw-r--r--  1 root  wheel  607780 Feb 16 17:17 u-boot-sunxi-with-spl.bin
#

FreeBSD