Compare commits
No commits in common. "2295ed3110ff90e62afd95ee394fb600cc9040ac" and "f77da6f14ce8d58cd1c0a0ab78857247c76d154a" have entirely different histories.
2295ed3110
...
f77da6f14c
1
ci.nix
1
ci.nix
@ -11,7 +11,6 @@ let
|
|||||||
"qemu-aarch64"
|
"qemu-aarch64"
|
||||||
"qemu-armv7l"
|
"qemu-armv7l"
|
||||||
"tp-archer-ax23"
|
"tp-archer-ax23"
|
||||||
"openwrt-one"
|
|
||||||
"zyxel-nwa50ax"
|
"zyxel-nwa50ax"
|
||||||
"turris-omnia"
|
"turris-omnia"
|
||||||
"belkin-rt3200"
|
"belkin-rt3200"
|
||||||
|
@ -1,739 +0,0 @@
|
|||||||
{
|
|
||||||
description = ''
|
|
||||||
OpenWrt One
|
|
||||||
***********
|
|
||||||
|
|
||||||
Hardware summary
|
|
||||||
================
|
|
||||||
|
|
||||||
- MediaTek MT7981B (1300MHz)
|
|
||||||
- 256MB NAND Flash
|
|
||||||
- 1024MB RAM
|
|
||||||
- WLan hardware: Mediatek MT7976C
|
|
||||||
|
|
||||||
Status
|
|
||||||
======
|
|
||||||
|
|
||||||
- Only tested over TFTP so far.
|
|
||||||
- WiFi (2.4G and 5G) works.
|
|
||||||
- 2.5G ethernet port works.
|
|
||||||
|
|
||||||
Limitations
|
|
||||||
===========
|
|
||||||
|
|
||||||
- adding `he_bss_color="128"` causes `Invalid argument` for hostap
|
|
||||||
- nvme support untested
|
|
||||||
- I don't think the front LEDs work yet
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
TODO: add instructions on how to boot directly from TFTP to memory
|
|
||||||
and how to install from TFTP to flash without going through OpenWrt.
|
|
||||||
|
|
||||||
The instructions below assume you can boot and SSH into OpenWrt:
|
|
||||||
|
|
||||||
Boot into OpenWrt and create a 'liminix' UBI partition:
|
|
||||||
|
|
||||||
root@OpenWrt:~# ubimkvol /dev/ubi0 --name=liminix --maxavsize
|
|
||||||
|
|
||||||
Remember the 'Volume ID' that was created for this new partition
|
|
||||||
|
|
||||||
Build the UBI image and write it to this new partition:
|
|
||||||
|
|
||||||
$ nix-build -I liminix-config=./my-configuration.nix --arg device "import ./devices/openwrt-one" -A outputs.default
|
|
||||||
$ cat result/rootfs | ssh root@192.168.1.1 "cat > /tmp/rootfs"
|
|
||||||
$ ssh root@192.168.1.1
|
|
||||||
root@OpenWrt:~# ubiupdatevol /dev/ubi0_X /tmp/rootfs # replace X with the volume id, if needed check with `ubinfo`
|
|
||||||
|
|
||||||
Reboot into the U-Boot prompt and boot with:
|
|
||||||
|
|
||||||
OpenWrt One> ubifsmount ubi0:liminix && ubifsload ''${loadaddr} boot/fit && bootm ''${loadaddr}'
|
|
||||||
|
|
||||||
If this works, reboot into OpenWrt and configure U-Boot to boot ubifs by default:
|
|
||||||
|
|
||||||
root@OpenWrt:~# fw_setenv orig_boot_production $(fw_printenv -n boot_production)
|
|
||||||
root@OpenWrt:~# fw_setenv boot_production 'led white on ; ubifsmount ubi0:liminix && ubifsload ''${loadaddr} boot/fit && bootm ''${loadaddr}'
|
|
||||||
|
|
||||||
Troubleshooting
|
|
||||||
===============
|
|
||||||
|
|
||||||
The instructions above assume you can boot and SSH into the (recovery)
|
|
||||||
OpenWrt installation. If you have broken your device to the point where that
|
|
||||||
is no longer possible, you could re-install OpenWrt, but probably you could
|
|
||||||
also install directly from U-Boot:
|
|
||||||
|
|
||||||
https://github.com/u-boot/u-boot/blob/master/doc/README.ubi
|
|
||||||
'';
|
|
||||||
|
|
||||||
system = {
|
|
||||||
crossSystem = {
|
|
||||||
config = "aarch64-unknown-linux-musl";
|
|
||||||
gcc = {
|
|
||||||
# https://openwrt.org/docs/techref/instructionset/aarch64_cortex-a53
|
|
||||||
# openwrt ./target/linux/mediatek/filogic/target.mk
|
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html
|
|
||||||
# https://en.wikipedia.org/wiki/Comparison_of_ARM_processors
|
|
||||||
arch = "armv8-a";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {pkgs, config, lib, lim, ... }:
|
|
||||||
let
|
|
||||||
openwrt = pkgs.openwrt_24_10;
|
|
||||||
mediatek-firmware = pkgs.stdenv.mkDerivation {
|
|
||||||
name = "wlan-firmware";
|
|
||||||
phases = ["installPhase"];
|
|
||||||
installPhase = ''
|
|
||||||
mkdir $out
|
|
||||||
|
|
||||||
cp ${pkgs.linux-firmware}/lib/firmware/mediatek/{mt7915,mt7615,mt7986_eeprom_mt7976,mt7981}* $out
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
airoha-firmware = pkgs.stdenv.mkDerivation {
|
|
||||||
name = "airoha-firmware";
|
|
||||||
phases = ["installPhase"];
|
|
||||||
installPhase = ''
|
|
||||||
mkdir $out
|
|
||||||
|
|
||||||
cp ${pkgs.linux-firmware}/lib/firmware/airoha/* $out
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
../../modules/arch/aarch64.nix
|
|
||||||
../../modules/outputs/tftpboot.nix
|
|
||||||
../../modules/outputs/ubifs.nix
|
|
||||||
];
|
|
||||||
config = {
|
|
||||||
kernel = {
|
|
||||||
src = openwrt.kernelSrc;
|
|
||||||
version = openwrt.kernelVersion;
|
|
||||||
extraPatchPhase = ''
|
|
||||||
${openwrt.applyPatches.mediatek}
|
|
||||||
'';
|
|
||||||
config = {
|
|
||||||
NET="y"; # unlock NET_XGRESS
|
|
||||||
SERIAL_8250="y"; # unlock SERIAL_8250_FSL
|
|
||||||
SERIAL_8250_CONSOLE="y"; # to get the serial console
|
|
||||||
WATCHDOG="y"; # unlock WATCHDOG_CORE
|
|
||||||
NEW_LEDS="y"; # unlock LEDS_PWM
|
|
||||||
LEDS_CLASS="y"; # unlock LEDS_PWM
|
|
||||||
LEDS_TRIGGERS="y"; # unlock LEDS_TRIGGER_PATTERN
|
|
||||||
DEFERRED_STRUCT_PAGE_INIT="y"; # trigger PADATA
|
|
||||||
# Taken from openwrt's ./target/linux/mediatek/filogic/config-6.6
|
|
||||||
"64BIT"="y";
|
|
||||||
AIROHA_EN8801SC_PHY="y";
|
|
||||||
ARCH_BINFMT_ELF_EXTRA_PHDRS="y";
|
|
||||||
ARCH_CORRECT_STACKTRACE_ON_KRETPROBE="y";
|
|
||||||
ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG="y";
|
|
||||||
ARCH_DMA_ADDR_T_64BIT="y";
|
|
||||||
ARCH_FORCE_MAX_ORDER="10";
|
|
||||||
ARCH_KEEP_MEMBLOCK="y";
|
|
||||||
ARCH_MEDIATEK="y";
|
|
||||||
ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE="y";
|
|
||||||
ARCH_MMAP_RND_BITS="18";
|
|
||||||
ARCH_MMAP_RND_BITS_MAX="24";
|
|
||||||
ARCH_MMAP_RND_BITS_MIN="18";
|
|
||||||
ARCH_MMAP_RND_COMPAT_BITS_MIN="11";
|
|
||||||
ARCH_PROC_KCORE_TEXT="y";
|
|
||||||
ARCH_SPARSEMEM_ENABLE="y";
|
|
||||||
ARCH_STACKWALK="y";
|
|
||||||
ARCH_SUSPEND_POSSIBLE="y";
|
|
||||||
ARCH_WANTS_NO_INSTR="y";
|
|
||||||
ARCH_WANTS_THP_SWAP="y";
|
|
||||||
ARM64="y";
|
|
||||||
ARM64_4K_PAGES="y";
|
|
||||||
ARM64_ERRATUM_843419="y";
|
|
||||||
ARM64_LD_HAS_FIX_ERRATUM_843419="y";
|
|
||||||
ARM64_PAGE_SHIFT="12";
|
|
||||||
ARM64_PA_BITS="48";
|
|
||||||
ARM64_PA_BITS_48="y";
|
|
||||||
ARM64_TAGGED_ADDR_ABI="y";
|
|
||||||
ARM64_VA_BITS="39";
|
|
||||||
ARM64_VA_BITS_39="y";
|
|
||||||
ARM_AMBA="y";
|
|
||||||
ARM_ARCH_TIMER="y";
|
|
||||||
ARM_ARCH_TIMER_EVTSTREAM="y";
|
|
||||||
ARM_GIC="y";
|
|
||||||
ARM_GIC_V2M="y";
|
|
||||||
ARM_GIC_V3="y";
|
|
||||||
ARM_GIC_V3_ITS="y";
|
|
||||||
ARM_GIC_V3_ITS_PCI="y";
|
|
||||||
ARM_MEDIATEK_CPUFREQ="y";
|
|
||||||
ARM_PMU="y";
|
|
||||||
ARM_PMUV3="y";
|
|
||||||
ARM_PSCI_FW="y";
|
|
||||||
ATA="y";
|
|
||||||
AUDIT_ARCH_COMPAT_GENERIC="y";
|
|
||||||
BLK_DEV_LOOP="y";
|
|
||||||
BLK_DEV_SD="y";
|
|
||||||
BLK_MQ_PCI="y";
|
|
||||||
BLK_PM="y";
|
|
||||||
BLOCK_NOTIFIERS="y";
|
|
||||||
BSD_PROCESS_ACCT="y";
|
|
||||||
BSD_PROCESS_ACCT_V3="y";
|
|
||||||
BUFFER_HEAD="y";
|
|
||||||
BUILTIN_RETURN_ADDRESS_STRIPS_PAC="y";
|
|
||||||
CC_HAVE_SHADOW_CALL_STACK="y";
|
|
||||||
CC_HAVE_STACKPROTECTOR_SYSREG="y";
|
|
||||||
#CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5";
|
|
||||||
CC_NO_ARRAY_BOUNDS="y";
|
|
||||||
CLKSRC_MMIO="y";
|
|
||||||
CLONE_BACKWARDS="y";
|
|
||||||
CMDLINE_OVERRIDE="y";
|
|
||||||
COMMON_CLK="y";
|
|
||||||
COMMON_CLK_MEDIATEK="y";
|
|
||||||
COMMON_CLK_MT7981="y";
|
|
||||||
COMMON_CLK_MT7981_ETHSYS="y";
|
|
||||||
COMMON_CLK_MT7986="y";
|
|
||||||
COMMON_CLK_MT7986_ETHSYS="y";
|
|
||||||
COMMON_CLK_MT7988="y";
|
|
||||||
COMPACT_UNEVICTABLE_DEFAULT="1";
|
|
||||||
CONFIGFS_FS="y";
|
|
||||||
CONSOLE_LOGLEVEL_DEFAULT="15";
|
|
||||||
CONTEXT_TRACKING="y";
|
|
||||||
CONTEXT_TRACKING_IDLE="y";
|
|
||||||
CPU_FREQ="y";
|
|
||||||
CPU_FREQ_DEFAULT_GOV_USERSPACE="y";
|
|
||||||
CPU_FREQ_GOV_ATTR_SET="y";
|
|
||||||
CPU_FREQ_GOV_COMMON="y";
|
|
||||||
CPU_FREQ_GOV_CONSERVATIVE="y";
|
|
||||||
CPU_FREQ_GOV_ONDEMAND="y";
|
|
||||||
CPU_FREQ_GOV_PERFORMANCE="y";
|
|
||||||
CPU_FREQ_GOV_POWERSAVE="y";
|
|
||||||
CPU_FREQ_GOV_SCHEDUTIL="y";
|
|
||||||
CPU_FREQ_GOV_USERSPACE="y";
|
|
||||||
CPU_FREQ_STAT="y";
|
|
||||||
CPU_LITTLE_ENDIAN="y";
|
|
||||||
CPU_RMAP="y";
|
|
||||||
CPU_THERMAL="y";
|
|
||||||
CRC16="y";
|
|
||||||
CRC_CCITT="y";
|
|
||||||
CRYPTO_AES_ARM64="y";
|
|
||||||
CRYPTO_AES_ARM64_CE="y";
|
|
||||||
CRYPTO_AES_ARM64_CE_BLK="y";
|
|
||||||
CRYPTO_AES_ARM64_CE_CCM="y";
|
|
||||||
CRYPTO_CMAC="y";
|
|
||||||
CRYPTO_CRC32="y";
|
|
||||||
CRYPTO_CRC32C="y";
|
|
||||||
CRYPTO_CRYPTD="y";
|
|
||||||
CRYPTO_DEFLATE="y";
|
|
||||||
CRYPTO_DRBG="y";
|
|
||||||
CRYPTO_DRBG_HMAC="y";
|
|
||||||
CRYPTO_DRBG_MENU="y";
|
|
||||||
CRYPTO_ECB="y";
|
|
||||||
CRYPTO_ECC="y";
|
|
||||||
CRYPTO_ECDH="y";
|
|
||||||
CRYPTO_GHASH_ARM64_CE="y";
|
|
||||||
CRYPTO_HASH_INFO="y";
|
|
||||||
CRYPTO_HMAC="y";
|
|
||||||
CRYPTO_JITTERENTROPY="y";
|
|
||||||
CRYPTO_LIB_BLAKE2S_GENERIC="y";
|
|
||||||
CRYPTO_LIB_GF128MUL="y";
|
|
||||||
CRYPTO_LIB_SHA1="y";
|
|
||||||
CRYPTO_LIB_SHA256="y";
|
|
||||||
CRYPTO_LIB_UTILS="y";
|
|
||||||
CRYPTO_LZO="y";
|
|
||||||
CRYPTO_RNG="y";
|
|
||||||
CRYPTO_RNG2="y";
|
|
||||||
CRYPTO_RNG_DEFAULT="y";
|
|
||||||
CRYPTO_SHA256="y";
|
|
||||||
CRYPTO_SHA256_ARM64="y";
|
|
||||||
CRYPTO_SHA2_ARM64_CE="y";
|
|
||||||
CRYPTO_SHA3="y";
|
|
||||||
CRYPTO_SHA512="y";
|
|
||||||
CRYPTO_SM4="y";
|
|
||||||
CRYPTO_SM4_ARM64_CE_BLK="y";
|
|
||||||
CRYPTO_SM4_ARM64_CE_CCM="y";
|
|
||||||
CRYPTO_SM4_ARM64_CE_GCM="y";
|
|
||||||
CRYPTO_ZSTD="y";
|
|
||||||
DCACHE_WORD_ACCESS="y";
|
|
||||||
#DEBUG_INFO="y";
|
|
||||||
DEBUG_MISC="y";
|
|
||||||
DIMLIB="y";
|
|
||||||
DMADEVICES="y";
|
|
||||||
DMATEST="y";
|
|
||||||
DMA_BOUNCE_UNALIGNED_KMALLOC="y";
|
|
||||||
DMA_DIRECT_REMAP="y";
|
|
||||||
DMA_ENGINE="y";
|
|
||||||
DMA_ENGINE_RAID="y";
|
|
||||||
DMA_OF="y";
|
|
||||||
DMA_VIRTUAL_CHANNELS="y";
|
|
||||||
DTC="y";
|
|
||||||
EDAC_SUPPORT="y";
|
|
||||||
EINT_MTK="y";
|
|
||||||
EXCLUSIVE_SYSTEM_RAM="y";
|
|
||||||
EXT4_FS="y";
|
|
||||||
F2FS_FS="y";
|
|
||||||
FIXED_PHY="y";
|
|
||||||
FIX_EARLYCON_MEM="y";
|
|
||||||
FRAME_POINTER="y";
|
|
||||||
FS_IOMAP="y";
|
|
||||||
FS_MBCACHE="y";
|
|
||||||
FUNCTION_ALIGNMENT="4";
|
|
||||||
FUNCTION_ALIGNMENT_4B="y";
|
|
||||||
FWNODE_MDIO="y";
|
|
||||||
FW_LOADER_PAGED_BUF="y";
|
|
||||||
#FW_LOADER_SYSFS="y";
|
|
||||||
#GCC11_NO_ARRAY_BOUNDS="y";
|
|
||||||
#GCC_ASM_GOTO_OUTPUT_WORKAROUND="y";
|
|
||||||
GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS="y";
|
|
||||||
GENERIC_ALLOCATOR="y";
|
|
||||||
GENERIC_ARCH_TOPOLOGY="y";
|
|
||||||
GENERIC_BUG="y";
|
|
||||||
GENERIC_BUG_RELATIVE_POINTERS="y";
|
|
||||||
GENERIC_CLOCKEVENTS="y";
|
|
||||||
GENERIC_CLOCKEVENTS_BROADCAST="y";
|
|
||||||
GENERIC_CPU_AUTOPROBE="y";
|
|
||||||
GENERIC_CPU_VULNERABILITIES="y";
|
|
||||||
GENERIC_CSUM="y";
|
|
||||||
GENERIC_EARLY_IOREMAP="y";
|
|
||||||
GENERIC_GETTIMEOFDAY="y";
|
|
||||||
GENERIC_IDLE_POLL_SETUP="y";
|
|
||||||
GENERIC_IOREMAP="y";
|
|
||||||
GENERIC_IRQ_EFFECTIVE_AFF_MASK="y";
|
|
||||||
GENERIC_IRQ_SHOW="y";
|
|
||||||
GENERIC_IRQ_SHOW_LEVEL="y";
|
|
||||||
GENERIC_LIB_DEVMEM_IS_ALLOWED="y";
|
|
||||||
GENERIC_MSI_IRQ="y";
|
|
||||||
GENERIC_PCI_IOMAP="y";
|
|
||||||
GENERIC_PHY="y";
|
|
||||||
GENERIC_PINCONF="y";
|
|
||||||
GENERIC_PINCTRL_GROUPS="y";
|
|
||||||
GENERIC_PINMUX_FUNCTIONS="y";
|
|
||||||
GENERIC_SCHED_CLOCK="y";
|
|
||||||
GENERIC_SMP_IDLE_THREAD="y";
|
|
||||||
GENERIC_STRNCPY_FROM_USER="y";
|
|
||||||
GENERIC_STRNLEN_USER="y";
|
|
||||||
GENERIC_TIME_VSYSCALL="y";
|
|
||||||
GLOB="y";
|
|
||||||
GPIO_CDEV="y";
|
|
||||||
GPIO_WATCHDOG="y";
|
|
||||||
GPIO_WATCHDOG_ARCH_INITCALL="y";
|
|
||||||
GRO_CELLS="y";
|
|
||||||
HARDIRQS_SW_RESEND="y";
|
|
||||||
HAS_DMA="y";
|
|
||||||
HAS_IOMEM="y";
|
|
||||||
HAS_IOPORT="y";
|
|
||||||
HAS_IOPORT_MAP="y";
|
|
||||||
HWMON="y";
|
|
||||||
HW_RANDOM="y";
|
|
||||||
HW_RANDOM_MTK="y";
|
|
||||||
I2C="y";
|
|
||||||
I2C_BOARDINFO="y";
|
|
||||||
I2C_CHARDEV="y";
|
|
||||||
I2C_MT65XX="y";
|
|
||||||
ICPLUS_PHY="y";
|
|
||||||
ILLEGAL_POINTER_VALUE="0xdead000000000000";
|
|
||||||
#INITRAMFS_SOURCE="""";
|
|
||||||
IRQCHIP="y";
|
|
||||||
IRQ_DOMAIN="y";
|
|
||||||
IRQ_DOMAIN_HIERARCHY="y";
|
|
||||||
IRQ_FORCED_THREADING="y";
|
|
||||||
IRQ_TIME_ACCOUNTING="y";
|
|
||||||
IRQ_WORK="y";
|
|
||||||
JBD2="y";
|
|
||||||
JUMP_LABEL="y";
|
|
||||||
LEDS_PWM="y";
|
|
||||||
LEDS_SMARTRG_LED="y";
|
|
||||||
LIBFDT="y";
|
|
||||||
LOCK_DEBUGGING_SUPPORT="y";
|
|
||||||
LOCK_SPIN_ON_OWNER="y";
|
|
||||||
LZO_COMPRESS="y";
|
|
||||||
LZO_DECOMPRESS="y";
|
|
||||||
MAGIC_SYSRQ="y";
|
|
||||||
MAXLINEAR_GPHY="y";
|
|
||||||
MDIO_BUS="y";
|
|
||||||
MDIO_DEVICE="y";
|
|
||||||
MDIO_DEVRES="y";
|
|
||||||
MEDIATEK_2P5GE_PHY="y";
|
|
||||||
MEDIATEK_GE_PHY="y";
|
|
||||||
MEDIATEK_GE_SOC_PHY="y";
|
|
||||||
MEDIATEK_WATCHDOG="y";
|
|
||||||
MESSAGE_LOGLEVEL_DEFAULT="7";
|
|
||||||
MFD_SYSCON="y";
|
|
||||||
MIGRATION="y";
|
|
||||||
MMC="y";
|
|
||||||
MMC_BLOCK="y";
|
|
||||||
MMC_CQHCI="y";
|
|
||||||
MMC_MTK="y";
|
|
||||||
MMU_LAZY_TLB_REFCOUNT="y";
|
|
||||||
MODULES_TREE_LOOKUP="y";
|
|
||||||
MODULES_USE_ELF_RELA="y";
|
|
||||||
MTD_NAND_CORE="y";
|
|
||||||
MTD_NAND_ECC="y";
|
|
||||||
MTD_NAND_ECC_MEDIATEK="y";
|
|
||||||
MTD_NAND_ECC_SW_HAMMING="y";
|
|
||||||
MTD_NAND_MTK="y";
|
|
||||||
MTD_NAND_MTK_BMT="y";
|
|
||||||
MTD_PARSER_TRX="y";
|
|
||||||
MTD_RAW_NAND="y";
|
|
||||||
MTD_SPI_NAND="y";
|
|
||||||
MTD_SPI_NOR="y";
|
|
||||||
MTD_SPLIT_FIRMWARE="y";
|
|
||||||
MTD_SPLIT_FIT_FW="y";
|
|
||||||
MTD_UBI="y";
|
|
||||||
MTD_UBI_BEB_LIMIT="20";
|
|
||||||
MTD_UBI_BLOCK="y";
|
|
||||||
MTD_UBI_FASTMAP="y";
|
|
||||||
MTD_UBI_NVMEM="y";
|
|
||||||
MTD_UBI_WL_THRESHOLD="4096";
|
|
||||||
MTK_CPUX_TIMER="y";
|
|
||||||
MTK_HSDMA="y";
|
|
||||||
MTK_INFRACFG="y";
|
|
||||||
MTK_LVTS_THERMAL="y";
|
|
||||||
MTK_LVTS_THERMAL_DEBUGFS="y";
|
|
||||||
MTK_PMIC_WRAP="y";
|
|
||||||
MTK_REGULATOR_COUPLER="y";
|
|
||||||
MTK_SCPSYS="y";
|
|
||||||
MTK_SCPSYS_PM_DOMAINS="y";
|
|
||||||
MTK_SOC_THERMAL="y";
|
|
||||||
MTK_THERMAL="y";
|
|
||||||
MTK_TIMER="y";
|
|
||||||
MUTEX_SPIN_ON_OWNER="y";
|
|
||||||
NEED_DMA_MAP_STATE="y";
|
|
||||||
NEED_SG_DMA_LENGTH="y";
|
|
||||||
NET_DEVLINK="y";
|
|
||||||
NET_DSA="y";
|
|
||||||
NET_DSA_MT7530="y";
|
|
||||||
NET_DSA_MT7530_MDIO="y";
|
|
||||||
NET_DSA_MT7530_MMIO="y";
|
|
||||||
NET_DSA_TAG_MTK="y";
|
|
||||||
#NET_EGRESS="y";
|
|
||||||
NET_FLOW_LIMIT="y";
|
|
||||||
#NET_INGRESS="y";
|
|
||||||
NET_MEDIATEK_SOC="y";
|
|
||||||
NET_MEDIATEK_SOC_WED="y";
|
|
||||||
NET_SELFTESTS="y";
|
|
||||||
NET_SWITCHDEV="y";
|
|
||||||
NET_VENDOR_MEDIATEK="y";
|
|
||||||
#NET_XGRESS="y";
|
|
||||||
NLS="y";
|
|
||||||
NO_HZ_COMMON="y";
|
|
||||||
NO_HZ_IDLE="y";
|
|
||||||
NR_CPUS="4";
|
|
||||||
NVMEM="y";
|
|
||||||
NVMEM_BLOCK="y";
|
|
||||||
NVMEM_LAYOUTS="y";
|
|
||||||
NVMEM_LAYOUT_ADTRAN="y";
|
|
||||||
NVMEM_MTK_EFUSE="y";
|
|
||||||
NVMEM_SYSFS="y";
|
|
||||||
OF="y";
|
|
||||||
OF_ADDRESS="y";
|
|
||||||
OF_DYNAMIC="y";
|
|
||||||
OF_EARLY_FLATTREE="y";
|
|
||||||
OF_FLATTREE="y";
|
|
||||||
OF_GPIO="y";
|
|
||||||
OF_IRQ="y";
|
|
||||||
OF_KOBJ="y";
|
|
||||||
OF_MDIO="y";
|
|
||||||
OF_OVERLAY="y";
|
|
||||||
OF_RESOLVE="y";
|
|
||||||
PADATA="y";
|
|
||||||
PAGE_POOL="y";
|
|
||||||
PAGE_POOL_STATS="y";
|
|
||||||
PAGE_SIZE_LESS_THAN_256KB="y";
|
|
||||||
PAGE_SIZE_LESS_THAN_64KB="y";
|
|
||||||
#PAHOLE_HAS_LANG_EXCLUDE="y";
|
|
||||||
PARTITION_PERCPU="y";
|
|
||||||
PCI="y";
|
|
||||||
PCIEAER="y";
|
|
||||||
PCIEASPM="y";
|
|
||||||
PCIEASPM_PERFORMANCE="y";
|
|
||||||
PCIEPORTBUS="y";
|
|
||||||
PCIE_MEDIATEK_GEN3="y";
|
|
||||||
PCIE_PME="y";
|
|
||||||
PCI_DEBUG="y";
|
|
||||||
PCI_DOMAINS="y";
|
|
||||||
PCI_DOMAINS_GENERIC="y";
|
|
||||||
PCI_MSI="y";
|
|
||||||
PCS_MTK_LYNXI="y";
|
|
||||||
PCS_MTK_USXGMII="y";
|
|
||||||
PERF_EVENTS="y";
|
|
||||||
PER_VMA_LOCK="y";
|
|
||||||
PGTABLE_LEVELS="3";
|
|
||||||
PHYLIB="y";
|
|
||||||
PHYLIB_LEDS="y";
|
|
||||||
PHYLINK="y";
|
|
||||||
PHYS_ADDR_T_64BIT="y";
|
|
||||||
PHY_MTK_TPHY="y";
|
|
||||||
PHY_MTK_XFI_TPHY="y";
|
|
||||||
PHY_MTK_XSPHY="y";
|
|
||||||
PINCTRL="y";
|
|
||||||
PINCTRL_MT7981="y";
|
|
||||||
PINCTRL_MT7986="y";
|
|
||||||
PINCTRL_MT7988="y";
|
|
||||||
PINCTRL_MTK_MOORE="y";
|
|
||||||
PINCTRL_MTK_V2="y";
|
|
||||||
PM="y";
|
|
||||||
PM_CLK="y";
|
|
||||||
PM_GENERIC_DOMAINS="y";
|
|
||||||
PM_GENERIC_DOMAINS_OF="y";
|
|
||||||
PM_OPP="y";
|
|
||||||
POLYNOMIAL="y";
|
|
||||||
POSIX_CPU_TIMERS_TASK_WORK="y";
|
|
||||||
POWER_RESET="y";
|
|
||||||
POWER_RESET_SYSCON="y";
|
|
||||||
POWER_SUPPLY="y";
|
|
||||||
PREEMPT_NONE_BUILD="y";
|
|
||||||
PRINTK_TIME="y";
|
|
||||||
PSTORE="y";
|
|
||||||
PSTORE_COMPRESS="y";
|
|
||||||
PSTORE_CONSOLE="y";
|
|
||||||
PSTORE_PMSG="y";
|
|
||||||
PSTORE_RAM="y";
|
|
||||||
PTP_1588_CLOCK_OPTIONAL="y";
|
|
||||||
PWM="y";
|
|
||||||
PWM_MEDIATEK="y";
|
|
||||||
PWM_SYSFS="y";
|
|
||||||
QUEUED_RWLOCKS="y";
|
|
||||||
QUEUED_SPINLOCKS="y";
|
|
||||||
RANDSTRUCT_NONE="y";
|
|
||||||
RAS="y";
|
|
||||||
RATIONAL="y";
|
|
||||||
REALTEK_PHY="y";
|
|
||||||
REED_SOLOMON="y";
|
|
||||||
REED_SOLOMON_DEC8="y";
|
|
||||||
REED_SOLOMON_ENC8="y";
|
|
||||||
REGMAP="y";
|
|
||||||
REGMAP_I2C="y";
|
|
||||||
REGMAP_MMIO="y";
|
|
||||||
REGULATOR="y";
|
|
||||||
REGULATOR_FIXED_VOLTAGE="y";
|
|
||||||
REGULATOR_MT6380="y";
|
|
||||||
REGULATOR_RT5190A="y";
|
|
||||||
RESET_CONTROLLER="y";
|
|
||||||
RESET_TI_SYSCON="y";
|
|
||||||
RFS_ACCEL="y";
|
|
||||||
RODATA_FULL_DEFAULT_ENABLED="y";
|
|
||||||
RPS="y";
|
|
||||||
RTC_CLASS="y";
|
|
||||||
RTC_DRV_MT7622="y";
|
|
||||||
RTC_I2C_AND_SPI="y";
|
|
||||||
RWSEM_SPIN_ON_OWNER="y";
|
|
||||||
SCHED_MC="y";
|
|
||||||
SCSI="y";
|
|
||||||
SCSI_COMMON="y";
|
|
||||||
SERIAL_8250_FSL="y";
|
|
||||||
SERIAL_8250_MT6577="y";
|
|
||||||
SERIAL_8250_NR_UARTS="3";
|
|
||||||
SERIAL_8250_RUNTIME_UARTS="3";
|
|
||||||
SERIAL_DEV_BUS="y";
|
|
||||||
SERIAL_DEV_CTRL_TTYPORT="y";
|
|
||||||
SERIAL_MCTRL_GPIO="y";
|
|
||||||
SERIAL_OF_PLATFORM="y";
|
|
||||||
SGL_ALLOC="y";
|
|
||||||
SG_POOL="y";
|
|
||||||
SMP="y";
|
|
||||||
SOCK_RX_QUEUE_MAPPING="y";
|
|
||||||
SOFTIRQ_ON_OWN_STACK="y";
|
|
||||||
SPARSEMEM="y";
|
|
||||||
SPARSEMEM_EXTREME="y";
|
|
||||||
SPARSEMEM_VMEMMAP="y";
|
|
||||||
SPARSEMEM_VMEMMAP_ENABLE="y";
|
|
||||||
SPARSE_IRQ="y";
|
|
||||||
SPI="y";
|
|
||||||
SPI_DYNAMIC="y";
|
|
||||||
SPI_MASTER="y";
|
|
||||||
SPI_MEM="y";
|
|
||||||
SPI_MT65XX="y";
|
|
||||||
SPI_MTK_SNFI="y";
|
|
||||||
#SQUASHFS_DECOMP_MULTI_PERCPU="y";
|
|
||||||
SWIOTLB="y";
|
|
||||||
SWPHY="y";
|
|
||||||
SYSCTL_EXCEPTION_TRACE="y";
|
|
||||||
THERMAL="y";
|
|
||||||
THERMAL_DEFAULT_GOV_STEP_WISE="y";
|
|
||||||
THERMAL_EMERGENCY_POWEROFF_DELAY_MS="0";
|
|
||||||
THERMAL_GOV_BANG_BANG="y";
|
|
||||||
THERMAL_GOV_FAIR_SHARE="y";
|
|
||||||
THERMAL_GOV_STEP_WISE="y";
|
|
||||||
THERMAL_GOV_USER_SPACE="y";
|
|
||||||
THERMAL_HWMON="y";
|
|
||||||
THERMAL_OF="y";
|
|
||||||
THERMAL_WRITABLE_TRIPS="y";
|
|
||||||
THREAD_INFO_IN_TASK="y";
|
|
||||||
TICK_CPU_ACCOUNTING="y";
|
|
||||||
TIMER_OF="y";
|
|
||||||
TIMER_PROBE="y";
|
|
||||||
TRACE_IRQFLAGS_NMI_SUPPORT="y";
|
|
||||||
TREE_RCU="y";
|
|
||||||
TREE_SRCU="y";
|
|
||||||
UBIFS_FS="y";
|
|
||||||
UIMAGE_FIT_BLK="y";
|
|
||||||
USB_SUPPORT="y";
|
|
||||||
VMAP_STACK="y";
|
|
||||||
WATCHDOG_CORE="y";
|
|
||||||
WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC="y";
|
|
||||||
WATCHDOG_PRETIMEOUT_GOV="y";
|
|
||||||
WATCHDOG_PRETIMEOUT_GOV_PANIC="y";
|
|
||||||
WATCHDOG_PRETIMEOUT_GOV_SEL="m";
|
|
||||||
WATCHDOG_SYSFS="y";
|
|
||||||
XPS="y";
|
|
||||||
XXHASH="y";
|
|
||||||
ZLIB_DEFLATE="y";
|
|
||||||
ZLIB_INFLATE="y";
|
|
||||||
ZONE_DMA32="y";
|
|
||||||
ZSTD_COMMON="y";
|
|
||||||
ZSTD_COMPRESS="y";
|
|
||||||
ZSTD_DECOMPRESS="y";
|
|
||||||
# from DEVICE_PACKAGES in the openwrt_one section of
|
|
||||||
# openwrt's ./target/linux/mediatek/image/filogic.mk:
|
|
||||||
# chop off the 'kmod-' prefix and search for 'KernelPackage/...'
|
|
||||||
# in ./package/kernel/linux/modules/*.mk, and remember to add
|
|
||||||
# modules to kmodloader targets below
|
|
||||||
AIR_EN8811H_PHY="m";
|
|
||||||
RTC_DRV_PCF8563="m";
|
|
||||||
NVME_CORE="m";
|
|
||||||
BLK_DEV_NVME="m";
|
|
||||||
NVME_MULTIPATH="n";
|
|
||||||
NVME_HWMON="y";
|
|
||||||
# ???
|
|
||||||
AQUANTIA_PHY="m";
|
|
||||||
MT798X_WMAC="y";
|
|
||||||
} // lib.optionalAttrs (config.system.service ? watchdog) {
|
|
||||||
RALINK_WDT = "y"; # watchdog
|
|
||||||
MT7621_WDT = "y"; # or it might be this one
|
|
||||||
};
|
|
||||||
conditionalConfig = {
|
|
||||||
WLAN = {
|
|
||||||
MT7915E = "m";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
boot = {
|
|
||||||
commandLine = [ "console=ttyS0,115200" ];
|
|
||||||
tftp = {
|
|
||||||
# Should be a segment of free RAM, where the tftp artifact
|
|
||||||
# can be stored before unpacking it to the 'hardware.loadAddress'
|
|
||||||
# The 'hardware.loadAddress' is 0x44000000, and the bootlog
|
|
||||||
# suggests it loads the fit to 0x46000000
|
|
||||||
loadAddress = lim.parseInt "0x46000000";
|
|
||||||
};
|
|
||||||
imageFormat = "fit";
|
|
||||||
loader.fit.enable = lib.mkDefault true; # override this if you are building tftpboot
|
|
||||||
};
|
|
||||||
rootfsType = lib.mkDefault "ubifs"; # override this if you are building tftpboot
|
|
||||||
filesystem =
|
|
||||||
let inherit (pkgs.pseudofile) dir symlink;
|
|
||||||
in
|
|
||||||
dir {
|
|
||||||
lib = dir {
|
|
||||||
firmware = dir {
|
|
||||||
mediatek = symlink mediatek-firmware;
|
|
||||||
airoha = symlink airoha-firmware;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
hardware =
|
|
||||||
let
|
|
||||||
phy = pkgs.kmodloader.override {
|
|
||||||
targets = [
|
|
||||||
"air_en8811h"
|
|
||||||
];
|
|
||||||
inherit (config.system.outputs) kernel;
|
|
||||||
};
|
|
||||||
mac80211 = pkgs.kmodloader.override {
|
|
||||||
targets = [
|
|
||||||
"mt7915e"
|
|
||||||
"rtc-pcf8563"
|
|
||||||
"nvme_core"
|
|
||||||
"nvme"
|
|
||||||
#"mt7996e"
|
|
||||||
"aquantia"
|
|
||||||
];
|
|
||||||
inherit (config.system.outputs) kernel;
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
# from OEM bootlog
|
|
||||||
# Creating 4 MTD partitions on "spi0.0":
|
|
||||||
# 0x000000000000-0x000000040000 : "bl2-nor"
|
|
||||||
# 0x000000040000-0x000000100000 : "factory"
|
|
||||||
# 0x000000100000-0x000000180000 : "fip-nor"
|
|
||||||
# 0x000000180000-0x000000e00000 : "recovery"
|
|
||||||
# spi-nand spi1.1: calibration result: 0x3
|
|
||||||
# spi-nand spi1.1: Winbond SPI NAND was found.
|
|
||||||
# spi-nand spi1.1: 256 MiB, block size: 128 KiB, page size: 2048, OOB size: 128
|
|
||||||
# 2 fixed-partitions partitions found on MTD device spi1.1
|
|
||||||
# Creating 2 MTD partitions on "spi1.1":
|
|
||||||
# 0x000000000000-0x000000100000 : "bl2"
|
|
||||||
# 0x000000100000-0x000010000000 : "ubi"
|
|
||||||
|
|
||||||
flash = {
|
|
||||||
# from the OEM bootlog:
|
|
||||||
# ## Checking Image at 46000000 ...
|
|
||||||
# FIT image found
|
|
||||||
# FIT description: ARM64 OpenWrt FIT (Flattened Image Tree)
|
|
||||||
# Image 0 (kernel-1)
|
|
||||||
# Description: ARM64 OpenWrt Linux-6.6.57
|
|
||||||
# Type: Kernel Image
|
|
||||||
# Compression: gzip compressed
|
|
||||||
# Data Start: 0x46001000
|
|
||||||
# Data Size: 5751840 Bytes = 5.5 MiB
|
|
||||||
# Architecture: AArch64
|
|
||||||
# OS: Linux
|
|
||||||
# Load Address: 0x44000000
|
|
||||||
# Entry Point: 0x44000000
|
|
||||||
|
|
||||||
address = lim.parseInt "0x44000000";
|
|
||||||
size = lim.parseInt "0xf60000";
|
|
||||||
# /proc/mtd on a running system:
|
|
||||||
# dev: size erasesize name
|
|
||||||
# mtd0: 00040000 00010000 "bl2-nor"
|
|
||||||
# mtd1: 000c0000 00010000 "factory"
|
|
||||||
# mtd2: 00080000 00010000 "fip-nor"
|
|
||||||
# mtd3: 00c80000 00010000 "recovery"
|
|
||||||
# mtd4: 00100000 00020000 "bl2"
|
|
||||||
# mtd5: 0ff00000 00020000 "ubi"
|
|
||||||
eraseBlockSize = 65536;
|
|
||||||
};
|
|
||||||
ubi = {
|
|
||||||
# TODO taken from belkin-rt3200, to review
|
|
||||||
minIOSize = "2048";
|
|
||||||
logicalEraseBlockSize = "126976";
|
|
||||||
physicalEraseBlockSize = "131072";
|
|
||||||
maxLEBcount = "1024"; # guessing
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
defaultOutput = "ubimage";
|
|
||||||
loadAddress = lim.parseInt "0x44000000";
|
|
||||||
entryPoint = lim.parseInt "0x44000000";
|
|
||||||
# TODO AFAICT this should be 2048, but I got 'FIT: image rootfs-1 start not aligned to page boundaries' with that...
|
|
||||||
#alignment = 2048;
|
|
||||||
alignment = 4096;
|
|
||||||
rootDevice = "ubi0:liminix";
|
|
||||||
dts = {
|
|
||||||
src = "${openwrt.src}/target/linux/mediatek/dts/mt7981b-openwrt-one.dts";
|
|
||||||
includePaths = [
|
|
||||||
"${openwrt.src}/target/linux/mediatek/dts"
|
|
||||||
"${config.system.outputs.kernel.modulesupport}/arch/arm64/boot/dts/mediatek/"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
networkInterfaces =
|
|
||||||
let
|
|
||||||
inherit (config.system.service.network) link;
|
|
||||||
in rec {
|
|
||||||
eth0 = link.build {
|
|
||||||
ifname = "eth0";
|
|
||||||
dependencies = [ phy ];
|
|
||||||
};
|
|
||||||
eth1 = link.build { ifname = "eth1"; };
|
|
||||||
|
|
||||||
wlan0 = link.build {
|
|
||||||
ifname = "wlan0";
|
|
||||||
dependencies = [ mac80211 ];
|
|
||||||
};
|
|
||||||
wlan1 = link.build {
|
|
||||||
ifname = "wlan1";
|
|
||||||
dependencies = [ mac80211 ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
@ -23,7 +23,7 @@
|
|||||||
hash-2 {
|
hash-2 {
|
||||||
algo = "sha1";
|
algo = "sha1";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
fdt-1 {
|
fdt-1 {
|
||||||
description = "Flattened Device Tree blob";
|
description = "Flattened Device Tree blob";
|
||||||
// data = /incbin/("./target.dtb");
|
// data = /incbin/("./target.dtb");
|
||||||
@ -40,12 +40,8 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
// The OpenWRT One wants this to be 'config-1' specifically. For now it's
|
default = "conf-1";
|
||||||
// easy to just choose that, if there's another device that has a
|
conf-1 {
|
||||||
// different restriction then we should probably add 'if not found
|
|
||||||
// select default' logic and/or make this configurable.
|
|
||||||
default = "config-1";
|
|
||||||
config-1 {
|
|
||||||
description = "Boot Linux kernel with FDT blob";
|
description = "Boot Linux kernel with FDT blob";
|
||||||
kernel = "kernel";
|
kernel = "kernel";
|
||||||
fdt = "fdt-1";
|
fdt = "fdt-1";
|
||||||
|
@ -71,7 +71,7 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
_VARS
|
_VARS
|
||||||
mkimage -f mkimage.its -E ${lib.optionalString (alignment != null) "-B 0x${lib.toHexString alignment}"} kernel.uimage
|
mkimage -f mkimage.its ${lib.optionalString (alignment != null) "-B 0x${lib.toHexString alignment}"} kernel.uimage
|
||||||
mkimage -l kernel.uimage
|
mkimage -l kernel.uimage
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user