diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 2dc5670f09c..089375da054 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -62,6 +62,7 @@ jobs:
USERNAME: ${{ github.actor }}
PLATFORM: linux/arm64
PROGRESS: plain
+ IMAGER_ARGS: "--system-extension-image ghcr.io/nberlee/rk3588:v1.6.0"
- uses: actions/upload-artifact@v3
with:
@@ -87,4 +88,4 @@ jobs:
with:
fail_on_unmatched_files: true
files: 'image-*/*.raw.xz'
- generate_release_notes: true
\ No newline at end of file
+ generate_release_notes: true
diff --git a/Dockerfile b/Dockerfile
index 23fa0263e2c..99aab096683 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -82,7 +82,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-7-g9acbe68-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 e3563156275..371db122434 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@ CLOUD_IMAGES_EXTRA_ARGS ?= ""
ARTIFACTS := _out
TOOLS ?= ghcr.io/siderolabs/tools:v1.6.0-1-g336d248
PKGS ?= v1.6.0-5-g3ae2450
-PKG_KERNEL ?= ghcr.io/siderolabs/kernel:$(PKGS)
+PKG_KERNEL ?= ghcr.io/nberlee/kernel:v1.6.0-7-g5c317ab
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..ed80c803a32 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,46 @@
---
-
+# 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
+
+### 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 a343f5b4c6e..8d976d2a70d 100644
--- a/hack/modules-amd64.txt
+++ b/hack/modules-amd64.txt
@@ -22,12 +22,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
@@ -37,19 +33,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
@@ -57,6 +43,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
@@ -67,9 +55,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 2061b9e62d9..3362063b857 100644
--- a/hack/modules-arm64.txt
+++ b/hack/modules-arm64.txt
@@ -1,12 +1,14 @@
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/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
@@ -19,17 +21,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 d5c29b11d1e..7730fcbfb7d 100644
--- a/hack/release.toml
+++ b/hack/release.toml
@@ -14,6 +14,24 @@ preface = """\
"""
[notes]
+ [notes.kernel]
+ title = "New LTS Kernel"
+ description = """\
+This fork comes with a new LTS Kernel v6.6.
+It was needed to upgrade it because of the support for the RK3588. It also has some upstream patches from 6.7-rc.
+"""
+ [notes.board]
+ title = "Turing RK1 support"
+ description = """\
+This fork has Turing RK1 board support. Everything should work except for HDMI and UART2 serial console.
+Make sure to add the extension `ghcr.io/nberlee/rk3588:v1.6.x` to the machine config and add `rockchip-cpyfreq` to machine.kernel.module:
+```yaml
+machine:
+ kernel:
+ modules:
+ - name: rockchip-cpufreq
+```
+"""
[notes.firmware]
title = "Linux Firmware"
description = """\
@@ -55,13 +73,15 @@ Any kernel argument that starts with a `-` is dropped. Kernel arguments to be dr
[notes.updates]
title = "Component Updates"
description = """\
-Linux: 6.1.67
+Linux: 6.6.7
containerd: 1.7.10
CoreDNS: 1.11.1
Kubernetes: 1.29.0
Flannel: 0.23.0
etcd: 3.5.11
runc: 1.1.10
+u-boot: 2024.01-rc4
+arm-trusted-firmware: 2.10.0
Talos is built with Go 1.21.5.
"""
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..11938785a45
--- /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("/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("irqchip.gicv3_pseudo_nmi").Append("0"),
+ }
+}
+
+// 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 150ce39b437..16965feb012 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.67-talos"
+ DefaultKernelVersion = "6.6.7-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"