diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 617834f983f..f3e07bc7043 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -65,6 +65,7 @@ jobs:
USERNAME: ${{ github.actor }}
PLATFORM: linux/arm64
PROGRESS: plain
+ IMAGER_ARGS: "--system-extension-image ghcr.io/nberlee/rk3588:v1.6.3"
- uses: actions/upload-artifact@v3
with:
diff --git a/Dockerfile b/Dockerfile
index f4192828b26..90f18c197c6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -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-17-gb944dc3-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=.
diff --git a/Makefile b/Makefile
index 7f85d701c3a..7a2e9e02f11 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@ CLOUD_IMAGES_EXTRA_ARGS ?= ""
ARTIFACTS := _out
TOOLS ?= ghcr.io/siderolabs/tools:v1.6.0-2-g5e034ec
PKGS ?= v1.6.0-15-gf51aedb
-PKG_KERNEL ?= ghcr.io/siderolabs/kernel:$(PKGS)
+PKG_KERNEL ?= ghcr.io/nberlee/kernel:v1.6.0-18-ga16380f
EXTRAS ?= v1.6.0-1-g113887a
# renovate: datasource=github-tags depName=golang/go
GO_VERSION ?= 1.21
@@ -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.
diff --git a/README.md b/README.md
index 359dee9e0aa..e7786590e46 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,47 @@
---
-
+# 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/D4DeLc8J0NFRY3iatLikyGYmA.svg)](https://asciinema.org/a/D4DeLc8J0NFRY3iatLikyGYmA)
+
+### 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 -i metal-turing_rk1-arm64.raw
+tpi power on -n
+```
+
+To check bootmessages:
+```sh
+tpi uart -n get
+```
+
+Make sure when you use talosctl apply-config to have in this config the [rk3588](https://github.com/nberlee/extensions/tree/release-1.6/sbcs/rk3588) extension.
+```yaml
+machine:
+ install:
+ extensions:
+ - image: ghcr.io/nberlee/rk3588:v1.6.x
+ kernel:
+ modules:
+ - name: rockchip-cpufreq
+```
+
+### Updating
+
+Updating can also be done faster using the `talosctl upgrade` command.
+
+Before updating, make sure to edit the machine config and change the extension tag above to the correct new version.
+```sh
+talosctl upgrade -i ghcr.io/nberlee/installer:v1.6.x
+```
+
+# 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.
diff --git a/hack/modules-amd64.txt b/hack/modules-amd64.txt
index dd6eb43e8bf..57b375c5e0d 100644
--- a/hack/modules-amd64.txt
+++ b/hack/modules-amd64.txt
@@ -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
@@ -38,19 +34,9 @@ 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
@@ -58,6 +44,8 @@ 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
@@ -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
diff --git a/hack/modules-arm64.txt b/hack/modules-arm64.txt
index b7e595b04f5..fc50a6f50f7 100644
--- a/hack/modules-arm64.txt
+++ b/hack/modules-arm64.txt
@@ -1,6 +1,7 @@
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
@@ -8,6 +9,7 @@ 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
@@ -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
diff --git a/hack/release.toml b/hack/release.toml
index 0c6815fe4e6..70df2d5c82b 100644
--- a/hack/release.toml
+++ b/hack/release.toml
@@ -16,9 +16,12 @@ preface = """\
[notes]
[notes.updates]
title = "Component Updates"
+
+
description = """\
-Linux: 6.1.74
+Linux: 6.6.13
Kubernetes: 1.29.1
+containerd: 1.7.11
Talos is built with Go 1.21.6.
"""
diff --git a/internal/app/machined/pkg/runtime/v1alpha1/board/board.go b/internal/app/machined/pkg/runtime/v1alpha1/board/board.go
index 743655caa7d..3fd3fe07883 100644
--- a/internal/app/machined/pkg/runtime/v1alpha1/board/board.go
+++ b/internal/app/machined/pkg/runtime/v1alpha1/board/board.go
@@ -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"
)
@@ -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)
}
diff --git a/internal/app/machined/pkg/runtime/v1alpha1/board/turing_rk1/turing_rk1.go b/internal/app/machined/pkg/runtime/v1alpha1/board/turing_rk1/turing_rk1.go
new file mode 100644
index 00000000000..4be4c0a659b
--- /dev/null
+++ b/internal/app/machined/pkg/runtime/v1alpha1/board/turing_rk1/turing_rk1.go
@@ -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}
+}
diff --git a/pkg/imager/profile/default.go b/pkg/imager/profile/default.go
index a08401291cc..1137064e2e6 100644
--- a/pkg/imager/profile/default.go
+++ b/pkg/imager/profile/default.go
@@ -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,
+ },
+ },
+ },
}
diff --git a/pkg/machinery/constants/constants.go b/pkg/machinery/constants/constants.go
index f2ab65ae585..c737bd56e8a 100644
--- a/pkg/machinery/constants/constants.go
+++ b/pkg/machinery/constants/constants.go
@@ -16,7 +16,7 @@ import (
const (
// DefaultKernelVersion is the default Linux kernel version.
- DefaultKernelVersion = "6.1.74-talos"
+ DefaultKernelVersion = "6.6.14-talos"
// KernelModulesPath is the default path to the kernel modules without the kernel version.
KernelModulesPath = "/lib/modules"
@@ -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"
diff --git a/website/content/v1.6/talos-guides/install/single-board-computers/turing_rk1.md b/website/content/v1.6/talos-guides/install/single-board-computers/turing_rk1.md
new file mode 100644
index 00000000000..894b3f3826f
--- /dev/null
+++ b/website/content/v1.6/talos-guides/install/single-board-computers/turing_rk1.md
@@ -0,0 +1,103 @@
+---
+title: "Turing RK1"
+description: "Installing Talos on Turing RK1 SOM using raw disk image."
+aliases:
+ - ../../../single-board-computers/turing_rk1
+---
+
+[![asciicast](https://asciinema.org/a/633378.svg)](https://asciinema.org/a/633378)
+
+## Prerequisites
+
+You will need
+
+- `talosctl`
+- `tpi` from [github](https://github.com/turing-machines/tpi/releases)
+
+Download the latest `talosctl`.
+
+```bash
+curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/download/{{< release >}}/talosctl-$(uname -s | tr "[:upper:]" "[:lower:]")-amd64
+chmod +x /usr/local/bin/talosctl
+```
+
+
+## Download the Image
+
+Download the image and decompress it:
+
+```bash
+curl -LO https://github.com/nberlee/talos/releases/download/{{< release >}}/metal-turing_rk1-arm64.raw.xz
+xz -d metal-turing_rk1-arm64.raw.xz
+```
+
+The user has two options to proceed:
+
+- booting from eMMC
+- booting from a USB or NVMe (requires a spi image on the eMMC)
+
+### Booting from eMMC
+
+```bash
+tpi flash -n -i metal-turing_rk1-arm64.raw
+tpi power on -n
+```
+Proceed to [bootstrapping the node](#bootstrapping-the-node).
+
+### Booting from USB or NVMe
+
+This requires the user to flash the Turing RK1 with a u-boot SPI image.
+
+If you have a USB to NVMe adapter, write Talos image to the USB drive:
+
+```bash
+sudo dd if=metal-turing_rk1-arm64.raw of=/dev/sda
+```
+install the NVMe drive in the Turing Pi board.
+
+Otherwise, if the NVMe drive is already installed in the Turing Pi board, you can:
+- Flash the Turing RK1 variant of [Ubuntu](https://docs.turingpi.com/docs/turing-rk1-flashing-os) to the eMMC.
+- Boot into the ubuntu image, write Talos image to the SSD drive right from your Turing PI board:
+
+```bash
+sudo dd if=metal-turing_rk1-arm64.raw of=/dev/NVMe0n1
+```
+- Download u-boot image from talos u-boot:
+
+```bash
+mkdir _out
+
+docker pull ghcr.io/nberlee/u-boot:v1.6.0-16-g009ab8c-dirty
+docker save ghcr.io/nberlee/u-boot:v1.6.0-16-g009ab8c-dirty | tar xf - --strip-components=1 -C _out
+tar xvf _out/layer.tar turing_rk1/u-boot-rockchip-spi.bin
+
+tpi flash -n -i turing_rk1/u-boot-rockchip-spi.bin
+tpi power on -n
+```
+
+After these steps, Talos will boot from the NVMe/USB and enter maintenance mode.
+Proceed to [bootstrapping the node](#bootstrapping-the-node).
+
+## Bootstrapping the Node
+
+To check bootmessages, repeat until you see instructions for bootstrapping the node:
+```sh
+tpi uart -n get
+```
+
+Wait for the uart to show you the instructions for bootstrapping the node.
+Following the instructions in the uart output to connect to the interactive installer:
+
+```bash
+talosctl apply-config --insecure --mode=interactive --nodes
+```
+
+Once the interactive installation is applied, the cluster will form and you can then use `kubectl`.
+
+## Retrieve the `kubeconfig`
+
+Retrieve the admin `kubeconfig` by running:
+
+```bash
+talosctl kubeconfig
+```