Skip to content

Commit

Permalink
feat: adds board Turing RK1
Browse files Browse the repository at this point in the history
Adds board Turing RK1 (rk3588) board support
Add kernel module check for 6.6
Temporary alternative u-boot & kernel image

Signed-off-by: Nico Berlee <nico.berlee@on2it.net>
  • Loading branch information
nberlee committed Feb 1, 2024
1 parent 422b26d commit 745e347
Show file tree
Hide file tree
Showing 11 changed files with 281 additions and 30 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ FROM ${PKG_KERNEL} AS pkg-kernel
FROM --platform=amd64 ${PKG_KERNEL} AS pkg-kernel-amd64
FROM --platform=arm64 ${PKG_KERNEL} AS pkg-kernel-arm64

FROM --platform=arm64 ghcr.io/siderolabs/u-boot:${PKGS} AS pkg-u-boot-arm64
FROM --platform=arm64 ghcr.io/nberlee/u-boot:v1.6.0-19-g51c088c-dirty AS pkg-u-boot-arm64
FROM --platform=arm64 ghcr.io/siderolabs/raspberrypi-firmware:${PKGS} AS pkg-raspberrypi-firmware-arm64

# Resolve package images using ${EXTRAS} to be used later in COPY --from=.
Expand Down
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ CLOUD_IMAGES_EXTRA_ARGS ?= ""
ARTIFACTS := _out
TOOLS ?= ghcr.io/siderolabs/tools:v1.6.0-2-g5e034ec
PKGS ?= v1.6.0-16-gb77ffb7
PKG_KERNEL ?= ghcr.io/siderolabs/kernel:$(PKGS)
PKG_KERNEL ?= ghcr.io/nberlee/kernel:v1.6.0-19-g51c088c
EXTRAS ?= v1.6.0-1-g113887a
# renovate: datasource=github-tags depName=golang/go
GO_VERSION ?= 1.21
Expand Down Expand Up @@ -317,11 +317,11 @@ images-essential: image-aws image-gcp image-metal secureboot-installer ## Builds

images: image-aws image-azure image-digital-ocean image-exoscale image-gcp image-hcloud image-iso image-metal image-nocloud image-openstack image-oracle image-scaleway image-upcloud image-vmware image-vultr ## Builds all known images (AWS, Azure, DigitalOcean, Exoscale, GCP, HCloud, Metal, NoCloud, Openstack, Oracle, Scaleway, UpCloud, Vultr and VMware).

sbc-%: ## Builds the specified SBC image. Valid options are rpi_generic, rock64, bananapi_m64, libretech_all_h3_cc_h5, rockpi_4, rockpi_4c, pine64, jetson_nano and nanopi_r4s (e.g. sbc-rpi_generic)
sbc-%: ## Builds the specified SBC image. Valid options are rpi_generic, rock64, bananapi_m64, libretech_all_h3_cc_h5, rockpi_4, rockpi_4c, pine64, jetson_nano, nanopi_r4s and turing_rk1 (e.g. sbc-rpi_generic)
@docker pull $(REGISTRY_AND_USERNAME)/imager:$(IMAGE_TAG)
@docker run --rm -t -v /dev:/dev -v $(PWD)/$(ARTIFACTS):/out --network=host --privileged $(REGISTRY_AND_USERNAME)/imager:$(IMAGE_TAG) $* --arch arm64 $(IMAGER_ARGS)

sbcs: sbc-rpi_generic sbc-rock64 sbc-bananapi_m64 sbc-libretech_all_h3_cc_h5 sbc-rockpi_4 sbc-rockpi_4c sbc-pine64 sbc-jetson_nano sbc-nanopi_r4s ## Builds all known SBC images (Raspberry Pi 4, Rock64, Banana Pi M64, Radxa ROCK Pi 4, Radxa ROCK Pi 4c, Pine64, Libre Computer Board ALL-H3-CC, Jetson Nano and Nano Pi R4S).
sbcs: sbc-rpi_generic sbc-rock64 sbc-bananapi_m64 sbc-libretech_all_h3_cc_h5 sbc-rockpi_4 sbc-rockpi_4c sbc-pine64 sbc-jetson_nano sbc-nanopi_r4s sbc-turing_rk1 ## Builds all known SBC images (Raspberry Pi 4, Rock64, Banana Pi M64, Radxa ROCK Pi 4, Radxa ROCK Pi 4c, Pine64, Libre Computer Board ALL-H3-CC, Jetson Nano and Nano Pi R4S).

.PHONY: iso
iso: image-iso ## Builds the ISO and outputs it to the artifact directory.
Expand Down
39 changes: 39 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,46 @@
</p>

---
# Friendly fork
This is a friendly fork of [siderolabs/talos](siderolabs/talos). It is only here to support [SBC Turing RK1](https://turingpi.com/product/turing-rk1/). And it will be integrated in some way using [community managed SBCs](https://github.com/siderolabs/talos/issues/8065) in Talos 1.7.

## Using this fork
[![asciicast](https://asciinema.org/a/635709.svg)](https://asciinema.org/a/635709)

### Download the latest release on the right

This describes the CLI commands, you may use the Turing PI webgui. Always first unpack the image yourself. Version 2.06 supports xz images, but it is slower.
```sh
xz -d metal-turing_rk1-arm64.raw.xz
tpi flash -n <NODENUMBER> -i metal-turing_rk1-arm64.raw
tpi power on -n <NODENUMBER>
```

To check bootmessages:
```sh
tpi uart -n <NODENUMBER> get
```

Make sure when you use talosctl apply-config to have in this config:
```yaml
machine:
kernel:
modules:
- name: rockchip-cpufreq
```
### Updating
Updating can also be done faster using the `talosctl upgrade` command.

```sh
talosctl upgrade -i ghcr.io/nberlee/installer:v1.6.x-rk3588
```
when adding the `-rk3588` to the tag, the rk3588 extension is no longer needed in the machine-config.
For example the `ghcr.io/nberlee/installer:v1.6.4-rk3588` installer image has the rk3588 talos extension included


# Talos
**Talos** is a modern OS for running Kubernetes: secure, immutable, and minimal.
Talos is fully open source, production-ready, and supported by the people at [Sidero Labs](https://www.SideroLabs.com/)
All system management is done via an API - there is no shell or interactive console.
Expand Down
18 changes: 3 additions & 15 deletions hack/modules-amd64.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,8 @@ kernel/drivers/md/persistent-data/dm-persistent-data.ko
kernel/drivers/md/raid456.ko
kernel/drivers/net/ethernet/aquantia/atlantic/atlantic.ko
kernel/drivers/net/ethernet/atheros/alx/alx.ko
kernel/drivers/net/ethernet/broadcom/bnx2.ko
kernel/drivers/net/ethernet/broadcom/bnx2x/bnx2x.ko
kernel/drivers/net/ethernet/broadcom/bnxt/bnxt_en.ko
kernel/drivers/net/ethernet/cisco/enic/enic.ko
kernel/drivers/net/ethernet/emulex/benet/be2net.ko
kernel/drivers/net/ethernet/google/gve/gve.ko
kernel/drivers/net/ethernet/intel/e100.ko
kernel/drivers/net/ethernet/intel/e1000/e1000.ko
kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
Expand All @@ -38,26 +34,18 @@ kernel/drivers/net/ethernet/intel/ice/ice.ko
kernel/drivers/net/ethernet/intel/igb/igb.ko
kernel/drivers/net/ethernet/intel/igbvf/igbvf.ko
kernel/drivers/net/ethernet/intel/igc/igc.ko
kernel/drivers/net/ethernet/intel/ixgb/ixgb.ko
kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko
kernel/drivers/net/ethernet/intel/ixgbevf/ixgbevf.ko
kernel/drivers/net/ethernet/marvell/sky2.ko
kernel/drivers/net/ethernet/mellanox/mlx4/mlx4_core.ko
kernel/drivers/net/ethernet/mellanox/mlx4/mlx4_en.ko
kernel/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko
kernel/drivers/net/ethernet/mellanox/mlxfw/mlxfw.ko
kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_core.ko
kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c.ko
kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_minimal.ko
kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci.ko
kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
kernel/drivers/net/ethernet/qlogic/qed/qed.ko
kernel/drivers/net/ethernet/qlogic/qede/qede.ko
kernel/drivers/net/ethernet/qlogic/qlcnic/qlcnic.ko
kernel/drivers/net/ethernet/realtek/8139too.ko
kernel/drivers/net/ethernet/realtek/r8169.ko
kernel/drivers/net/ethernet/sfc/siena/sfc-siena.ko
kernel/drivers/net/mdio.ko
kernel/drivers/net/phy/ax88796b.ko
kernel/drivers/net/phy/smsc.ko
kernel/drivers/net/vmxnet3/vmxnet3.ko
kernel/drivers/scsi/aacraid/aacraid.ko
kernel/drivers/scsi/hpsa.ko
Expand All @@ -68,9 +56,9 @@ kernel/drivers/scsi/vmw_pvscsi.ko
kernel/drivers/virtio/virtio_balloon.ko
kernel/drivers/virtio/virtio_input.ko
kernel/drivers/virtio/virtio_mmio.ko
kernel/drivers/virtio/virtio_pci.ko
kernel/drivers/virtio/virtio_pci_legacy_dev.ko
kernel/drivers/virtio/virtio_pci_modern_dev.ko
kernel/drivers/virtio/virtio_pci.ko
kernel/lib/objagg.ko
kernel/lib/parman.ko
kernel/lib/raid6/raid6_pq.ko
Expand Down
13 changes: 3 additions & 10 deletions hack/modules-arm64.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
modules.order
modules.builtin
modules.builtin.modinfo
kernel/arch/arm64/lib/xor-neon.ko
kernel/crypto/async_tx/async_memcpy.ko
kernel/crypto/async_tx/async_pq.ko
kernel/crypto/async_tx/async_raid6_recov.ko
kernel/crypto/async_tx/async_tx.ko
kernel/crypto/async_tx/async_xor.ko
kernel/crypto/xor.ko
kernel/drivers/block/nbd.ko
kernel/drivers/dma/bcm-sba-raid.ko
kernel/drivers/hwmon/i5k_amb.ko
kernel/drivers/infiniband/sw/rxe/rdma_rxe.ko
kernel/drivers/irqchip/irq-imx-mu-msi.ko
Expand All @@ -20,17 +22,8 @@ kernel/drivers/md/dm-thin-pool.ko
kernel/drivers/md/persistent-data/dm-persistent-data.ko
kernel/drivers/md/raid456.ko
kernel/drivers/net/ethernet/atheros/alx/alx.ko
kernel/drivers/net/ethernet/google/gve/gve.ko
kernel/drivers/net/ethernet/mellanox/mlx4/mlx4_core.ko
kernel/drivers/net/ethernet/mellanox/mlx4/mlx4_en.ko
kernel/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko
kernel/drivers/net/ethernet/mellanox/mlxfw/mlxfw.ko
kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_core.ko
kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c.ko
kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_minimal.ko
kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci.ko
kernel/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko
kernel/drivers/net/ethernet/sfc/siena/sfc-siena.ko
kernel/drivers/net/mdio/mdio-mux-meson-gxl.ko
kernel/lib/objagg.ko
kernel/lib/parman.ko
kernel/lib/raid6/raid6_pq.ko
Expand Down
14 changes: 14 additions & 0 deletions hack/release.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,25 @@ preface = """\
"""

[notes]
[notes.installer]
title = "Installer Turingrk1 image"


description = """\
When upgrading using `talosctl upgrade -i` a `-rk3588` can be added to the install image tag to get the image
with the rk3588 extension. This eliminates the need for defining the extension in the machine config.
Please remove the extension from the machine config before using
`talosctl upgrade -i ghcr.io/nberlee/installer:v1.6.4-rk3588`
"""
[notes.updates]
title = "Component Updates"


description = """\
containerd: 1.7.13
runc: 1.1.12
Linux: 6.6.15
See [CVE-2024-21626](https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv) for the runc update.
Expand Down
3 changes: 3 additions & 0 deletions internal/app/machined/pkg/runtime/v1alpha1/board/board.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
rockpi4 "github.com/siderolabs/talos/internal/app/machined/pkg/runtime/v1alpha1/board/rockpi4"
rockpi4c "github.com/siderolabs/talos/internal/app/machined/pkg/runtime/v1alpha1/board/rockpi4c"
rpigeneric "github.com/siderolabs/talos/internal/app/machined/pkg/runtime/v1alpha1/board/rpi_generic"
turingrk1 "github.com/siderolabs/talos/internal/app/machined/pkg/runtime/v1alpha1/board/turing_rk1"
"github.com/siderolabs/talos/pkg/machinery/constants"
)

Expand Down Expand Up @@ -70,6 +71,8 @@ func newBoard(board string) (b runtime.Board, err error) {
b = &jetsonnano.JetsonNano{}
case constants.BoardNanoPiR4S:
b = &nanopir4s.NanoPiR4S{}
case constants.BoardTuringRK1:
b = &turingrk1.TuringRK1{}
default:
return nil, fmt.Errorf("unsupported board: %q", board)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
// 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 TuringRK1 provides the Turing RK1 implementation.
package TuringRK1

import (
"os"
"path/filepath"

"github.com/siderolabs/go-procfs/procfs"
"golang.org/x/sys/unix"

"github.com/siderolabs/talos/internal/app/machined/pkg/runtime"
"github.com/siderolabs/talos/pkg/copy"
"github.com/siderolabs/talos/pkg/machinery/constants"
)

var (
bin = constants.BoardTuringRK1 + "/u-boot-rockchip.bin"
off int64 = 512 * 64
dtb = "rockchip/rk3588-turing-rk1.dtb"
)

// TuringRK1 represents the Rockchip RK3588 based SoM from Turing Machines.
//
// Reference: https://rockpi.org/
type TuringRK1 struct{}

// Name implements the runtime.Board.
func (r *TuringRK1) Name() string {
return constants.BoardTuringRK1
}

// Install implements the runtime.Board.
func (r *TuringRK1) Install(options runtime.BoardInstallOptions) (err error) {
var f *os.File

if f, err = os.OpenFile(options.InstallDisk, os.O_RDWR|unix.O_CLOEXEC, 0o666); err != nil {
return err
}

defer f.Close() //nolint:errcheck

uboot, err := os.ReadFile(filepath.Join(options.UBootPath, bin))
if err != nil {
return err
}

options.Printf("writing %s at offset %d", bin, off)

var n int

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

options.Printf("wrote %d bytes", n)

// 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.DTBPath, 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)
}

// KernelArgs implements the runtime.Board.
func (r *TuringRK1) KernelArgs() procfs.Parameters {
return []*procfs.Parameter{
procfs.NewParameter("console").Append("tty0").Append("ttyS9,115200").Append("ttyS2,115200"),
procfs.NewParameter("sysctl.kernel.kexec_load_disabled").Append("1"),
procfs.NewParameter(constants.KernelParamDashboardDisabled).Append("1"),
procfs.NewParameter("cma").Append("128MB"),
}
}

// PartitionOptions implements the runtime.Board.
func (r *TuringRK1) PartitionOptions() *runtime.PartitionOptions {
return &runtime.PartitionOptions{PartitionsOffset: 2048 * 10}
}
14 changes: 14 additions & 0 deletions pkg/imager/profile/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -367,4 +367,18 @@ var Default = map[string]Profile{
},
},
},
constants.BoardTuringRK1: {
Arch: "arm64",
Platform: constants.PlatformMetal,
Board: constants.BoardTuringRK1,
SecureBoot: pointer.To(false),
Output: Output{
Kind: OutKindImage,
OutFormat: OutFormatXZ,
ImageOptions: &ImageOptions{
DiskSize: MinRAWDiskSize,
DiskFormat: DiskFormatRaw,
},
},
},
}
5 changes: 4 additions & 1 deletion pkg/machinery/constants/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (

const (
// DefaultKernelVersion is the default Linux kernel version.
DefaultKernelVersion = "6.1.74-talos"
DefaultKernelVersion = "6.6.15-talos"

// KernelModulesPath is the default path to the kernel modules without the kernel version.
KernelModulesPath = "/lib/modules"
Expand Down Expand Up @@ -112,6 +112,9 @@ const (
// BoardNanoPiR4S is the name of the Friendlyelec Nano Pi R4S.
BoardNanoPiR4S = "nanopi_r4s"

// BoardTuringRK1 is the name of the Turing Pi RK1 board.
BoardTuringRK1 = "turing_rk1"

// KernelParamHostname is the kernel parameter name for specifying the
// hostname.
KernelParamHostname = "talos.hostname"
Expand Down
Loading

0 comments on commit 745e347

Please sign in to comment.