Skip to content

Instantly share code, notes, and snippets.

@flabbergast
Last active April 27, 2018 21:39
Show Gist options
  • Save flabbergast/8153ea954748d8d891dd0c141cbb892c to your computer and use it in GitHub Desktop.
Save flabbergast/8153ea954748d8d891dd0c141cbb892c to your computer and use it in GitHub Desktop.

Notes about APU2C4 from PC engines

APU2C4 is my main home router. This note is mostly about how to compile and use a custom linux kernel on it, with Alpine Linux.

Fluff

I like it very much, and (after a year and a half of using it) I still think it was the best choice for a home router/firewall; certainly worth the buck. It's extremely well built (I think), with good choices of components (in both what hardware to put in, and what parts to use). The features that are not that common to come by in other commercial (or open source/hardware for that matter) products which I appreciate a lot are:

  • RS232 console port (yay! I don't have to dig up some UART breakout and pinout diagrams to connect to a non-booting Pi or somesuch)
  • SATA (so no more USB/hub bottlenecks in hard drive access speed)
  • miniPCI express (so my choice of wifi card, and a fast mSATA drive)
  • hardware crypto on chip
  • x86_64 architecture (easier to deal with than various ARMs)
  • ECC RAM!!!
  • reasonably good documentation

I use it as a main firewall towards the outside, a wireless access point, and then in containers I have a NAS, logging and processing data from local environmental sensors, a database server, and a http server.

Most of the time the load is close to zero.

Currently I run linux on it (mainly because of the familiarity with the system and the awesome convenience of btrfs, not because I think it's the most secure).

(Don't get me wrong, I like ARM boards a lot, although admittedly more so the microcontroller end of the spectrum; and they give amazing bang for the buck; but... currently there either seems to be good support AND boards not that well suited for a router/firewall purpose (e.g. R-Pi or Beaglebones), OR basically no support (well, one linux distro, i.e. armbian) AND reasonably powerful boards (various Chinese Bananas and FriendlyArms and such). And, the EOL seems to be lightning fast, so maintaining one of these long-term is a pain.)

System setup

I run Alpine on my APU2 as the main system (with some other distros set up as LXC containers). The main reason for this is that Alpine can run basically from a ramdisk, the root filesystem is populated on boot with freshly unpacked packages, and then the local modifications are overlayed on this. The local mods are simply saved in a tar.gz file, and versioned. So there is no problem with hard crashes and/or power failures; the setup is easy to refresh and reproduce; and it cleanly boots to the last explicitly saved checkpoint.

I personally have /var on a rw-mounted partition, so some corruption here is possible.

Of course the stuff that runs in containers (various network services and such) don't enjoy that much protection...

This note is(was?) supposed mainly about custom kernel, so I want to explain how does Alpine Linux deal with kernel in this setup.

Basically, there are three files (which are pretty much independent of the rest of the system); they reside on the boot partition, usually in the /boot subdir. They are: vmlinuz-XXX, initramfs-XXX and modloop-XXX. XXX stands for the kernel flavor, e.g. hardened. Now, the first of these three is the actual linux kernel, the second one contains the initial ramdisk that the kernel mounts and runs when booting (which then prepares the main filesystem for Alpine), and the last file is a squashfs filesystem image with kernel modules and firmware (it gets mounted to /lib/modules and /lib/firmware).

So if one wants a custom kernel (but keep the rest of the Alpine Linux infrastructure), these three (and only these) need to be taken care of.

Why a custom kernel?

Well, the Alpine Linux kernel (as of writing this note) does have one big plus, namely the grsecurity patches. But it also have a couple of minuses as far as the APU2 board is concerned, namely that it doesn't enable ECC, doesn't apply AMD microcode updates, and Alpine doesn't have the correct infrastructure to set the wireless regulatory settings.

And, well, I wanted to be able to tweak the kernel options, and also build all the modules I use into the kernel, so that I can use it to boot into other linux distributions.

Instructions

Kernel

The compilation can be run on any linux machine (with the right "development" packages installed). It can be also run on the APU2 itself, and the kernel compilation wasn't as bad as I thought it would be - it took 2.5 hours, with just one core dedicated to the compilation.

I'll use KVER throughout the document to stand for 4.16.5 (which is the latest kernel version I did this with, and the shared files are for this version - probably usable with later versions, but not tested and guaranteed).

Get the kernel sources from kernel.org, and unpack them somewhere. Configure the kernel (make menuconfig or make nconfig). My config (saved using make savedefconfig) is here (for KVER).

The extra steps to take are:

  • to embed the wireless regulatory database, get the regulatory.db file from this official repo and place it where the kernel/compilation_process will find it (with my config it's expected to be in /lib/firmware (yes, absolute path).
  • the AMD microcode is also expected to be at /lib/firmware/amd-ucode - I normally get this by installing the distro-appropriate package on the host; usually it's a part of linux-firmware package.
  • the above two are configurable with the kernel options CONFIG_EXTRA_FIRMWARE and CONFIG_EXTRA_FIRMWARE_DIR.
  • Note: the above wifi stuff applies to KVER (and presumably above); the earlier kernels had a different mechanism to embed the wireless regulatory file into the kernel (not sure in which kernel version did the change happen). The old notes are in the Rubbish Bin section below. This all is just so that one can avoid using the crda thing and loading the regulatory stuff on-the-fly, and just be able to use iw reg set GB.

Compile the kernel (make), the result is in arch/x86/boot/bzImage (copy this to BOOT_PART/DIR/vmlinux-custom or something like that).

Remarks about my kernel config

How to use defconfig

I'm not sure this is the "correct" way of using a defconfig file (generated using make savedefconfig), but here it goes: I copy the defconfig file to arch/x86/configs/my_defconfig and then run make my_defconfig. This creates .config which is then used for compilation.

Watchdog

I do use the onboard watchdog, this is CONFIG_SP5100_TCO. However there apparently are two settings (modules) which prevent initialising the watchdog when loaded before the sp5100_tco: namely i2c_piix4 and ccp. The former is disabled in my config, and the latter (a crypto module) is compiled as a module, just to be able to check if the problem has magically disappeared (at some point in the future).

The information is from the forums. The recap is that this error:

sp5100_tco: I/O address 0x0cd6 already in use

means that i2c_piix4 needs to be unloaded. The following error:

sp5100_tco: failed to find MMIO address, giving up.

means that ccp needs to be unloaded. On the other hand, this dmesg output:

sp5100_tco: SP5100/SB800 TCO WatchDog Timer Driver v0.05
sp5100_tco: PCI Vendor ID: 0x1022, Device ID: 0x780b, Revision ID: 0x42
sp5100_tco: Using 0xfeb00000 for watchdog MMIO address
sp5100_tco: Last reboot was not triggered by watchdog.
sp5100_tco: initialized (0x00000000d5053ddf). heartbeat=60 sec (nowayout=0)

should mean that the hardware watchdog functions properly.

LEDs

There is CONFIG_LEDS_APU in KVER, but it didn't work for me (I think this bit in dmesg

Unknown PC Engines board: apu2

is from the leds_apu module.)

See below for getting the LEDs working.

Changes 4.15 -> 4.16

kvm-amd now needs to be compiled as a module as well. There is a new sub-option for kvm-amd which effectively requires the same status as (its dependency) ccp, even when it's turned off.

Modules

The standard command to copy the modules to the right place and depmod them is make modules_install. However this will copy the modules to /lib/modules/KERNEL_VERSION, which is not desirable if the goal is to package them into a modloop file to be used by Alpine. (Naturally, if you're doing this for use with some other distribution, the modules should end up in /lib/modules/KERNEL_VERSION on the root filesystem.)

So, to make a modloop file, create a dir modloop alongside linux-VER and inside linux-VER, run

make INSTALL_MOD_PATH=../modloop modules_install

This will "install" all the in-tree modules (with my config there are just two) into the correct place inside the modloop directory.

Out-of-tree modules

LEDs

Although the KVER kernel does have an LEDS_APU config parameter, the module did not work on my machine. There are sources for a kernel module to control the three LEDs on the APU, originals are here, linked also from the official support page. I have a local copy available at local src (see "Binaries" below). Unpack this alongside the linux-VER directory, cd into it and run make install - it will compile and install the module into the modloop dir.

GPIO

There are a couple of options now listed on the official support page. E.g. now there's an "official" userspace library.

However there is also a kernel module which makes the button accessible as a usual gpio in the sysfs tree, in /sys/class/gpio. I can't find the original source on the web, I have a local copy at local src, possibly it's from here. Please note the original author in the file; I've only updated it so that it compiles with the recent kernels.

Create the modloop file

The modloop file is then created by simply making a squashfs filesystem:

mksquashfs modloop/lib modloop-custom

The result is called modloop-custom, to be copied alongside vmlinux-custom. Note that we only create the squashfs image from the subdirs of the lib dir inside the modloop dir. This is how Alpine expects it to be.

(It does not currently matter what is the name of this file: the Alpine boot script simply attempts to mount all the files it finds on the boot partition and checks whether there's modules/$(uname -r) directory in it.)

By the way, if one would want to add some binary firmware blobs to be available for the kernel, just create modloop/lib/firmware dir and copy the files in there.

Initramfs

Since pretty much everything (except LEDs support) is compiled in, the initramfs may not be actually needed. It is needed on Alpine, because it performs quite a bit more than just loading modules, namely it prepares the root ramdisk.

I currently just use (butchered) Alpine's initramfs, with all the firmware and Alpine kernel's modules removed.

The procedure to do the butchering is:

  • create a dir into which it's going to be extracted: mkdir -p initramfs
  • copy an original initramfs there cp /path/to/initramfs-hardened initramfs.orig
  • change dir: cd initramfs
  • extract the existing image (into the current dir): zcat ../initramfs.orig | cpio -idmv
  • do the required butchering ... (e.g. rm -rf lib/{modules,firmware})
  • remove the original initramfs: rm ../initramfs.orig
  • repack the contents of the current dir as an initramfs: find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs-custom
  • copy the new initramfs alongside vmlinux-custom

Finishing up

Add a bootloader entry which loads the new kernel and initramfs. This depends on your bootloader; for syslinux my entry looks like this:

LABEL custom
MENU LABEL Alpine with custom kernel
KERNEL /boot/vmlinux-custom
INITRD /boot/initramfs-custom
APPEND console=ttyS0,115200n8

Binaries

The three "deploy" files discussed above, compiled by me, can be had at the deploy files links below. Maybe you find them useful - if your setup is sufficiently similar to mine, you won't have to compile everything yourself.

Note: I use the uloz.to service to share these (as well as the local src) files. Below are their sha256 sums, but you should perhaps not trust any binary files that some random person puts online. The contents of the local src archive is mostly text files, so you should inspect them. For the deploy files, you might really want to consider compiling the things yourself. But of course, I promise that my files have nothing malicious in them, and they were created exactly as described above.

Current version

local src 4.16.5 || deploy files 4.16.5

7e7d9b5d6b105dae40e84d6d5e47679c7891b138ffe4331d8a62cf7a0afa5b5a  deploy-4.16.5-custom.tar
8e69185597b863227bc6e78d461e39ef8c7ec366124b27284a70dbc98a48756f  src-4.16.5-custom.tar.gz

Old versions

local src 4.15.1 || deploy files 4.15.1

8ccfd41bf86713798df1f955b4ea439ea2c929a50c0e2f64bc2f2885c6d58a8e  deploy-4.15.1-custom.tar
08d1c978d707e6e4ff67ad261cc01813dfc5c45763880bcbc3e6091036626994  src-4.15.1-custom.tar.xz

Rubbish Bin

The old way of embedding wifi-reg-db is not working anymore. The (old) instructions here:

# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_DEFAULT_HOSTNAME="karres"
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_AUDIT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=18
CONFIG_CGROUPS=y
CONFIG_MEMCG=y
CONFIG_MEMCG_SWAP=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_RDMA=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CPUSETS=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
CONFIG_NAMESPACES=y
CONFIG_USER_NS=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_EXPERT=y
# CONFIG_COMPAT_BRK is not set
CONFIG_PROFILING=y
CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
CONFIG_CC_STACKPROTECTOR_STRONG=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_SMP=y
CONFIG_IOSF_MBI=y
CONFIG_CALGARY_IOMMU=y
CONFIG_SCHED_SMT=y
CONFIG_PREEMPT_VOLUNTARY=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
# CONFIG_MICROCODE_INTEL is not set
CONFIG_MICROCODE_AMD=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
CONFIG_NUMA=y
CONFIG_MEMORY_FAILURE=y
CONFIG_HWPOISON_INJECT=y
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
# CONFIG_MTRR_SANITIZER is not set
CONFIG_EFI=y
CONFIG_HZ_1000=y
CONFIG_KEXEC=y
CONFIG_CRASH_DUMP=y
CONFIG_HIBERNATION=y
CONFIG_PM_DEBUG=y
CONFIG_PM_TRACE_RTC=y
CONFIG_ACPI_DOCK=y
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCIEPORTBUS=y
CONFIG_HOTPLUG_PCI=y
CONFIG_HOTPLUG_PCI_SHPC=y
CONFIG_PCCARD=y
CONFIG_YENTA=y
CONFIG_BINFMT_MISC=y
CONFIG_IA32_EMULATION=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_TLS=y
CONFIG_XFRM_USER=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=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_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_DIAG is not set
CONFIG_TCP_CONG_ADVANCED=y
# CONFIG_TCP_CONG_BIC is not set
# CONFIG_TCP_CONG_WESTWOOD is not set
# CONFIG_TCP_CONG_HTCP is not set
CONFIG_TCP_MD5SIG=y
CONFIG_INET6_AH=y
CONFIG_INET6_ESP=y
CONFIG_NETLABEL=y
CONFIG_NETFILTER=y
CONFIG_BRIDGE_NETFILTER=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_IRC=y
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
CONFIG_NF_CONNTRACK_SIP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
CONFIG_NETFILTER_XT_TARGET_LOG=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_SECMARK=y
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_IPVS=y
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
CONFIG_NETFILTER_XT_MATCH_POLICY=y
CONFIG_NETFILTER_XT_MATCH_RECENT=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
CONFIG_IP_VS=y
CONFIG_IP_VS_IPV6=y
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_RR=y
CONFIG_IP_VS_NFCT=y
CONFIG_NF_CONNTRACK_IPV4=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_RPFILTER=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_NAT=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_IP_NF_TARGET_NETMAP=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_IP_NF_MANGLE=y
CONFIG_IP_NF_RAW=y
CONFIG_IP_NF_SECURITY=y
CONFIG_IP_NF_ARPTABLES=y
CONFIG_IP_NF_ARPFILTER=y
CONFIG_IP_NF_ARP_MANGLE=y
CONFIG_NF_CONNTRACK_IPV6=y
CONFIG_IP6_NF_MATCH_IPV6HEADER=y
CONFIG_IP6_NF_MATCH_RPFILTER=y
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_MANGLE=y
CONFIG_IP6_NF_RAW=y
CONFIG_IP6_NF_SECURITY=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
CONFIG_IP6_NF_TARGET_NPT=y
CONFIG_BRIDGE_NF_EBTABLES=y
CONFIG_BRIDGE=y
CONFIG_VLAN_8021Q=y
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_MULTIQ=y
CONFIG_NET_CLS_CGROUP=y
CONFIG_NET_EMATCH=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_L3_MASTER_DEV=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CFG80211=y
CONFIG_CFG80211_CERTIFICATION_ONUS=y
# CONFIG_CFG80211_REQUIRE_SIGNED_REGDB is not set
# CONFIG_CFG80211_CRDA_SUPPORT is not set
CONFIG_CFG80211_WEXT=y
CONFIG_MAC80211=y
CONFIG_RFKILL=y
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_EXTRA_FIRMWARE="amd-ucode/microcode_amd_fam15h.bin amd-ucode/microcode_amd_fam16h.bin regulatory.db"
CONFIG_DEBUG_DEVRES=y
CONFIG_CONNECTOR=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_SD=y
CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_SPI_ATTRS=y
# CONFIG_SCSI_LOWLEVEL is not set
CONFIG_ATA=y
CONFIG_SATA_AHCI=y
CONFIG_ATA_PIIX=y
CONFIG_PATA_AMD=y
CONFIG_PATA_OLDPIIX=y
CONFIG_PATA_SCH=y
CONFIG_MD=y
CONFIG_MD_LINEAR=y
CONFIG_MD_MULTIPATH=y
CONFIG_MD_FAULTY=y
CONFIG_BCACHE=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_MQ_DEFAULT=y
CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING=y
CONFIG_DM_CRYPT=y
CONFIG_DM_SNAPSHOT=y
CONFIG_DM_THIN_PROVISIONING=y
CONFIG_DM_CACHE=y
CONFIG_DM_MIRROR=y
CONFIG_DM_RAID=y
CONFIG_DM_ZERO=y
CONFIG_DM_UEVENT=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=y
CONFIG_MACVLAN=y
CONFIG_MACVTAP=y
CONFIG_IPVLAN=y
CONFIG_IPVTAP=y
CONFIG_VXLAN=y
CONFIG_NETCONSOLE=y
CONFIG_TUN=y
CONFIG_VETH=y
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_ADAPTEC is not set
# CONFIG_NET_VENDOR_AGERE is not set
# CONFIG_NET_VENDOR_ALACRITECH is not set
# CONFIG_NET_VENDOR_ALTEON is not set
# CONFIG_NET_VENDOR_AMAZON is not set
# CONFIG_NET_VENDOR_AMD is not set
# CONFIG_NET_VENDOR_AQUANTIA is not set
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_VENDOR_ATHEROS is not set
# CONFIG_NET_CADENCE is not set
# CONFIG_NET_VENDOR_BROADCOM is not set
# CONFIG_NET_VENDOR_BROCADE is not set
# CONFIG_NET_VENDOR_CAVIUM is not set
# CONFIG_NET_VENDOR_CHELSIO is not set
# CONFIG_NET_VENDOR_CISCO is not set
# CONFIG_NET_VENDOR_CORTINA is not set
# CONFIG_NET_VENDOR_DEC is not set
# CONFIG_NET_VENDOR_DLINK is not set
# CONFIG_NET_VENDOR_EMULEX is not set
# CONFIG_NET_VENDOR_EZCHIP is not set
# CONFIG_NET_VENDOR_EXAR is not set
# CONFIG_NET_VENDOR_FUJITSU is not set
# CONFIG_NET_VENDOR_HP is not set
# CONFIG_NET_VENDOR_HUAWEI is not set
CONFIG_IGB=y
# CONFIG_NET_VENDOR_I825XX is not set
# CONFIG_NET_VENDOR_MARVELL is not set
# CONFIG_NET_VENDOR_MELLANOX is not set
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MYRI is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
# CONFIG_NET_VENDOR_NETRONOME is not set
# CONFIG_NET_VENDOR_NVIDIA is not set
# CONFIG_NET_VENDOR_OKI is not set
# CONFIG_NET_PACKET_ENGINE is not set
# CONFIG_NET_VENDOR_QLOGIC is not set
# CONFIG_NET_VENDOR_QUALCOMM is not set
# CONFIG_NET_VENDOR_REALTEK is not set
# CONFIG_NET_VENDOR_RENESAS is not set
# CONFIG_NET_VENDOR_RDC is not set
# CONFIG_NET_VENDOR_ROCKER is not set
# CONFIG_NET_VENDOR_SAMSUNG is not set
# CONFIG_NET_VENDOR_SEEQ is not set
# CONFIG_NET_VENDOR_SILAN is not set
# CONFIG_NET_VENDOR_SIS is not set
# CONFIG_NET_VENDOR_SOLARFLARE is not set
# CONFIG_NET_VENDOR_SMSC is not set
# CONFIG_NET_VENDOR_SOCIONEXT is not set
# CONFIG_NET_VENDOR_STMICRO is not set
# CONFIG_NET_VENDOR_SUN is not set
# CONFIG_NET_VENDOR_TEHUTI is not set
# CONFIG_NET_VENDOR_TI is not set
# CONFIG_NET_VENDOR_VIA is not set
# CONFIG_NET_VENDOR_WIZNET is not set
# CONFIG_NET_VENDOR_XIRCOM is not set
# CONFIG_NET_VENDOR_SYNOPSYS is not set
CONFIG_FDDI=y
CONFIG_USB_NET_PLUSB=y
# CONFIG_USB_ARMLINUX is not set
# CONFIG_USB_NET_ZAURUS is not set
# CONFIG_WLAN_VENDOR_ADMTEK is not set
CONFIG_ATH9K=y
# CONFIG_WLAN_VENDOR_ATMEL is not set
# CONFIG_WLAN_VENDOR_BROADCOM is not set
# CONFIG_WLAN_VENDOR_CISCO is not set
# CONFIG_WLAN_VENDOR_INTEL is not set
# CONFIG_WLAN_VENDOR_INTERSIL is not set
# CONFIG_WLAN_VENDOR_MARVELL is not set
# CONFIG_WLAN_VENDOR_MEDIATEK is not set
# CONFIG_WLAN_VENDOR_RALINK is not set
# CONFIG_WLAN_VENDOR_REALTEK is not set
# CONFIG_WLAN_VENDOR_RSI is not set
# CONFIG_WLAN_VENDOR_ST is not set
# CONFIG_WLAN_VENDOR_TI is not set
# CONFIG_WLAN_VENDOR_ZYDAS is not set
# CONFIG_WLAN_VENDOR_QUANTENNA is not set
CONFIG_USB_NET_RNDIS_WLAN=y
CONFIG_FUJITSU_ES=y
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_POLLDEV=y
CONFIG_INPUT_SPARSEKMAP=y
CONFIG_INPUT_EVDEV=y
# CONFIG_MOUSE_PS2 is not set
CONFIG_INPUT_MISC=y
CONFIG_INPUT_PCSPKR=y
CONFIG_VT_HW_CONSOLE_BINDING=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_DEVMEM is not set
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_HW_RANDOM=y
# CONFIG_HW_RANDOM_INTEL is not set
# CONFIG_HW_RANDOM_AMD is not set
CONFIG_NVRAM=y
CONFIG_HPET=y
# CONFIG_HPET_MMAP is not set
CONFIG_TCG_TPM=y
CONFIG_TCG_TIS=y
CONFIG_I2C_I801=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_SYSFS=y
CONFIG_SENSORS_K10TEMP=y
CONFIG_SENSORS_FAM15H_POWER=y
CONFIG_THERMAL_WRITABLE_TRIPS=y
CONFIG_THERMAL_GOV_USER_SPACE=y
# CONFIG_X86_PKG_TEMP_THERMAL is not set
CONFIG_WATCHDOG=y
CONFIG_SP5100_TCO=y
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_HRTIMER=y
CONFIG_SND_SEQUENCER=y
CONFIG_SND_SEQ_DUMMY=y
CONFIG_SND_HDA_INTEL=y
CONFIG_SND_HDA_HWDEP=y
CONFIG_HIDRAW=y
CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y
CONFIG_USB=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
CONFIG_USB_MON=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_PLATFORM=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_UHCI_HCD=y
CONFIG_USB_ACM=y
CONFIG_USB_PRINTER=y
CONFIG_USB_STORAGE=y
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_CP210X=y
CONFIG_USB_SERIAL_FTDI_SIO=y
CONFIG_USB_SERIAL_PL2303=y
CONFIG_TYPEC=y
CONFIG_MMC=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PCI=y
CONFIG_LEDS_APU=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_ONESHOT=y
CONFIG_LEDS_TRIGGER_DISK=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
CONFIG_LEDS_TRIGGER_CPU=y
CONFIG_LEDS_TRIGGER_ACTIVITY=y
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
CONFIG_LEDS_TRIGGER_TRANSIENT=y
CONFIG_LEDS_TRIGGER_PANIC=y
CONFIG_LEDS_TRIGGER_NETDEV=y
CONFIG_EDAC=y
CONFIG_EDAC_AMD64=y
CONFIG_EDAC_AMD64_ERROR_INJECTION=y
CONFIG_RTC_CLASS=y
# CONFIG_RTC_HCTOSYS is not set
CONFIG_INTEL_IOATDMA=y
CONFIG_SYNC_FILE=y
# CONFIG_VIRTIO_MENU is not set
CONFIG_AMD_IOMMU=y
CONFIG_AMD_IOMMU_V2=y
CONFIG_EFI_VARS=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
CONFIG_EXT4_ENCRYPTION=y
CONFIG_BTRFS_FS=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_PRINT_QUOTA_WARNING is not set
CONFIG_QFMT_V2=y
CONFIG_AUTOFS4_FS=y
CONFIG_FUSE_FS=y
CONFIG_CUSE=y
CONFIG_OVERLAY_FS=y
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_PROC_KCORE=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_HUGETLBFS=y
# CONFIG_EFIVAR_FS is not set
CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_LZ4=y
CONFIG_SQUASHFS_LZO=y
CONFIG_SQUASHFS_XZ=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
CONFIG_ROOT_NFS=y
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_CODEPAGE_852=y
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_ISO8859_2=y
CONFIG_NLS_UTF8=y
CONFIG_PRINTK_TIME=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set
# CONFIG_UNUSED_SYMBOLS is not set
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_DEBUG_STACKOVERFLOW=y
# CONFIG_SCHED_DEBUG is not set
CONFIG_SCHEDSTATS=y
CONFIG_BLK_DEV_IO_TRACE=y
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
# CONFIG_RUNTIME_TESTING_MENU is not set
CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_DEBUG_BOOT_PARAMS=y
CONFIG_OPTIMIZE_INLINING=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_ENCRYPTED_KEYS=y
CONFIG_KEY_DH_OPERATIONS=y
CONFIG_SECURITY=y
CONFIG_SECURITY_NETWORK=y
CONFIG_HARDENED_USERCOPY=y
CONFIG_FORTIFY_SOURCE=y
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_CRYPTO_RSA=y
CONFIG_CRYPTO_USER=y
CONFIG_CRYPTO_MCRYPTD=y
CONFIG_CRYPTO_CRC32C_INTEL=y
CONFIG_CRYPTO_CRC32_PCLMUL=y
CONFIG_CRYPTO_SERPENT_SSE2_X86_64=y
CONFIG_CRYPTO_SERPENT_AVX_X86_64=y
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_TWOFISH_AVX_X86_64=y
CONFIG_CRYPTO_ANSI_CPRNG=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER_API_RNG=y
CONFIG_CRYPTO_USER_API_AEAD=y
CONFIG_CRYPTO_DEV_CCP=y
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_PKCS7_MESSAGE_PARSER=y
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_KVM=y
CONFIG_KVM_AMD=m
# CONFIG_KVM_AMD_SEV is not set
CONFIG_KVM_MMU_AUDIT=y
CONFIG_VHOST_NET=y
CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment