Skip to content

Commit

Permalink
feat: add rock64 and nanopir4s
Browse files Browse the repository at this point in the history
Add Pine64 ROCK64 and NanoPi R4S.

Rename repository to be `sbc-rockchip`.

Signed-off-by: Noel Georgi <[email protected]>
  • Loading branch information
frezbo committed Mar 17, 2024
1 parent 36837ec commit cb6596f
Show file tree
Hide file tree
Showing 27 changed files with 432 additions and 26 deletions.
2 changes: 1 addition & 1 deletion .kres.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
kind: pkgfile.Build
spec:
targets:
- sbc-rockpi
- sbc-rockchip
extraBuildArgs:
- PKGS_PREFIX
- PKGS
Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# THIS FILE WAS AUTOMATICALLY GENERATED, PLEASE DO NOT EDIT.
#
# Generated on 2024-03-14T16:50:45Z by kres latest.
# Generated on 2024-03-17T12:10:50Z by kres latest.

# common variables

Expand Down Expand Up @@ -54,7 +54,7 @@ PKGS ?= v1.7.0-alpha.0-33-g3aacf03

# targets defines all the available targets

TARGETS = sbc-rockpi
TARGETS = sbc-rockchip

# help menu

Expand Down
4 changes: 2 additions & 2 deletions Pkgfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
format: v1alpha2

vars:
# renovate: datasource=github-tags depName=ARM-software/arm-trusted-firmware
arm_trusted_firmware_version: v2.8.0
# renovate: datasource=github-tags extractVersion=^v(?<version>.*)$ depName=ARM-software/arm-trusted-firmware
arm_trusted_firmware_version: 2.8.0
arm_trusted_firmware_sha256: 60fad60eeb6840097f8e64f16093c06ddb2ef269c7a22affed02beaa6cefe466
arm_trusted_firmware_sha512: 958cf8f9e258638e59d0fbd8b053fce7d8a9ea2fc922686c9d20ea16f79f55219ac18a12ab240c528ee98e49c2e0eef4c963fdb255cc14b92437a5b3cffc8640

Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
# sbc-rockpi
# sbc-rockchip

This repo provides the overlay for Rock Pi generic Talos image.
This repo provides the overlay for RockChip based Talos image.

## Supported Overlay

| Overlay Name | Board | Description |
| ------------ | --------------------- | --------------------------------------------- |
| nanopi-r4s | NanoPi R4S | Overlay for NanoPi R4S |
| rock64 | Pine64 Rock64 | Overlay for Pine64 Rock64 |
| rockpi4 | Rock Pi 4A,Rock Pi 4B | Generic overlay for Rock Pi 4A and Rock Pi 4B |
| rockpi4c | Rock Pi 4C | Overlay for Rock Pi 4C |
36 changes: 36 additions & 0 deletions artifacts/arm-trusted-firmware/rk3328/pkg.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: arm-trusted-firmware-rk3328
variant: scratch
shell: /toolchain/bin/bash
dependencies:
- stage: base
steps:
- sources:
- url: https://github.com/ARM-software/arm-trusted-firmware/archive/v{{ .arm_trusted_firmware_version }}.tar.gz
destination: arm-trusted-firmware.tar.gz
sha256: "{{ .arm_trusted_firmware_sha256 }}"
sha512: "{{ .arm_trusted_firmware_sha512 }}"
env:
SOURCE_DATE_EPOCH: {{ .BUILD_ARG_SOURCE_DATE_EPOCH }}
prepare:
- |
mkdir -p /usr/bin \
&& ln -sf /toolchain/bin/env /usr/bin/env
tar xf arm-trusted-firmware.tar.gz --strip-components=1
# rk3328
build:
- |
make realclean
# https://salsa.debian.org/debian/arm-trusted-firmware/-/commit/6424a59e08585af7f8a56f1e16ecc6a6b9e4ad7a
# https://salsa.debian.org/debian/arm-trusted-firmware/-/commit/6ed8f61df3b07bb22a68a0fc189ec3b3f7b00dbd
# https://developer.trustedfirmware.org/T996
TF_LDFLAGS=--no-warn-rwx-segments CFLAGS=--param=min-pagesize=0 make -j $(nproc) PLAT=rk3328 DEBUG=0 bl31
install:
- |
mkdir -p /rootfs/arm-trusted-firmware/rk3328
cp build/rk3328/release/bl31/bl31.elf /rootfs/arm-trusted-firmware/rk3328/bl31.elf
finalize:
- from: /rootfs
to: /libs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
name: arm-trusted-firmware
name: arm-trusted-firmware-rk3399
variant: scratch
shell: /toolchain/bin/bash
dependencies:
- stage: base
steps:
- sources:
- url: https://github.com/ARM-software/arm-trusted-firmware/archive/{{ .arm_trusted_firmware_version }}.tar.gz
- url: https://github.com/ARM-software/arm-trusted-firmware/archive/v{{ .arm_trusted_firmware_version }}.tar.gz
destination: arm-trusted-firmware.tar.gz
sha256: "{{ .arm_trusted_firmware_sha256 }}"
sha512: "{{ .arm_trusted_firmware_sha512 }}"
Expand All @@ -32,9 +32,9 @@ steps:
TF_LDFLAGS=--no-warn-rwx-segments CFLAGS=--param=min-pagesize=0 make -j $(nproc) PLAT=rk3399 DEBUG=0 bl31
install:
- |
mkdir -p /rootfs/arm-trusted-firmware/rockpi4
mkdir -p /rootfs/arm-trusted-firmware/rk3399
cp build/rk3399/release/bl31/bl31.elf /rootfs/arm-trusted-firmware/rockpi4/bl31.elf
cp build/rk3399/release/bl31/bl31.elf /rootfs/arm-trusted-firmware/rk3399/bl31.elf
finalize:
- from: /rootfs
to: /libs
39 changes: 39 additions & 0 deletions artifacts/nanopi-r4s/u-boot/pkg.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# References:
# U-Boot:
# - https://u-boot.readthedocs.io/en/latest
name: u-boot-nanopi-r4s
variant: scratch
shell: /toolchain/bin/bash
dependencies:
- stage: base
- stage: arm-trusted-firmware-rk3399
steps:
- sources:
- url: https://ftp.denx.de/pub/u-boot/u-boot-{{ .uboot_version }}.tar.bz2
destination: u-boot.tar.bz2
sha256: "{{ .uboot_sha256 }}"
sha512: "{{ .uboot_sha512 }}"
env:
SOURCE_DATE_EPOCH: {{ .BUILD_ARG_SOURCE_DATE_EPOCH }}
prepare:
# nanopi-r4s
- |
mkdir -p /usr/bin \
&& ln -sf /toolchain/bin/env /usr/bin/env
tar xf u-boot.tar.bz2 --strip-components=1
- |
make nanopi-r4s-rk3399_defconfig
sed -i "s/CONFIG_TOOLS_LIBCRYPTO=y/# CONFIG_TOOLS_LIBCRYPTO is not set/" .config
build:
- |
make -j $(nproc) HOSTLDLIBS_mkimage="-lssl -lcrypto" BL31=/libs/arm-trusted-firmware/rk3399/bl31.elf
install:
- |
mkdir -p /rootfs/artifacts/arm64/u-boot/nanopi-r4s
cp u-boot-rockchip.bin /rootfs/artifacts/arm64/u-boot/nanopi-r4s
cp rkspi_loader.img /rootfs/artifacts/arm64/u-boot/nanopi-r4s
finalize:
- from: /rootfs
to: /rootfs
37 changes: 37 additions & 0 deletions artifacts/rock64/u-boot/pkg.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# References:
# U-Boot:
# - https://u-boot.readthedocs.io/en/latest
name: u-boot-rock64
variant: scratch
shell: /toolchain/bin/bash
dependencies:
- stage: base
- stage: arm-trusted-firmware-rk3328
steps:
- sources:
- url: https://ftp.denx.de/pub/u-boot/u-boot-{{ .uboot_version }}.tar.bz2
destination: u-boot.tar.bz2
sha256: "{{ .uboot_sha256 }}"
sha512: "{{ .uboot_sha512 }}"
env:
SOURCE_DATE_EPOCH: {{ .BUILD_ARG_SOURCE_DATE_EPOCH }}
prepare:
# rock-pi-4-rk3399
- |
mkdir -p /usr/bin \
&& ln -sf /toolchain/bin/env /usr/bin/env
tar xf u-boot.tar.bz2 --strip-components=1
- |
make rock64-rk3328_defconfig
sed -i "s/CONFIG_TOOLS_LIBCRYPTO=y/# CONFIG_TOOLS_LIBCRYPTO is not set/" .config
build:
- |
make -j $(nproc) HOSTLDLIBS_mkimage="-lssl -lcrypto" BL31=/libs/arm-trusted-firmware/rk3328/bl31.elf
install:
- |
mkdir -p /rootfs/artifacts/arm64/u-boot/rock64
cp u-boot-rockchip.bin /rootfs/artifacts/arm64/u-boot/rock64
finalize:
- from: /rootfs
to: /rootfs
6 changes: 2 additions & 4 deletions artifacts/rockpi4/u-boot/pkg.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
# References:
# U-Boot:
# - https://u-boot.readthedocs.io/en/latest
# Broadcom/RaspberryPi
# - https://github.com/u-boot/u-boot/blob/master/doc/board/broadcom/raspberrypi.rst
name: u-boot-rockpi4
variant: scratch
shell: /toolchain/bin/bash
dependencies:
- stage: base
- stage: arm-trusted-firmware
- stage: arm-trusted-firmware-rk3399
steps:
- sources:
- url: https://ftp.denx.de/pub/u-boot/u-boot-{{ .uboot_version }}.tar.bz2
Expand All @@ -33,7 +31,7 @@ steps:
sed -i "s/CONFIG_TOOLS_LIBCRYPTO=y/# CONFIG_TOOLS_LIBCRYPTO is not set/" .config
build:
- |
make -j $(nproc) HOSTLDLIBS_mkimage="-lssl -lcrypto" BL31=/libs/arm-trusted-firmware/rockpi4/bl31.elf
make -j $(nproc) HOSTLDLIBS_mkimage="-lssl -lcrypto" BL31=/libs/arm-trusted-firmware/rk3399/bl31.elf
# create spi image
# https://github.com/armbian/build/blob/09e416e31cc01ece4533a65f02a470a4c21b90ea/config/sources/families/include/rockchip64_common.inc#L173-L178
Expand Down
6 changes: 2 additions & 4 deletions artifacts/rockpi4c/u-boot/pkg.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
# References:
# U-Boot:
# - https://u-boot.readthedocs.io/en/latest
# Broadcom/RaspberryPi
# - https://github.com/u-boot/u-boot/blob/master/doc/board/broadcom/raspberrypi.rst
name: u-boot-rockpi4c
variant: scratch
shell: /toolchain/bin/bash
dependencies:
- stage: base
- stage: arm-trusted-firmware
- stage: arm-trusted-firmware-rk3399
steps:
- sources:
- url: https://ftp.denx.de/pub/u-boot/u-boot-{{ .uboot_version }}.tar.bz2
Expand All @@ -33,7 +31,7 @@ steps:
sed -i "s/CONFIG_TOOLS_LIBCRYPTO=y/# CONFIG_TOOLS_LIBCRYPTO is not set/" .config
build:
- |
make -j $(nproc) HOSTLDLIBS_mkimage="-lssl -lcrypto" BL31=/libs/arm-trusted-firmware/rockpi4/bl31.elf
make -j $(nproc) HOSTLDLIBS_mkimage="-lssl -lcrypto" BL31=/libs/arm-trusted-firmware/rk3399/bl31.elf
# create spi image
# https://github.com/armbian/build/blob/09e416e31cc01ece4533a65f02a470a4c21b90ea/config/sources/families/include/rockchip64_common.inc#L173-L178
Expand Down
2 changes: 2 additions & 0 deletions go.work
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
go 1.22.1

use (
./installers/nanopi-r4s/src
./installers/rock64/src
./installers/rockpi4/src
./installers/rockpi4c/src
)
25 changes: 25 additions & 0 deletions installers/nanopi-r4s/pkg.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: nanopi-r4s
variant: scratch
shell: /toolchain/bin/bash
dependencies:
- stage: base
steps:
- env:
GOPATH: /go
cachePaths:
- /.cache/go-build
- /go/pkg
build:
- |
export PATH=${PATH}:${TOOLCHAIN}/go/bin
cd /pkg/src
CGO_ENABLED=0 go build -o ./nanopi-r4s .
install:
- |
mkdir -p /rootfs/installers/
cp /pkg/src/nanopi-r4s /rootfs/installers/nanopi-r4s
finalize:
- from: /rootfs
to: /rootfs
11 changes: 11 additions & 0 deletions installers/nanopi-r4s/src/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module nanopi-r4s

go 1.22.1

require (
github.com/siderolabs/go-copy v0.1.0
github.com/siderolabs/talos/pkg/machinery v1.7.0-alpha.1
golang.org/x/sys v0.16.0
)

require gopkg.in/yaml.v3 v3.0.1 // indirect
10 changes: 10 additions & 0 deletions installers/nanopi-r4s/src/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
github.com/siderolabs/go-copy v0.1.0 h1:OIWCtSg+rhOtnIZTpT31Gfpn17rv5kwJqQHG+QUEgC8=
github.com/siderolabs/go-copy v0.1.0/go.mod h1:4bF2rZOZAR/ags/U4AVSpjFE5RPGdEeSkOq6yR9YOkU=
github.com/siderolabs/talos/pkg/machinery v1.7.0-alpha.1 h1:0pURmnbzsu19reku8OjN1DkeAxgkmuxmKgDgbFT3228=
github.com/siderolabs/talos/pkg/machinery v1.7.0-alpha.1/go.mod h1:H2+5QeGXYi2Q7RhBNUAD6dhc9LmdJ2AUXtiAWRXtWBc=
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
83 changes: 83 additions & 0 deletions installers/nanopi-r4s/src/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

package main

import (
_ "embed"
"fmt"
"os"
"path/filepath"

"github.com/siderolabs/go-copy/copy"
"github.com/siderolabs/talos/pkg/machinery/overlay"
"github.com/siderolabs/talos/pkg/machinery/overlay/adapter"
"golang.org/x/sys/unix"
)

const (
off int64 = 512 * 64
dtb = "rockchip/rk3399-nanopi-r4s.dtb"
)

func main() {
adapter.Execute(&nanopir4s{})
}

type nanopir4s struct{}

type nanopir4sExtraOptions struct{}

func (i *nanopir4s) GetOptions(extra nanopir4sExtraOptions) (overlay.Options, error) {
return overlay.Options{
Name: "nanopi-r4s",
KernelArgs: []string{
"console=tty0",
"console=ttyS2,1500000n8",
"sysctl.kernel.kexec_load_disabled=1",
"talos.dashboard.disabled=1",
},
PartitionOptions: overlay.PartitionOptions{
Offset: 2048 * 10,
},
}, nil
}

func (i *nanopir4s) Install(options overlay.InstallOptions[nanopir4sExtraOptions]) error {
var f *os.File

f, err := os.OpenFile(options.InstallDisk, os.O_RDWR|unix.O_CLOEXEC, 0o666)
if err != nil {
return fmt.Errorf("failed to open %s: %w", options.InstallDisk, err)
}

defer f.Close() //nolint:errcheck

uboot, err := os.ReadFile(filepath.Join(options.ArtifactsPath, "arm64/u-boot/rockpi4/u-boot-rockchip.bin"))
if err != nil {
return err
}

if _, err = f.WriteAt(uboot, off); err != nil {
return err
}

// NB: In the case that the block device is a loopback device, we sync here
// to esure that the file is written before the loopback device is
// unmounted.
err = f.Sync()
if err != nil {
return err
}

src := filepath.Join(options.ArtifactsPath, "arm64/dtb", dtb)
dst := filepath.Join(options.MountPrefix, "/boot/EFI/dtb", dtb)

err = os.MkdirAll(filepath.Dir(dst), 0o600)
if err != nil {
return err
}

return copy.File(src, dst)
}
Loading

0 comments on commit cb6596f

Please sign in to comment.