mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-22 17:23:00 +02:00
Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b04b978d40 | ||
|
|
1d1afecdc3 | ||
|
|
2cfddb448c | ||
|
|
f25a3189ed | ||
|
|
1422a0ebdd | ||
|
|
ce1892a60b | ||
|
|
4b340a38b3 |
@@ -78,7 +78,7 @@ jobs:
|
||||
|
||||
- name: Configure ${{ matrix.defconfig }}_defconfig
|
||||
run: |
|
||||
make ${{ matrix.defconfig }}_defconfig apply-mirror
|
||||
make ${{ matrix.defconfig }}_defconfig
|
||||
|
||||
- name: Build ${{ matrix.defconfig }}_defconfig
|
||||
run: |
|
||||
|
||||
@@ -173,7 +173,7 @@ jobs:
|
||||
export BUILD_DIR=$PWD/build
|
||||
export BR2_EXTERNAL_INFIX_PATH=$PWD
|
||||
export RELEASE=""
|
||||
export IX_ID="infix"
|
||||
export INFIX_ID="infix"
|
||||
|
||||
for target in $TARGETS; do
|
||||
export BINARIES_DIR=$PWD/output_${target}/images
|
||||
|
||||
@@ -54,7 +54,7 @@ jobs:
|
||||
run: |
|
||||
target=${{ matrix.target }}_defconfig
|
||||
echo "Building $target ..."
|
||||
make $target apply-mirror
|
||||
make $target
|
||||
make
|
||||
|
||||
- name: Generate SBOM from Build
|
||||
@@ -70,25 +70,6 @@ jobs:
|
||||
run: |
|
||||
make test-spec
|
||||
|
||||
# rootfs.squashfs is still present here; it is stripped from the
|
||||
# tarball below. mkimage pulls the rpi64 bootloader from the
|
||||
# latest-boot release and uses the freshly built host genimage.
|
||||
- name: Build Raspberry Pi image
|
||||
if: matrix.target == 'aarch64'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
./utils/mkimage.sh -d -r output raspberrypi-rpi64
|
||||
mkdir -p rpi-image
|
||||
mv output/images/*-rpi64-sdcard.img rpi-image/
|
||||
xz -T0 rpi-image/*-rpi64-sdcard.img
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
if: matrix.target == 'aarch64'
|
||||
with:
|
||||
name: artifact-rpi64-image
|
||||
path: rpi-image/*.img.xz
|
||||
|
||||
- name: Prepare Artifacts
|
||||
run: |
|
||||
cd output/
|
||||
@@ -117,8 +98,3 @@ jobs:
|
||||
with:
|
||||
name: artifact-disk-image-${{ matrix.target }}
|
||||
path: output/images/*.qcow2
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: artifact-pkg-${{ matrix.target }}
|
||||
path: output/images/*.pkg
|
||||
|
||||
@@ -129,7 +129,7 @@ jobs:
|
||||
|
||||
- name: Configure ${{ env.TARGET }}
|
||||
run: |
|
||||
make ${{ env.TARGET }}_defconfig apply-mirror
|
||||
make ${{ env.TARGET }}_defconfig
|
||||
|
||||
- name: Cleanup stale containers and ports
|
||||
run: |
|
||||
|
||||
@@ -95,7 +95,7 @@ jobs:
|
||||
makeLatest: ${{ steps.rel.outputs.latest }}
|
||||
discussionCategory: ${{ steps.rel.outputs.cat }}
|
||||
bodyFile: release.md
|
||||
artifacts: "*.tar.gz,*.qcow2,*.pkg,*.img.xz"
|
||||
artifacts: "*.tar.gz,*.qcow2"
|
||||
|
||||
- name: Summary
|
||||
run: |
|
||||
|
||||
@@ -2,7 +2,7 @@ source "$BR2_EXTERNAL_INFIX_PATH/board/Config.in"
|
||||
|
||||
menu "Branding"
|
||||
|
||||
config IX_VENDOR
|
||||
config INFIX_VENDOR
|
||||
string "Vendor name"
|
||||
default "KernelKit"
|
||||
help
|
||||
@@ -15,7 +15,7 @@ config IX_VENDOR
|
||||
|
||||
Used for VENDOR_NAME in /etc/os-release and GNS3 appliance files.
|
||||
|
||||
config IX_VENDOR_HOME
|
||||
config INFIX_VENDOR_HOME
|
||||
string "Vendor URL"
|
||||
help
|
||||
The homepage of the OS vendor. The value should be in RFC3986
|
||||
@@ -24,14 +24,14 @@ config IX_VENDOR_HOME
|
||||
|
||||
Optional, used for VENDOR_HOME in /etc/os-release
|
||||
|
||||
config IX_NAME
|
||||
config INFIX_NAME
|
||||
string "Operating system name"
|
||||
default "Infix"
|
||||
help
|
||||
Mandatory. Used for identifying the OS as NAME in /etc/os-release
|
||||
and product_name in GNS3 appliance files.
|
||||
|
||||
config IX_ID
|
||||
config INFIX_ID
|
||||
string "Operating system identifier"
|
||||
default "infix"
|
||||
help
|
||||
@@ -43,9 +43,9 @@ config IX_ID
|
||||
Mandatory. Used for identifying the OS as ID in /etc/os-release and
|
||||
in the generated image name: ID-ARCH-VERSION.img
|
||||
|
||||
config IX_IMAGE_ID
|
||||
config INFIX_IMAGE_ID
|
||||
string "Operating system image name"
|
||||
default "${IX_ID}-${BR2_ARCH}"
|
||||
default "${INFIX_ID}-${BR2_ARCH}"
|
||||
help
|
||||
A lower-case string (no spaces or other characters outside of 0–9,
|
||||
a–z, ".", "_" and "-"), for naming critical image files, directories
|
||||
@@ -54,18 +54,18 @@ config IX_IMAGE_ID
|
||||
Mandatory. When INFIX_RELEASE is set, this string is appended to
|
||||
the IMAGE_ID with a '-' separator.
|
||||
|
||||
config IX_COMPATIBLE
|
||||
config INFIX_COMPATIBLE
|
||||
string "Operating system compatible string"
|
||||
default "${IX_IMAGE_ID}"
|
||||
default "${INFIX_IMAGE_ID}"
|
||||
help
|
||||
A lower-case string (no spaces or other characters outside of 0–9,
|
||||
a–z, ".", "_" and "-"), used for image identification at upgrade.
|
||||
E.g., the RAUC [system] compatible string.
|
||||
|
||||
Mandatory. Defaults to $IX_IMAGE_ID, which in turn is composed
|
||||
of $IX_ID-$BR2_ARCH.
|
||||
Mandatory. Defaults to $INFIX_IMAGE_ID, which in turn is composed
|
||||
of $INFIX_ID-$BR2_ARCH.
|
||||
|
||||
config IX_TAGLINE
|
||||
config INFIX_TAGLINE
|
||||
string "Operating system tagline"
|
||||
default "Infix OS — Immutable.Friendly.Secure"
|
||||
help
|
||||
@@ -74,25 +74,25 @@ config IX_TAGLINE
|
||||
|
||||
This is also show at boot when the system init process starts.
|
||||
|
||||
config IX_DESC
|
||||
config INFIX_DESC
|
||||
string "Operating system description"
|
||||
help
|
||||
Optional. Used for long description texts about the OS. E.g.,
|
||||
the GNS3 appliance file description field. Saved in the file
|
||||
/etc/os-release as IX_DESC.
|
||||
/etc/os-release as INFIX_DESC.
|
||||
|
||||
config IX_HOME
|
||||
config INFIX_HOME
|
||||
string "Operating system URL"
|
||||
help
|
||||
Used for identifying the OS, e.g. as HOME_URL in /etc/os-release
|
||||
|
||||
config IX_DOC
|
||||
config INFIX_DOC
|
||||
string "Operating system docs"
|
||||
help
|
||||
Optional. Main documentation URL, will be shown in /etc/os-release
|
||||
as DOCUMENTATION_URL.
|
||||
|
||||
config IX_SUPPORT
|
||||
config INFIX_SUPPORT
|
||||
string "Operating system support"
|
||||
help
|
||||
Main support page for the operating system, if there is any. This
|
||||
@@ -102,13 +102,13 @@ config IX_SUPPORT
|
||||
Optional. Shown, e.g., as SUPPORT_URL in /etc/os-release or
|
||||
maintainer_email in .gns3a.
|
||||
|
||||
config IX_OEM_PATH
|
||||
config INFIX_OEM_PATH
|
||||
string "Path to OEM br2-external"
|
||||
help
|
||||
A br2-external using Infix will likely want to version the branded
|
||||
OS using their own GIT tags. Set this variable to point to the base
|
||||
directory (absolute path) and the Infix post-build.sh will call `git
|
||||
describe -C $IX_OEM_PATH`.
|
||||
describe -C $INFIX_OEM_PATH`.
|
||||
|
||||
Note: the OS version (VERSION, VERSION_ID, BUILD_ID in
|
||||
/etc/os-release) is always derived from `git describe`. The global
|
||||
@@ -118,7 +118,7 @@ config IX_OEM_PATH
|
||||
endmenu
|
||||
|
||||
# For /etc/os-release, uses CondtionArchitechture= from systemd.unit(5)
|
||||
config IX_ARCH
|
||||
config INFIX_ARCH
|
||||
string
|
||||
default "arm" if BR2_arm
|
||||
default "arm64" if BR2_aarch64
|
||||
|
||||
@@ -22,7 +22,7 @@ image var.ext4 {
|
||||
}
|
||||
}
|
||||
|
||||
image #IX_ID##VERSION#-vero-w-#TARGET#.img {
|
||||
image #INFIX_ID##VERSION#-vero-w-#TARGET#.img {
|
||||
hdimage {
|
||||
partition-table-type = "gpt"
|
||||
gpt-no-backup = true
|
||||
|
||||
@@ -24,7 +24,7 @@ image var.ext4 {
|
||||
}
|
||||
}
|
||||
|
||||
image #IX_ID##VERSION#-bpi-r3-#TARGET#.img {
|
||||
image #INFIX_ID##VERSION#-bpi-r3-#TARGET#.img {
|
||||
hdimage {
|
||||
partition-table-type = "gpt"
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ image var.ext4 {
|
||||
}
|
||||
}
|
||||
|
||||
image #IX_ID##VERSION#-bpi-r4-#TARGET#.img {
|
||||
image #INFIX_ID##VERSION#-bpi-r4-#TARGET#.img {
|
||||
hdimage {
|
||||
partition-table-type = "gpt"
|
||||
gpt-no-backup = true
|
||||
|
||||
@@ -24,7 +24,7 @@ image var.ext4 {
|
||||
}
|
||||
}
|
||||
|
||||
image #IX_ID##VERSION#-bpi-r64-#TARGET#.img {
|
||||
image #INFIX_ID##VERSION#-bpi-r64-#TARGET#.img {
|
||||
hdimage {
|
||||
partition-table-type = "hybrid"
|
||||
# MT7622 TF-A partition driver detects GPT by checking MBR[0]
|
||||
|
||||
@@ -26,7 +26,7 @@ image var.ext4 {
|
||||
}
|
||||
}
|
||||
|
||||
image #IX_ID##VERSION#-nanopi-r2s-sdcard.img {
|
||||
image #INFIX_ID##VERSION#-nanopi-r2s-sdcard.img {
|
||||
hdimage {
|
||||
partition-table-type = "gpt"
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ image var.ext4 {
|
||||
}
|
||||
}
|
||||
|
||||
image #IX_ID##VERSION#-espressobin-#TARGET#.img {
|
||||
image #INFIX_ID##VERSION#-espressobin-#TARGET#.img {
|
||||
hdimage {
|
||||
partition-table-type = "gpt"
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ image var.ext4 {
|
||||
}
|
||||
}
|
||||
|
||||
image #IX_ID##VERSION#-rpi64-sdcard.img {
|
||||
image #INFIX_ID##VERSION#-rpi64-sdcard.img {
|
||||
hdimage {
|
||||
partition-table-type = "hybrid"
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ image var.ext4 {
|
||||
}
|
||||
}
|
||||
|
||||
image #IX_ID##VERSION#-sama7g54-ek-#TARGET#.img {
|
||||
image #INFIX_ID##VERSION#-sama7g54-ek-#TARGET#.img {
|
||||
hdimage {
|
||||
partition-table-type = "hybrid"
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ image var.ext4 {
|
||||
}
|
||||
}
|
||||
|
||||
image #IX_ID##VERSION#-rpi2-sdcard.img {
|
||||
image #INFIX_ID##VERSION#-rpi2-sdcard.img {
|
||||
hdimage {
|
||||
partition-table-type = "hybrid"
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ source "$BR2_EXTERNAL_INFIX_PATH/board/common/image/image-readme/Config.in"
|
||||
|
||||
endmenu
|
||||
|
||||
config IX_QEMU_SCRIPTS
|
||||
config QEMU_SCRIPTS
|
||||
bool "QEMU scripts"
|
||||
default y
|
||||
help
|
||||
@@ -19,20 +19,20 @@ config IX_QEMU_SCRIPTS
|
||||
directory, which can be used to launch virtual Infix
|
||||
instances.
|
||||
|
||||
menuconfig IX_TRUSTED_KEYS
|
||||
menuconfig TRUSTED_KEYS
|
||||
bool "Trusted keys for image"
|
||||
help
|
||||
Keys that will be accepted for this image
|
||||
|
||||
config IX_TRUSTED_KEYS_DEVELOPMENT
|
||||
config TRUSTED_KEYS_DEVELOPMENT
|
||||
bool "Development key"
|
||||
depends on IX_TRUSTED_KEYS
|
||||
depends on TRUSTED_KEYS
|
||||
|
||||
config IX_TRUSTED_KEYS_DEVELOPMENT_PATH
|
||||
config TRUSTED_KEYS_DEVELOPMENT_PATH
|
||||
string
|
||||
depends on IX_TRUSTED_KEYS_DEVELOPMENT
|
||||
depends on TRUSTED_KEYS_DEVELOPMENT
|
||||
default "${BR2_EXTERNAL_INFIX_PATH}/board/common/signing-keys/development/infix.crt"
|
||||
|
||||
config IX_TRUSTED_KEYS_EXTRA_PATH
|
||||
config TRUSTED_KEYS_EXTRA_PATH
|
||||
string "Path to extra keys to include in image"
|
||||
depends on IX_TRUSTED_KEYS
|
||||
depends on TRUSTED_KEYS
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
include $(BR2_EXTERNAL_INFIX_PATH)/board/common/image/image.mk
|
||||
include $(BR2_EXTERNAL_INFIX_PATH)/board/common/qemu/qemu.mk
|
||||
|
||||
ifeq ($(IX_TRUSTED_KEYS),y)
|
||||
ifeq ($(TRUSTED_KEYS),y)
|
||||
include $(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/uboot.mk
|
||||
|
||||
IX_TRUSTED_KEYS=$(IX_TRUSTED_KEYS_DEVELOPMENT_PATH) $(IX_TRUSTED_KEYS_EXTRA_PATH)
|
||||
TRUSTED_KEYS=$(TRUSTED_KEYS_DEVELOPMENT_PATH) $(TRUSTED_KEYS_EXTRA_PATH)
|
||||
define RAUC_POST_BUILD_INSTALL_CERT
|
||||
@$(call IXMSG,"Installing signing cert for RAUC")
|
||||
mkdir -p $(TARGET_DIR)/etc/rauc/keys
|
||||
$(foreach crt,$(shell ls $(IX_TRUSTED_KEYS)), \
|
||||
$(foreach crt,$(shell ls $(TRUSTED_KEYS)), \
|
||||
cp $(crt) $(TARGET_DIR)/etc/rauc/keys/$(shell openssl x509 -hash -noout <$(crt)).0;)
|
||||
|
||||
endef
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
config IX_IMAGE_EXT4_RAUC
|
||||
config IMAGE_EXT4_RAUC
|
||||
bool "RAUC upgrade bundle (ext4)"
|
||||
depends on BR2_TARGET_ROOTFS_EXT2
|
||||
select BR2_PACKAGE_HOST_RAUC
|
||||
@@ -7,17 +7,17 @@ config IX_IMAGE_EXT4_RAUC
|
||||
image. Intended for development boards whose bootloader does
|
||||
not support squashfs.
|
||||
|
||||
config IX_IMAGE_EXT4_RAUC_KEY
|
||||
config IMAGE_EXT4_RAUC_KEY
|
||||
string "signing key"
|
||||
depends on IX_IMAGE_EXT4_RAUC
|
||||
depends on IMAGE_EXT4_RAUC
|
||||
default "${BR2_EXTERNAL_INFIX_PATH}/board/common/signing-keys/development/infix.key"
|
||||
help
|
||||
Path to the private key, in PKCS#8 format, used to sign
|
||||
the RAUC bundle; or a PKCS#11 URI.
|
||||
|
||||
config IX_IMAGE_EXT4_RAUC_CERT
|
||||
config IMAGE_EXT4_RAUC_CERT
|
||||
string "signing certificate"
|
||||
depends on IX_IMAGE_EXT4_RAUC
|
||||
depends on IMAGE_EXT4_RAUC
|
||||
default "${BR2_EXTERNAL_INFIX_PATH}/board/common/signing-keys/development/infix.crt"
|
||||
help
|
||||
Path to the X509 certificate which will be associated with
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
config IX_IMAGE_ITB_AUX
|
||||
config IMAGE_ITB_AUX
|
||||
bool "aux partition"
|
||||
depends on IX_IMAGE_ITB_ROOTFS
|
||||
depends on IMAGE_ITB_ROOTFS
|
||||
select BR2_PACKAGE_HOST_UBOOT_TOOLS
|
||||
select BR2_PACKAGE_HOST_GENIMAGE
|
||||
help
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
menuconfig IX_IMAGE_ITB_DL_RELEASE
|
||||
menuconfig IMAGE_ITB_DL_RELEASE
|
||||
bool "Download existing release"
|
||||
depends on !BR2_TARGET_ROOTFS_SQUASHFS
|
||||
help
|
||||
@@ -7,9 +7,9 @@ menuconfig IX_IMAGE_ITB_DL_RELEASE
|
||||
Infix image, to create a full disk image that can be
|
||||
provisioned to an SD-card or eMMC.
|
||||
|
||||
config IX_IMAGE_ITB_DL_RELEASE_URL
|
||||
config IMAGE_ITB_DL_RELEASE_URL
|
||||
string "URL"
|
||||
depends on IX_IMAGE_ITB_DL_RELEASE
|
||||
depends on IMAGE_ITB_DL_RELEASE
|
||||
default "https://github.com/kernelkit/infix/releases/download/latest/infix-${BR2_ARCH}.tar.gz"
|
||||
help
|
||||
URL to release tarball.
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
menuconfig IX_IMAGE_ITB_GNS3A
|
||||
menuconfig IMAGE_ITB_GNS3A
|
||||
bool "GNS3 Appliance (ITB)"
|
||||
depends on BR2_x86_64
|
||||
select IX_IMAGE_ITB_QCOW
|
||||
select IMAGE_ITB_QCOW
|
||||
help
|
||||
Create a GNS3 appliance description that, together with the
|
||||
disk image, can be imported into GNS3.
|
||||
|
||||
config IX_IMAGE_ITB_GNS3A_RAM
|
||||
config IMAGE_ITB_GNS3A_RAM
|
||||
int "Reserved RAM (MiB)"
|
||||
depends on IX_IMAGE_ITB_GNS3A
|
||||
depends on IMAGE_ITB_GNS3A
|
||||
default "192"
|
||||
help
|
||||
Amount of host RAM reserved for an appliance instance.
|
||||
|
||||
Minimum supported size is 192M.
|
||||
|
||||
config IX_IMAGE_ITB_GNS3A_IFNUM
|
||||
config IMAGE_ITB_GNS3A_IFNUM
|
||||
int "Number of interfaces"
|
||||
depends on IX_IMAGE_ITB_GNS3A
|
||||
depends on IMAGE_ITB_GNS3A
|
||||
default "1"
|
||||
help
|
||||
Number of Ethernet interfaces to create for an appliance instance.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
menuconfig IX_IMAGE_ITB_QCOW
|
||||
menuconfig IMAGE_ITB_QCOW
|
||||
bool "QEMU disk image (ITB)"
|
||||
depends on (IX_IMAGE_ITB_ROOTFS && IX_IMAGE_ITB_AUX) || IX_IMAGE_ITB_DL_RELEASE
|
||||
depends on (IMAGE_ITB_ROOTFS && IMAGE_ITB_AUX) || IMAGE_ITB_DL_RELEASE
|
||||
select BR2_PACKAGE_HOST_GENIMAGE
|
||||
help
|
||||
Compose a full disk image with redundant Linux OS partitions,
|
||||
@@ -11,9 +11,9 @@ menuconfig IX_IMAGE_ITB_QCOW
|
||||
- Creating a GNS3 appliance
|
||||
- Developing/debugging issues in the boot process in QEMU
|
||||
|
||||
menuconfig IX_IMAGE_ITB_QCOW_SIZE
|
||||
menuconfig IMAGE_ITB_QCOW_SIZE
|
||||
string "Image size"
|
||||
depends on IX_IMAGE_ITB_QCOW
|
||||
depends on IMAGE_ITB_QCOW
|
||||
default "512M"
|
||||
help
|
||||
Create a disk image of this size. A K/M/G suffix may be used
|
||||
@@ -26,22 +26,22 @@ menuconfig IX_IMAGE_ITB_QCOW_SIZE
|
||||
|
||||
choice
|
||||
prompt "Bootloader"
|
||||
depends on IX_IMAGE_ITB_QCOW
|
||||
default IX_IMAGE_ITB_QCOW_BOOT_EFI if BR2_x86_64
|
||||
default IX_IMAGE_ITB_QCOW_BOOT_NONE
|
||||
depends on IMAGE_ITB_QCOW
|
||||
default IMAGE_ITB_QCOW_BOOT_EFI if BR2_x86_64
|
||||
default IMAGE_ITB_QCOW_BOOT_NONE
|
||||
|
||||
config IX_IMAGE_ITB_QCOW_BOOT_NONE
|
||||
config IMAGE_ITB_QCOW_BOOT_NONE
|
||||
bool "None"
|
||||
help
|
||||
Do not create any bootloader partition in the disk image.
|
||||
|
||||
config IX_IMAGE_ITB_QCOW_BOOT_EFI
|
||||
config IMAGE_ITB_QCOW_BOOT_EFI
|
||||
bool "EFI"
|
||||
help
|
||||
Create a boot partition from a directory containing an EFI
|
||||
boot application, e.g. GRUB.
|
||||
|
||||
config IX_IMAGE_ITB_QCOW_BOOT_BIN
|
||||
config IMAGE_ITB_QCOW_BOOT_BIN
|
||||
bool "Binary"
|
||||
help
|
||||
Create a boot partition from a raw image containing the boot
|
||||
@@ -49,18 +49,18 @@ config IX_IMAGE_ITB_QCOW_BOOT_BIN
|
||||
|
||||
endchoice
|
||||
|
||||
config IX_IMAGE_ITB_QCOW_BOOT_DATA
|
||||
config IMAGE_ITB_QCOW_BOOT_DATA
|
||||
string "Bootloader data"
|
||||
depends on IX_IMAGE_ITB_QCOW
|
||||
depends on IX_IMAGE_ITB_QCOW_BOOT_EFI || IX_IMAGE_ITB_QCOW_BOOT_BIN
|
||||
depends on IMAGE_ITB_QCOW
|
||||
depends on IMAGE_ITB_QCOW_BOOT_EFI || IMAGE_ITB_QCOW_BOOT_BIN
|
||||
default "${BINARIES_DIR}/efi-part/EFI" if BR2_x86_64
|
||||
help
|
||||
Path to the directory or file holding the bootloader data.
|
||||
|
||||
config IX_IMAGE_ITB_QCOW_BOOT_OFFSET
|
||||
config IMAGE_ITB_QCOW_BOOT_OFFSET
|
||||
hex "Bootloader offset"
|
||||
depends on IX_IMAGE_ITB_QCOW
|
||||
depends on IX_IMAGE_ITB_QCOW_BOOT_EFI || IX_IMAGE_ITB_QCOW_BOOT_BIN
|
||||
depends on IMAGE_ITB_QCOW
|
||||
depends on IMAGE_ITB_QCOW_BOOT_EFI || IMAGE_ITB_QCOW_BOOT_BIN
|
||||
default 0x8000
|
||||
help
|
||||
Offset at which the bootloader partition is placed. Remember
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
|
||||
# We can source the rootfs+aux from a local build, or from a
|
||||
# downloaded release; so adjust our dependencies accordingly.
|
||||
IMAGE_ITB_QCOW_SRC-$(IX_IMAGE_ITB_ROOTFS) := image-itb-rootfs image-itb-aux
|
||||
IMAGE_ITB_QCOW_SRC-$(IX_IMAGE_ITB_DL_RELEASE) := image-itb-dl-release
|
||||
IMAGE_ITB_QCOW_SRC-$(IMAGE_ITB_ROOTFS) := image-itb-rootfs image-itb-aux
|
||||
IMAGE_ITB_QCOW_SRC-$(IMAGE_ITB_DL_RELEASE) := image-itb-dl-release
|
||||
|
||||
IMAGE_ITB_QCOW_DEPENDENCIES := host-genimage $(IMAGE_ITB_QCOW_SRC-y)
|
||||
IMAGE_ITB_QCOW_CONFIG_VARS := BOOT_DATA BOOT_OFFSET SIZE
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
menuconfig IX_IMAGE_ITB_RAUC
|
||||
menuconfig IMAGE_ITB_RAUC
|
||||
bool "RAUC upgrade bundle (ITB)"
|
||||
select IX_IMAGE_ITB_ROOTFS
|
||||
select IMAGE_ITB_ROOTFS
|
||||
select BR2_PACKAGE_HOST_RAUC
|
||||
help
|
||||
Create RAUC upgrade bundle, for targets using ITB images,
|
||||
that can be used to upgrade a running system to this version
|
||||
of Infix.
|
||||
|
||||
config IX_IMAGE_ITB_RAUC_KEY
|
||||
config IMAGE_ITB_RAUC_KEY
|
||||
string "signing key"
|
||||
depends on IX_IMAGE_ITB_RAUC
|
||||
depends on IMAGE_ITB_RAUC
|
||||
default "${BR2_EXTERNAL_INFIX_PATH}/board/common/signing-keys/development/infix.key"
|
||||
help
|
||||
Path to the private key, in PKCS#8 format, used to sign
|
||||
the RAUC bundle; or a PKCS#11 URI.
|
||||
|
||||
config IX_IMAGE_ITB_RAUC_CERT
|
||||
config IMAGE_ITB_RAUC_CERT
|
||||
string "signing certificate"
|
||||
depends on IX_IMAGE_ITB_RAUC
|
||||
depends on IMAGE_ITB_RAUC
|
||||
default "${BR2_EXTERNAL_INFIX_PATH}/board/common/signing-keys/development/infix.crt"
|
||||
help
|
||||
Path to the X509 certificate which will be associated with
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
menuconfig IX_IMAGE_ITB_ROOTFS
|
||||
menuconfig IMAGE_ITB_ROOTFS
|
||||
bool "rootfs.itb+.itbh"
|
||||
select BR2_TARGET_ROOTFS_SQUASHFS
|
||||
select BR2_PACKAGE_HOST_UBOOT_TOOLS
|
||||
@@ -7,9 +7,9 @@ menuconfig IX_IMAGE_ITB_ROOTFS
|
||||
and extract detached header (.itbh) for U-Boot based
|
||||
targets.
|
||||
|
||||
config IX_IMAGE_ITB_ROOTFS_KEY
|
||||
config IMAGE_ITB_ROOTFS_KEY
|
||||
string "signing key"
|
||||
depends on IX_IMAGE_ITB_ROOTFS
|
||||
depends on IMAGE_ITB_ROOTFS
|
||||
default "${BR2_EXTERNAL_INFIX_PATH}/board/common/signing-keys/development/infix.key"
|
||||
help
|
||||
Path to the private RSA key, in PKCS#8 format, used to sign
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
config IX_IMAGE_README
|
||||
config IMAGE_README
|
||||
bool "Install README.md in images"
|
||||
help
|
||||
Install a README.md with useful information about getting
|
||||
|
||||
@@ -13,6 +13,6 @@ $(BINARIES_DIR)/README.md: $(IMAGE_README_DIR)/README.md
|
||||
@mkdir -p $(BINARIES_DIR)
|
||||
@cp $< $@
|
||||
|
||||
ifeq ($(IX_IMAGE_README),y)
|
||||
ifeq ($(IMAGE_README),y)
|
||||
TARGETS_ROOTFS += image-readme
|
||||
endif
|
||||
|
||||
@@ -12,17 +12,15 @@ $(1): $$($(2)_DEPENDENCIES)
|
||||
BINARIES_DIR=$$(BINARIES_DIR) \
|
||||
BR2_EXTERNAL_INFIX_PATH=$$(BR2_EXTERNAL_INFIX_PATH) \
|
||||
ARTIFACT=$$(INFIX_ARTIFACT) \
|
||||
COMPATIBLE=$$(IX_COMPATIBLE) \
|
||||
COMPATIBLE=$$(INFIX_COMPATIBLE) \
|
||||
VERSION=$$(INFIX_VERSION) \
|
||||
$$(foreach var,$$($(2)_CONFIG_VARS),$$(var)=$$($(3)_$$(var)) ) \
|
||||
$$(foreach var,$$($(2)_CONFIG_VARS),$$(var)=$$($(2)_$$(var)) ) \
|
||||
$$($(2)_DIR)/generate.sh $$($(2)_OPTS)
|
||||
|
||||
ifeq ($$($(3)),y)
|
||||
ifeq ($$($(2)),y)
|
||||
TARGETS_ROOTFS += $(1)
|
||||
endif
|
||||
|
||||
endef
|
||||
|
||||
# $(2) is the package-local make-var prefix (UPPERCASE pkgname); $(3) is
|
||||
# the IX_ prefixed Kconfig symbol name, see issue #1305.
|
||||
ix-image = $(call inner-ix-image,$(pkgname),$(call UPPERCASE,$(pkgname)),IX_$(call UPPERCASE,$(pkgname)))
|
||||
ix-image = $(call inner-ix-image,$(pkgname),$(call UPPERCASE,$(pkgname)))
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ die()
|
||||
# DISK_IMAGE_SIZE="512"
|
||||
# etc.
|
||||
#
|
||||
# Nested variables, like IX_COMPATIBLE="${IX_IMAGE_ID}"
|
||||
# Nested variables, like INFIX_COMPATIBLE="${INFIX_IMAGE_ID}"
|
||||
# are handled by sourcing the file in a subshell.
|
||||
#
|
||||
# shellcheck disable=SC1090
|
||||
|
||||
+19
-19
@@ -37,7 +37,7 @@ EOF
|
||||
}
|
||||
|
||||
if [ -f "$TARGET_DIR/etc/rauc/system.conf" ]; then
|
||||
sed -i "s/compatible=.*/compatible=$IX_COMPATIBLE/" "$TARGET_DIR/etc/rauc/system.conf"
|
||||
sed -i "s/compatible=.*/compatible=$INFIX_COMPATIBLE/" "$TARGET_DIR/etc/rauc/system.conf"
|
||||
fi
|
||||
|
||||
if [ -n "${ID_LIKE}" ]; then
|
||||
@@ -53,40 +53,40 @@ cp "$TARGET_DIR/etc/hostname" "$TARGET_DIR/etc/hostname.d/10-default"
|
||||
ixmsg "Creating /etc/os-release"
|
||||
rm -f "$TARGET_DIR/etc/os-release"
|
||||
{
|
||||
echo "NAME=\"$IX_NAME\""
|
||||
echo "ID=$IX_ID"
|
||||
echo "PRETTY_NAME=\"$IX_TAGLINE $INFIX_VERSION\""
|
||||
echo "NAME=\"$INFIX_NAME\""
|
||||
echo "ID=$INFIX_ID"
|
||||
echo "PRETTY_NAME=\"$INFIX_TAGLINE $INFIX_VERSION\""
|
||||
echo "ID_LIKE=\"${ID}\""
|
||||
echo "DEFAULT_HOSTNAME=$BR2_TARGET_GENERIC_HOSTNAME"
|
||||
echo "VERSION=\"${INFIX_VERSION}\""
|
||||
echo "VERSION_ID=${INFIX_VERSION}"
|
||||
echo "BUILD_ID=\"${INFIX_BUILD_ID}\""
|
||||
if [ -n "$IX_IMAGE_ID" ]; then
|
||||
echo "IMAGE_ID=\"$IX_IMAGE_ID\""
|
||||
if [ -n "$INFIX_IMAGE_ID" ]; then
|
||||
echo "IMAGE_ID=\"$INFIX_IMAGE_ID\""
|
||||
fi
|
||||
if [ -n "$INFIX_RELEASE" ]; then
|
||||
echo "IMAGE_VERSION=\"$INFIX_RELEASE\""
|
||||
fi
|
||||
echo "ARCHITECTURE=\"${IX_ARCH}\""
|
||||
echo "HOME_URL=$IX_HOME"
|
||||
if [ -n "$IX_VENDOR" ]; then
|
||||
echo "VENDOR_NAME=\"$IX_VENDOR\""
|
||||
echo "ARCHITECTURE=\"${INFIX_ARCH}\""
|
||||
echo "HOME_URL=$INFIX_HOME"
|
||||
if [ -n "$INFIX_VENDOR" ]; then
|
||||
echo "VENDOR_NAME=\"$INFIX_VENDOR\""
|
||||
fi
|
||||
if [ -n "$IX_VENDOR_HOME" ]; then
|
||||
echo "VENDOR_HOME=\"$IX_VENDOR_HOME\""
|
||||
if [ -n "$INFIX_VENDOR_HOME" ]; then
|
||||
echo "VENDOR_HOME=\"$INFIX_VENDOR_HOME\""
|
||||
fi
|
||||
if [ -n "$IX_DOC" ]; then
|
||||
echo "DOCUMENTATION_URL=\"$IX_DOC\""
|
||||
if [ -n "$INFIX_DOC" ]; then
|
||||
echo "DOCUMENTATION_URL=\"$INFIX_DOC\""
|
||||
fi
|
||||
if [ -n "$IX_SUPPORT" ]; then
|
||||
echo "SUPPORT_URL=\"$IX_SUPPORT\""
|
||||
if [ -n "$INFIX_SUPPORT" ]; then
|
||||
echo "SUPPORT_URL=\"$INFIX_SUPPORT\""
|
||||
fi
|
||||
if [ -n "$IX_DESC" ]; then
|
||||
echo "INFIX_DESC=\"$IX_DESC\""
|
||||
if [ -n "$INFIX_DESC" ]; then
|
||||
echo "INFIX_DESC=\"$INFIX_DESC\""
|
||||
fi
|
||||
} > "$TARGET_DIR/etc/os-release"
|
||||
|
||||
echo "$IX_TAGLINE $INFIX_VERSION -- $(date +"%b %e %H:%M %Z %Y")" > "$TARGET_DIR/etc/version"
|
||||
echo "$INFIX_TAGLINE $INFIX_VERSION -- $(date +"%b %e %H:%M %Z %Y")" > "$TARGET_DIR/etc/version"
|
||||
ixmsg "Creating /etc/version: $(cat "$TARGET_DIR/etc/version")"
|
||||
|
||||
# In case of ambguities, this is what the image was built from
|
||||
|
||||
+108
-92
@@ -1,85 +1,85 @@
|
||||
mainmenu "QEMU Virtualization"
|
||||
|
||||
config IX_QEMU_ARCH_IS_32
|
||||
config QEMU_ARCH_IS_32
|
||||
bool
|
||||
|
||||
config IX_QEMU_ARCH_IS_64
|
||||
config QEMU_ARCH_IS_64
|
||||
bool
|
||||
|
||||
choice
|
||||
prompt "Target Architecture"
|
||||
default @ARCH@
|
||||
|
||||
config IX_QEMU_riscv64
|
||||
bool "riscv64"
|
||||
select IX_QEMU_ARCH_IS_64
|
||||
config QEMU_riscv64
|
||||
bool "risv64"
|
||||
select QEMU_ARCH_IS_64
|
||||
|
||||
config IX_QEMU_x86_64
|
||||
config QEMU_x86_64
|
||||
bool "x86_64"
|
||||
select IX_QEMU_ARCH_IS_64
|
||||
select QEMU_ARCH_IS_64
|
||||
|
||||
config IX_QEMU_arm
|
||||
config QEMU_arm
|
||||
bool "AArch32 (little endian)"
|
||||
select IX_QEMU_ARCH_IS_32
|
||||
select QEMU_ARCH_IS_32
|
||||
|
||||
config IX_QEMU_aarch64
|
||||
config QEMU_aarch64
|
||||
bool "AArch64 (little endian)"
|
||||
select IX_QEMU_ARCH_IS_64
|
||||
select QEMU_ARCH_IS_64
|
||||
|
||||
endchoice
|
||||
|
||||
choice
|
||||
prompt "Loader"
|
||||
default IX_QEMU_LOADER_KERNEL
|
||||
default QEMU_LOADER_KERNEL
|
||||
|
||||
config IX_QEMU_LOADER_KERNEL
|
||||
config QEMU_LOADER_KERNEL
|
||||
bool "Kernel"
|
||||
|
||||
config IX_QEMU_LOADER_UBOOT
|
||||
config QEMU_LOADER_UBOOT
|
||||
bool "U-Boot"
|
||||
depends on IX_QEMU_aarch64
|
||||
depends on QEMU_aarch64
|
||||
|
||||
config IX_QEMU_LOADER_OVMF
|
||||
config QEMU_LOADER_OVMF
|
||||
bool "OVMF (UEFI)"
|
||||
depends on IX_QEMU_x86_64
|
||||
depends on QEMU_x86_64
|
||||
|
||||
endchoice
|
||||
|
||||
choice
|
||||
prompt "Rootfs type"
|
||||
default IX_QEMU_ROOTFS_INITRD
|
||||
default QEMU_ROOTFS_INITRD
|
||||
|
||||
config IX_QEMU_ROOTFS_MMC
|
||||
config QEMU_ROOTFS_MMC
|
||||
bool "MMC"
|
||||
depends on IX_QEMU_aarch64
|
||||
depends on QEMU_aarch64
|
||||
|
||||
config IX_QEMU_ROOTFS_INITRD
|
||||
config QEMU_ROOTFS_INITRD
|
||||
bool "Initrd"
|
||||
depends on IX_QEMU_LOADER_KERNEL
|
||||
depends on QEMU_LOADER_KERNEL
|
||||
|
||||
config IX_QEMU_ROOTFS_VSCSI
|
||||
config QEMU_ROOTFS_VSCSI
|
||||
bool "Virtio SCSI"
|
||||
|
||||
endchoice
|
||||
|
||||
choice
|
||||
prompt "Console"
|
||||
default IX_QEMU_CONSOLE_SERIAL if IX_QEMU_arm
|
||||
default IX_QEMU_CONSOLE_VIRTIO
|
||||
default QEMU_CONSOLE_SERIAL if QEMU_arm
|
||||
default QEMU_CONSOLE_VIRTIO
|
||||
|
||||
config IX_QEMU_CONSOLE_VIRTIO
|
||||
config QEMU_CONSOLE_VIRTIO
|
||||
bool "Virtio (hvc0)"
|
||||
|
||||
config IX_QEMU_CONSOLE_SERIAL
|
||||
config QEMU_CONSOLE_SERIAL
|
||||
bool "Serial (ttyS0/ttyAMA0)"
|
||||
depends on !IX_QEMU_LOADER_OVMF
|
||||
depends on !QEMU_LOADER_OVMF
|
||||
endchoice
|
||||
|
||||
config IX_QEMU_MACHINE
|
||||
config QEMU_MACHINE
|
||||
string "Select emulated machine"
|
||||
default "qemu-system-arm -M virt,accel=kvm:tcg -cpu max" if IX_QEMU_arm
|
||||
default "qemu-system-aarch64 -M virt,accel=kvm:tcg -cpu cortex-a53" if IX_QEMU_aarch64
|
||||
default "qemu-system-x86_64 -M pc,accel=kvm:tcg -cpu max" if IX_QEMU_x86_64
|
||||
default "qemu-system-arm -M virt,accel=kvm:tcg -cpu max" if QEMU_arm
|
||||
default "qemu-system-aarch64 -M virt,accel=kvm:tcg -cpu cortex-a53" if QEMU_aarch64
|
||||
default "qemu-system-x86_64 -M pc,accel=kvm:tcg -cpu max" if QEMU_x86_64
|
||||
help
|
||||
You should not have to change this setting, although you may
|
||||
want to tweak it, or change the acceleration.
|
||||
@@ -88,7 +88,7 @@ config IX_QEMU_MACHINE
|
||||
the defconfig you started with. Currently Infix supports
|
||||
arm (AArch32), aarch64 (ARM64), and x86_64 (AMD64).
|
||||
|
||||
config IX_QEMU_MACHINE_RAM
|
||||
config QEMU_MACHINE_RAM
|
||||
string "RAM size (k/M/G)"
|
||||
default "448M"
|
||||
help
|
||||
@@ -96,62 +96,62 @@ config IX_QEMU_MACHINE_RAM
|
||||
if you get kernel panic with: "System is deadlocked on memory",
|
||||
try increasing this one.
|
||||
|
||||
config IX_QEMU_KERNEL
|
||||
config QEMU_KERNEL
|
||||
string
|
||||
depends on IX_QEMU_LOADER_KERNEL
|
||||
default "../zImage" if IX_QEMU_arm
|
||||
default "../Image" if IX_QEMU_aarch64
|
||||
default "../bzImage" if IX_QEMU_x86_64
|
||||
depends on QEMU_LOADER_KERNEL
|
||||
default "../zImage" if QEMU_arm
|
||||
default "../Image" if QEMU_aarch64
|
||||
default "../bzImage" if QEMU_x86_64
|
||||
|
||||
config IX_QEMU_BIOS
|
||||
config QEMU_BIOS
|
||||
string
|
||||
depends on !IX_QEMU_LOADER_KERNEL
|
||||
default "../u-boot.bin" if IX_QEMU_LOADER_UBOOT
|
||||
default "../OVMF.fd" if IX_QEMU_LOADER_OVMF
|
||||
depends on !QEMU_LOADER_KERNEL
|
||||
default "../u-boot.bin" if QEMU_LOADER_UBOOT
|
||||
default "../OVMF.fd" if QEMU_LOADER_OVMF
|
||||
|
||||
config IX_QEMU_ROOTFS
|
||||
config QEMU_ROOTFS
|
||||
string
|
||||
default "@DISK_IMG@" if !IX_QEMU_ROOTFS_INITRD
|
||||
default "../rootfs.squashfs" if IX_QEMU_ROOTFS_INITRD
|
||||
default "@DISK_IMG@" if !QEMU_ROOTFS_INITRD
|
||||
default "../rootfs.squashfs" if QEMU_ROOTFS_INITRD
|
||||
|
||||
config IX_QEMU_DTB_EXTEND
|
||||
config QEMU_DTB_EXTEND
|
||||
bool
|
||||
depends on IX_QEMU_LOADER_UBOOT
|
||||
default y if IX_QEMU_aarch64
|
||||
depends on QEMU_LOADER_UBOOT
|
||||
default y if QEMU_aarch64
|
||||
|
||||
if IX_QEMU_ROOTFS_INITRD
|
||||
if QEMU_ROOTFS_INITRD
|
||||
|
||||
config IX_QEMU_RW
|
||||
config QEMU_RW
|
||||
string "Writable /cfg layer"
|
||||
depends on IX_QEMU_ROOTFS_INITRD
|
||||
depends on QEMU_ROOTFS_INITRD
|
||||
default "cfg.ext4"
|
||||
|
||||
config IX_QEMU_RW_VAR_OPT
|
||||
config QEMU_RW_VAR_OPT
|
||||
bool "Separate writable /var"
|
||||
|
||||
if IX_QEMU_RW_VAR_OPT
|
||||
config IX_QEMU_RW_VAR_SIZE
|
||||
if QEMU_RW_VAR_OPT
|
||||
config QEMU_RW_VAR_SIZE
|
||||
string "Size of /var"
|
||||
default "256M"
|
||||
config IX_QEMU_RW_VAR
|
||||
config QEMU_RW_VAR
|
||||
string "Writable /var layer"
|
||||
default "var.ext4"
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
config IX_QEMU_VPD
|
||||
config QEMU_VPD
|
||||
bool "Emulate a Vital Product Data (VPD) Memory"
|
||||
|
||||
config IX_QEMU_HOST
|
||||
config QEMU_HOST
|
||||
string "Export host filesystem path"
|
||||
default "/tmp"
|
||||
|
||||
config IX_QEMU_APPEND
|
||||
config QEMU_APPEND
|
||||
string "Extra kernel options"
|
||||
depends on !IX_QEMU_ROOTFS_MMC
|
||||
depends on !QEMU_ROOTFS_MMC
|
||||
|
||||
config IX_QEMU_EXTRA
|
||||
config QEMU_EXTRA
|
||||
string "Extra QEMU options"
|
||||
|
||||
|
||||
@@ -159,72 +159,72 @@ comment "RTC"
|
||||
|
||||
choice
|
||||
prompt "Mode"
|
||||
default IX_QEMU_RTC_UTC
|
||||
default QEMU_RTC_UTC
|
||||
|
||||
config IX_QEMU_RTC_UTC
|
||||
config QEMU_RTC_UTC
|
||||
bool "UTC"
|
||||
|
||||
config IX_QEMU_RTC_LOCAL
|
||||
config QEMU_RTC_LOCAL
|
||||
bool "Local time"
|
||||
|
||||
config IX_QEMU_RTC_RANDOM
|
||||
config QEMU_RTC_RANDOM
|
||||
bool "Random"
|
||||
|
||||
endchoice
|
||||
|
||||
choice
|
||||
prompt "Clock"
|
||||
default IX_QEMU_CLOCK_HOST
|
||||
default QEMU_CLOCK_HOST
|
||||
|
||||
config IX_QEMU_CLOCK_HOST
|
||||
config QEMU_CLOCK_HOST
|
||||
bool "Host clock"
|
||||
|
||||
config IX_QEMU_CLOCK_RT
|
||||
config QEMU_CLOCK_RT
|
||||
bool "Independent (monotonic)"
|
||||
|
||||
config IX_QEMU_CLOCK_VM
|
||||
config QEMU_CLOCK_VM
|
||||
bool "Virtual"
|
||||
|
||||
endchoice
|
||||
|
||||
config IX_QEMU_RTC
|
||||
config QEMU_RTC
|
||||
string
|
||||
default "utc" if IX_QEMU_RTC_UTC
|
||||
default "localtime" if IX_QEMU_RTC_LOCAL
|
||||
default "random" if IX_QEMU_RTC_RANDOM
|
||||
default "utc" if QEMU_RTC_UTC
|
||||
default "localtime" if QEMU_RTC_LOCAL
|
||||
default "random" if QEMU_RTC_RANDOM
|
||||
|
||||
config IX_QEMU_CLOCK
|
||||
config QEMU_CLOCK
|
||||
string
|
||||
default "host" if IX_QEMU_CLOCK_HOST
|
||||
default "rt" if IX_QEMU_CLOCK_RT
|
||||
default "vm" if IX_QEMU_CLOCK_VM
|
||||
default "host" if QEMU_CLOCK_HOST
|
||||
default "rt" if QEMU_CLOCK_RT
|
||||
default "vm" if QEMU_CLOCK_VM
|
||||
|
||||
comment "Networking"
|
||||
|
||||
choice
|
||||
prompt "Network Mode"
|
||||
default IX_QEMU_NET_USER
|
||||
default QEMU_NET_USER
|
||||
|
||||
config IX_QEMU_NET_NONE
|
||||
config QEMU_NET_NONE
|
||||
bool "None"
|
||||
|
||||
config IX_QEMU_NET_BRIDGE
|
||||
config QEMU_NET_BRIDGE
|
||||
bool "Bridged"
|
||||
|
||||
config IX_QEMU_NET_USER
|
||||
config QEMU_NET_USER
|
||||
bool "User"
|
||||
|
||||
config IX_QEMU_NET_TAP
|
||||
config QEMU_NET_TAP
|
||||
bool "TAP"
|
||||
|
||||
config IX_QEMU_NET_ROCKER
|
||||
config QEMU_NET_ROCKER
|
||||
bool "Rocker"
|
||||
|
||||
endchoice
|
||||
|
||||
config IX_QEMU_NET_MODEL
|
||||
config QEMU_NET_MODEL
|
||||
string "Interface model"
|
||||
default "virtio-net-device" if IX_QEMU_arm
|
||||
default "virtio-net-device" if QEMU_arm
|
||||
default "virtio-net-pci"
|
||||
help
|
||||
The default, virtio-net-pci, NIC works for most use-cases, but
|
||||
@@ -233,23 +233,39 @@ config IX_QEMU_NET_MODEL
|
||||
|
||||
Note: ARM 32-bit uses virtio-net-device (MMIO) by default.
|
||||
|
||||
config IX_QEMU_NET_BRIDGE_DEV
|
||||
config QEMU_NET_BRIDGE_DEV
|
||||
string "Bridge device"
|
||||
depends on IX_QEMU_NET_BRIDGE
|
||||
depends on QEMU_NET_BRIDGE
|
||||
default "virbr0"
|
||||
|
||||
config IX_QEMU_NET_USER_OPTS
|
||||
config QEMU_NET_USER_OPTS
|
||||
string "User mode options"
|
||||
depends on IX_QEMU_NET_USER
|
||||
depends on QEMU_NET_USER
|
||||
help
|
||||
Extra -nic user,<OPTIONS>
|
||||
|
||||
config IX_QEMU_NET_TAP_N
|
||||
config QEMU_NET_TAP_N
|
||||
int "Number of TAPs"
|
||||
depends on IX_QEMU_NET_TAP
|
||||
depends on QEMU_NET_TAP
|
||||
default 1
|
||||
|
||||
config IX_QEMU_NET_PORTS
|
||||
config QEMU_NET_PORTS
|
||||
int "Number of Rocker switch ports"
|
||||
depends on IX_QEMU_NET_ROCKER
|
||||
depends on QEMU_NET_ROCKER
|
||||
default 10
|
||||
|
||||
comment "Wireless"
|
||||
|
||||
config QEMU_WIFI_RADIOS
|
||||
int "Number of virtual WiFi radios (mac80211_hwsim)"
|
||||
default 0
|
||||
help
|
||||
Number of simulated 802.11 radios to create with mac80211_hwsim.
|
||||
The count is passed to the guest via the opt/wifi fw_cfg and loaded
|
||||
by the 00-hwsim boot script.
|
||||
|
||||
0 (default) means no radios, so nothing wireless clutters the guest.
|
||||
Set a small number (e.g. 2) for local AP/station experiments.
|
||||
|
||||
Note: 'make run' is a single guest with no inter-guest wireless
|
||||
medium, so these radios only reach each other within this one guest.
|
||||
|
||||
@@ -10,7 +10,7 @@ qemu-kconfig = \
|
||||
BR2_CONFIG="$(BINARIES_DIR)/qemu/.config" \
|
||||
$(BUILD_DIR)/buildroot-config/$(1) $(2) "$(BINARIES_DIR)/qemu/Config.in"
|
||||
|
||||
ifeq ($(IX_QEMU_SCRIPTS),y)
|
||||
ifeq ($(QEMU_SCRIPTS),y)
|
||||
|
||||
.PHONY: run
|
||||
run:
|
||||
@@ -33,7 +33,7 @@ $(BINARIES_DIR)/qemu/run.sh: $(QEMU_SCRIPTS_DIR)/run.sh
|
||||
$(BINARIES_DIR)/qemu/Config.in: $(QEMU_SCRIPTS_DIR)/Config.in.in
|
||||
@mkdir -p $(dir $@)
|
||||
@sed \
|
||||
-e "s:@ARCH@:IX_QEMU_$(BR2_ARCH):" \
|
||||
-e "s:@ARCH@:QEMU_$(BR2_ARCH):" \
|
||||
-e "s:@DISK_IMG@:../$(INFIX_ARTIFACT).qcow2:" \
|
||||
< $< >$@
|
||||
|
||||
|
||||
+84
-73
@@ -40,7 +40,7 @@ usage()
|
||||
echo " ARGS1 Args before the '--' separator are for kernel space"
|
||||
echo " -- Separator"
|
||||
echo " ARGS2 Args after the '--' separator are for the init process"
|
||||
echo " Also, qemu.cfg has IX_QEMU_APPEND which can affect this."
|
||||
echo " Also, qemu.cfg has QEMU_APPEND which can affect this."
|
||||
echo
|
||||
echo "Example:"
|
||||
echo " $prognm -- finit.debug"
|
||||
@@ -62,45 +62,45 @@ load_qemucfg()
|
||||
# shellcheck disable=SC1090
|
||||
. "./.config"
|
||||
|
||||
[ "$CONFIG_IX_QEMU_MACHINE" ] || die "Missing IX_QEMU_MACHINE"
|
||||
[ "$CONFIG_IX_QEMU_ROOTFS" ] || die "Missing IX_QEMU_ROOTFS"
|
||||
[ "$CONFIG_QEMU_MACHINE" ] || die "Missing QEMU_MACHINE"
|
||||
[ "$CONFIG_QEMU_ROOTFS" ] || die "Missing QEMU_ROOTFS"
|
||||
|
||||
[ -n "$CONFIG_IX_QEMU_KERNEL" ] && [ -n "$CONFIG_IX_QEMU_BIOS" ] \
|
||||
&& die "IX_QEMU_KERNEL conflicts with IX_QEMU_BIOS"
|
||||
[ -n "$CONFIG_QEMU_KERNEL" ] && [ -n "$CONFIG_QEMU_BIOS" ] \
|
||||
&& die "QEMU_KERNEL conflicts with QEMU_BIOS"
|
||||
|
||||
[ -z "$CONFIG_IX_QEMU_KERNEL" ] && [ -z "$CONFIG_IX_QEMU_BIOS" ] \
|
||||
&& die "IX_QEMU_KERNEL or IX_QEMU_BIOS must be set"
|
||||
[ -z "$CONFIG_QEMU_KERNEL" ] && [ -z "$CONFIG_QEMU_BIOS" ] \
|
||||
&& die "QEMU_KERNEL or QEMU_BIOS must be set"
|
||||
}
|
||||
|
||||
loader_args()
|
||||
{
|
||||
if [ "$CONFIG_IX_QEMU_BIOS" ]; then
|
||||
echo -n "-bios $CONFIG_IX_QEMU_BIOS "
|
||||
elif [ "$CONFIG_IX_QEMU_KERNEL" ]; then
|
||||
echo -n "-kernel $CONFIG_IX_QEMU_KERNEL "
|
||||
if [ "$CONFIG_QEMU_BIOS" ]; then
|
||||
echo -n "-bios $CONFIG_QEMU_BIOS "
|
||||
elif [ "$CONFIG_QEMU_KERNEL" ]; then
|
||||
echo -n "-kernel $CONFIG_QEMU_KERNEL "
|
||||
fi
|
||||
}
|
||||
|
||||
append_args()
|
||||
{
|
||||
# ARM 32-bit doesn't support virtio console properly, always use serial
|
||||
if [ "$CONFIG_IX_QEMU_arm" ]; then
|
||||
if [ "$CONFIG_QEMU_arm" ]; then
|
||||
echo -n "console=ttyAMA0 "
|
||||
elif [ "$CONFIG_IX_QEMU_CONSOLE_VIRTIO" ]; then
|
||||
elif [ "$CONFIG_QEMU_CONSOLE_VIRTIO" ]; then
|
||||
echo -n "console=hvc0 "
|
||||
elif [ "$CONFIG_IX_QEMU_x86_64" ]; then
|
||||
elif [ "$CONFIG_QEMU_x86_64" ]; then
|
||||
echo -n "console=ttyS0 "
|
||||
elif [ "$CONFIG_IX_QEMU_aarch64" ]; then
|
||||
elif [ "$CONFIG_QEMU_aarch64" ]; then
|
||||
echo -n "console=ttyAMA0 "
|
||||
else
|
||||
die "Unknown console"
|
||||
fi
|
||||
|
||||
if [ "$CONFIG_IX_QEMU_ROOTFS_INITRD" = "y" ]; then
|
||||
if [ "$CONFIG_QEMU_ROOTFS_INITRD" = "y" ]; then
|
||||
# Size of initrd, rounded up to nearest kb
|
||||
size=$((($(stat -c %s "$CONFIG_IX_QEMU_ROOTFS") + 1023) >> 10))
|
||||
size=$((($(stat -c %s "$CONFIG_QEMU_ROOTFS") + 1023) >> 10))
|
||||
echo -n "root=/dev/ram0 ramdisk_size=${size} "
|
||||
elif [ "$CONFIG_IX_QEMU_ROOTFS_VSCSI" = "y" ]; then
|
||||
elif [ "$CONFIG_QEMU_ROOTFS_VSCSI" = "y" ]; then
|
||||
echo -n "root=PARTLABEL=primary "
|
||||
fi
|
||||
|
||||
@@ -110,20 +110,20 @@ append_args()
|
||||
echo -n "debug "
|
||||
fi
|
||||
|
||||
echo -n "${IX_QEMU_APPEND} ${QEMU_EXTRA_APPEND} "
|
||||
echo -n "${QEMU_APPEND} ${QEMU_EXTRA_APPEND} "
|
||||
}
|
||||
|
||||
rootfs_args()
|
||||
{
|
||||
if [ "$CONFIG_IX_QEMU_ROOTFS_INITRD" = "y" ]; then
|
||||
echo -n "-initrd $CONFIG_IX_QEMU_ROOTFS "
|
||||
elif [ "$CONFIG_IX_QEMU_ROOTFS_MMC" = "y" ]; then
|
||||
if [ "$CONFIG_QEMU_ROOTFS_INITRD" = "y" ]; then
|
||||
echo -n "-initrd $CONFIG_QEMU_ROOTFS "
|
||||
elif [ "$CONFIG_QEMU_ROOTFS_MMC" = "y" ]; then
|
||||
echo -n "-device sdhci-pci "
|
||||
echo -n "-device sd-card,drive=mmc "
|
||||
echo -n "-drive id=mmc,file=$CONFIG_IX_QEMU_ROOTFS,if=none,format=raw "
|
||||
elif [ "$CONFIG_IX_QEMU_ROOTFS_VSCSI" = "y" ]; then
|
||||
echo -n "-drive id=mmc,file=$CONFIG_QEMU_ROOTFS,if=none,format=raw "
|
||||
elif [ "$CONFIG_QEMU_ROOTFS_VSCSI" = "y" ]; then
|
||||
# ARM 32-bit virt machine uses MMIO virtio devices, not PCI
|
||||
if [ "$CONFIG_IX_QEMU_arm" ]; then
|
||||
if [ "$CONFIG_QEMU_arm" ]; then
|
||||
echo -n "-drive file=qemu.qcow2,if=none,format=qcow2,id=rootfs "
|
||||
echo -n "-device virtio-blk-device,drive=rootfs "
|
||||
else
|
||||
@@ -140,9 +140,9 @@ serial_args()
|
||||
echo -n "-chardev stdio,id=console0,mux=on "
|
||||
echo -n "-mon chardev=console0 "
|
||||
|
||||
if [ "$CONFIG_IX_QEMU_CONSOLE_VIRTIO" ]; then
|
||||
if [ "$CONFIG_QEMU_CONSOLE_VIRTIO" ]; then
|
||||
echo -n "-device virtconsole,nr=0,name=console,chardev=console0 "
|
||||
elif [ "$CONFIG_IX_QEMU_CONSOLE_SERIAL" ]; then
|
||||
elif [ "$CONFIG_QEMU_CONSOLE_SERIAL" ]; then
|
||||
echo -n "-serial chardev:console0 "
|
||||
else
|
||||
die "Unknown console"
|
||||
@@ -175,7 +175,7 @@ usb_args()
|
||||
|
||||
rw_args()
|
||||
{
|
||||
[ "$CONFIG_IX_QEMU_RW" ] || return
|
||||
[ "$CONFIG_QEMU_RW" ] || return
|
||||
|
||||
command -v mkfs.ext4 >/dev/null || die "$prognm: cannot find mkfs.ext4"
|
||||
|
||||
@@ -184,45 +184,45 @@ rw_args()
|
||||
mkfs.ext4 -L aux "aux.ext4" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if ! [ -f "$CONFIG_IX_QEMU_RW" ]; then
|
||||
dd if=/dev/zero of="$CONFIG_IX_QEMU_RW" bs=16M count=1 >/dev/null 2>&1
|
||||
mkfs.ext4 -L cfg "$CONFIG_IX_QEMU_RW" >/dev/null 2>&1
|
||||
if ! [ -f "$CONFIG_QEMU_RW" ]; then
|
||||
dd if=/dev/zero of="$CONFIG_QEMU_RW" bs=16M count=1 >/dev/null 2>&1
|
||||
mkfs.ext4 -L cfg "$CONFIG_QEMU_RW" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
# ARM 32-bit virt machine uses MMIO virtio devices, not PCI
|
||||
if [ "$CONFIG_IX_QEMU_arm" ]; then
|
||||
if [ "$CONFIG_QEMU_arm" ]; then
|
||||
echo -n "-drive file=aux.ext4,if=none,format=raw,id=aux "
|
||||
echo -n "-device virtio-blk-device,drive=aux "
|
||||
echo -n "-drive file=$CONFIG_IX_QEMU_RW,if=none,format=raw,id=cfg "
|
||||
echo -n "-drive file=$CONFIG_QEMU_RW,if=none,format=raw,id=cfg "
|
||||
echo -n "-device virtio-blk-device,drive=cfg "
|
||||
|
||||
if [ "$CONFIG_IX_QEMU_RW_VAR_OPT" ]; then
|
||||
if ! [ -f "$CONFIG_IX_QEMU_RW_VAR" ]; then
|
||||
dd if=/dev/zero of="$CONFIG_IX_QEMU_RW_VAR" bs=$CONFIG_IX_QEMU_RW_VAR_SIZE count=1 >/dev/null 2>&1
|
||||
mkfs.ext4 -L var "$CONFIG_IX_QEMU_RW_VAR" >/dev/null 2>&1
|
||||
if [ "$CONFIG_QEMU_RW_VAR_OPT" ]; then
|
||||
if ! [ -f "$CONFIG_QEMU_RW_VAR" ]; then
|
||||
dd if=/dev/zero of="$CONFIG_QEMU_RW_VAR" bs=$CONFIG_QEMU_RW_VAR_SIZE count=1 >/dev/null 2>&1
|
||||
mkfs.ext4 -L var "$CONFIG_QEMU_RW_VAR" >/dev/null 2>&1
|
||||
fi
|
||||
echo -n "-drive file=$CONFIG_IX_QEMU_RW_VAR,if=none,format=raw,id=var "
|
||||
echo -n "-drive file=$CONFIG_QEMU_RW_VAR,if=none,format=raw,id=var "
|
||||
echo -n "-device virtio-blk-device,drive=var "
|
||||
fi
|
||||
else
|
||||
echo -n "-drive file=aux.ext4,if=virtio,format=raw,bus=0,unit=3 "
|
||||
echo -n "-drive file=$CONFIG_IX_QEMU_RW,if=virtio,format=raw,bus=0,unit=1 "
|
||||
echo -n "-drive file=$CONFIG_QEMU_RW,if=virtio,format=raw,bus=0,unit=1 "
|
||||
|
||||
if [ "$CONFIG_IX_QEMU_RW_VAR_OPT" ]; then
|
||||
if ! [ -f "$CONFIG_IX_QEMU_RW_VAR" ]; then
|
||||
dd if=/dev/zero of="$CONFIG_IX_QEMU_RW_VAR" bs=$CONFIG_IX_QEMU_RW_VAR_SIZE count=1 >/dev/null 2>&1
|
||||
mkfs.ext4 -L var "$CONFIG_IX_QEMU_RW_VAR" >/dev/null 2>&1
|
||||
if [ "$CONFIG_QEMU_RW_VAR_OPT" ]; then
|
||||
if ! [ -f "$CONFIG_QEMU_RW_VAR" ]; then
|
||||
dd if=/dev/zero of="$CONFIG_QEMU_RW_VAR" bs=$CONFIG_QEMU_RW_VAR_SIZE count=1 >/dev/null 2>&1
|
||||
mkfs.ext4 -L var "$CONFIG_QEMU_RW_VAR" >/dev/null 2>&1
|
||||
fi
|
||||
echo -n "-drive file=$CONFIG_IX_QEMU_RW_VAR,if=virtio,format=raw,bus=0,unit=2 "
|
||||
echo -n "-drive file=$CONFIG_QEMU_RW_VAR,if=virtio,format=raw,bus=0,unit=2 "
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
host_args()
|
||||
{
|
||||
[ "$CONFIG_IX_QEMU_HOST" ] || return
|
||||
[ "$CONFIG_QEMU_HOST" ] || return
|
||||
|
||||
echo -n "-virtfs local,path=$CONFIG_IX_QEMU_HOST,security_model=none,writeout=immediate,mount_tag=hostfs "
|
||||
echo -n "-virtfs local,path=$CONFIG_QEMU_HOST,security_model=none,writeout=immediate,mount_tag=hostfs "
|
||||
}
|
||||
|
||||
net_dev_args()
|
||||
@@ -230,7 +230,7 @@ net_dev_args()
|
||||
name="e$1"
|
||||
mac=$(printf "02:00:00:00:00:%02x" "$1")
|
||||
|
||||
echo -n "-device $CONFIG_IX_QEMU_NET_MODEL,netdev=$name,mac=$mac "
|
||||
echo -n "-device $CONFIG_QEMU_NET_MODEL,netdev=$name,mac=$mac "
|
||||
echo "$name $mac" >>"$mactab"
|
||||
}
|
||||
|
||||
@@ -252,29 +252,29 @@ net_args()
|
||||
:> "$mactab"
|
||||
echo -n "-fw_cfg name=opt/mactab,file=$mactab "
|
||||
|
||||
if [ "$CONFIG_IX_QEMU_NET_BRIDGE" = "y" ]; then
|
||||
echo -n "-netdev bridge,id=e1,br=$CONFIG_IX_QEMU_NET_BRIDGE_DEV "
|
||||
if [ "$CONFIG_QEMU_NET_BRIDGE" = "y" ]; then
|
||||
echo -n "-netdev bridge,id=e1,br=$CONFIG_QEMU_NET_BRIDGE_DEV "
|
||||
net_dev_args 1
|
||||
elif [ "$CONFIG_IX_QEMU_NET_TAP" = "y" ]; then
|
||||
for i in $(seq 1 "$CONFIG_IX_QEMU_NET_TAP_N"); do
|
||||
elif [ "$CONFIG_QEMU_NET_TAP" = "y" ]; then
|
||||
for i in $(seq 1 "$CONFIG_QEMU_NET_TAP_N"); do
|
||||
echo -n "-netdev tap,id=e$i,ifname=qtap$i "
|
||||
net_dev_args "$i"
|
||||
done
|
||||
elif [ "$CONFIG_IX_QEMU_NET_ROCKER" = "y" ]; then
|
||||
elif [ "$CONFIG_QEMU_NET_ROCKER" = "y" ]; then
|
||||
sw=sw0 # Only single switch support atm.
|
||||
echo -n "-device '{\"driver\":\"rocker\", \"name\":\"${sw}\", "
|
||||
echo -n "\"fp_start_macaddr\":\"02:00:00:00:00:01\", "
|
||||
echo -n "\"ports\":["
|
||||
for i in $(seq 1 "$CONFIG_IX_QEMU_NET_PORTS"); do
|
||||
for i in $(seq 1 "$CONFIG_QEMU_NET_PORTS"); do
|
||||
[ "$i" -gt 1 ] && echo -n ", "
|
||||
echo -n "\"${sw}p${i}\""
|
||||
done
|
||||
echo -n "]}' "
|
||||
for i in $(seq 1 "$CONFIG_IX_QEMU_NET_PORTS"); do
|
||||
for i in $(seq 1 "$CONFIG_QEMU_NET_PORTS"); do
|
||||
rocker_port_args 0 "$i"
|
||||
done
|
||||
elif [ "$CONFIG_IX_QEMU_NET_USER" = "y" ]; then
|
||||
[ "$CONFIG_IX_QEMU_NET_USER_OPTS" ] && useropts=",$CONFIG_IX_QEMU_NET_USER_OPTS"
|
||||
elif [ "$CONFIG_QEMU_NET_USER" = "y" ]; then
|
||||
[ "$CONFIG_QEMU_NET_USER_OPTS" ] && useropts=",$CONFIG_QEMU_NET_USER_OPTS"
|
||||
echo -n "-netdev user,id=e1${useropts} "
|
||||
net_dev_args 1
|
||||
else
|
||||
@@ -285,7 +285,7 @@ net_args()
|
||||
# Vital Product data
|
||||
vpd_args()
|
||||
{
|
||||
[ "$CONFIG_IX_QEMU_VPD" = "y" ] || return
|
||||
[ "$CONFIG_QEMU_VPD" = "y" ] || return
|
||||
|
||||
vpd_file="${qdir}/vpd"
|
||||
|
||||
@@ -310,6 +310,16 @@ EOF
|
||||
echo -n "-fw_cfg name=opt/vpd,file=$vpd_file"
|
||||
}
|
||||
|
||||
wifi_args()
|
||||
{
|
||||
# Number of mac80211_hwsim radios for the guest, read at boot by 00-hwsim
|
||||
# (fw_cfg opt/wifi). Default 0 -> no radios, no wifi clutter.
|
||||
radios=${CONFIG_QEMU_WIFI_RADIOS:-0}
|
||||
wifi="${qdir}/wifi"
|
||||
echo "$radios" > "$wifi"
|
||||
echo -n "-fw_cfg name=opt/wifi,file=$wifi "
|
||||
}
|
||||
|
||||
wdt_args()
|
||||
{
|
||||
echo -n "-device i6300esb "
|
||||
@@ -324,8 +334,8 @@ random_date()
|
||||
|
||||
rtc_args()
|
||||
{
|
||||
rtc="${CONFIG_IX_QEMU_RTC:-utc}"
|
||||
clock="${CONFIG_IX_QEMU_CLOCK:-host}"
|
||||
rtc="${CONFIG_QEMU_RTC:-utc}"
|
||||
clock="${CONFIG_QEMU_CLOCK:-host}"
|
||||
if [ "$rtc" = "random" ]; then
|
||||
rtc=$(random_date)
|
||||
fi
|
||||
@@ -358,28 +368,28 @@ extract_squashfs()
|
||||
run_qemu()
|
||||
{
|
||||
# Auto-extract rootfs.squashfs from rootfs.itb if needed for initrd mode
|
||||
if [ "$CONFIG_IX_QEMU_ROOTFS_INITRD" = "y" ] && [ ! -f "$CONFIG_IX_QEMU_ROOTFS" ]; then
|
||||
itb="${CONFIG_IX_QEMU_ROOTFS%.squashfs}.itb"
|
||||
if [ "$CONFIG_QEMU_ROOTFS_INITRD" = "y" ] && [ ! -f "$CONFIG_QEMU_ROOTFS" ]; then
|
||||
itb="${CONFIG_QEMU_ROOTFS%.squashfs}.itb"
|
||||
if [ -f "$itb" ]; then
|
||||
extract_squashfs "$itb" "$CONFIG_IX_QEMU_ROOTFS"
|
||||
extract_squashfs "$itb" "$CONFIG_QEMU_ROOTFS"
|
||||
else
|
||||
die "Missing $CONFIG_IX_QEMU_ROOTFS and cannot find $itb to extract it from"
|
||||
die "Missing $CONFIG_QEMU_ROOTFS and cannot find $itb to extract it from"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$CONFIG_IX_QEMU_ROOTFS_VSCSI" = "y" ]; then
|
||||
if [ "$CONFIG_QEMU_ROOTFS_VSCSI" = "y" ]; then
|
||||
if ! qemu-img check "qemu.qcow2"; then
|
||||
rm -f "qemu.qcow2"
|
||||
fi
|
||||
if [ ! -f "qemu.qcow2" ]; then
|
||||
echo "Creating qcow2 disk image for Qemu ..."
|
||||
qemu-img create -f qcow2 -o backing_file="$CONFIG_IX_QEMU_ROOTFS" \
|
||||
qemu-img create -f qcow2 -o backing_file="$CONFIG_QEMU_ROOTFS" \
|
||||
-F qcow2 "qemu.qcow2" > /dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
read -r qemu <<EOF
|
||||
$CONFIG_IX_QEMU_MACHINE -nodefaults -m $CONFIG_IX_QEMU_MACHINE_RAM \
|
||||
$CONFIG_QEMU_MACHINE -nodefaults -m $CONFIG_QEMU_MACHINE_RAM \
|
||||
$(loader_args) \
|
||||
$(rootfs_args) \
|
||||
$(serial_args) \
|
||||
@@ -387,18 +397,19 @@ run_qemu()
|
||||
$(usb_args) \
|
||||
$(host_args) \
|
||||
$(net_args) \
|
||||
$(wifi_args) \
|
||||
$(wdt_args) \
|
||||
$(rtc_args) \
|
||||
$(vpd_args) \
|
||||
$(gdb_args) \
|
||||
$CONFIG_IX_QEMU_EXTRA
|
||||
$CONFIG_QEMU_EXTRA
|
||||
EOF
|
||||
# Save resulting command to a script, because I cannot for the life
|
||||
# of me figure out how to embed the JSON snippet for Rocker and run
|
||||
# it here without issues, spent way too much time on it -- Joachim
|
||||
run=$(mktemp -t run.qemu.XXX)
|
||||
echo "#!/bin/sh" > "$run"
|
||||
if [ "$CONFIG_IX_QEMU_KERNEL" ]; then
|
||||
if [ "$CONFIG_QEMU_KERNEL" ]; then
|
||||
echo "$qemu -append \"$(append_args)\" $*" >> "$run"
|
||||
else
|
||||
echo "$qemu $*" >> "$run"
|
||||
@@ -419,9 +430,9 @@ EOF
|
||||
|
||||
dtb_args()
|
||||
{
|
||||
[ "$CONFIG_IX_QEMU_LOADER_UBOOT" ] || return
|
||||
[ "$CONFIG_QEMU_LOADER_UBOOT" ] || return
|
||||
|
||||
if [ "$CONFIG_IX_QEMU_DTB_EXTEND" ]; then
|
||||
if [ "$CONFIG_QEMU_DTB_EXTEND" ]; then
|
||||
# On the current architecture, QEMU will generate an internal
|
||||
# DT based on the system configuration.
|
||||
|
||||
@@ -445,12 +456,12 @@ dtb_args()
|
||||
|
||||
generate_dot()
|
||||
{
|
||||
[ "$CONFIG_IX_QEMU_NET_TAP" = "y" ] || return
|
||||
[ "$CONFIG_QEMU_NET_TAP" = "y" ] || return
|
||||
|
||||
hostports="<qtap1> qtap1"
|
||||
targetports="<e1> e1"
|
||||
edges="host:qtap1 -- target:e1 [kind=mgmt];"
|
||||
for tap in $(seq 2 $((CONFIG_IX_QEMU_NET_TAP_N - 1))); do
|
||||
for tap in $(seq 2 $((CONFIG_QEMU_NET_TAP_N - 1))); do
|
||||
hostports="$hostports | <qtap$tap> qtap$tap "
|
||||
targetports="$targetports | <e$tap> e$tap "
|
||||
edges="$edges host:qtap$tap -- target:e$tap;"
|
||||
@@ -485,7 +496,7 @@ EOF
|
||||
|
||||
menuconfig()
|
||||
{
|
||||
grep -q IX_QEMU_MACHINE Config.in || die "$prognm: must be run from the $$O/images/qemu directory"
|
||||
grep -q QEMU_MACHINE Config.in || die "$prognm: must be run from the $$O/images/qemu directory"
|
||||
command -v kconfig-mconf >/dev/null || die "$prognm: cannot find kconfig-mconf for menuconfig"
|
||||
exec kconfig-mconf Config.in
|
||||
}
|
||||
|
||||
@@ -24,10 +24,6 @@ net.ipv4.conf.all.arp_ignore=1
|
||||
net.ipv4.ip_forward=1
|
||||
net.ipv4.ip_forward_update_priority=0
|
||||
|
||||
# Allow binding to non-local addresses, e.g. floating VIPs not yet
|
||||
# configured on an interface, see issue #1022
|
||||
net.ipv4.ip_nonlocal_bind=1
|
||||
|
||||
net.ipv4.conf.all.forwarding=0
|
||||
net.ipv4.conf.default.forwarding=0
|
||||
|
||||
|
||||
@@ -7,10 +7,6 @@ net.ipv6.conf.all.ignore_routes_with_linkdown=1
|
||||
net.ipv6.conf.all.forwarding=0
|
||||
net.ipv6.conf.default.forwarding=0
|
||||
|
||||
# Allow binding to non-local addresses, e.g. floating VIPs not yet
|
||||
# configured on an interface, see issue #1022
|
||||
net.ipv6.ip_nonlocal_bind=1
|
||||
|
||||
# Accept router advertisements even when forwarding is enabled
|
||||
net.ipv6.conf.all.accept_ra=2
|
||||
net.ipv6.conf.default.accept_ra=2
|
||||
|
||||
@@ -654,10 +654,17 @@ def main():
|
||||
err = 1
|
||||
|
||||
os.umask(0o337)
|
||||
# Write atomically: confd reads system.json as soon as ixinit signals
|
||||
# done, so a truncated in-place write could be read half-written. Write
|
||||
# to a temp file in the same dir, then rename (atomic on the same fs).
|
||||
# pylint: disable=invalid-name
|
||||
with open(SYSTEM_JSON, "w", encoding="ascii") as f:
|
||||
tmp = SYSTEM_JSON + ".tmp"
|
||||
with open(tmp, "w", encoding="ascii") as f:
|
||||
json.dump(out, f)
|
||||
shutil.chown(SYSTEM_JSON, user="root", group="wheel")
|
||||
f.flush()
|
||||
os.fsync(f.fileno())
|
||||
shutil.chown(tmp, user="root", group="wheel")
|
||||
os.replace(tmp, SYSTEM_JSON)
|
||||
return err
|
||||
|
||||
|
||||
|
||||
@@ -43,5 +43,12 @@ for iface in $ports; do
|
||||
ip link set "$iface" group port
|
||||
done
|
||||
|
||||
# The mac80211_hwsim monitor tap (hwsim test images only) is a debug
|
||||
# observer, not a user-facing interface. It cannot be deleted (no rtnl
|
||||
# link ops), so classify it as internal like the DSA CPU interfaces.
|
||||
if [ -d /sys/class/net/hwsim0 ]; then
|
||||
ip link set dev hwsim0 group internal
|
||||
fi
|
||||
|
||||
# At least loopback in iface group
|
||||
ip link set lo group iface
|
||||
|
||||
@@ -176,19 +176,25 @@ def parse_phy_info(phy_name):
|
||||
if current_band and current_band.get('frequencies'):
|
||||
result['bands'].append(current_band)
|
||||
|
||||
# Determine band names and assign band numbers
|
||||
# Keep only the bands Infix supports (2.4/5/6 GHz), naming them by their
|
||||
# first frequency. Hardware may expose others (e.g. S1G on hwsim) that we
|
||||
# neither configure nor report.
|
||||
bands = []
|
||||
for band in result['bands']:
|
||||
if band['frequencies']:
|
||||
freq = band['frequencies'][0]
|
||||
if 2400 <= freq <= 2500:
|
||||
band['name'] = '2.4GHz'
|
||||
band['band'] = 1
|
||||
elif 5150 <= freq <= 5900:
|
||||
band['name'] = '5GHz'
|
||||
band['band'] = 2
|
||||
elif 5955 <= freq <= 7115:
|
||||
band['name'] = '6GHz'
|
||||
band['band'] = 3
|
||||
freq = band['frequencies'][0]
|
||||
if 2400 <= freq <= 2500:
|
||||
band['name'] = '2.4GHz'
|
||||
band['band'] = 1
|
||||
elif 5150 <= freq <= 5900:
|
||||
band['name'] = '5GHz'
|
||||
band['band'] = 2
|
||||
elif 5955 <= freq <= 7115:
|
||||
band['name'] = '6GHz'
|
||||
band['band'] = 3
|
||||
else:
|
||||
continue
|
||||
bands.append(band)
|
||||
result['bands'] = bands
|
||||
|
||||
# Set max TX power
|
||||
if max_power is not None:
|
||||
@@ -207,7 +213,9 @@ def parse_phy_info(phy_name):
|
||||
|
||||
# Map driver to manufacturer
|
||||
driver_lower = driver_name.lower()
|
||||
if 'mt' in driver_lower or 'mediatek' in driver_lower:
|
||||
if 'hwsim' in driver_lower:
|
||||
result['manufacturer'] = 'Virtual (hwsim)'
|
||||
elif 'mt' in driver_lower or 'mediatek' in driver_lower:
|
||||
result['manufacturer'] = 'MediaTek Inc.'
|
||||
elif 'rtw' in driver_lower or 'realtek' in driver_lower:
|
||||
result['manufacturer'] = 'Realtek Semiconductor Corp.'
|
||||
|
||||
@@ -25,7 +25,7 @@ define UBOOT_PRE_BUILD_INSTALL_KEY
|
||||
$(HOST_DIR)/bin/dtc -a 1024 <(echo '/dts-v1/; / { signature {}; };') \
|
||||
>$(@D)/infix-key.dtb
|
||||
$(foreach key, \
|
||||
$(call qstrip,$(IX_TRUSTED_KEYS_DEVELOPMENT_PATH)) $(call qstrip,$(IX_TRUSTED_KEYS_EXTRA_PATH)),\
|
||||
$(call qstrip,$(TRUSTED_KEYS_DEVELOPMENT_PATH)) $(call qstrip,$(TRUSTED_KEYS_EXTRA_PATH)),\
|
||||
$(call uboot-add-pubkey,$(key),$(@D)/infix-key.dtb))
|
||||
$(HOST_DIR)/bin/dtc -I dtb -O dts \
|
||||
<$(@D)/infix-key.dtb \
|
||||
@@ -46,12 +46,3 @@ define UBOOT_PRE_BUILD_INSTALL_ENV
|
||||
$(@D)/arch/$(UBOOT_ARCH)/dts/
|
||||
endef
|
||||
UBOOT_PRE_BUILD_HOOKS += UBOOT_PRE_BUILD_INSTALL_ENV
|
||||
|
||||
# Stamp non-release builds so they cannot be mistaken for a release,
|
||||
# U-Boot's setlocalversion picks up .scmversion, see issue #919.
|
||||
define UBOOT_PRE_BUILD_DEVEL_VERSION
|
||||
echo "-DEVEL" >$(@D)/.scmversion
|
||||
endef
|
||||
ifeq ($(INFIX_RELEASE),)
|
||||
UBOOT_PRE_BUILD_HOOKS += UBOOT_PRE_BUILD_DEVEL_VERSION
|
||||
endif
|
||||
|
||||
+1
-1
Submodule buildroot updated: e6da8b610c...dd816b9233
+12
-12
@@ -27,7 +27,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.39"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.37"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
@@ -143,11 +143,11 @@ BR2_PACKAGE_MARVELL_CN9130_CRB=y
|
||||
BR2_PACKAGE_MARVELL_ESPRESSOBIN=y
|
||||
BR2_PACKAGE_RASPBERRYPI_RPI64=y
|
||||
BR2_PACKAGE_STYX_DCP_SC_28P=y
|
||||
IX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
IX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
IX_HOME="https://github.com/kernelkit/infix/"
|
||||
IX_DOC="https://www.kernelkit.org/infix/"
|
||||
IX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
INFIX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://www.kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_FEATURE_GPS=y
|
||||
BR2_PACKAGE_FEATURE_WIFI=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y
|
||||
@@ -191,9 +191,9 @@ BR2_PACKAGE_WEBUI=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
BR2_PACKAGE_HOST_PYTHON_YANGDOC=y
|
||||
BR2_PACKAGE_PCIUTILS=y
|
||||
IX_IMAGE_ITB_AUX=y
|
||||
IX_IMAGE_ITB_QCOW=y
|
||||
IX_IMAGE_ITB_RAUC=y
|
||||
IX_IMAGE_README=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
IMAGE_ITB_AUX=y
|
||||
IMAGE_ITB_QCOW=y
|
||||
IMAGE_ITB_RAUC=y
|
||||
IMAGE_README=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -27,7 +27,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.39"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.37"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
@@ -121,11 +121,11 @@ BR2_PACKAGE_MARVELL_CN9130_CRB=y
|
||||
BR2_PACKAGE_MARVELL_ESPRESSOBIN=y
|
||||
BR2_PACKAGE_RASPBERRYPI_RPI64=y
|
||||
BR2_PACKAGE_STYX_DCP_SC_28P=y
|
||||
IX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
IX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
IX_HOME="https://github.com/kernelkit/infix/"
|
||||
IX_DOC="https://www.kernelkit.org/infix/"
|
||||
IX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
INFIX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://www.kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_CONFD=y
|
||||
BR2_PACKAGE_NETD=y
|
||||
BR2_PACKAGE_CONFD_TEST_MODE=y
|
||||
@@ -151,9 +151,9 @@ BR2_PACKAGE_MDNS_ALIAS=y
|
||||
BR2_PACKAGE_ONIEPROM=y
|
||||
BR2_PACKAGE_ROUSETTE=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
IX_IMAGE_ITB_AUX=y
|
||||
IX_IMAGE_ITB_QCOW=y
|
||||
IX_IMAGE_ITB_RAUC=y
|
||||
IX_IMAGE_README=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
IMAGE_ITB_AUX=y
|
||||
IMAGE_ITB_QCOW=y
|
||||
IMAGE_ITB_RAUC=y
|
||||
IMAGE_README=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -25,5 +25,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
+12
-13
@@ -28,7 +28,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.39"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.37"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/arm/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
@@ -129,7 +129,6 @@ BR2_PACKAGE_HOST_DOSFSTOOLS=y
|
||||
BR2_PACKAGE_HOST_E2FSPROGS=y
|
||||
BR2_PACKAGE_HOST_ENVIRONMENT_SETUP=y
|
||||
BR2_PACKAGE_HOST_GENEXT2FS=y
|
||||
BR2_PACKAGE_HOST_GO_BIN=y
|
||||
BR2_PACKAGE_HOST_KMOD_XZ=y
|
||||
BR2_PACKAGE_HOST_MTOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
@@ -137,11 +136,11 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
BR2_PACKAGE_MICROCHIP_SAMA7G54_EK=y
|
||||
BR2_PACKAGE_RASPBERRYPI_RPI2=y
|
||||
IX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
IX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
IX_HOME="https://github.com/kernelkit/infix/"
|
||||
IX_DOC="https://www.kernelkit.org/infix/"
|
||||
IX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
INFIX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://www.kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_FEATURE_GPS=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_REALTEK=y
|
||||
@@ -174,9 +173,9 @@ BR2_PACKAGE_ROUSETTE=y
|
||||
BR2_PACKAGE_WEBUI=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
BR2_PACKAGE_HOST_PYTHON_YANGDOC=y
|
||||
IX_IMAGE_ITB_AUX=y
|
||||
IX_IMAGE_ITB_QCOW=y
|
||||
IX_IMAGE_ITB_RAUC=y
|
||||
IX_IMAGE_README=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
IMAGE_ITB_AUX=y
|
||||
IMAGE_ITB_QCOW=y
|
||||
IMAGE_ITB_RAUC=y
|
||||
IMAGE_README=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -28,7 +28,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.39"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.37"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/arm/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
@@ -119,11 +119,11 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
BR2_PACKAGE_MICROCHIP_SAMA7G54_EK=y
|
||||
BR2_PACKAGE_RASPBERRYPI_RPI2=y
|
||||
IX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
IX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
IX_HOME="https://github.com/kernelkit/infix/"
|
||||
IX_DOC="https://www.kernelkit.org/infix/"
|
||||
IX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
INFIX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://www.kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_CONFD=y
|
||||
BR2_PACKAGE_NETD=y
|
||||
BR2_PACKAGE_CONFD_TEST_MODE=y
|
||||
@@ -149,9 +149,9 @@ BR2_PACKAGE_MDNS_ALIAS=y
|
||||
BR2_PACKAGE_ONIEPROM=y
|
||||
BR2_PACKAGE_ROUSETTE=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
IX_IMAGE_ITB_AUX=y
|
||||
IX_IMAGE_ITB_QCOW=y
|
||||
IX_IMAGE_ITB_RAUC=y
|
||||
IX_IMAGE_README=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
IMAGE_ITB_AUX=y
|
||||
IMAGE_ITB_QCOW=y
|
||||
IMAGE_ITB_RAUC=y
|
||||
IMAGE_README=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -40,5 +40,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -38,5 +38,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -38,5 +38,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -38,5 +38,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -38,5 +38,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -38,5 +38,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -38,5 +38,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -45,5 +45,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
BR2_PACKAGE_BOOTLOADER_SPLASHSCREEN=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
+11
-12
@@ -164,15 +164,14 @@ BR2_TARGET_UBOOT_SPL=y
|
||||
BR2_TARGET_UBOOT_SPL_NAME="spl/u-boot-spl.bin.normal.out"
|
||||
BR2_TARGET_UBOOT_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_INFIX_PATH)/board/riscv64/visionfive2/uboot/visionfive2-env.dtsi"
|
||||
BR2_PACKAGE_HOST_BMAP_TOOLS=y
|
||||
BR2_PACKAGE_HOST_GO_BIN=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
IX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
IX_HOME="https://github.com/kernelkit/infix/"
|
||||
IX_DOC="https://www.kernelkit.org/infix/"
|
||||
IX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
INFIX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://www.kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_FEATURE_GPS=y
|
||||
BR2_PACKAGE_FEATURE_WIFI=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y
|
||||
@@ -211,9 +210,9 @@ BR2_PACKAGE_WEBUI=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
BR2_PACKAGE_HOST_PYTHON_YANGDOC=y
|
||||
BR2_PACKAGE_PCIUTILS=y
|
||||
IX_IMAGE_ITB_AUX=y
|
||||
IX_IMAGE_ITB_QCOW=y
|
||||
IX_IMAGE_ITB_RAUC=y
|
||||
IX_IMAGE_README=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
IMAGE_ITB_AUX=y
|
||||
IMAGE_ITB_QCOW=y
|
||||
IMAGE_ITB_RAUC=y
|
||||
IMAGE_README=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -40,5 +40,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
BR2_PACKAGE_BOOTLOADER_SPLASHSCREEN=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -34,5 +34,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -34,5 +34,5 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
BR2_TARGET_ROOTFS_EXT2=y
|
||||
BR2_TARGET_ROOTFS_EXT2_4=y
|
||||
BR2_TARGET_ROOTFS_EXT2_SIZE="512M"
|
||||
IX_IMAGE_EXT4_RAUC=y
|
||||
IMAGE_EXT4_RAUC=y
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# Prefer internal download mirror over official upstream sites. If
|
||||
# the mirror is unreachable, e.g., off-site without VPN, Buildroot
|
||||
# falls back to the upstream URL and then sources.buildroot.net
|
||||
# Set up a local mirror and add IP to /etc/hosts to override
|
||||
BR2_PRIMARY_SITE="http://mirror.internal/pub"
|
||||
+13
-12
@@ -26,7 +26,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.39"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.37"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
@@ -139,13 +139,14 @@ BR2_PACKAGE_HOST_MTOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
IX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
IX_HOME="https://github.com/kernelkit/infix/"
|
||||
IX_DOC="https://www.kernelkit.org/infix/"
|
||||
IX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
INFIX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://www.kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_FEATURE_GPS=y
|
||||
BR2_PACKAGE_FEATURE_WIFI=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_HWSIM=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_QUALCOMM=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_REALTEK=y
|
||||
@@ -185,9 +186,9 @@ BR2_PACKAGE_WEBUI=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
BR2_PACKAGE_HOST_PYTHON_YANGDOC=y
|
||||
BR2_PACKAGE_PCIUTILS=y
|
||||
IX_IMAGE_ITB_AUX=y
|
||||
IX_IMAGE_ITB_QCOW=y
|
||||
IX_IMAGE_ITB_RAUC=y
|
||||
IX_IMAGE_README=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
IMAGE_ITB_AUX=y
|
||||
IMAGE_ITB_QCOW=y
|
||||
IMAGE_ITB_RAUC=y
|
||||
IMAGE_README=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -26,7 +26,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.39"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.37"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
@@ -118,11 +118,11 @@ BR2_PACKAGE_HOST_MTOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
|
||||
IX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
IX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
IX_HOME="https://github.com/kernelkit/infix/"
|
||||
IX_DOC="https://www.kernelkit.org/infix/"
|
||||
IX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
INFIX_VENDOR_HOME="https://www.kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://www.kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_CONFD=y
|
||||
BR2_PACKAGE_NETD=y
|
||||
BR2_PACKAGE_CONFD_TEST_MODE=y
|
||||
@@ -148,9 +148,9 @@ BR2_PACKAGE_MDNS_ALIAS=y
|
||||
BR2_PACKAGE_ONIEPROM=y
|
||||
BR2_PACKAGE_ROUSETTE=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
IX_IMAGE_ITB_AUX=y
|
||||
IX_IMAGE_ITB_QCOW=y
|
||||
IX_IMAGE_ITB_RAUC=y
|
||||
IX_IMAGE_README=y
|
||||
IX_TRUSTED_KEYS=y
|
||||
IX_TRUSTED_KEYS_DEVELOPMENT=y
|
||||
IMAGE_ITB_AUX=y
|
||||
IMAGE_ITB_QCOW=y
|
||||
IMAGE_ITB_RAUC=y
|
||||
IMAGE_README=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
|
||||
@@ -3,23 +3,6 @@ Change Log
|
||||
|
||||
All notable changes to the project are documented in this file.
|
||||
|
||||
[v26.08.0][UNRELEASED]
|
||||
-------------------------
|
||||
|
||||
### Changes
|
||||
|
||||
- Upgrade Linux kernel to 6.18.39 (LTS)
|
||||
- Upgrade Buildroot to 2025.02.15 (LTS)
|
||||
- Add support for firewall address-set (ipset): named sets of IP addresses and
|
||||
networks, usable as zone sources for per-IP access control, issue #1189
|
||||
- Build RPi64 SD card images in release builds
|
||||
- Include .pkg files in release builds
|
||||
|
||||
### Fixes
|
||||
|
||||
- Fix annoying "cannot deselect all services" or reset to YANG default in the
|
||||
web interface's firewall configuration page
|
||||
|
||||
[v26.06.0][] - 2026-07-01
|
||||
-------------------------
|
||||
|
||||
@@ -2223,7 +2206,6 @@ Supported YANG models in addition to those used by sysrepo and netopeer:
|
||||
|
||||
[buildroot]: https://buildroot.org/
|
||||
[UNRELEASED]: https://github.com/kernelkit/infix/compare/v26.06.0...HEAD
|
||||
[v26.08.0]: https://github.com/kernelkit/infix/compare/v26.06.0...v26.08.0
|
||||
[v26.06.0]: https://github.com/kernelkit/infix/compare/v26.05.0...v26.06.0
|
||||
[v26.05.0]: https://github.com/kernelkit/infix/compare/v26.04.0...v26.05.0
|
||||
[v26.04.0]: https://github.com/kernelkit/infix/compare/v26.03.0...v26.04.0
|
||||
|
||||
+2
-2
@@ -28,7 +28,7 @@ Verify the result after a build by inspecting:
|
||||
|
||||
> [!IMPORTANT]
|
||||
> To get a proper GIT revision (hash) from your OS spin, remember to set
|
||||
> in menuconfig `IX_OEM_PATH`. When unset, the Infix `post-build.sh`
|
||||
> in menuconfig `INFIX_OEM_PATH`. When unset, the Infix `post-build.sh`
|
||||
> script defaults to the Infix base path. The revision is stored in the
|
||||
> file `/etc/os-release` as `BUILD_ID`, also in the file `/etc/version`.
|
||||
> See below for more info.
|
||||
@@ -427,7 +427,7 @@ Used for `BUILD_ID` in `/etc/os-release`.
|
||||
**Default:** `$(git describe --always --dirty --tags)`, from the _top
|
||||
directory_. By default, the top directory refers to the root of the
|
||||
Infix source tree, but this can be changed by setting the branding
|
||||
variable `IX_OEM_PATH`, e.g. in a `defconfig` file or via `make
|
||||
variable `INFIX_OEM_PATH`, e.g. in a `defconfig` file or via `make
|
||||
menuconfig`, to the path of an enclosing br2-external.
|
||||
|
||||
#### `INFIX_RELEASE`
|
||||
|
||||
@@ -190,9 +190,6 @@ To apply a single snippet to the current output directory:
|
||||
make apply-ext4 # build an ext4 rootfs (needed for boards
|
||||
# whose bootloader lacks squashfs support,
|
||||
# e.g. Marvell ESPRESSObin)
|
||||
make apply-mirror # prefer an internal download mirror
|
||||
# (BR2_PRIMARY_SITE) over upstream sites,
|
||||
# see utils/mirror-sync.sh for populating it
|
||||
|
||||
The `apply-*` targets require an existing `.config` (i.e. you must have
|
||||
already run a `make <board>_defconfig`). The snippet is merged using
|
||||
|
||||
@@ -223,96 +223,6 @@ The firewall includes over 100 pre-defined services, such as:
|
||||
> See the YANG model for the full list, or tap the ++question++ key
|
||||
> when setting up an allowed host service in a zone `set service`
|
||||
|
||||
## Address Sets
|
||||
|
||||
Address sets are named collections of IP addresses and networks that can be
|
||||
used as zone *sources*, alongside the `network` setting. Traffic from a
|
||||
member of the set is classified into that zone regardless of which interface
|
||||
it arrives on. Since source matching takes precedence over interface
|
||||
matching, an address set in a trusted zone can selectively lift devices out
|
||||
of a restrictive interface zone.
|
||||
|
||||
This enables per-IP access control: block everything by default and grant
|
||||
individual end devices access at runtime.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Assigning an address set to a zone only decides which zone the source IP
|
||||
> belongs to. It does **not** by itself grant access to the device. Access
|
||||
> to HOST services is still controlled by the zone's `action` and `service`
|
||||
> settings. A common pattern is to keep the interface or default zone
|
||||
> restrictive (`reject`/`drop`) and attach the address set to a separate
|
||||
> trusted zone with `action accept`, as shown below.
|
||||
|
||||
<pre class="cli"><code>admin@example:/> <b>configure</b>
|
||||
admin@example:/config/> <b>edit firewall address-set allowed</b>
|
||||
admin@example:/config/firewall/…/allowed/> <b>set description "End devices granted access"</b>
|
||||
admin@example:/config/firewall/…/allowed/> <b>set entry 192.168.1.40</b>
|
||||
admin@example:/config/firewall/…/allowed/> <b>end</b>
|
||||
admin@example:/config/firewall/> <b>edit zone trusted</b>
|
||||
admin@example:/config/firewall/…/trusted/> <b>set action accept</b>
|
||||
admin@example:/config/firewall/…/trusted/> <b>set address-set allowed</b>
|
||||
admin@example:/config/firewall/…/trusted/> <b>leave</b>
|
||||
</code></pre>
|
||||
|
||||
### Static and Dynamic Entries
|
||||
|
||||
Entries come in two kinds:
|
||||
|
||||
- **Static** entries are set in the configuration, like `192.168.1.40`
|
||||
above, and are restored at boot
|
||||
- **Dynamic** entries are added and removed at runtime using the `add`,
|
||||
`remove`, and `flush` actions. They take effect immediately and survive
|
||||
firewall configuration changes, but are *not* saved to the configuration,
|
||||
so a reboot starts from a clean slate
|
||||
|
||||
From admin-exec context in the CLI:
|
||||
|
||||
<pre class="cli"><code>admin@example:/> <b>firewall address-set allowed add 192.168.1.42</b>
|
||||
admin@example:/> <b>show firewall address-set allowed</b>
|
||||
name : allowed
|
||||
family : ipv4
|
||||
timeout : none
|
||||
|
||||
ENTRY TYPE EXPIRES
|
||||
192.168.1.40 static
|
||||
192.168.1.42 dynamic
|
||||
admin@example:/> <b>firewall address-set allowed remove 192.168.1.42</b>
|
||||
</code></pre>
|
||||
|
||||
The same actions are available over NETCONF and RESTCONF, e.g., allowing a
|
||||
device from a network management system:
|
||||
|
||||
```json
|
||||
~$ curl -kX POST -u admin:admin -H "Content-Type: application/yang-data+json" \
|
||||
-d '{"infix-firewall:input": {"entry": "192.168.1.42"}}' \
|
||||
https://example.local/restconf/data/infix-firewall:firewall/address-set=allowed/add
|
||||
```
|
||||
|
||||
Static entries can only be removed by changing the configuration, the
|
||||
`remove` action manages dynamic entries only. The `flush` action removes
|
||||
all dynamic entries at once, leaving static entries in place.
|
||||
|
||||
### Expiring Entries
|
||||
|
||||
An address set can be created with a `timeout`, giving every dynamic entry a
|
||||
limited lifetime. Such sets are dynamic-only: static entries cannot be
|
||||
configured, and entries cannot be removed manually, they expire on their
|
||||
own. This suits time-limited access grants and automated ban lists.
|
||||
|
||||
<pre class="cli"><code>admin@example:/config/firewall/> <b>edit address-set banned</b>
|
||||
admin@example:/config/firewall/…/banned/> <b>set timeout 3600</b>
|
||||
admin@example:/config/firewall/…/banned/> <b>leave</b>
|
||||
admin@example:/> <b>firewall address-set banned add 203.0.113.99</b>
|
||||
</code></pre>
|
||||
|
||||
The remaining lifetime of each entry is shown in the `EXPIRES` column of
|
||||
<kbd>show firewall address-set</kbd>.
|
||||
|
||||
> [!NOTE]
|
||||
> Entries in timeout sets do not survive firewall configuration changes,
|
||||
> the set is flushed when the firewall configuration is rebuilt. Regular
|
||||
> (non-timeout) sets keep their dynamic entries over configuration changes.
|
||||
|
||||
## Examples
|
||||
|
||||
### End Device Protection
|
||||
|
||||
@@ -297,6 +297,36 @@ image. The device will boot into test mode on first power-on.
|
||||
> unless `startup_override()` is called first (or the marker is removed
|
||||
> and a normal startup config is saved).
|
||||
|
||||
Simulated Wi-Fi
|
||||
---------------
|
||||
|
||||
The virtual topology has no real radios, so Wi-Fi tests run against
|
||||
`mac80211_hwsim` devices and the "air" between guests is faked. A small
|
||||
relay, `wifimedium` (`package/feature-wifi/wifimedium`), takes every frame
|
||||
a radio transmits, forwards it to the other guests, and injects what
|
||||
arrives back into the local radios.
|
||||
|
||||
Each radio (`radio0`, `radio1`, ...) is paired with a carrier NIC of the
|
||||
same name, and that carrier joins the multicast group (a *cell*) the
|
||||
topology wires it to. Two radios hear each other only when their carriers
|
||||
share a cell. Radios on the same cell that tune to different channels are
|
||||
still kept apart, as on real hardware.
|
||||
|
||||
By convention the two general cells carry `radio0` and `radio1` across all
|
||||
DUTs, so most tests put communicating radios on the same index: a station
|
||||
joins an AP on the same `radioN`. The mesh-roaming test, for instance,
|
||||
uses `radio1` for both the gateway APs and the client. That is only a
|
||||
convention, though. A cell can carry any set of radios, including two of
|
||||
the *same* DUT. The band-steering test relies on that: it wires one DUT's
|
||||
`radio2` (2.4GHz) and `radio3` (5GHz) onto a dedicated cell so a single
|
||||
client radio hears the same SSID on both bands.
|
||||
|
||||
How many radios each DUT gets depends on the topology. The number of
|
||||
`radioN` ports wired to a node is passed in via the `opt/wifi` fw_cfg and
|
||||
loaded at boot by the `00-hwsim` script, so a node with no wifi links has
|
||||
no radios at all. The wiring for the standard suite lives in
|
||||
`test/virt/quad`.
|
||||
|
||||
[9PM]: https://github.com/rical/9pm
|
||||
[Qeneth]: https://github.com/wkz/qeneth
|
||||
[TAP]: https://testanything.org/
|
||||
|
||||
@@ -304,6 +304,7 @@ in-octets : 148388
|
||||
out-octets : 24555
|
||||
mode : station
|
||||
ssid : MyNetwork
|
||||
bssid : b4:fb:e4:17:b6:a7
|
||||
signal : -45 dBm (good)
|
||||
rx bitrate : 72.2 Mbps
|
||||
tx bitrate : 86.6 Mbps
|
||||
@@ -319,6 +320,11 @@ In the CLI, signal strength is reported as: excellent, good, fair or bad.
|
||||
For precise signal strength values in dBm, use NETCONF or RESTCONF to access
|
||||
the `signal-strength` leaf in the operational datastore.
|
||||
|
||||
When connected, `bssid` shows the MAC address of the access point the
|
||||
station is associated to. It appears only while connected. When several
|
||||
access points share one SSID (a roaming network), the `bssid` is what
|
||||
tells them apart, and it changes as the station roams between them.
|
||||
|
||||
## Passphrase Requirements
|
||||
|
||||
To ensure your connection is secure and compatible with all network
|
||||
@@ -378,6 +384,7 @@ operational status : up
|
||||
physical address : f0:09:0d:36:5f:86
|
||||
mode : station
|
||||
ssid : MyHomeNetwork
|
||||
bssid : b4:fb:e4:17:b6:a7
|
||||
signal : -52 dBm (good)
|
||||
</code></pre>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
IXMSG = printf "\e[37;44m>>> $(call qstrip,$(1))\e[0m\n"
|
||||
|
||||
oem-dir := $(call qstrip,$(IX_OEM_PATH))
|
||||
oem-dir := $(call qstrip,$(INFIX_OEM_PATH))
|
||||
INFIX_TOPDIR = $(if $(oem-dir),$(oem-dir),$(BR2_EXTERNAL_INFIX_PATH))
|
||||
|
||||
# Unless the user specifies an explicit build id, source it from git.
|
||||
@@ -10,6 +10,6 @@ INFIX_TOPDIR = $(if $(oem-dir),$(oem-dir),$(BR2_EXTERNAL_INFIX_PATH))
|
||||
# artifacts (see INFIX_ARTIFACT below).
|
||||
export INFIX_BUILD_ID ?= $(shell git -C $(INFIX_TOPDIR) describe --dirty --always --tags --exclude 'latest*')
|
||||
export INFIX_VERSION = $(INFIX_BUILD_ID)
|
||||
export INFIX_ARTIFACT = $(call qstrip,$(IX_IMAGE_ID)$(if $(INFIX_RELEASE),-$(INFIX_RELEASE)))
|
||||
export INFIX_ARTIFACT = $(call qstrip,$(INFIX_IMAGE_ID)$(if $(INFIX_RELEASE),-$(INFIX_RELEASE)))
|
||||
|
||||
INFIX_CFLAGS:=-Wall -Werror -Wextra -Wno-unused-parameter -Wformat=2 -Wformat-overflow=2 -Winit-self -Wstrict-overflow=4 -Wno-format-truncation -Wno-format-nonliteral
|
||||
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
# Load mac80211_hwsim virtual radios sized to this DUT's topology, then wait
|
||||
# for udev to rename the phys (phyN -> radioN) before returning.
|
||||
#
|
||||
# The radio count comes from a dedicated fw_cfg file (opt/wifi) that qeneth
|
||||
# writes per node from the number of radioN carrier ports the topology wired
|
||||
# to it. A node with no wifi links gets 0 (or no file), so hwsim is not loaded
|
||||
# at all -- no phys, nothing clutters its interface view.
|
||||
#
|
||||
# Runs early in ixinit, before 00-probe, so the system probe records the radios
|
||||
# by their final radioN names. ixinit is past the <pid/syslogd> / udev-settle
|
||||
# barrier, so 60-rename-wifi-phy.rules (phyN -> radioN) and
|
||||
# 70-remove-virtual-wifi-interfaces.rules (drop the stray wlanN) are loaded and
|
||||
# fire on the phy add events. On success it sets the <usr/hwsim> condition so
|
||||
# wifimedium starts only where radios exist. Installed only with
|
||||
# BR2_PACKAGE_FEATURE_WIFI_HWSIM.
|
||||
|
||||
wifi=/sys/firmware/qemu_fw_cfg/by_name/opt/wifi/raw
|
||||
ieee=/sys/class/ieee80211
|
||||
|
||||
# Number of radios to create, from the topology (via fw_cfg).
|
||||
radios=0
|
||||
[ -r "$wifi" ] && radios=$(cat "$wifi" 2>/dev/null)
|
||||
|
||||
# No radios wanted -> don't load hwsim, keep the view wifi-free.
|
||||
[ "$radios" -gt 0 ] 2>/dev/null || exit 0
|
||||
|
||||
modprobe mac80211_hwsim radios="$radios" || exit 0
|
||||
|
||||
# Wait (bounded ~10s) for the phyN -> radioN rename to finish: the class has
|
||||
# entries and none are still named phyN. The rename is a udev RUN, so it lags
|
||||
# modprobe's return. On timeout the radios never settled -- fail (and log) so
|
||||
# it is visible why 00-probe may record stale phyN names.
|
||||
TIMEOUT=100
|
||||
i=0
|
||||
while [ "$i" -lt "$TIMEOUT" ]; do
|
||||
names=$(ls "$ieee" 2>/dev/null)
|
||||
if [ -n "$names" ] && ! echo "$names" | grep -q '^phy'; then
|
||||
initctl -bq cond set hwsim
|
||||
exit 0
|
||||
fi
|
||||
i=$((i + 1))
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
logger -p user.err -t 00-hwsim "timed out waiting for hwsim phys to be renamed radioN"
|
||||
exit 1
|
||||
@@ -18,6 +18,18 @@ config BR2_PACKAGE_FEATURE_WIFI
|
||||
help
|
||||
Enables WiFi in Infix. Enables all requried applications.
|
||||
|
||||
config BR2_PACKAGE_FEATURE_WIFI_HWSIM
|
||||
bool "Virtual Wi-Fi radios (mac80211_hwsim)"
|
||||
depends on BR2_PACKAGE_FEATURE_WIFI
|
||||
help
|
||||
Build the mac80211_hwsim virtual radio driver (as a module) for the
|
||||
QEMU test target, to exercise AP, station, and mesh modes without
|
||||
physical WiFi adapters. The module is autoloaded at boot (see the
|
||||
x86_64 /etc/modules-load.d) and frames are bridged between guests by
|
||||
the wifimedium relay.
|
||||
|
||||
Leave disabled on real hardware; it only provides simulated radios.
|
||||
|
||||
config BR2_PACKAGE_FEATURE_WIFI_MEDIATEK
|
||||
bool "Mediatek WiFi Devices"
|
||||
depends on BR2_PACKAGE_FEATURE_WIFI
|
||||
|
||||
@@ -14,6 +14,15 @@ define FEATURE_WIFI_LINUX_CONFIG_FIXUPS
|
||||
$(call KCONFIG_SET_OPT,CONFIG_CFG80211,m)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MAC80211_MESH)
|
||||
|
||||
# Virtual radio for automated testing (mac80211_hwsim), built as a
|
||||
# module and gated behind BR2_PACKAGE_FEATURE_WIFI_HWSIM so it is not
|
||||
# built on real boards. When selected, the module is loaded early in
|
||||
# ixinit by 00-hwsim -- sized to the DUT's topology, so radio-less nodes
|
||||
# load nothing -- and bridged between QEMU guests by the wifimedium relay
|
||||
# (both installed by FEATURE_WIFI_INSTALL_HWSIM below).
|
||||
$(if $(BR2_PACKAGE_FEATURE_WIFI_HWSIM),
|
||||
$(call KCONFIG_SET_OPT,CONFIG_MAC80211_HWSIM,m))
|
||||
|
||||
$(if $(filter y,$(BR2_PACKAGE_FEATURE_WIFI_MEDIATEK)),
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MT7601U)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MT76x0U)
|
||||
@@ -76,5 +85,20 @@ define FEATURE_WIFI_INSTALL_IN_ROMFS
|
||||
endef
|
||||
FEATURE_WIFI_POST_INSTALL_TARGET_HOOKS += FEATURE_WIFI_INSTALL_IN_ROMFS
|
||||
|
||||
# Virtual-radio (mac80211_hwsim) runtime, installed only when the option is
|
||||
# selected: the 00-hwsim ixinit script loads the module sized to the opt/wifi
|
||||
# fw_cfg qeneth writes per node (no radios -> not loaded), and the wifimedium
|
||||
# relay + its Finit service bridge hwsim frames between QEMU guests so they can
|
||||
# associate "wirelessly".
|
||||
ifeq ($(BR2_PACKAGE_FEATURE_WIFI_HWSIM),y)
|
||||
define FEATURE_WIFI_INSTALL_HWSIM
|
||||
$(INSTALL) -D -m 0755 $(FEATURE_WIFI_PKGDIR)/00-hwsim $(TARGET_DIR)/usr/libexec/infix/init.d/00-hwsim
|
||||
$(INSTALL) -D -m 0755 $(FEATURE_WIFI_PKGDIR)/wifimedium $(TARGET_DIR)/usr/libexec/infix/wifimedium
|
||||
$(INSTALL) -D -m 0644 $(FEATURE_WIFI_PKGDIR)/wifimedium.conf $(TARGET_DIR)/etc/finit.d/available/wifimedium.conf
|
||||
ln -sf ../available/wifimedium.conf $(TARGET_DIR)/etc/finit.d/enabled/wifimedium.conf
|
||||
endef
|
||||
FEATURE_WIFI_POST_INSTALL_TARGET_HOOKS += FEATURE_WIFI_INSTALL_HWSIM
|
||||
endif
|
||||
|
||||
|
||||
$(eval $(generic-package))
|
||||
|
||||
Executable
+401
@@ -0,0 +1,401 @@
|
||||
#!/usr/bin/env python3
|
||||
"""wifimedium - a virtual WiFi medium for mac80211_hwsim, extended over Ethernet.
|
||||
|
||||
mac80211_hwsim simulates 802.11 radios in software. By default all radios in
|
||||
one kernel share an in-kernel medium; radios in *different* kernels (i.e.
|
||||
different QEMU guests) cannot hear each other. The moment a userspace process
|
||||
registers on the hwsim generic-netlink family, the kernel stops delivering
|
||||
frames itself and hands every transmitted frame to that process, which becomes
|
||||
responsible for delivery.
|
||||
|
||||
This daemon is that process. On each DUT it:
|
||||
|
||||
* registers on the "mac80211_hwsim" genl family and receives every frame the
|
||||
local radios transmit (HWSIM_CMD_FRAME),
|
||||
* acknowledges each transmit back to the kernel (HWSIM_CMD_TX_INFO_FRAME) so
|
||||
mac80211's TX path completes, and
|
||||
* relays the frame per radio: each radio (phy radioN) is paired by name with a
|
||||
carrier NIC (netdev radioN) that joins one multicast "cell" -- a QEMU socket
|
||||
multicast group shared by every DUT's radioN (see test/virt/quad and
|
||||
test/qeneth). A radio's frame is sent only onto its own carrier, and a
|
||||
carrier's frames are injected only into its own radio
|
||||
(HWSIM_CMD_FRAME with HWSIM_ATTR_ADDR_RECEIVER).
|
||||
|
||||
Each cell is a shared medium: every DUT's radioN is "in range" of every other
|
||||
radioN. Radios on different indices are on different cells, so two radios
|
||||
communicate only if they share an index -- the convention the test topologies
|
||||
follow (a station uses the same radio index as the AP it joins). Channel
|
||||
filtering in mac80211 still separates radios that share a cell but tune to
|
||||
different frequencies.
|
||||
|
||||
This is intended for the QEMU/qeneth test topology only. On real hardware the
|
||||
radios use the air, there are no radioN carrier netdevs, and this daemon idles.
|
||||
See doc/wifi.md.
|
||||
"""
|
||||
import os
|
||||
import socket
|
||||
import struct
|
||||
import time
|
||||
import subprocess
|
||||
import sys
|
||||
import select
|
||||
|
||||
# ---- generic netlink / hwsim ABI (drivers/net/wireless/virtual/mac80211_hwsim.h)
|
||||
NETLINK_GENERIC = 16
|
||||
GENL_ID_CTRL = 16
|
||||
CTRL_CMD_GETFAMILY = 3
|
||||
CTRL_ATTR_FAMILY_ID = 1
|
||||
CTRL_ATTR_FAMILY_NAME = 2
|
||||
CTRL_ATTR_MCAST_GROUPS = 7
|
||||
CTRL_ATTR_MCAST_GRP_NAME = 1
|
||||
CTRL_ATTR_MCAST_GRP_ID = 2
|
||||
|
||||
SOL_NETLINK = 270
|
||||
NETLINK_ADD_MEMBERSHIP = 1
|
||||
|
||||
HWSIM_CMD_REGISTER = 1
|
||||
HWSIM_CMD_FRAME = 2
|
||||
HWSIM_CMD_TX_INFO_FRAME = 3
|
||||
|
||||
HWSIM_ATTR_ADDR_RECEIVER = 1
|
||||
HWSIM_ATTR_ADDR_TRANSMITTER = 2
|
||||
HWSIM_ATTR_FRAME = 3
|
||||
HWSIM_ATTR_FLAGS = 4
|
||||
HWSIM_ATTR_RX_RATE = 5
|
||||
HWSIM_ATTR_SIGNAL = 6
|
||||
HWSIM_ATTR_TX_INFO = 7
|
||||
HWSIM_ATTR_COOKIE = 8
|
||||
HWSIM_ATTR_FREQ = 19
|
||||
HWSIM_ATTR_TX_INFO_FLAGS = 21
|
||||
|
||||
HWSIM_TX_STAT_ACK = 1 << 2
|
||||
|
||||
# Signal/rate reported for injected (received) frames. A strong, fixed signal
|
||||
# keeps mac80211 happy; the exact value is not significant for a virtual cell.
|
||||
RX_SIGNAL = -30
|
||||
RX_RATE = 0
|
||||
|
||||
# The medium is carried as raw Ethernet frames with a custom EtherType on the
|
||||
# configured interface -- no IP addressing needed (the carrier link has none).
|
||||
# A broadcast destination means every DUT on the segment is "in range".
|
||||
ETH_P_WIFIMEDIUM = 0x88B5 # local-experimental EtherType
|
||||
ETH_BROADCAST = b"\xff\xff\xff\xff\xff\xff"
|
||||
ETYPE = struct.pack("!H", ETH_P_WIFIMEDIUM)
|
||||
SOL_PACKET = 263
|
||||
PACKET_IGNORE_OUTGOING = 23 # don't deliver our own TX back to the socket
|
||||
|
||||
NLMSG_HDR = struct.Struct("=IHHII") # len, type, flags, seq, pid
|
||||
GENL_HDR = struct.Struct("=BBH") # cmd, version, reserved
|
||||
|
||||
|
||||
DEBUG = bool(os.environ.get("WIFIMEDIUM_DEBUG"))
|
||||
|
||||
|
||||
def log(msg):
|
||||
sys.stderr.write(f"wifimedium: {msg}\n")
|
||||
sys.stderr.flush()
|
||||
|
||||
|
||||
def dbg(msg):
|
||||
if DEBUG:
|
||||
log(msg)
|
||||
|
||||
|
||||
def nla_align(n):
|
||||
return (n + 3) & ~3
|
||||
|
||||
|
||||
def put_attr(atype, payload):
|
||||
hdr = struct.pack("=HH", len(payload) + 4, atype)
|
||||
return hdr + payload + b"\0" * (nla_align(len(payload) + 4) - (len(payload) + 4))
|
||||
|
||||
|
||||
def parse_attrs(buf):
|
||||
attrs = {}
|
||||
off = 0
|
||||
while off + 4 <= len(buf):
|
||||
alen, atype = struct.unpack_from("=HH", buf, off)
|
||||
if alen < 4:
|
||||
break
|
||||
attrs[atype & 0x7fff] = buf[off + 4:off + alen]
|
||||
off += nla_align(alen)
|
||||
return attrs
|
||||
|
||||
|
||||
class Netlink:
|
||||
"""Minimal generic-netlink client for the hwsim family."""
|
||||
|
||||
def __init__(self):
|
||||
self.sock = socket.socket(socket.AF_NETLINK, socket.SOCK_RAW, NETLINK_GENERIC)
|
||||
self.sock.bind((0, 0))
|
||||
self.seq = 0
|
||||
# NB: the genl family is "MAC80211_HWSIM" (uppercase); the lowercase
|
||||
# "mac80211_hwsim" is the platform driver name, not the family.
|
||||
self.family_id, self.mcast_id = self._resolve("MAC80211_HWSIM", "config")
|
||||
|
||||
def fileno(self):
|
||||
return self.sock.fileno()
|
||||
|
||||
def _send(self, family_id, cmd, attrs=b"", flags=0):
|
||||
self.seq += 1
|
||||
payload = GENL_HDR.pack(cmd, 1, 0) + attrs
|
||||
msg = NLMSG_HDR.pack(NLMSG_HDR.size + len(payload), family_id,
|
||||
flags | 1, self.seq, 0) + payload # NLM_F_REQUEST
|
||||
self.sock.send(msg)
|
||||
|
||||
def _resolve(self, name, grpname):
|
||||
self._send(GENL_ID_CTRL, CTRL_CMD_GETFAMILY,
|
||||
put_attr(CTRL_ATTR_FAMILY_NAME, name.encode() + b"\0"))
|
||||
data = self.sock.recv(65536)
|
||||
_, mtype, _, _, _ = NLMSG_HDR.unpack_from(data, 0)
|
||||
if mtype == 2: # NLMSG_ERROR (also used for ACKs; err<0 is a failure)
|
||||
err = struct.unpack_from("=i", data, NLMSG_HDR.size)[0]
|
||||
raise RuntimeError(f"genl GETFAMILY({name}) failed: "
|
||||
f"{os.strerror(-err) if err else 'empty reply'}")
|
||||
attrs = parse_attrs(data[NLMSG_HDR.size + GENL_HDR.size:])
|
||||
family_id = struct.unpack("=H", attrs[CTRL_ATTR_FAMILY_ID][:2])[0]
|
||||
|
||||
mcast_id = None
|
||||
for _, grp in _parse_nested(attrs.get(CTRL_ATTR_MCAST_GROUPS, b"")):
|
||||
gattrs = parse_attrs(grp)
|
||||
gname = gattrs.get(CTRL_ATTR_MCAST_GRP_NAME, b"").rstrip(b"\0").decode()
|
||||
if gname == grpname:
|
||||
mcast_id = struct.unpack("=I", gattrs[CTRL_ATTR_MCAST_GRP_ID])[0]
|
||||
if mcast_id is None:
|
||||
raise RuntimeError(f"hwsim multicast group '{grpname}' not found")
|
||||
return family_id, mcast_id
|
||||
|
||||
def register(self):
|
||||
self.sock.setsockopt(SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, self.mcast_id)
|
||||
self._send(self.family_id, HWSIM_CMD_REGISTER)
|
||||
|
||||
def recv(self):
|
||||
return self.sock.recv(65536)
|
||||
|
||||
def inject(self, receiver, frame, freq):
|
||||
attrs = put_attr(HWSIM_ATTR_ADDR_RECEIVER, receiver)
|
||||
attrs += put_attr(HWSIM_ATTR_FRAME, frame)
|
||||
attrs += put_attr(HWSIM_ATTR_RX_RATE, struct.pack("=I", RX_RATE))
|
||||
attrs += put_attr(HWSIM_ATTR_SIGNAL, struct.pack("=i", RX_SIGNAL))
|
||||
if freq:
|
||||
attrs += put_attr(HWSIM_ATTR_FREQ, struct.pack("=I", freq))
|
||||
self._send(self.family_id, HWSIM_CMD_FRAME, attrs)
|
||||
|
||||
def tx_ack(self, transmitter, flags, tx_info, tx_info_flags, cookie):
|
||||
attrs = put_attr(HWSIM_ATTR_ADDR_TRANSMITTER, transmitter)
|
||||
attrs += put_attr(HWSIM_ATTR_FLAGS, struct.pack("=I", flags | HWSIM_TX_STAT_ACK))
|
||||
attrs += put_attr(HWSIM_ATTR_SIGNAL, struct.pack("=i", RX_SIGNAL))
|
||||
if tx_info:
|
||||
attrs += put_attr(HWSIM_ATTR_TX_INFO, tx_info)
|
||||
if tx_info_flags:
|
||||
attrs += put_attr(HWSIM_ATTR_TX_INFO_FLAGS, tx_info_flags)
|
||||
if cookie:
|
||||
attrs += put_attr(HWSIM_ATTR_COOKIE, cookie)
|
||||
self._send(self.family_id, HWSIM_CMD_TX_INFO_FRAME, attrs)
|
||||
|
||||
|
||||
def _parse_nested(buf):
|
||||
off = 0
|
||||
while off + 4 <= len(buf):
|
||||
alen, atype = struct.unpack_from("=HH", buf, off)
|
||||
if alen < 4:
|
||||
break
|
||||
yield atype & 0x7fff, buf[off + 4:off + alen]
|
||||
off += nla_align(alen)
|
||||
|
||||
|
||||
def radio_addr1(phy):
|
||||
"""The address mac80211_hwsim identifies a radio by on the medium.
|
||||
|
||||
A hwsim radio has three addresses (kernel new_radio()). sysfs 'macaddress'
|
||||
is addresses[0]; the address the kernel stamps as HWSIM_ATTR_ADDR_TRANSMITTER
|
||||
and matches HWSIM_ATTR_ADDR_RECEIVER against (its rhashtable key) is
|
||||
addresses[1] -- addresses[0] with bit 0x40 set in the first octet, for the
|
||||
default no-perm_addr radios we use. So both the transmitter we observe and
|
||||
the receiver we must inject to are this 0x40 variant, not the sysfs value.
|
||||
(Note custom-phys-address changes the vif/netdev MAC, not these.)
|
||||
"""
|
||||
with open(f"/sys/class/ieee80211/{phy}/macaddress") as fh:
|
||||
addr = bytearray.fromhex(fh.read().strip().replace(":", ""))
|
||||
addr[0] |= 0x40
|
||||
return bytes(addr)
|
||||
|
||||
|
||||
def open_medium(ifname):
|
||||
"""Raw-Ethernet socket on the medium interface, or (None, None).
|
||||
|
||||
Returns (sock, mac); mac is the interface's own (unique) address, used as
|
||||
the Ethernet source and to drop frames we transmitted ourselves -- the
|
||||
multicast cell loops our own frames back to us."""
|
||||
if not ifname:
|
||||
return None, None
|
||||
# The carrier NIC is unconfigured (it is not a real DUT port), so Infix
|
||||
# leaves it administratively down -- a raw packet socket on a down link
|
||||
# carries no frames. Bring it up; wifimedium owns the medium, like hwsim0.
|
||||
ifup(ifname)
|
||||
sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW,
|
||||
socket.htons(ETH_P_WIFIMEDIUM))
|
||||
sock.bind((ifname, ETH_P_WIFIMEDIUM))
|
||||
# Don't receive our own transmitted frames (avoids a self-feedback path
|
||||
# and any reliance on the source MAC, which can collide between guests).
|
||||
try:
|
||||
sock.setsockopt(SOL_PACKET, PACKET_IGNORE_OUTGOING, 1)
|
||||
except OSError:
|
||||
pass # pre-4.20 kernels; the length check below still applies
|
||||
with open(f"/sys/class/net/{ifname}/address") as fh:
|
||||
mac = bytes.fromhex(fh.read().strip().replace(":", ""))
|
||||
return sock, mac
|
||||
|
||||
|
||||
# Wire format on the medium: 6-byte transmitter MAC, 4-byte LE freq, then the
|
||||
# raw 802.11 frame.
|
||||
WIRE = struct.Struct("=6sI")
|
||||
|
||||
|
||||
def wait_radios_renamed(timeout=20):
|
||||
"""Wait until the hwsim phys have been renamed phyN -> radioN.
|
||||
|
||||
60-rename-wifi-phy.rules renames each phy *asynchronously* (a udev RUN),
|
||||
and the carrier NICs are already named radioN (mactab/nameif, early boot).
|
||||
We pair phy and carrier by name, so discovering while a phy is still 'phyN'
|
||||
would miss it -- and we discover only once. This raced our start (gated
|
||||
merely on the module load) and left some boots relaying nothing until a
|
||||
restart. Block until every phy is renamed (no 'phyN' left) and the set has
|
||||
settled, so discovery sees radioN phys that match the radioN carriers.
|
||||
"""
|
||||
base = "/sys/class/ieee80211"
|
||||
prev, stable = None, 0
|
||||
for _ in range(timeout * 4):
|
||||
phys = sorted(os.listdir(base)) if os.path.isdir(base) else []
|
||||
if phys and not any(p.startswith("phy") for p in phys):
|
||||
if phys == prev:
|
||||
stable += 1
|
||||
if stable >= 2: # unchanged for ~0.5s
|
||||
return
|
||||
else:
|
||||
stable = 0
|
||||
prev = phys
|
||||
time.sleep(0.25)
|
||||
|
||||
|
||||
def discover_radios():
|
||||
"""Pair each local hwsim radio with its multicast carrier interface.
|
||||
|
||||
A radio's phy is named radioN (60-rename-wifi-phy.rules) under
|
||||
/sys/class/ieee80211/. In the qeneth test topology each radio also has a
|
||||
carrier NIC of the SAME name under /sys/class/net/ -- the topology names the
|
||||
port radioN, so the mactab/nameif rename the carrier to match -- joined to
|
||||
one multicast cell shared by every DUT's radioN. Pairing them by name gives
|
||||
a per-radio relay: a radio's frames go onto its own carrier (its cell) and a
|
||||
carrier's frames are injected only into its own radio.
|
||||
|
||||
Returns a list of {name, addr1, sock, mac}. A phy with no matching carrier
|
||||
netdev (e.g. real hardware) is skipped, so the daemon simply idles there.
|
||||
"""
|
||||
wait_radios_renamed()
|
||||
radios = []
|
||||
base = "/sys/class/ieee80211"
|
||||
if not os.path.isdir(base):
|
||||
return radios
|
||||
for phy in sorted(os.listdir(base)):
|
||||
if not os.path.isdir(f"/sys/class/net/{phy}"):
|
||||
continue # no carrier of this name -> not a relayed radio
|
||||
sock, mac = open_medium(phy)
|
||||
if sock:
|
||||
radios.append({"name": phy, "addr1": radio_addr1(phy),
|
||||
"sock": sock, "mac": mac})
|
||||
return radios
|
||||
|
||||
|
||||
def ifup(ifname):
|
||||
"""Bring an interface up (best effort)."""
|
||||
subprocess.run(["ip", "link", "set", ifname, "up"], check=False)
|
||||
|
||||
|
||||
def main():
|
||||
# The hwsim monitor interface is down after boot; bring it up so the
|
||||
# simulated medium is observable (tcpdump -i hwsim0) and active.
|
||||
ifup("hwsim0")
|
||||
|
||||
# Discover carriers first. With none -- e.g. 'make run', which creates
|
||||
# radios but no inter-guest medium -- registering on the hwsim family would
|
||||
# make the kernel hand us every frame with nowhere to relay it, breaking
|
||||
# delivery between this guest's own radios. So leave the medium to the
|
||||
# kernel and idle instead of registering.
|
||||
radios = discover_radios()
|
||||
if not radios:
|
||||
log("no radio carriers found; leaving local hwsim medium to the kernel")
|
||||
while True:
|
||||
time.sleep(3600)
|
||||
|
||||
nl = Netlink()
|
||||
nl.register()
|
||||
log(f"registered on hwsim family {nl.family_id}; "
|
||||
f"radios={' '.join(r['name'] for r in radios)}")
|
||||
|
||||
# TX routing: a frame's transmitter (addresses[1]) -> that radio's carrier.
|
||||
by_addr1 = {r["addr1"]: r for r in radios}
|
||||
dbg(f"netlink portid={nl.sock.getsockname()[0]}; "
|
||||
+ "; ".join(f"{r['name']} addr1={r['addr1'].hex()} "
|
||||
f"carrier={r['mac'].hex()}" for r in radios))
|
||||
|
||||
socks = [nl] + [r["sock"] for r in radios]
|
||||
while True:
|
||||
ready, _, _ = select.select(socks, [], [])
|
||||
|
||||
if nl in ready:
|
||||
data = nl.recv()
|
||||
off = 0
|
||||
while off + NLMSG_HDR.size <= len(data):
|
||||
mlen, mtype, _, _, _ = NLMSG_HDR.unpack_from(data, off)
|
||||
if mlen < NLMSG_HDR.size:
|
||||
break
|
||||
if mtype == nl.family_id and \
|
||||
data[off + NLMSG_HDR.size] == HWSIM_CMD_FRAME:
|
||||
a = parse_attrs(data[off + NLMSG_HDR.size + GENL_HDR.size:
|
||||
off + mlen])
|
||||
tx = a.get(HWSIM_ATTR_ADDR_TRANSMITTER)
|
||||
frame = a.get(HWSIM_ATTR_FRAME)
|
||||
if tx and frame:
|
||||
freq = struct.unpack("=I", a[HWSIM_ATTR_FREQ])[0] \
|
||||
if HWSIM_ATTR_FREQ in a else 0
|
||||
flags = struct.unpack("=I", a[HWSIM_ATTR_FLAGS])[0] \
|
||||
if HWSIM_ATTR_FLAGS in a else 0
|
||||
# Complete the kernel TX path regardless of delivery.
|
||||
nl.tx_ack(tx, flags, a.get(HWSIM_ATTR_TX_INFO),
|
||||
a.get(HWSIM_ATTR_TX_INFO_FLAGS),
|
||||
a.get(HWSIM_ATTR_COOKIE))
|
||||
# Send only onto the transmitting radio's own carrier.
|
||||
r = by_addr1.get(tx)
|
||||
if r:
|
||||
r["sock"].send(ETH_BROADCAST + r["mac"] + ETYPE +
|
||||
WIRE.pack(tx, freq) + frame)
|
||||
dbg(f"tx {r['name']} freq={freq} len={len(frame)}")
|
||||
else:
|
||||
dbg(f"tx from unknown radio {tx.hex()} -- dropped")
|
||||
off += nla_align(mlen)
|
||||
|
||||
for r in radios:
|
||||
if r["sock"] not in ready:
|
||||
continue
|
||||
pkt = r["sock"].recv(65536)
|
||||
if len(pkt) < 14 + WIRE.size:
|
||||
continue
|
||||
# The cell multicasts our own frames back to us; PACKET_IGNORE_-
|
||||
# OUTGOING does not catch that looped copy, so drop anything whose
|
||||
# Ethernet source is our own carrier (carrier MACs are unique per
|
||||
# DUT; transmitter addrs are not, so we must key on the carrier).
|
||||
if pkt[6:12] == r["mac"]:
|
||||
continue
|
||||
tx, freq = WIRE.unpack_from(pkt, 14)
|
||||
frame = pkt[14 + WIRE.size:]
|
||||
# Inject into THIS radio only -- its carrier is its cell.
|
||||
nl.inject(r["addr1"], frame, freq)
|
||||
dbg(f"rx {r['name']} tx={tx.hex()} freq={freq} len={len(frame)}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
main()
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
@@ -0,0 +1,14 @@
|
||||
# Virtual WiFi medium for mac80211_hwsim (QEMU test target).
|
||||
#
|
||||
# Installed only when BR2_PACKAGE_FEATURE_WIFI_HWSIM is set. Bridges hwsim
|
||||
# frames between the local radios and -- when a medium interface is configured
|
||||
# (WIFIMEDIUM_IFACE env or 'wifimedium.iface=' on the kernel cmdline) -- to
|
||||
# peer DUTs over that Ethernet segment, so two QEMU guests can associate
|
||||
# "wirelessly". hwsim is loaded by the 00-hwsim ixinit script, which sets the
|
||||
# <usr/hwsim> condition once radios exist and are renamed -- so this service
|
||||
# starts only on nodes that actually have radios (registering on the hwsim genl
|
||||
# family would fail otherwise). On real hardware neither is shipped and the
|
||||
# radios use the air.
|
||||
service env:-/etc/default/wifimedium name:wifimedium \
|
||||
[2345] <usr/hwsim> \
|
||||
/usr/libexec/infix/wifimedium -- Virtual WiFi medium (hwsim)
|
||||
@@ -1 +0,0 @@
|
||||
sha256 49c4d5edbd3ee0a0f6b15ef097b79539530a574ceed8a4dffec1d02455933029 LICENSE
|
||||
@@ -1 +0,0 @@
|
||||
sha256 8cdb4def6e91fde66ed0880a6e6ecc364aa96012e53b3cfb990b53b9dab976d4 LICENSE
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 38ef4ac1fa9bd9b0436311c6f8962646222c54f9 Mon Sep 17 00:00:00 2001
|
||||
From f614327b6eca20319f5eee20ac954ea8d92276e4 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 19 Sep 2023 18:38:10 +0200
|
||||
Subject: [PATCH 01/50] net: phy: marvell10g: Support firmware loading on
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 48bb808a5c8d7d0d7c49e4453f4809a9fdeefddc Mon Sep 17 00:00:00 2001
|
||||
From 7d453cb838611f44d7566b6174ae95a5d2265fa1 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 21 Nov 2023 20:15:24 +0100
|
||||
Subject: [PATCH 02/50] net: phy: marvell10g: Fix power-up when strapped to
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From da0565da3839ac4f85b9743a4a207fbbe6d9c719 Mon Sep 17 00:00:00 2001
|
||||
From 4b08a36e3107c4018ddf3a19760cc87d02281bd7 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 15 Nov 2023 20:58:42 +0100
|
||||
Subject: [PATCH 03/50] net: phy: marvell10g: Add LED support for 88X3310
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 7f3d654b9af1b449555f0076f56db9a8c48f7314 Mon Sep 17 00:00:00 2001
|
||||
From e5e81eb1172db22be7c83efc8071108d0d42565e Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 12 Dec 2023 09:51:05 +0100
|
||||
Subject: [PATCH 04/50] net: phy: marvell10g: Support LEDs tied to a single
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From ae3d8558243c10a3fa34534765cdc5a4ece535b1 Mon Sep 17 00:00:00 2001
|
||||
From 1f735096f1b8920ee6f21bf60a4c2d3f6376adeb Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 27 Mar 2024 10:10:19 +0100
|
||||
Subject: [PATCH 05/50] net: phy: Do not resume PHY when attaching
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 08f6224ebcba517410b4dc2b98f7b50db842dc30 Mon Sep 17 00:00:00 2001
|
||||
From e38d2d2f07f55819d2191d4282dc2d4688075d7d Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Mon, 4 Mar 2024 16:47:28 +0100
|
||||
Subject: [PATCH 06/50] net: bridge: avoid classifying unknown multicast as
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 9044f8f0599e025644d13c0b031826f5765bbc34 Mon Sep 17 00:00:00 2001
|
||||
From a9b80b26c96e5492ab32a72ee36e3321a2b90ee9 Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Tue, 5 Mar 2024 06:44:41 +0100
|
||||
Subject: [PATCH 07/50] net: bridge: Ignore router ports when forwarding L2
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 2ddcdd2cb31dd46e552fea1adf3e89d9925412ee Mon Sep 17 00:00:00 2001
|
||||
From 01e41d87efa1b63d292f0acfe4d1fb0e39baab20 Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Thu, 4 Apr 2024 16:36:30 +0200
|
||||
Subject: [PATCH 08/50] net: bridge: drop delay for applying strict multicast
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 9e9322c41e94e95c3dd4841334933a6c8ef11fd1 Mon Sep 17 00:00:00 2001
|
||||
From 944c77d075c8e0655bd3a28e96892261465a5cf4 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Thu, 16 May 2024 14:51:54 +0200
|
||||
Subject: [PATCH 09/50] net: bridge: Differentiate MDB additions from
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 1d26447cb586481eee5c4564b68f49c6731b2c83 Mon Sep 17 00:00:00 2001
|
||||
From 3f58061ab8f869a6432a1256ee7422bb157b624e Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Fri, 24 Nov 2023 23:29:55 +0100
|
||||
Subject: [PATCH 10/50] nvmem: layouts: onie-tlv: Let device probe even when
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 4620363bad6472dbe2b8de2093f0a70df812df58 Mon Sep 17 00:00:00 2001
|
||||
From f492d4efac3a65bca4d53e383336c36113e28a8b Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Sun, 11 Aug 2024 11:27:35 +0200
|
||||
Subject: [PATCH 11/50] net: usb: r8152: add r8153b support for link/activity
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 8f3422542356b5cb77f6c2a73431ca06e86b302f Mon Sep 17 00:00:00 2001
|
||||
From a2448b84e5483b5b91b46ac31b27609352fd9ed6 Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Sun, 10 Aug 2025 18:52:54 +0200
|
||||
Subject: [PATCH 12/50] arm64: dts: mediatek: mt7986a: rename BPi R3 ports to
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From dc104487c9361afb69344f4b28d67191b3a86ba6 Mon Sep 17 00:00:00 2001
|
||||
From c4ac90dcc5aefbb704c70ebbfe041dee683b882b Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Walström <lazzer@gmail.com>
|
||||
Date: Wed, 20 Aug 2025 21:38:24 +0200
|
||||
Subject: [PATCH 13/50] drm/panel-simple: Add a timing for the Raspberry Pi 7"
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From debb5dd84c54cb3d2fd81266a16e40b4e46dc5a7 Mon Sep 17 00:00:00 2001
|
||||
From 8da101ec2429ba0bf1410346260f9a7ddfb0bdbe Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Walström <lazzer@gmail.com>
|
||||
Date: Thu, 21 Aug 2025 11:20:23 +0200
|
||||
Subject: [PATCH 14/50] input:touchscreen:edt-ft5x06: Add polled mode
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From c27a3dffd31067521fd10a9bc89e9deda4d5361f Mon Sep 17 00:00:00 2001
|
||||
From 93646f890903157bb78ef369ddf9d99a9161de0d Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 12 Mar 2024 10:27:24 +0100
|
||||
Subject: [PATCH 15/50] [FIX] net: dsa: mv88e6xxx: Fix timeout on waiting for
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From dcaafda96688a910419945920eb73487a3569c97 Mon Sep 17 00:00:00 2001
|
||||
From 29cfa1b5ffba41728dc5e0991d1ee27b903d569c Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 27 Mar 2024 15:52:43 +0100
|
||||
Subject: [PATCH 16/50] net: dsa: mv88e6xxx: Improve indirect register access
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From b23b36d1963b8a8b61adc26a1971c78623987285 Mon Sep 17 00:00:00 2001
|
||||
From a7fa9a45329781519702d46ba05815433fff4acc Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Mon, 22 Apr 2024 23:18:01 +0200
|
||||
Subject: [PATCH 17/50] net: dsa: mv88e6xxx: Honor ports being managed via
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 04823fe9ff9c611478db9eb97281da93f4cb49d0 Mon Sep 17 00:00:00 2001
|
||||
From cda7100b0a29e6a9bd29a67ff9db3bcccb72065c Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 24 Apr 2024 22:41:04 +0200
|
||||
Subject: [PATCH 18/50] net: dsa: mv88e6xxx: Limit rsvd2cpu policy to user
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 19d957f79007833d47c3c3a646d848c9a879cb8d Mon Sep 17 00:00:00 2001
|
||||
From ccf9f9262e8570cfd522b841465f3edf76b3447a Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 28 May 2024 10:38:42 +0200
|
||||
Subject: [PATCH 19/50] net: dsa: tag_dsa: Use tag priority as initial
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From b596ef44536a882d1522d4ad058e26d887d0212d Mon Sep 17 00:00:00 2001
|
||||
From 3200169701ef4d9afdea35355b3fe41d6f363134 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 16 Jan 2024 16:00:55 +0100
|
||||
Subject: [PATCH 20/50] net: dsa: Support MDB memberships whose L2 addresses
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 4df7c3a09d6596888cb4b968a04b8b24b2ffed67 Mon Sep 17 00:00:00 2001
|
||||
From dea9ff6c0bdf7c3e4abc2fb507d2ab4b94dabb63 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Thu, 21 Mar 2024 19:12:15 +0100
|
||||
Subject: [PATCH 21/50] net: dsa: Support EtherType based priority overrides
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From bb62c8b847b04e674188e90cb1ce28b780aa70f0 Mon Sep 17 00:00:00 2001
|
||||
From 1dc01d7420e3d511babfbdeda742d93527d72abb Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Fri, 22 Mar 2024 16:15:43 +0100
|
||||
Subject: [PATCH 22/50] net: dsa: mv88e6xxx: Support EtherType based priority
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 0bd5832d6a8dfe3ff5e8eae10060b8189052bea4 Mon Sep 17 00:00:00 2001
|
||||
From caed0d150badbb040e403975645bf09ba3f44e76 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 28 May 2024 11:04:22 +0200
|
||||
Subject: [PATCH 23/50] net: dsa: mv88e6xxx: Add mqprio qdisc support
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 2f1b4e2c1ac07b59a68205d17f69ac236b1272b7 Mon Sep 17 00:00:00 2001
|
||||
From 1bd5b0e8a5574209b386d6d8bc1cf3bcf2e4fd5e Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 29 May 2024 13:20:41 +0200
|
||||
Subject: [PATCH 24/50] net: dsa: mv88e6xxx: Use VLAN prio over IP when both
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
From 3ded57ad8a13d5bb817295c537f9660cc7987326 Mon Sep 17 00:00:00 2001
|
||||
From 7894882d70e8223939a6d9a0e15cc6bbc08ae33c Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 26 Nov 2024 19:45:59 +0100
|
||||
Subject: [PATCH 25/50] [FIX] net: dsa: mv88e6xxx: Trap locally terminated
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user