diff --git a/board/Config.in b/board/Config.in index 2fd7fadb..e283351f 100644 --- a/board/Config.in +++ b/board/Config.in @@ -1,5 +1,6 @@ menu "Board Support" +source "$BR2_EXTERNAL_INFIX_PATH/board/aarch32/Config.in" source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/Config.in" source "$BR2_EXTERNAL_INFIX_PATH/board/riscv64/Config.in" source "$BR2_EXTERNAL_INFIX_PATH/board/x86_64/Config.in" diff --git a/board/aarch32/Config.in b/board/aarch32/Config.in new file mode 100644 index 00000000..e6962052 --- /dev/null +++ b/board/aarch32/Config.in @@ -0,0 +1,5 @@ +if BR2_arm + +source "$BR2_EXTERNAL_INFIX_PATH/board/aarch32/raspberrypi-rpi2/Config.in" + +endif diff --git a/board/aarch32/README.md b/board/aarch32/README.md new file mode 100644 index 00000000..be37d755 --- /dev/null +++ b/board/aarch32/README.md @@ -0,0 +1,7 @@ +aarch32 +======= + +Board Specific Documentation +---------------------------- + +- [Raspberry Pi 2 Model B (32-bit)](raspberrypi-rpi2/) diff --git a/board/aarch32/board.mk b/board/aarch32/board.mk new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/board/aarch32/board.mk @@ -0,0 +1 @@ + diff --git a/board/aarch32/boot.script b/board/aarch32/boot.script new file mode 100644 index 00000000..af692a20 --- /dev/null +++ b/board/aarch32/boot.script @@ -0,0 +1,7 @@ +blkmap get boot dev devnum +load blkmap ${devnum} ${kernel_addr_r} /boot/zImage +#TODO: LOAD FDT + +setenv bootargs "${bootargs_root} ${bootargs_rauc} ${bootargs_log}" + +bootz ${kernel_addr_r} ${ramdisk} ${fdt_addr} diff --git a/board/aarch32/linux_defconfig b/board/aarch32/linux_defconfig new file mode 100644 index 00000000..2d6302d2 --- /dev/null +++ b/board/aarch32/linux_defconfig @@ -0,0 +1,395 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_AUDIT=y +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +CONFIG_PREEMPT=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_MEMCG=y +CONFIG_BLK_CGROUP=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_BPF=y +CONFIG_USER_NS=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_KALLSYMS_ALL=y +CONFIG_PROFILING=y +CONFIG_KEXEC=y +CONFIG_ARCH_MULTI_V6=y +CONFIG_ARCH_MULTI_V7=y +CONFIG_ARCH_VIRT=y +CONFIG_ARCH_BCM=y +CONFIG_ARCH_BCM2835=y +CONFIG_SMP=y +CONFIG_NR_CPUS=4 +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPUFREQ_DT=y +CONFIG_ARM_RASPBERRYPI_CPUFREQ=y +CONFIG_AEABI=y +CONFIG_VFP=y +CONFIG_NEON=y +CONFIG_KERNEL_MODE_NEON=y +# CONFIG_SUSPEND is not set +CONFIG_PM=y +CONFIG_JUMP_LABEL=y +# CONFIG_GCC_PLUGINS is not set +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PARTITION_ADVANCED=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +# CONFIG_COMPAT_BRK is not set +CONFIG_KSM=y +CONFIG_CMA=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_XDP_SOCKETS=y +CONFIG_XDP_SOCKETS_DIAG=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE_DEMUX=m +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE=y +CONFIG_IP_MROUTE_MULTIPLE_TABLES=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +CONFIG_SYN_COOKIES=y +CONFIG_NET_IPVTI=m +CONFIG_NET_FOU_IP_TUNNELS=y +CONFIG_IPV6_SIT=m +CONFIG_IPV6_GRE=m +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +CONFIG_IPV6_PIMSM_V2=y +CONFIG_NETWORK_PHY_TIMESTAMPING=y +CONFIG_NETFILTER=y +CONFIG_BRIDGE_NETFILTER=y +CONFIG_NETFILTER_NETLINK_QUEUE=y +CONFIG_NETFILTER_NETLINK_LOG=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_TABLES=y +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y +CONFIG_NFT_CT=m +CONFIG_NFT_CONNLIMIT=m +CONFIG_NFT_LOG=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_MASQ=m +CONFIG_NFT_REDIR=m +CONFIG_NFT_NAT=m +CONFIG_NFT_TUNNEL=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_COMPAT=m +CONFIG_NFT_HASH=m +CONFIG_NFT_XFRM=m +CONFIG_NFT_SOCKET=m +CONFIG_NFT_OSF=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_REJECT_NETDEV=m +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +CONFIG_NETFILTER_XT_TARGET_LOG=m +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_RAW=m +CONFIG_IP6_NF_NAT=m +CONFIG_IP6_NF_TARGET_MASQUERADE=m +CONFIG_IP6_NF_TARGET_NPT=m +CONFIG_NF_TABLES_BRIDGE=m +CONFIG_NFT_BRIDGE_META=m +CONFIG_NF_CONNTRACK_BRIDGE=m +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_IP6=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_NFLOG=m +CONFIG_BRIDGE=y +CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_BRIDGE_MRP=y +CONFIG_BRIDGE_CFM=y +CONFIG_NET_DSA=y +CONFIG_VLAN_8021Q=y +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_MQPRIO=y +CONFIG_NET_CLS_BASIC=y +CONFIG_NET_CLS_BPF=y +CONFIG_NET_CLS_FLOWER=y +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_GACT=y +CONFIG_NET_ACT_MIRRED=y +CONFIG_NET_ACT_SKBEDIT=y +CONFIG_DCB=y +CONFIG_NETLINK_DIAG=y +CONFIG_MPLS=y +CONFIG_NET_MPLS_GSO=y +CONFIG_MPLS_ROUTING=m +CONFIG_MPLS_IPTUNNEL=m +CONFIG_NET_PKTGEN=y +# CONFIG_WIRELESS is not set +CONFIG_NET_9P=y +CONFIG_NET_9P_VIRTIO=y +CONFIG_LWTUNNEL=y +CONFIG_PCI=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCI_IOV=y +CONFIG_PCI_AARDVARK=y +CONFIG_PCI_HOST_GENERIC=y +CONFIG_PCIE_ARMADA_8K=y +CONFIG_UEVENT_HELPER=y +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_STANDALONE is not set +CONFIG_RASPBERRYPI_FIRMWARE=y +CONFIG_FW_CFG_SYSFS=y +CONFIG_FW_CFG_SYSFS_CMDLINE=y +CONFIG_OF_OVERLAY=y +CONFIG_BLK_DEV_NULL_BLK=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_VIRTIO_BLK=y +CONFIG_BLK_DEV_NVME=y +CONFIG_SRAM=y +CONFIG_EEPROM_AT24=y +# CONFIG_SCSI_PROC_FS is not set +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_SAS_LIBSAS=y +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_VIRTIO=y +CONFIG_ATA=y +CONFIG_SATA_AHCI=y +CONFIG_SATA_MOBILE_LPM_POLICY=0 +CONFIG_SATA_AHCI_PLATFORM=y +CONFIG_AHCI_MVEBU=y +CONFIG_PATA_OF_PLATFORM=y +CONFIG_MD=y +CONFIG_BLK_DEV_DM=y +CONFIG_DM_INIT=y +CONFIG_DM_VERITY=y +CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y +CONFIG_NETDEVICES=y +CONFIG_BONDING=m +CONFIG_DUMMY=m +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_IPVLAN=m +CONFIG_IPVTAP=m +CONFIG_VXLAN=m +CONFIG_GENEVE=m +CONFIG_BAREUDP=m +CONFIG_MACSEC=m +CONFIG_TUN=m +CONFIG_VETH=m +CONFIG_VIRTIO_NET=y +CONFIG_NLMON=y +CONFIG_NET_VRF=y +CONFIG_BCMGENET=y +CONFIG_SMSC911X=y +CONFIG_USB_LAN78XX=y +CONFIG_USB_USBNET=y +CONFIG_USB_NET_SMSC95XX=y +CONFIG_BRCMFMAC=m +CONFIG_ZD1211RW=m +CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_EDT_FT5X06=m +# CONFIG_LEGACY_PTYS is not set +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_BCM2835AUX=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_TTY_PRINTK=y +CONFIG_HVC_DRIVER=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_BCM2835=m +CONFIG_SPI=y +CONFIG_SPI_BCM2835=y +CONFIG_SPI_BCM2835AUX=y +CONFIG_GPIO_SYSFS=y +CONFIG_SENSORS_RASPBERRYPI_HWMON=m +CONFIG_THERMAL=y +CONFIG_BCM2711_THERMAL=y +CONFIG_BCM2835_THERMAL=m +CONFIG_WATCHDOG=y +CONFIG_BCM2835_WDT=y +CONFIG_I6300ESB_WDT=y +CONFIG_MFD_SYSCON=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_GPIO=y +CONFIG_MEDIA_SUPPORT=y +CONFIG_DRM=y +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +CONFIG_DRM_PANEL_SIMPLE=m +CONFIG_DRM_TOSHIBA_TC358762=m +CONFIG_DRM_V3D=m +CONFIG_DRM_VC4=m +CONFIG_DRM_VC4_HDMI_CEC=y +CONFIG_DRM_SIMPLEDRM=y +CONFIG_FB=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_SOC=y +CONFIG_SND_BCM2835_SOC_I2S=y +CONFIG_HID_GENERIC=m +CONFIG_USB=y +CONFIG_USB_OTG=y +CONFIG_USB_STORAGE=y +CONFIG_USB_DWC2=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_GADGET=y +CONFIG_USB_ETH=m +CONFIG_USB_ETH_EEM=y +CONFIG_USB_G_SERIAL=m +CONFIG_MMC=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_IPROC=y +CONFIG_MMC_BCM2835=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_LEDS_TRIGGER_TRANSIENT=y +CONFIG_LEDS_TRIGGER_CAMERA=y +CONFIG_DMADEVICES=y +CONFIG_DMA_BCM2835=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_INPUT=y +CONFIG_VIRTIO_MMIO=y +CONFIG_STAGING=y +CONFIG_SND_BCM2835=m +CONFIG_VIDEO_BCM2835=m +CONFIG_CLK_RASPBERRYPI=y +CONFIG_MAILBOX=y +CONFIG_BCM2835_MBOX=y +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_RASPBERRYPI_POWER=y +CONFIG_PWM=y +CONFIG_PWM_BCM2835=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_BTRFS_FS=y +CONFIG_BTRFS_FS_POSIX_ACL=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +CONFIG_FUSE_FS=y +CONFIG_VIRTIO_FS=y +CONFIG_OVERLAY_FS=y +CONFIG_VFAT_FS=y +CONFIG_EXFAT_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_ZSTD=y +CONFIG_9P_FS=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_UTF8=y +CONFIG_CRYPTO_CCM=y +CONFIG_CRYPTO_GCM=y +# CONFIG_XZ_DEC_ARM is not set +# CONFIG_XZ_DEC_ARMTHUMB is not set +CONFIG_DMA_CMA=y +CONFIG_CMA_SIZE_MBYTES=32 +CONFIG_PRINTK_TIME=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_FS=y +CONFIG_PANIC_ON_OOPS=y +CONFIG_PANIC_TIMEOUT=20 +CONFIG_DETECT_HUNG_TASK=y +# CONFIG_SCHED_DEBUG is not set +# CONFIG_RCU_TRACE is not set +CONFIG_FUNCTION_TRACER=y +# CONFIG_STRICT_DEVMEM is not set +CONFIG_MEMTEST=y diff --git a/board/aarch32/raspberrypi-rpi2/Config.in b/board/aarch32/raspberrypi-rpi2/Config.in new file mode 100644 index 00000000..8bbc9639 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_RASPBERRYPI_RPI2 + bool "Raspberry Pi 2 Model B (32-bit ARMv7)" + depends on BR2_arm + select SDCARD_AUX + select BR2_PACKAGE_FEATURE_WIFI + select BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI + select BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI_WIFI + + help + Support for the 32-bit ARMv7 Raspberry Pi 2B single-board computer + (SBC) with BCM2836 quad-core Cortex-A7 processor. + + This was the only Raspberry Pi model with the BCM2836 and the 2B + actually got a BCM2837 (Cortex-A53) underclocked an w/o wifi in + the v1.2 board revision. diff --git a/board/aarch32/raspberrypi-rpi2/LICENSE b/board/aarch32/raspberrypi-rpi2/LICENSE new file mode 100644 index 00000000..01952175 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2025 The KernelKit Authors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/board/aarch32/raspberrypi-rpi2/README.md b/board/aarch32/raspberrypi-rpi2/README.md new file mode 100644 index 00000000..f0d59fbf --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/README.md @@ -0,0 +1,96 @@ +Raspberry Pi 2 Model B +====================== + +The [Raspberry Pi 2 Model B][1] is a 32-bit ARM single-board computer, +powered by the Broadcom BCM2836 quad-core Cortex-A7 processor @ 900 MHz +with 1 GB RAM. + +The board features: + +- 4x USB 2.0 ports +- Fast Ethernet (100 Mbps) +- microSD card slot for storage +- HDMI port +- GPIO header (40-pin) + +> [!NOTE] +> Revision 1.2 of the Pi 2B actually uses a BCM2837 (Cortex-A53) underclocked +> and without WiFi, making it very similar to the Pi 3B hardware-wise but +> running in 32-bit mode. This revision is not supported. + +How to Build +------------ + +Since there are no pre-built images for ARM32, you need to build both Infix +and the bootloader from source. + + +1. Clone the repository + + git clone https://github.com/kernelkit/infix.git + cd infix + +2. Build the bootloader (in separate tree) + + make O=x-boot rpi2_boot_defconfig + make O=x-boot + +3. Build Infix (in another tree) + + make O=x-arm32 aarch32_defconfig + make O=x-arm32 + +4. Create the SD card image + + ./utils/mkimage.sh -b x-boot -r x-arm32 raspberrypi-rpi2 + +The resulting image can be found in `x-boot/images/infix-arm-sdcard.img` + +Flashing to SD Card +------------------- + +[Flash the image][0] to a microSD card (at least 4 GB): + +```bash +sudo dd if=x-boot/images/infix-arm-sdcard.img of=/dev/mmcblk0 \ + bs=1M status=progress oflag=direct +``` + +You can also use `bmaptool`: + +```bash +sudo bmaptool copy x-boot/images/infix-rpi2-sdcard.img /dev/mmcblk0 +``` + +> [!WARNING] +> Ensure `/dev/mmcblk0` is the correct device for your SD card and not used by +> the host system! Use `lsblk` to verify. + +Booting the Board +----------------- + +1. Insert the flashed SD card into the Raspberry Pi +2. Connect an Ethernet cable (DHCP will be used to get an IP address) +3. Power up the board using a 5V/2.5A micro-USB power supply + +The board will boot and obtain an IP address via DHCP on the Ethernet port. +Find the assigned IP and SSH in with the default login credentials, user/pass: +`admin` / `admin`. + +Console Port (Optional) +----------------------- + +A serial console can be useful for debugging. Connect a USB-to-TTL +serial adapter (3.3V) to GPIO pins: + +- GND → Pin 6, ground +- TxD → Pin 8, GPIO 14 +- RxD → Pin 10, GPIO 15 + +Serial settings: 115200 8N1 + +> [!WARNING] +> Use only 3.3V serial adapters. 5V adapters will damage your Raspberry Pi! + +[0]: https://kernelkit.org/posts/flashing-sdcard/ +[1]: https://www.raspberrypi.com/products/raspberry-pi-2-model-b/ diff --git a/board/aarch32/raspberrypi-rpi2/barebox/env/boot/mmc b/board/aarch32/raspberrypi-rpi2/barebox/env/boot/mmc new file mode 100755 index 00000000..cdb8fc7f --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/barebox/env/boot/mmc @@ -0,0 +1,11 @@ +#!/bin/sh + +mkdir /mnt/primary +mount /dev/disk0.primary /mnt/primary + +global.bootm.image="/mnt/primary/boot/zImage" +global.bootm.oftree="/mnt/primary/boot/broadcom/bcm2836-rpi-2-b.dtb" +global.linux.bootargs.base="quiet console=ttyAMA0,115200 console=tty1 rauc.slot=primary" +global.linux.bootargs.dyn.root="root=PARTLABEL=primary rootwait ro" + +bootm diff --git a/board/aarch32/raspberrypi-rpi2/barebox/env/config b/board/aarch32/raspberrypi-rpi2/barebox/env/config new file mode 100755 index 00000000..0f500082 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/barebox/env/config @@ -0,0 +1,12 @@ +#!/bin/sh + +# Barebox configuration for Raspberry Pi 2 + +# Boot timeout (seconds) +global autoboot_timeout=3 + +# Default boot order +global boot.default="mmc net" + +# Enable colored output if supported +global allow_color=true diff --git a/board/aarch32/raspberrypi-rpi2/barebox/env/init/automount b/board/aarch32/raspberrypi-rpi2/barebox/env/init/automount new file mode 100755 index 00000000..3abdb33d --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/barebox/env/init/automount @@ -0,0 +1,5 @@ +#!/bin/sh + +# Automount MMC partitions +mkdir -p /mnt/mmc +automount /mnt/mmc 'mci0.probe=1 && mount /dev/disk0.0 /mnt/mmc' diff --git a/board/aarch32/raspberrypi-rpi2/barebox/env/init/bootorder b/board/aarch32/raspberrypi-rpi2/barebox/env/init/bootorder new file mode 100755 index 00000000..54e8f510 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/barebox/env/init/bootorder @@ -0,0 +1,4 @@ +#!/bin/sh + +# Set boot order: try mmc first, then network +global.boot.default="mmc net" diff --git a/board/aarch32/raspberrypi-rpi2/barebox/extras.config b/board/aarch32/raspberrypi-rpi2/barebox/extras.config new file mode 100644 index 00000000..900c4ca9 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/barebox/extras.config @@ -0,0 +1,17 @@ +# Minimal Barebox configuration for Raspberry Pi 2 +# Basic boot only - A/B partitioning and secure boot to be added later + +# Enable custom embedded environment +CONFIG_DEFAULT_ENVIRONMENT=y +CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y + +# Enable GPT partition table support for hybrid partition tables +CONFIG_PARTITION_DISK_EFI=y + +# Enable SquashFS support for reading rootfs +CONFIG_FS_SQUASHFS=y +CONFIG_FS_SQUASHFS_LZ4=y +CONFIG_FS_SQUASHFS_LZO=y +CONFIG_FS_SQUASHFS_XZ=y +CONFIG_FS_SQUASHFS_ZLIB=y +CONFIG_FS_SQUASHFS_ZSTD=y diff --git a/board/aarch32/raspberrypi-rpi2/cmdline.txt b/board/aarch32/raspberrypi-rpi2/cmdline.txt new file mode 100644 index 00000000..155a5469 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/cmdline.txt @@ -0,0 +1 @@ +root=/dev/mmcblk0p2 rootwait console=tty1 console=ttyAMA0,115200 diff --git a/board/aarch32/raspberrypi-rpi2/config.txt b/board/aarch32/raspberrypi-rpi2/config.txt new file mode 100644 index 00000000..1a4f3092 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/config.txt @@ -0,0 +1,19 @@ +# Raspberry Pi bootloader (start.elf) configuration +# +# uart_2ndstage=1 - Enable early boot debug output from the bootloader +# Useful for debugging boot failures before Barebox starts +# Comment out for production to reduce boot noise + +[all] +kernel=barebox-raspberry-pi-2.img + +disable_overscan=1 + +enable_uart=1 +#uart_2ndstage=1 + +[pi2] +start_file=start.elf +fixup_file=fixup.dat + +gpu_mem=100 diff --git a/board/aarch32/raspberrypi-rpi2/dts/Makefile b/board/aarch32/raspberrypi-rpi2/dts/Makefile new file mode 100644 index 00000000..456e780d --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/dts/Makefile @@ -0,0 +1 @@ +dtb-y += broadcom/bcm2836-rpi-2-b.dtb diff --git a/board/aarch32/raspberrypi-rpi2/dts/broadcom/Makefile b/board/aarch32/raspberrypi-rpi2/dts/broadcom/Makefile new file mode 100644 index 00000000..d6bdb748 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/dts/broadcom/Makefile @@ -0,0 +1 @@ +# Placeholder - dtb-y is defined in parent Makefile diff --git a/board/aarch32/raspberrypi-rpi2/dts/broadcom/bcm2836-rpi-2-b.dts b/board/aarch32/raspberrypi-rpi2/dts/broadcom/bcm2836-rpi-2-b.dts new file mode 100644 index 00000000..fd0674d1 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/dts/broadcom/bcm2836-rpi-2-b.dts @@ -0,0 +1,19 @@ +#include +#include "infix.dtsi" + +/ { + /* CMA pool for GPU and video */ + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + cma-reserved { + compatible = "shared-dma-pool"; + size = <0x4000000>; /* 64MB */ + alignment = <0x1000000>; /* 16MB aligned */ + linux,cma-default; + reusable; + }; + }; +}; diff --git a/board/aarch32/raspberrypi-rpi2/dts/broadcom/infix.dtsi b/board/aarch32/raspberrypi-rpi2/dts/broadcom/infix.dtsi new file mode 100644 index 00000000..16cfafc8 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/dts/broadcom/infix.dtsi @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Common Infix OS defaults + */ + +/ { + chosen { + infix { + /* Default admin user password: 'admin' */ + factory-password-hash = "$5$mI/zpOAqZYKLC2WU$i7iPzZiIjOjrBF3NyftS9CCq8dfYwHwrmUK097Jca9A"; + }; + }; +}; diff --git a/board/aarch32/raspberrypi-rpi2/genimage.cfg.in b/board/aarch32/raspberrypi-rpi2/genimage.cfg.in new file mode 100644 index 00000000..494a84ac --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/genimage.cfg.in @@ -0,0 +1,78 @@ +image boot.vfat { + vfat { + files = { +#BOOT_FILES# + } + } + + size = 32M +} + +image cfg.ext4 { + empty = true + temporary = true + size = 16M + + ext4 { + label = "cfg" + use-mke2fs = true + features = "uninit_bg" + extraargs = "-m 0 -i 4096" + } +} + +# The /var partition will be expanded automatically at first boot +# to use the full size of the SD-card or eMMC media. +image var.ext4 { + empty = true + temporary = true + size = 128M + + ext4 { + label = "var" + use-mke2fs = true + features = "uninit_bg" + extraargs = "-m 0 -i 4096" + } +} + +image #INFIX_ID##VERSION#-rpi2-sdcard.img { + hdimage { + partition-table-type = "hybrid" + } + + partition boot { + partition-type = 0xc + bootable = "true" + image = "boot.vfat" + } + + partition aux { + partition-type-uuid = srv + image = "aux.ext4" + } + + partition primary { + partition-type-uuid = linux + bootable = "true" + size = 250M + image = "rootfs.squashfs" + } + + partition secondary { + partition-type-uuid = linux + bootable = "true" + size = 250M + image = "rootfs.squashfs" + } + + partition cfg { + partition-type-uuid = srv + image = "cfg.ext4" + } + + partition var { + partition-type-uuid = var + image = "var.ext4" + } +} diff --git a/board/aarch32/raspberrypi-rpi2/raspberrypi-rpi2.mk b/board/aarch32/raspberrypi-rpi2/raspberrypi-rpi2.mk new file mode 100644 index 00000000..73d4a0b6 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/raspberrypi-rpi2.mk @@ -0,0 +1,61 @@ +# Raspberry Pi 2 Model B specific kernel configuration +define RASPBERRYPI_RPI2_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_SOUND) + $(call KCONFIG_ENABLE_OPT,CONFIG_SND) + $(call KCONFIG_ENABLE_OPT,CONFIG_SND_SOC) + $(call KCONFIG_ENABLE_OPT,CONFIG_INPUT_MOUSE) + $(call KCONFIG_ENABLE_OPT,CONFIG_INPUT_KEYBOARD) + $(call KCONFIG_ENABLE_OPT,CONFIG_INPUT_TOUCHSCREEN) + $(call KCONFIG_SET_OPT,CONFIG_INPUT_MOUSEDEV,m) + $(call KCONFIG_SET_OPT,CONFIG_HID_GENERIC,m) + + $(call KCONFIG_ENABLE_OPT,CONFIG_ARCH_BCM) + $(call KCONFIG_ENABLE_OPT,CONFIG_ARCH_BCM2835) + $(call KCONFIG_SET_OPT,CONFIG_BCM2835_MBOX,y) + $(call KCONFIG_ENABLE_OPT,CONFIG_BCM2835_WDT) + $(call KCONFIG_ENABLE_OPT,CONFIG_DMA_BCM2835) + $(call KCONFIG_ENABLE_OPT,CONFIG_RASPBERRYPI_FIRMWARE) + $(call KCONFIG_ENABLE_OPT,CONFIG_PINCTRL_BCM2835) + $(call KCONFIG_ENABLE_OPT,CONFIG_GPIO_BCM2835) + $(call KCONFIG_SET_OPT,CONFIG_BRCMFMAC,m) + $(call KCONFIG_ENABLE_OPT,CONFIG_BRCMFMAC_SDIO) + $(call KCONFIG_SET_OPT,CONFIG_I2C_BCM2835,m) + $(call KCONFIG_SET_OPT,CONFIG_BCM2835_THERMAL,m) + $(call KCONFIG_ENABLE_OPT,CONFIG_MMC_BCM2835) + $(call KCONFIG_ENABLE_OPT,CONFIG_RASPBERRYPI_POWER) + $(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250) + $(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250_CONSOLE) + $(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250_BCM2835AUX) + $(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250_EXTENDED) + $(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250_SHARE_IRQ) + $(call KCONFIG_ENABLE_OPT,CONFIG_NET_VENDOR_BROADCOM) + $(call KCONFIG_SET_OPT,CONFIG_SMSC911X,y) + $(call KCONFIG_SET_OPT,CONFIG_REGULATOR_GPIO,y) + $(call KCONFIG_ENABLE_OPT,CONFIG_COMMON_CLK_BCM2835) + $(call KCONFIG_ENABLE_OPT,CONFIG_CLK_RASPBERRYPI) + $(call KCONFIG_ENABLE_OPT,CONFIG_DRM) + $(call KCONFIG_ENABLE_OPT,CONFIG_DRM_KMS_HELPER) + $(call KCONFIG_SET_OPT,CONFIG_DRM_V3D,m) + $(call KCONFIG_SET_OPT,CONFIG_DRM_VC4,m) + $(call KCONFIG_SET_OPT,CONFIG_STAGING,y) + $(call KCONFIG_SET_OPT,CONFIG_SND_BCM2835,m) + + $(call KCONFIG_ENABLE_OPT,CONFIG_DRM_VC4_HDMI_CEC) + $(call KCONFIG_ENABLE_OPT,CONFIG_DRM_LOAD_EDID_FIRMWARE) + $(call KCONFIG_ENABLE_OPT,CONFIG_DRM_PANEL_BRIDGE) + $(call KCONFIG_ENABLE_OPT,CONFIG_DRM_BRIDGE) + $(call KCONFIG_SET_OPT,CONFIG_DRM_TOSHIBA_TC358762,m) + $(call KCONFIG_SET_OPT,CONFIG_DRM_PANEL_SIMPLE,m) + + $(call KCONFIG_ENABLE_OPT,CONFIG_FB) + $(call KCONFIG_ENABLE_OPT,CONFIG_FRAMEBUFFER_CONSOLE) + $(call KCONFIG_ENABLE_OPT,CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY) + $(call KCONFIG_ENABLE_OPT,CONFIG_DRM_FBDEV_EMULATION) + + $(call KCONFIG_SET_OPT,CONFIG_TOUCHSCREEN_EDT_FT5X06,m) + + $(call KCONFIG_ENABLE_OPT,CONFIG_BACKLIGHT_CLASS_DEVICE) +endef + +$(eval $(ix-board)) +$(eval $(generic-package)) diff --git a/board/aarch32/raspberrypi-rpi2/rootfs/usr/share/product/raspberrypi,2-model-b/etc/factory-config.cfg b/board/aarch32/raspberrypi-rpi2/rootfs/usr/share/product/raspberrypi,2-model-b/etc/factory-config.cfg new file mode 100644 index 00000000..d7a28efe --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/rootfs/usr/share/product/raspberrypi,2-model-b/etc/factory-config.cfg @@ -0,0 +1,206 @@ +{ + "ieee802-dot1ab-lldp:lldp": { + "infix-lldp:enabled": true + }, + "ietf-hardware:hardware": { + "component": [ + { + "name": "USB", + "class": "infix-hardware:usb", + "state": { + "admin-state": "unlocked" + } + } + ] + }, + "ietf-interfaces:interfaces": { + "interface": [ + { + "name": "lo", + "type": "infix-if-type:loopback", + "ietf-ip:ipv4": { + "address": [ + { + "ip": "127.0.0.1", + "prefix-length": 8 + } + ] + }, + "ietf-ip:ipv6": { + "address": [ + { + "ip": "::1", + "prefix-length": 128 + } + ] + } + }, + { + "name": "eth0", + "type": "infix-if-type:ethernet", + "ietf-ip:ipv4": { + "infix-dhcp-client:dhcp": { + "option": [ + {"id": "netmask"}, + {"id": "broadcast"}, + {"id": "router"}, + {"id": "domain"}, + {"id": "hostname"}, + {"id": "dns-server"}, + {"id": "ntp-server"}, + {"id": "vendor-class", "value": "Raspberry Pi 2 Model B"} + ] + } + } + } + ] + }, + "ietf-keystore:keystore": { + "asymmetric-keys": { + "asymmetric-key": [ + { + "name": "genkey", + "public-key-format": "infix-crypto-types:ssh-public-key-format", + "public-key": "", + "private-key-format": "infix-crypto-types:rsa-private-key-format", + "cleartext-private-key": "", + "certificates": {} + } + ] + } + }, + "ietf-netconf-acm:nacm": { + "enable-nacm": true, + "groups": { + "group": [ + { + "name": "admin", + "user-name": [ + "admin" + ] + } + ] + }, + "rule-list": [ + { + "name": "admin-acl", + "group": [ + "admin" + ], + "rule": [ + { + "name": "permit-all", + "module-name": "*", + "access-operations": "*", + "action": "permit", + "comment": "Allow 'admin' group complete access to all operations and data." + } + ] + }, + { + "name": "default-deny-all", + "group": [ + "*" + ], + "rule": [ + { + "name": "deny-password-read", + "module-name": "ietf-system", + "path": "/ietf-system:system/authentication/user/password", + "access-operations": "*", + "action": "deny" + } + ] + } + ] + }, + "ietf-netconf-server:netconf-server": { + "listen": { + "endpoints": { + "endpoint": [ + { + "name": "default-ssh", + "ssh": { + "tcp-server-parameters": { + "local-address": "::" + }, + "ssh-server-parameters": { + "server-identity": { + "host-key": [ + { + "name": "default-key", + "public-key": { + "central-keystore-reference": "genkey" + } + } + ] + } + } + } + } + ] + } + } + }, + "ietf-system:system": { + "hostname": "rpi-%m", + "ntp": { + "enabled": true, + "server": [ + { + "name": "ntp.org", + "udp": { + "address": "pool.ntp.org" + }, + "iburst": true + } + ] + }, + "authentication": { + "user": [ + { + "name": "admin", + "password": "$factory$", + "infix-system:shell": "bash" + } + ] + }, + "infix-system:motd-banner": "Li0tLS0tLS0uCnwgIC4gLiAgfCBJbmZpeCBPUyDigJQgSW1tdXRhYmxlLkZyaWVuZGx5LlNlY3VyZQp8LS4gdiAuLXwgaHR0cHM6Ly9rZXJuZWxraXQub3JnCictJy0tLSctJwo=" + }, + "infix-meta:meta": { + "version": "1.6" + }, + "infix-services:mdns": { + "enabled": true + }, + "infix-services:web": { + "enabled": true, + "console": { + "enabled": true + }, + "netbrowse": { + "enabled": true + }, + "restconf": { + "enabled": true + } + }, + "infix-services:ssh": { + "enabled": true, + "hostkey": [ + "genkey" + ], + "listen": [ + { + "name": "ipv4", + "address": "0.0.0.0", + "port": 22 + }, + { + "name": "ipv6", + "address": "::", + "port": 22 + } + ] + } +} diff --git a/board/aarch32/raspberrypi-rpi2/rootfs/usr/share/product/raspberrypi,2-model-b/etc/product/interface-quirks.json b/board/aarch32/raspberrypi-rpi2/rootfs/usr/share/product/raspberrypi,2-model-b/etc/product/interface-quirks.json new file mode 100644 index 00000000..c9246f2d --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/rootfs/usr/share/product/raspberrypi,2-model-b/etc/product/interface-quirks.json @@ -0,0 +1,8 @@ +{ + "eth0": { + "phy-detached-when-down": true + }, + "@ethtool:driver=smsc95xx": { + "broken-flow-control": true + } +} diff --git a/board/aarch32/raspberrypi-rpi2/uboot/extras.config b/board/aarch32/raspberrypi-rpi2/uboot/extras.config new file mode 100644 index 00000000..8f1b9562 --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/uboot/extras.config @@ -0,0 +1,13 @@ +# CONFIG_MMC_PCI is not set +CONFIG_OF_OVERLAY_LIST="rpi-env infix-key" +# CONFIG_ENV_IS_IN_FAT is not set + +# Increase early malloc heap to handle DTB with embedded scripts +CONFIG_SYS_MALLOC_F_LEN=0x2000 + +# Compression support needed for SquashFS +CONFIG_LZ4=y +CONFIG_LZMA=y +CONFIG_CMD_LZMADEC=y +CONFIG_CMD_UNLZ4=y +CONFIG_CMD_UNZIP=y diff --git a/board/aarch32/raspberrypi-rpi2/uboot/rpi-env.dtso b/board/aarch32/raspberrypi-rpi2/uboot/rpi-env.dtso new file mode 100644 index 00000000..761119df --- /dev/null +++ b/board/aarch32/raspberrypi-rpi2/uboot/rpi-env.dtso @@ -0,0 +1,27 @@ +/dts-v1/; +/plugin/; + +&{/} { + config { + environment { + vendor = "infix"; + preboot = "run ixpreboot"; + ixbootdelay = "0.5"; + bootdelay = "-2"; + bootmenu_delay = "10"; + boot_targets = "mmc0"; + ethprime = "eth0"; + bootcmd = "run ixboot"; + + ixpreboot = /incbin/("scripts/ixpreboot.sh"); + ixbtn-devmode = "setenv dev_mode yes; echo Enabled"; + ixbtn-factory = "echo \"No button available, use bootmenu\""; + ixfactory = /incbin/("scripts/ixfactory.sh"); + + ixboot = /incbin/("scripts/ixboot.sh"); + ixbootslot = /incbin/("scripts/ixbootslot.sh"); + ixprepblk = /incbin/("scripts/ixprepblk.sh"); + ixprepdhcp = /incbin/("scripts/ixprepdhcp.sh"); + }; + }; +}; diff --git a/board/aarch64/raspberrypi-rpi64/config.txt b/board/aarch64/raspberrypi-rpi64/config.txt index 46d2e906..53f1f91b 100644 --- a/board/aarch64/raspberrypi-rpi64/config.txt +++ b/board/aarch64/raspberrypi-rpi64/config.txt @@ -1,3 +1,9 @@ +# Raspberry Pi bootloader (start.elf) configuration +# +# uart_2ndstage=1 - Enable early boot debug output from the bootloader +# Useful for debugging boot failures before U-Boot starts +# Comment out for production to reduce boot noise + [all] arm_64bit=1 @@ -12,7 +18,7 @@ dtoverlay=infix-key disable_overscan=1 enable_uart=1 -uart_2ndstage=1 +#uart_2ndstage=1 [pi3] start_file=start.elf diff --git a/board/common/qemu/Config.in.in b/board/common/qemu/Config.in.in index b0f5d22a..e105b98d 100644 --- a/board/common/qemu/Config.in.in +++ b/board/common/qemu/Config.in.in @@ -1,5 +1,11 @@ mainmenu "QEMU Virtualization" +config QEMU_ARCH_IS_32 + bool + +config QEMU_ARCH_IS_64 + bool + choice prompt "Target Architecture" default @ARCH@ @@ -12,6 +18,10 @@ config QEMU_x86_64 bool "x86_64" select QEMU_ARCH_IS_64 +config QEMU_arm + bool "AArch32 (little endian)" + select QEMU_ARCH_IS_32 + config QEMU_aarch64 bool "AArch64 (little endian)" select QEMU_ARCH_IS_64 @@ -54,6 +64,7 @@ endchoice choice prompt "Console" + default QEMU_CONSOLE_SERIAL if QEMU_arm default QEMU_CONSOLE_VIRTIO config QEMU_CONSOLE_VIRTIO @@ -66,6 +77,7 @@ endchoice config QEMU_MACHINE string "Select emulated machine" + default "qemu-system-arm -M virt,accel=kvm:tcg -cpu max" if QEMU_arm default "qemu-system-aarch64 -M virt,accel=kvm:tcg -cpu max,pauth-impdef=on" if QEMU_aarch64 default "qemu-system-x86_64 -M pc,accel=kvm:tcg -cpu max" if QEMU_x86_64 help @@ -73,8 +85,8 @@ config QEMU_MACHINE want to tweak it, or change the acceleration. The default is based on the Buildroot architecture, selected by - the defconfig you started with. Currently Infix supports only - aarch64 (ARM64) and x86_64 (AMD64). + the defconfig you started with. Currently Infix supports + arm (AArch32), aarch64 (ARM64), and x86_64 (AMD64). config QEMU_MACHINE_RAM string "RAM size (k/M/G)" @@ -87,6 +99,7 @@ config QEMU_MACHINE_RAM config QEMU_KERNEL string depends on QEMU_LOADER_KERNEL + default "zImage" if QEMU_arm default "Image" if QEMU_aarch64 default "bzImage" if QEMU_x86_64 @@ -211,12 +224,15 @@ endchoice config QEMU_NET_MODEL string "Interface model" + default "virtio-net-device" if QEMU_arm default "virtio-net-pci" help The default, virtio-net-pci, NIC works for most use-cases, but if you want to play with low-level stuff like ethtool, you might want to test the Intel 82545EM driver, e1000. + Note: ARM32 uses virtio-net-device (MMIO) by default. + config QEMU_NET_BRIDGE_DEV string "Bridge device" depends on QEMU_NET_BRIDGE diff --git a/board/common/qemu/qemu.sh b/board/common/qemu/qemu.sh index d72d147b..9deb2c4c 100755 --- a/board/common/qemu/qemu.sh +++ b/board/common/qemu/qemu.sh @@ -84,7 +84,10 @@ loader_args() append_args() { - if [ "$CONFIG_QEMU_CONSOLE_VIRTIO" ]; then + # ARM32 doesn't support virtio console properly, always use serial + if [ "$CONFIG_QEMU_arm" ]; then + echo -n "console=ttyAMA0 " + elif [ "$CONFIG_QEMU_CONSOLE_VIRTIO" ]; then echo -n "console=hvc0 " elif [ "$CONFIG_QEMU_x86_64" ]; then echo -n "console=ttyS0 " @@ -120,7 +123,13 @@ rootfs_args() echo -n "-device sd-card,drive=mmc " echo -n "-drive id=mmc,file=$CONFIG_QEMU_ROOTFS,if=none,format=raw " elif [ "$CONFIG_QEMU_ROOTFS_VSCSI" = "y" ]; then - echo -n "-drive file=qemu.qcow2,if=virtio,format=qcow2,bus=0,unit=0 " + # ARM32 virt machine uses MMIO virtio devices, not PCI + 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 + echo -n "-drive file=qemu.qcow2,if=virtio,format=qcow2,bus=0,unit=0 " + fi fi } @@ -173,22 +182,38 @@ rw_args() dd if=/dev/zero of="aux.ext4" bs=1M count=1 >/dev/null 2>&1 mkfs.ext4 -L aux "aux.ext4" >/dev/null 2>&1 fi - echo -n "-drive file=aux.ext4,if=virtio,format=raw,bus=0,unit=3 " 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 - echo -n "-drive file=$CONFIG_QEMU_RW,if=virtio,format=raw,bus=0,unit=1 " + # ARM32 virt machine uses MMIO virtio devices, not PCI + 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_QEMU_RW,if=none,format=raw,id=cfg " + echo -n "-device virtio-blk-device,drive=cfg " - 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 + 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_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_QEMU_RW,if=virtio,format=raw,bus=0,unit=1 " - echo -n "-drive file=$CONFIG_QEMU_RW_VAR,if=virtio,format=raw,bus=0,unit=2 " + 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_QEMU_RW_VAR,if=virtio,format=raw,bus=0,unit=2 " + fi fi } diff --git a/configs/aarch32_defconfig b/configs/aarch32_defconfig new file mode 100644 index 00000000..73a54cd0 --- /dev/null +++ b/configs/aarch32_defconfig @@ -0,0 +1,145 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y +BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7_EABIHF_GLIBC_STABLE=y +BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y +BR2_DL_DIR="${BR2_EXTERNAL_INFIX_PATH}/dl" +BR2_CCACHE=y +BR2_CCACHE_DIR="${BR2_EXTERNAL_INFIX_PATH}/.ccache" +BR2_ENABLE_DEBUG=y +BR2_GLOBAL_PATCH_DIR="${BR2_EXTERNAL_INFIX_PATH}/patches" +BR2_TARGET_GENERIC_HOSTNAME="infix" +BR2_TARGET_GENERIC_ISSUE="Infix by KernelKit" +BR2_INIT_FINIT=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt ${BR2_EXTERNAL_INFIX_PATH}/board/common/xattrs" +BR2_ROOTFS_MERGED_USR=y +# BR2_TARGET_ENABLE_ROOT_LOGIN is not set +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="@console" +BR2_TARGET_GENERIC_GETTY_TERM="xterm" +BR2_SYSTEM_DHCP="eth0" +BR2_ENABLE_LOCALE_WHITELIST="C en_US en_CA C.UTF-8" +BR2_GENERATE_LOCALE="en_US en_CA C.UTF-8" +BR2_TARGET_TZ_INFO=y +BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNAL_INFIX_PATH}/board/aarch32/rootfs" +BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.58" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch32/linux_defconfig" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_BUSYBOX_CONFIG="${BR2_EXTERNAL_INFIX_PATH}/board/common/busybox_defconfig" +BR2_PACKAGE_STRACE=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_JQ=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y +BR2_PACKAGE_DBUS_CXX=y +BR2_PACKAGE_DBUS_GLIB=y +BR2_PACKAGE_DBUS_TRIGGERD=y +BR2_PACKAGE_EUDEV_RULES_GEN=y +# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set +BR2_PACKAGE_GPTFDISK=y +BR2_PACKAGE_GPTFDISK_SGDISK=y +BR2_PACKAGE_MDIO_TOOLS=y +BR2_PACKAGE_RNG_TOOLS=y +BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT=y +BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y +BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y +BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_LIBOPENSSL_BIN=y +BR2_PACKAGE_LIBINPUT=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_NETOPEER2_CLI=y +BR2_PACKAGE_NSS_MDNS=y +BR2_PACKAGE_SYSREPO_GROUP="sys-cli" +BR2_PACKAGE_LINUX_PAM=y +BR2_PACKAGE_ONIGURUMA=y +BR2_PACKAGE_AVAHI_DAEMON=y +BR2_PACKAGE_AVAHI_DEFAULT_SERVICES=y +BR2_PACKAGE_CHRONY=y +BR2_PACKAGE_DNSMASQ=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_FRR=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPUTILS=y +BR2_PACKAGE_LLDPD=y +BR2_PACKAGE_MSTPD=y +BR2_PACKAGE_NETCALC=y +BR2_PACKAGE_NGINX=y +BR2_PACKAGE_NGINX_HTTP_SSL_MODULE=y +BR2_PACKAGE_NGINX_HTTP_V2_MODULE=y +BR2_PACKAGE_OPENRESOLV=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_SOCAT=y +BR2_PACKAGE_TCPDUMP=y +BR2_PACKAGE_WHOIS=y +BR2_PACKAGE_BASH_COMPLETION=y +BR2_PACKAGE_SUDO=y +BR2_PACKAGE_GETENT=y +BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_PWGEN=y +BR2_PACKAGE_RAUC=y +BR2_PACKAGE_RAUC_DBUS=y +BR2_PACKAGE_RAUC_GPT=y +BR2_PACKAGE_RAUC_NETWORK=y +BR2_PACKAGE_RAUC_JSON=y +BR2_PACKAGE_SYSKLOGD=y +BR2_PACKAGE_SYSKLOGD_LOGGER=y +BR2_PACKAGE_WATCHDOGD=y +BR2_PACKAGE_LESS=y +BR2_PACKAGE_MG=y +BR2_PACKAGE_NANO=y +BR2_TARGET_ROOTFS_SQUASHFS=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_PACKAGE_HOST_BMAP_TOOLS=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_ENVIRONMENT_SETUP=y +BR2_PACKAGE_HOST_GENEXT2FS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_KMOD_XZ=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_RASPBERRYPI_RPI2=y +INFIX_VENDOR_HOME="https://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://kernelkit.org/infix/" +INFIX_SUPPORT="mailto:kernelkit@googlegroups.com" +BR2_PACKAGE_CONFD=y +BR2_PACKAGE_CONFD_TEST_MODE=y +BR2_PACKAGE_GENCERT=y +BR2_PACKAGE_STATD=y +BR2_PACKAGE_FACTORY=y +BR2_PACKAGE_FINIT_PLUGIN_HOTPLUG=y +BR2_PACKAGE_FINIT_PLUGIN_HOOK_SCRIPTS=y +BR2_PACKAGE_FINIT_PLUGIN_MODULES_LOAD=y +BR2_PACKAGE_FINIT_PLUGIN_RTC=y +BR2_PACKAGE_FINIT_RTC_DATE="2024-11-04 10:54:00" +BR2_PACKAGE_FINIT_RTC_FILE="/var/lib/misc/rtc" +BR2_PACKAGE_FINIT_PLUGIN_TTY=y +BR2_PACKAGE_FINIT_PLUGIN_URANDOM=y +BR2_PACKAGE_FIREWALL=y +BR2_PACKAGE_IITO=y +BR2_PACKAGE_KEYACK=y +BR2_PACKAGE_KLISH_PLUGIN_INFIX=y +BR2_PACKAGE_LOWDOWN=y +BR2_PACKAGE_MCD=y +BR2_PACKAGE_MDNS_ALIAS=y +BR2_PACKAGE_SHOW=y +BR2_PACKAGE_ROUSETTE=y +BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y +TRUSTED_KEYS=y +TRUSTED_KEYS_DEVELOPMENT=y +DISK_IMAGE_BOOT_BIN=y +GNS3_APPLIANCE_RAM=512 +GNS3_APPLIANCE_IFNUM=10 diff --git a/configs/aarch32_minimal_defconfig b/configs/aarch32_minimal_defconfig new file mode 100644 index 00000000..628fcea0 --- /dev/null +++ b/configs/aarch32_minimal_defconfig @@ -0,0 +1,145 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y +BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7_EABIHF_GLIBC_STABLE=y +BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y +BR2_DL_DIR="${BR2_EXTERNAL_INFIX_PATH}/dl" +BR2_CCACHE=y +BR2_CCACHE_DIR="${BR2_EXTERNAL_INFIX_PATH}/.ccache" +BR2_ENABLE_DEBUG=y +BR2_GLOBAL_PATCH_DIR="${BR2_EXTERNAL_INFIX_PATH}/patches" +BR2_TARGET_GENERIC_HOSTNAME="ix" +BR2_TARGET_GENERIC_ISSUE="Infix by KernelKit" +BR2_INIT_FINIT=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt ${BR2_EXTERNAL_INFIX_PATH}/board/common/xattrs" +BR2_ROOTFS_MERGED_USR=y +# BR2_TARGET_ENABLE_ROOT_LOGIN is not set +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="@console" +BR2_TARGET_GENERIC_GETTY_TERM="xterm" +BR2_SYSTEM_DHCP="eth0" +BR2_ENABLE_LOCALE_WHITELIST="C en_US en_CA C.UTF-8" +BR2_GENERATE_LOCALE="en_US en_CA C.UTF-8" +BR2_TARGET_TZ_INFO=y +BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNAL_INFIX_PATH}/board/aarch32/rootfs" +BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.58" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch32/linux_defconfig" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_BUSYBOX_CONFIG="${BR2_EXTERNAL_INFIX_PATH}/board/common/busybox_defconfig" +BR2_PACKAGE_STRACE=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_JQ=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y +BR2_PACKAGE_DBUS_CXX=y +BR2_PACKAGE_DBUS_GLIB=y +BR2_PACKAGE_DBUS_TRIGGERD=y +BR2_PACKAGE_EUDEV_RULES_GEN=y +# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set +BR2_PACKAGE_GPTFDISK=y +BR2_PACKAGE_GPTFDISK_SGDISK=y +BR2_PACKAGE_MDIO_TOOLS=y +BR2_PACKAGE_RNG_TOOLS=y +BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT=y +BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y +BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y +BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_LIBOPENSSL_BIN=y +BR2_PACKAGE_LIBINPUT=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_NETOPEER2_CLI=y +BR2_PACKAGE_NSS_MDNS=y +BR2_PACKAGE_SYSREPO_GROUP="sys-cli" +BR2_PACKAGE_LINUX_PAM=y +BR2_PACKAGE_ONIGURUMA=y +BR2_PACKAGE_AVAHI_DAEMON=y +BR2_PACKAGE_AVAHI_DEFAULT_SERVICES=y +BR2_PACKAGE_CHRONY=y +BR2_PACKAGE_DNSMASQ=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_FRR=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPUTILS=y +BR2_PACKAGE_LLDPD=y +BR2_PACKAGE_MSTPD=y +BR2_PACKAGE_NETCALC=y +BR2_PACKAGE_NGINX=y +BR2_PACKAGE_NGINX_HTTP_SSL_MODULE=y +BR2_PACKAGE_NGINX_HTTP_V2_MODULE=y +BR2_PACKAGE_OPENRESOLV=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_SOCAT=y +BR2_PACKAGE_TCPDUMP=y +BR2_PACKAGE_WHOIS=y +BR2_PACKAGE_BASH_COMPLETION=y +BR2_PACKAGE_SUDO=y +BR2_PACKAGE_GETENT=y +BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_PWGEN=y +BR2_PACKAGE_RAUC=y +BR2_PACKAGE_RAUC_DBUS=y +BR2_PACKAGE_RAUC_GPT=y +BR2_PACKAGE_RAUC_NETWORK=y +BR2_PACKAGE_RAUC_JSON=y +BR2_PACKAGE_SYSKLOGD=y +BR2_PACKAGE_SYSKLOGD_LOGGER=y +BR2_PACKAGE_WATCHDOGD=y +BR2_PACKAGE_LESS=y +BR2_PACKAGE_MG=y +BR2_PACKAGE_NANO=y +BR2_TARGET_ROOTFS_SQUASHFS=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_PACKAGE_HOST_BMAP_TOOLS=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_ENVIRONMENT_SETUP=y +BR2_PACKAGE_HOST_GENEXT2FS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_KMOD_XZ=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_RASPBERRYPI_RPI2=y +INFIX_VENDOR_HOME="https://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://kernelkit.org/infix/" +INFIX_SUPPORT="mailto:kernelkit@googlegroups.com" +BR2_PACKAGE_CONFD=y +BR2_PACKAGE_CONFD_TEST_MODE=y +BR2_PACKAGE_GENCERT=y +BR2_PACKAGE_STATD=y +BR2_PACKAGE_FACTORY=y +BR2_PACKAGE_FINIT_PLUGIN_HOTPLUG=y +BR2_PACKAGE_FINIT_PLUGIN_HOOK_SCRIPTS=y +BR2_PACKAGE_FINIT_PLUGIN_MODULES_LOAD=y +BR2_PACKAGE_FINIT_PLUGIN_RTC=y +BR2_PACKAGE_FINIT_RTC_DATE="2024-11-04 10:54:00" +BR2_PACKAGE_FINIT_RTC_FILE="/var/lib/misc/rtc" +BR2_PACKAGE_FINIT_PLUGIN_TTY=y +BR2_PACKAGE_FINIT_PLUGIN_URANDOM=y +BR2_PACKAGE_FIREWALL=y +BR2_PACKAGE_IITO=y +BR2_PACKAGE_KEYACK=y +BR2_PACKAGE_KLISH_PLUGIN_INFIX=y +BR2_PACKAGE_LOWDOWN=y +BR2_PACKAGE_MCD=y +BR2_PACKAGE_MDNS_ALIAS=y +BR2_PACKAGE_SHOW=y +BR2_PACKAGE_ROUSETTE=y +BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y +TRUSTED_KEYS=y +TRUSTED_KEYS_DEVELOPMENT=y +DISK_IMAGE_BOOT_BIN=y +GNS3_APPLIANCE_RAM=512 +GNS3_APPLIANCE_IFNUM=10 diff --git a/configs/rpi2_boot_defconfig b/configs/rpi2_boot_defconfig new file mode 100644 index 00000000..970e3ba0 --- /dev/null +++ b/configs/rpi2_boot_defconfig @@ -0,0 +1,34 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y +BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7_EABIHF_GLIBC_STABLE=y +BR2_DL_DIR="$(BR2_EXTERNAL_INFIX_PATH)/dl" +BR2_CCACHE=y +BR2_CCACHE_DIR="$(BR2_EXTERNAL_INFIX_PATH)/.ccache" +BR2_ENABLE_DEBUG=y +BR2_PACKAGE_OVERRIDE_FILE="$(BR2_EXTERNAL_INFIX_PATH)/local.mk" +BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_INFIX_PATH)/patches" +BR2_SSP_NONE=y +BR2_INIT_NONE=y +BR2_SYSTEM_BIN_SH_NONE=y +# BR2_PACKAGE_BUSYBOX is not set +BR2_PACKAGE_RPI_FIRMWARE=y +BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch32/raspberrypi-rpi2/config.txt" +BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch32/raspberrypi-rpi2/cmdline.txt" +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_BAREBOX=y +BR2_TARGET_BAREBOX_CUSTOM_VERSION=y +BR2_TARGET_BAREBOX_CUSTOM_VERSION_VALUE="2025.06.0" +BR2_TARGET_BAREBOX_BOARD_DEFCONFIG="rpi" +BR2_TARGET_BAREBOX_CONFIG_FRAGMENT_FILES="${BR2_EXTERNAL_INFIX_PATH}/board/aarch32/raspberrypi-rpi2/barebox/extras.config" +BR2_TARGET_BAREBOX_CUSTOM_EMBEDDED_ENV_PATH="${BR2_EXTERNAL_INFIX_PATH}/board/aarch32/raspberrypi-rpi2/barebox/env" +BR2_TARGET_BAREBOX_IMAGE_FILE="images/barebox-raspberry-pi-2.img" +BR2_PACKAGE_HOST_BMAP_TOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_RAUC=y +# GNS3_APPLIANCE is not set diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index bd05c6cd..463f0397 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -17,6 +17,7 @@ All notable changes to the project are documented in this file. - Upgrade Buildroot to 2025.02.8 (LTS) - Upgrade Linux kernel to 6.12.59 (LTS) +- Initial support for 32-bit ARM systems, reference board: Raspberry Pi 2B - Enable MVEBU SafeXcel Crypto Engine firmware for Marvell Armada SOCs (37xx, 7k, 8k, and CN913x series). Fixes kernel warnings about firmware load failures and crypto-safexcel probe errors on affected boards diff --git a/utils/mkimage.sh b/utils/mkimage.sh index b5da7d90..8daf03dc 100755 --- a/utils/mkimage.sh +++ b/utils/mkimage.sh @@ -130,7 +130,7 @@ validate_board() fi board_underscore=$(echo "$BOARD" | tr '-' '_') - for arch in aarch64 x86_64 riscv64; do + for arch in aarch32 aarch64 x86_64 riscv64; do for variant in "$BOARD" "$board_underscore"; do candidate="$BR2_EXTERNAL_INFIX_PATH/board/$arch/$variant" if [ -d "$candidate" ]; then @@ -169,6 +169,9 @@ get_bootloader_name() board="$1" target="$2" case "$board" in + raspberrypi-rpi2) + echo "rpi2_boot" + ;; raspberrypi-rpi64) echo "rpi64_boot" ;; @@ -269,8 +272,10 @@ discover_rpi_boot_files() files="${files}\t\t\t\"${f#"${binaries_dir}/"}\",\n" done - # Add splash screen - files="${files}\t\t\t\"splash.bmp\",\n" + # Add splash screen if it exists + if [ -f "${binaries_dir}/splash.bmp" ]; then + files="${files}\t\t\t\"splash.bmp\",\n" + fi # Add kernel (extract name from config.txt) if [ -f "${binaries_dir}/rpi-firmware/config.txt" ]; then @@ -472,7 +477,7 @@ GENIMAGE_TEMPLATE="$BOARD_DIR/genimage.cfg.in" [ -f "$GENIMAGE_TEMPLATE" ] || die "genimage.cfg.in not found in $BOARD_DIR" # Check if board needs special boot file discovery (Raspberry Pi) -if [ "$BOARD" = "raspberrypi-rpi64" ] && grep -q '#BOOT_FILES#' "$GENIMAGE_TEMPLATE"; then +if { [ "$BOARD" = "raspberrypi-rpi2" ] || [ "$BOARD" = "raspberrypi-rpi64" ]; } && grep -q '#BOOT_FILES#' "$GENIMAGE_TEMPLATE"; then log "Discovering Raspberry Pi boot files..." BOOT_FILES=$(discover_rpi_boot_files "$BINARIES_DIR") # Create temp file with interpreted escape sequences