From a4d7654b1eee65a104053c0a2b2b882fa1ec9e44 Mon Sep 17 00:00:00 2001 From: Trammell hudson Date: Wed, 20 Sep 2017 10:29:14 -0400 Subject: [PATCH] Build the Heads/NERF firmware for the Dell R630 server. This development branch builds a NERF firmware for the Dell R630 server. It does not use coreboot; instead it branches directly from the vendor's PEI core into Linux and the Heads runtime that is setup to be run as an EFI executable. --- config/busybox.config | 10 +- config/linux.config | 194 +++++++++------- config/r630.config | 29 +++ dev.cpio | Bin 364 -> 364 bytes initrd/etc/fstab | 1 + initrd/etc/group | 1 + initrd/etc/motd | 11 +- initrd/etc/passwd | 1 + initrd/etc/shells | 3 + initrd/init | 40 +++- modules/dropbear | 10 +- modules/linux | 3 + patches/dropbear-2016.74.patch | 16 ++ patches/linux-4.9.38.patch | 396 +++++++++++++++++++++++++++++++++ 14 files changed, 616 insertions(+), 99 deletions(-) create mode 100644 config/r630.config create mode 100644 initrd/etc/group create mode 100644 initrd/etc/passwd create mode 100644 initrd/etc/shells create mode 100644 patches/dropbear-2016.74.patch create mode 100644 patches/linux-4.9.38.patch diff --git a/config/busybox.config b/config/busybox.config index 85617f70..fa390924 100644 --- a/config/busybox.config +++ b/config/busybox.config @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.26.2 -# Fri Mar 31 15:58:03 2017 +# Mon Jul 31 05:37:29 2017 # CONFIG_HAVE_DOT_CONFIG=y @@ -283,7 +283,7 @@ CONFIG_FEATURE_SORT_BIG=y CONFIG_STAT=y CONFIG_FEATURE_STAT_FORMAT=y CONFIG_FEATURE_STAT_FILESYSTEM=y -# CONFIG_STTY is not set +CONFIG_STTY=y # CONFIG_SUM is not set # CONFIG_SYNC is not set # CONFIG_FEATURE_SYNC_FANCY is not set @@ -455,9 +455,9 @@ CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y # CONFIG_BOOTCHARTD is not set # CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set # CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set +CONFIG_HALT=y +CONFIG_POWEROFF=y +CONFIG_REBOOT=y # CONFIG_FEATURE_CALL_TELINIT is not set CONFIG_TELINIT_PATH="" # CONFIG_INIT is not set diff --git a/config/linux.config b/config/linux.config index 43f46670..b79e3fbd 100644 --- a/config/linux.config +++ b/config/linux.config @@ -73,7 +73,7 @@ CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SYSVIPC is not set # CONFIG_POSIX_MQUEUE is not set # CONFIG_CROSS_MEMORY_ATTACH is not set -# CONFIG_FHANDLE is not set +CONFIG_FHANDLE=y # CONFIG_USELIB is not set # CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y @@ -146,22 +146,24 @@ CONFIG_ARCH_SUPPORTS_INT128=y # CONFIG_SYSFS_DEPRECATED is not set # CONFIG_RELAY is not set CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="../../dev.cpio" +CONFIG_INITRAMFS_SOURCE="initrd.cpio" CONFIG_INITRAMFS_ROOT_UID=0 CONFIG_INITRAMFS_ROOT_GID=0 # CONFIG_RD_GZIP is not set # CONFIG_RD_BZIP2 is not set # CONFIG_RD_LZMA is not set -CONFIG_RD_XZ=y +# CONFIG_RD_XZ is not set # CONFIG_RD_LZO is not set # CONFIG_RD_LZ4 is not set # CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_ANON_INODES=y +CONFIG_HAVE_UID16=y CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_HAVE_PCSPKR_PLATFORM=y CONFIG_BPF=y CONFIG_EXPERT=y +CONFIG_UID16=y CONFIG_MULTIUSER=y # CONFIG_SGETMASK_SYSCALL is not set # CONFIG_SYSFS_SYSCALL is not set @@ -182,7 +184,7 @@ CONFIG_EPOLL=y # CONFIG_BPF_SYSCALL is not set CONFIG_SHMEM=y # CONFIG_AIO is not set -# CONFIG_ADVISE_SYSCALLS is not set +CONFIG_ADVISE_SYSCALLS=y # CONFIG_USERFAULTFD is not set CONFIG_PCI_QUIRKS=y # CONFIG_MEMBARRIER is not set @@ -237,6 +239,8 @@ CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y CONFIG_HAVE_CMPXCHG_LOCAL=y CONFIG_HAVE_CMPXCHG_DOUBLE=y +CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_HAVE_GCC_PLUGINS=y # CONFIG_GCC_PLUGINS is not set @@ -258,10 +262,14 @@ CONFIG_ARCH_HAS_ELF_RANDOMIZE=y CONFIG_HAVE_ARCH_MMAP_RND_BITS=y CONFIG_HAVE_EXIT_THREAD=y CONFIG_ARCH_MMAP_RND_BITS=28 +CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 CONFIG_HAVE_COPY_THREAD_TLS=y CONFIG_HAVE_STACK_VALIDATION=y # CONFIG_HAVE_ARCH_HASH is not set # CONFIG_ISA_BUS_API is not set +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_COMPAT_OLD_SIGACTION=y # CONFIG_CPU_NO_EFFICIENT_FFS is not set CONFIG_HAVE_ARCH_VMAP_STACK=y CONFIG_VMAP_STACK=y @@ -294,6 +302,7 @@ CONFIG_BLK_DEV_BSGLIB=y # CONFIG_PARTITION_ADVANCED is not set CONFIG_MSDOS_PARTITION=y CONFIG_EFI_PARTITION=y +CONFIG_BLOCK_COMPAT=y CONFIG_BLK_MQ_PCI=y # @@ -332,7 +341,8 @@ CONFIG_X86_MPPARSE=y # CONFIG_X86_EXTENDED_PLATFORM is not set # CONFIG_X86_INTEL_LPSS is not set # CONFIG_X86_AMD_PLATFORM_DEVICE is not set -# CONFIG_IOSF_MBI is not set +CONFIG_IOSF_MBI=y +# CONFIG_IOSF_MBI_DEBUG is not set CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y CONFIG_SCHED_OMIT_FRAME_POINTER=y # CONFIG_HYPERVISOR_GUEST is not set @@ -441,7 +451,8 @@ CONFIG_ARCH_RANDOM=y # CONFIG_X86_INTEL_MPX is not set # CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS is not set CONFIG_EFI=y -# CONFIG_EFI_STUB is not set +CONFIG_EFI_STUB=y +# CONFIG_EFI_MIXED is not set # CONFIG_SECCOMP is not set # CONFIG_HZ_100 is not set CONFIG_HZ_250=y @@ -454,13 +465,17 @@ CONFIG_KEXEC_FILE=y # CONFIG_KEXEC_VERIFY_SIG is not set # CONFIG_CRASH_DUMP is not set CONFIG_PHYSICAL_START=0x1000000 -# CONFIG_RELOCATABLE is not set +CONFIG_RELOCATABLE=y +# CONFIG_RANDOMIZE_BASE is not set CONFIG_PHYSICAL_ALIGN=0x1000000 # CONFIG_HOTPLUG_CPU is not set +# CONFIG_COMPAT_VDSO is not set # CONFIG_LEGACY_VSYSCALL_NATIVE is not set CONFIG_LEGACY_VSYSCALL_EMULATE=y # CONFIG_LEGACY_VSYSCALL_NONE is not set -# CONFIG_CMDLINE_BOOL is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="earlyprintk=serial,ttyS0,115200 console=tty0 console=ttyS0,115200n8 nosmp quiet" +# CONFIG_CMDLINE_OVERRIDE is not set # CONFIG_MODIFY_LDT_SYSCALL is not set CONFIG_HAVE_LIVEPATCH=y CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y @@ -481,7 +496,6 @@ CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y CONFIG_ACPI_AC=y CONFIG_ACPI_BATTERY=y CONFIG_ACPI_BUTTON=y -CONFIG_ACPI_VIDEO=y CONFIG_ACPI_FAN=y # CONFIG_ACPI_DOCK is not set CONFIG_ACPI_CPU_FREQ_PSS=y @@ -494,14 +508,14 @@ CONFIG_ACPI_CUSTOM_DSDT_FILE="" # CONFIG_ACPI_CUSTOM_DSDT is not set CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y CONFIG_ACPI_TABLE_UPGRADE=y -# CONFIG_ACPI_DEBUG is not set -# CONFIG_ACPI_PCI_SLOT is not set +CONFIG_ACPI_DEBUG=y +CONFIG_ACPI_PCI_SLOT=y CONFIG_X86_PM_TIMER=y # CONFIG_ACPI_CONTAINER is not set CONFIG_ACPI_HOTPLUG_IOAPIC=y # CONFIG_ACPI_SBS is not set # CONFIG_ACPI_HED is not set -# CONFIG_ACPI_CUSTOM_METHOD is not set +CONFIG_ACPI_CUSTOM_METHOD=y # CONFIG_ACPI_BGRT is not set # CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set # CONFIG_ACPI_NFIT is not set @@ -511,13 +525,42 @@ CONFIG_HAVE_ACPI_APEI_NMI=y # CONFIG_DPTF_POWER is not set # CONFIG_ACPI_EXTLOG is not set # CONFIG_PMIC_OPREGION is not set -# CONFIG_ACPI_CONFIGFS is not set +CONFIG_ACPI_CONFIGFS=y # CONFIG_SFI is not set # # CPU Frequency scaling # -# CONFIG_CPU_FREQ is not set +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_STAT is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set +# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +# CONFIG_CPU_FREQ_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_GOV_SCHEDUTIL is not set + +# +# CPU frequency scaling drivers +# +# CONFIG_X86_INTEL_PSTATE is not set +# CONFIG_X86_PCC_CPUFREQ is not set +CONFIG_X86_ACPI_CPUFREQ=y +CONFIG_X86_ACPI_CPUFREQ_CPB=y +# CONFIG_X86_POWERNOW_K8 is not set +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set +# CONFIG_X86_P4_CLOCKMOD is not set + +# +# shared options +# +# CONFIG_X86_SPEEDSTEP_LIB is not set # # CPU Idle @@ -526,7 +569,7 @@ CONFIG_CPU_IDLE=y # CONFIG_CPU_IDLE_GOV_LADDER is not set CONFIG_CPU_IDLE_GOV_MENU=y # CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set -# CONFIG_INTEL_IDLE is not set +CONFIG_INTEL_IDLE=y # # Memory power savings @@ -572,13 +615,17 @@ CONFIG_AMD_NB=y # Executable file formats / Emulations # CONFIG_BINFMT_ELF=y +CONFIG_COMPAT_BINFMT_ELF=y CONFIG_ELFCORE=y CONFIG_BINFMT_SCRIPT=y # CONFIG_HAVE_AOUT is not set # CONFIG_BINFMT_MISC is not set # CONFIG_COREDUMP is not set -# CONFIG_IA32_EMULATION is not set +CONFIG_IA32_EMULATION=y +# CONFIG_IA32_AOUT is not set # CONFIG_X86_X32 is not set +CONFIG_COMPAT=y +CONFIG_COMPAT_FOR_U64_ALIGNMENT=y CONFIG_X86_DEV_DMA_OPS=y CONFIG_PMC_ATOM=y CONFIG_NET=y @@ -748,6 +795,7 @@ CONFIG_BLK_DEV_RAM_SIZE=65536 # CONFIG_BLK_DEV_RBD is not set # CONFIG_BLK_DEV_RSXX is not set # CONFIG_BLK_DEV_NVME is not set +# CONFIG_NVME_TARGET is not set # # Misc devices @@ -1033,7 +1081,7 @@ CONFIG_NET_VENDOR_INTEL=y CONFIG_E1000=m CONFIG_E1000E=m CONFIG_E1000E_HWTS=y -# CONFIG_IGB is not set +CONFIG_IGB=m # CONFIG_IGBVF is not set # CONFIG_IXGB is not set # CONFIG_IXGBE is not set @@ -1162,7 +1210,7 @@ CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_HW_CONSOLE=y CONFIG_VT_HW_CONSOLE_BINDING=y -# CONFIG_UNIX98_PTYS is not set +CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_NOZOMI is not set @@ -1174,15 +1222,21 @@ CONFIG_DEVMEM=y # # Serial drivers # +CONFIG_SERIAL_EARLYCON=y CONFIG_SERIAL_8250=y # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set # CONFIG_SERIAL_8250_PNP is not set # CONFIG_SERIAL_8250_FINTEK is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_PCI is not set +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=y CONFIG_SERIAL_8250_NR_UARTS=4 CONFIG_SERIAL_8250_RUNTIME_UARTS=4 -# CONFIG_SERIAL_8250_EXTENDED is not set +CONFIG_SERIAL_8250_EXTENDED=y +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +CONFIG_SERIAL_8250_DETECT_IRQ=y +# CONFIG_SERIAL_8250_RSA is not set +# CONFIG_SERIAL_8250_FSL is not set # CONFIG_SERIAL_8250_DW is not set # CONFIG_SERIAL_8250_RT288X is not set # CONFIG_SERIAL_8250_LPSS is not set @@ -1194,6 +1248,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4 # # CONFIG_SERIAL_UARTLITE is not set CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_JSM is not set # CONFIG_SERIAL_SCCNXP is not set # CONFIG_SERIAL_SC16IS7XX is not set @@ -1240,7 +1295,7 @@ CONFIG_I2C=y CONFIG_ACPI_I2C_OPREGION=y CONFIG_I2C_BOARDINFO=y # CONFIG_I2C_COMPAT is not set -# CONFIG_I2C_CHARDEV is not set +CONFIG_I2C_CHARDEV=y CONFIG_I2C_MUX=m # @@ -1249,7 +1304,7 @@ CONFIG_I2C_MUX=m CONFIG_I2C_MUX_PCA9541=m CONFIG_I2C_MUX_REG=m # CONFIG_I2C_HELPER_AUTO is not set -# CONFIG_I2C_SMBUS is not set +CONFIG_I2C_SMBUS=y # # I2C Algorithms @@ -1270,7 +1325,7 @@ CONFIG_I2C_ALGOBIT=y # CONFIG_I2C_ALI15X3 is not set # CONFIG_I2C_AMD756 is not set # CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set +CONFIG_I2C_I801=y # CONFIG_I2C_ISCH is not set # CONFIG_I2C_ISMT is not set # CONFIG_I2C_PIIX4 is not set @@ -1284,7 +1339,7 @@ CONFIG_I2C_ALGOBIT=y # # ACPI drivers # -# CONFIG_I2C_SCMI is not set +CONFIG_I2C_SCMI=y # # I2C system bus drivers (mostly embedded / system-on-chip) @@ -1365,7 +1420,7 @@ CONFIG_POWER_SUPPLY=y # CONFIG_BATTERY_GAUGE_LTC2941 is not set # CONFIG_HWMON is not set CONFIG_THERMAL=y -# CONFIG_THERMAL_WRITABLE_TRIPS is not set +CONFIG_THERMAL_WRITABLE_TRIPS=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set @@ -1373,18 +1428,20 @@ CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_GOV_FAIR_SHARE is not set CONFIG_THERMAL_GOV_STEP_WISE=y # CONFIG_THERMAL_GOV_BANG_BANG is not set -# CONFIG_THERMAL_GOV_USER_SPACE is not set +CONFIG_THERMAL_GOV_USER_SPACE=y # CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set # CONFIG_THERMAL_EMULATION is not set # CONFIG_INTEL_POWERCLAMP is not set -# CONFIG_X86_PKG_TEMP_THERMAL is not set +CONFIG_X86_PKG_TEMP_THERMAL=y +CONFIG_INTEL_SOC_DTS_IOSF_CORE=y # CONFIG_INTEL_SOC_DTS_THERMAL is not set # # ACPI INT340X thermal drivers # -# CONFIG_INT340X_THERMAL is not set -# CONFIG_INTEL_PCH_THERMAL is not set +CONFIG_INT340X_THERMAL=y +CONFIG_ACPI_THERMAL_REL=y +CONFIG_INTEL_PCH_THERMAL=y # CONFIG_WATCHDOG is not set CONFIG_SSB_POSSIBLE=y @@ -1483,17 +1540,15 @@ CONFIG_MFD_SYSCON=y # Graphics support # # CONFIG_AGP is not set -CONFIG_INTEL_GTT=y -CONFIG_VGA_ARB=y -CONFIG_VGA_ARB_MAX_GPUS=16 +# CONFIG_VGA_ARB is not set # CONFIG_VGA_SWITCHEROO is not set CONFIG_DRM=y -CONFIG_DRM_MIPI_DSI=y # CONFIG_DRM_DP_AUX_CHARDEV is not set CONFIG_DRM_KMS_HELPER=y CONFIG_DRM_KMS_FB_HELPER=y CONFIG_DRM_FBDEV_EMULATION=y # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set +CONFIG_DRM_TTM=y # # I2C encoder or helper chips @@ -1508,30 +1563,16 @@ CONFIG_DRM_FBDEV_EMULATION=y # ACP (Audio CoProcessor) Configuration # # CONFIG_DRM_NOUVEAU is not set -CONFIG_DRM_I915=y -CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y -CONFIG_DRM_I915_USERPTR=y -# CONFIG_DRM_I915_GVT is not set - -# -# drm/i915 Debugging -# -# CONFIG_DRM_I915_WERROR is not set -# CONFIG_DRM_I915_DEBUG is not set +# CONFIG_DRM_I915 is not set # CONFIG_DRM_VGEM is not set # CONFIG_DRM_VMWGFX is not set # CONFIG_DRM_GMA500 is not set # CONFIG_DRM_UDL is not set # CONFIG_DRM_AST is not set -# CONFIG_DRM_MGAG200 is not set +CONFIG_DRM_MGAG200=y # CONFIG_DRM_CIRRUS_QEMU is not set # CONFIG_DRM_QXL is not set # CONFIG_DRM_BOCHS is not set -CONFIG_DRM_PANEL=y - -# -# Display Panels -# CONFIG_DRM_BRIDGE=y # @@ -1562,8 +1603,8 @@ CONFIG_FB_DEFERRED_IO=y # CONFIG_FB_SVGALIB is not set # CONFIG_FB_MACMODES is not set # CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y # # Frame buffer hardware drivers @@ -1576,7 +1617,7 @@ CONFIG_FB_DEFERRED_IO=y # CONFIG_FB_IMSTT is not set # CONFIG_FB_VGA16 is not set CONFIG_FB_VESA=y -CONFIG_FB_EFI=y +# CONFIG_FB_EFI is not set # CONFIG_FB_N411 is not set # CONFIG_FB_HGA is not set # CONFIG_FB_OPENCORES is not set @@ -1585,7 +1626,11 @@ CONFIG_FB_EFI=y # CONFIG_FB_RIVA is not set # CONFIG_FB_I740 is not set # CONFIG_FB_LE80578 is not set -# CONFIG_FB_MATROX is not set +CONFIG_FB_MATROX=y +# CONFIG_FB_MATROX_MILLENIUM is not set +# CONFIG_FB_MATROX_MYSTIQUE is not set +CONFIG_FB_MATROX_G=y +# CONFIG_FB_MATROX_I2C is not set # CONFIG_FB_RADEON is not set # CONFIG_FB_ATY128 is not set # CONFIG_FB_ATY is not set @@ -1611,18 +1656,7 @@ CONFIG_FB_EFI=y # CONFIG_FB_AUO_K190X is not set # CONFIG_FB_SIMPLE is not set # CONFIG_FB_SM712 is not set -CONFIG_BACKLIGHT_LCD_SUPPORT=y -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_GENERIC is not set -# CONFIG_BACKLIGHT_APPLE is not set -# CONFIG_BACKLIGHT_PM8941_WLED is not set -# CONFIG_BACKLIGHT_SAHARA is not set -# CONFIG_BACKLIGHT_ADP8860 is not set -# CONFIG_BACKLIGHT_ADP8870 is not set -# CONFIG_BACKLIGHT_LM3639 is not set -# CONFIG_BACKLIGHT_LV5207LP is not set -# CONFIG_BACKLIGHT_BD6107 is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set # CONFIG_VGASTATE is not set CONFIG_HDMI=y @@ -1637,7 +1671,10 @@ CONFIG_DUMMY_CONSOLE_ROWS=25 CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -# CONFIG_LOGO is not set +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y # CONFIG_SOUND is not set # @@ -2085,7 +2122,7 @@ CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y # # CONFIG_EFI_VARS is not set CONFIG_EFI_ESRT=y -CONFIG_EFI_RUNTIME_MAP=y +# CONFIG_EFI_RUNTIME_MAP is not set # CONFIG_EFI_FAKE_MEMMAP is not set CONFIG_EFI_RUNTIME_WRAPPERS=y # CONFIG_EFI_CAPSULE_LOADER is not set @@ -2110,11 +2147,13 @@ CONFIG_FS_MBCACHE=y # CONFIG_JFS_FS is not set # CONFIG_XFS_FS is not set # CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set # CONFIG_BTRFS_FS is not set # CONFIG_NILFS2_FS is not set # CONFIG_F2FS_FS is not set # CONFIG_FS_DAX is not set # CONFIG_FS_POSIX_ACL is not set +CONFIG_EXPORTFS=y # CONFIG_EXPORTFS_BLOCK_OPS is not set CONFIG_FILE_LOCKING=y CONFIG_MANDATORY_FILE_LOCKING=y @@ -2169,17 +2208,10 @@ CONFIG_TMPFS=y # CONFIG_HUGETLBFS is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_ARCH_HAS_GIGANTIC_PAGE=y -# CONFIG_CONFIGFS_FS is not set -CONFIG_EFIVAR_FS=m +CONFIG_CONFIGFS_FS=y +# CONFIG_EFIVAR_FS is not set # CONFIG_MISC_FILESYSTEMS is not set -CONFIG_NETWORK_FILESYSTEMS=y -# CONFIG_NFS_FS is not set -# CONFIG_NFSD is not set -# CONFIG_CEPH_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set CONFIG_NLS=y CONFIG_NLS_DEFAULT="utf8" CONFIG_NLS_CODEPAGE_437=y @@ -2231,6 +2263,7 @@ CONFIG_NLS_ISO8859_1=y # CONFIG_NLS_MAC_ROMANIAN is not set # CONFIG_NLS_MAC_TURKISH is not set CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set # # Kernel hacking @@ -2241,7 +2274,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y # printk and dmesg options # CONFIG_PRINTK_TIME=y -CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=6 CONFIG_BOOT_PRINTK_DELAY=y CONFIG_DYNAMIC_DEBUG=y @@ -2669,14 +2702,13 @@ CONFIG_XZ_DEC_ARMTHUMB=y CONFIG_XZ_DEC_SPARC=y CONFIG_XZ_DEC_BCJ=y CONFIG_XZ_DEC_TEST=m -CONFIG_DECOMPRESS_XZ=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_REED_SOLOMON=y CONFIG_REED_SOLOMON_DEC8=y -CONFIG_INTERVAL_TREE=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT_MAP=y CONFIG_HAS_DMA=y +CONFIG_CHECK_SIGNATURE=y CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_GLOB=y diff --git a/config/r630.config b/config/r630.config new file mode 100644 index 00000000..106df613 --- /dev/null +++ b/config/r630.config @@ -0,0 +1,29 @@ +# Configuration for a Dell R630 +# flashrom doesn't work on this mainboard +# and it is NERF, not coreboot. +BOARD=x230 + +#CONFIG_CRYPTSETUP=y +#CONFIG_FLASHROM=y +#CONFIG_GPG=y +CONFIG_KEXEC=y +CONFIG_UTIL_LINUX=y +#CONFIG_LVM2=y +CONFIG_MBEDTLS=y +CONFIG_PCIUTILS=y +CONFIG_POPT=y +CONFIG_QRENCODE=y +CONFIG_TPMTOTP=y +#CONFIG_XEN=y +CONFIG_DROPBEAR=y + +CONFIG_LINUX_USB=y +CONFIG_LINUX_IGB=y +#CONFIG_LINUX_E1000E=y + +CONFIG_BOOTSCRIPT=/bin/generic-init + +CONFIG_BOOT_REQ_HASH=n +CONFIG_BOOT_REQ_ROLLBACK=n +CONFIG_BOOT_DEV="/dev/sda1" +CONFIG_USB_BOOT_DEV="/dev/sdb1" diff --git a/dev.cpio b/dev.cpio index 458f008e13e34c3a6b95b1443cbf1581e4405eac..5a5dd8ebf96134b1ebe8666256053407e4bc2e6f 100644 GIT binary patch delta 90 zcmaFE^oEJgz#Iq-jZ;%ojZ#gLC-Q}>m>57oN@^Jc0|P{XsilE=a$=$}NXp32VxpqM Y#FGM|&PYo2lk@Y6^K()eCcdi!04oF;00000 delta 90 zcmaFE^oEJgz#Iq-4N_8!l8jPKC-Q}>m>NKVeoAT?0|P{XQKD(GrKO1>NXp32VxpqM X#FGM|F33vtlk@Y6^K()szN-TO9Pt?a diff --git a/initrd/etc/fstab b/initrd/etc/fstab index fcc6a502..220929a4 100644 --- a/initrd/etc/fstab +++ b/initrd/etc/fstab @@ -1,3 +1,4 @@ devtmpfs /dev devtmpfs defaults 0 0 +devpts /dev/pts devpts defaults 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 diff --git a/initrd/etc/group b/initrd/etc/group new file mode 100644 index 00000000..1dbf9013 --- /dev/null +++ b/initrd/etc/group @@ -0,0 +1 @@ +root:x:0: diff --git a/initrd/etc/motd b/initrd/etc/motd index 73306185..c7748bb7 100644 --- a/initrd/etc/motd +++ b/initrd/etc/motd @@ -1,5 +1,6 @@ - -░░░░░░░░░░░█░█░█▀▀░█▀█░█▀▄░█▀▀░░░░░░░░░█▀▄░█▀█░█▀█░▀█▀░░░█▀▄░█▀█░█▄█░░░░░░░░░░ -░░░░░░░░░░░█▀█░█▀▀░█▀█░█░█░▀▀█░░░░▀░░░░█▀▄░█░█░█░█░░█░░░░█▀▄░█░█░█░█░░░░░░░░░░ -░░░░░░░░░░░▀░▀░▀▀▀░▀░▀░▀▀░░▀▀▀░░░░▀░░░░▀▀░░▀▀▀░▀▀▀░░▀░░░░▀░▀░▀▀▀░▀░▀░░░░░░░░░░ - + _ _ _ __ _ _ _____ ____ _____ +| | | | ___ __ _ __| |___ / / | \ | | ____| _ \| ___| +| |_| |/ _ \/ _` |/ _` / __| / / | \| | _| | |_) | |_ +| _ | __/ (_| | (_| \__ \ / / | |\ | |___| _ <| _| +|_| |_|\___|\__,_|\__,_|___/ /_/ |_| \_|_____|_| \_\_| + diff --git a/initrd/etc/passwd b/initrd/etc/passwd new file mode 100644 index 00000000..365a8d7f --- /dev/null +++ b/initrd/etc/passwd @@ -0,0 +1 @@ +root::0:0:root:/:/bin/ash diff --git a/initrd/etc/shells b/initrd/etc/shells new file mode 100644 index 00000000..934a0b22 --- /dev/null +++ b/initrd/etc/shells @@ -0,0 +1,3 @@ +/bin/sh +/bin/ash +/bin/bash diff --git a/initrd/init b/initrd/init index 7b4d81a7..611dd02d 100755 --- a/initrd/init +++ b/initrd/init @@ -1,4 +1,10 @@ #!/bin/ash +mknod /dev/ttyprintk c 5 3 +echo "hello world" > /dev/ttyprintk + +# Setup our path +export PATH=/sbin:/bin + # This is the very first script invoked by the Linux kernel and is # running out of the ram disk. There are no fileysstems mounted. # It is important to have a way to invoke a recovery shell in case @@ -7,21 +13,43 @@ # First thing it is vital to mount the /dev and other system directories mkdir /proc /sys /dev /tmp /boot /media 2>&- 1>&- -mount /dev -mount /proc -mount /sys +mount /dev 2>/dev/ttyprintk +mount /proc 2>/dev/ttyprintk +mount /sys 2>/dev/ttyprintk + +# Setup the pty psudeo filesystem +mkdir /dev/pts +mount /dev/pts 2>/dev/ttyprintk + +if [ ! -r /dev/ptmx ]; then + ln -s /dev/pts/ptmx /dev/ptmx +fi + +# bring up the ethernet; maybe should do DHCP? +insmod /lib/modules/igb.ko +ifconfig eth0 192.168.1.99 +ifconfig eth0 > /dev/ttyprintk + +# Setup the ssh server, allow root logins and log to stderr +if [ ! -d /etc/dropbear ]; then + mkdir /etc/dropbear +fi +dropbear -B -R 2>/dev/ttyprintk # Recovery shells will erase anything from here mkdir -p /tmp/secret -# Setup our path -export PATH=/sbin:/bin - # Now it is safe to print a banner if [ -r /etc/motd ]; then cat /etc/motd + cat /etc/motd > /dev/tty0 fi +ifconfig eth0 | head -1 > /dev/tty0 + +# For now we just start a shell +exec /bin/ash + # Load the date from the hardware clock, setting it in local time hwclock -l -s diff --git a/modules/dropbear b/modules/dropbear index e097009c..92c890fb 100644 --- a/modules/dropbear +++ b/modules/dropbear @@ -11,14 +11,20 @@ dropbear_configure := ./configure \ $(CROSS_TOOLS) \ --host i386-elf-linux \ --prefix "/" \ + --disable-syslog \ + --disable-lastlog \ + --disable-utmp \ + --disable-utmpx \ + --disable-wtmp \ + --disable-wtmpx \ dropbear_config := -dropbear_output := ssh scp +dropbear_output := ssh scp dropbear dropbear_target := \ $(MAKE_JOBS) \ $(CROSS_TOOLS) \ DESTDIR="$(INSTALL)" \ - dbclient scp \ + dbclient scp dropbear \ && \ cp $(build)/$(dropbear_dir)/dbclient $(build)/$(dropbear_dir)/ssh diff --git a/modules/linux b/modules/linux index 1429e2c3..402ca3e6 100644 --- a/modules/linux +++ b/modules/linux @@ -25,6 +25,9 @@ linux_modules-$(CONFIG_LINUX_E1000) += drivers/net/ethernet/intel/e1000/e1000.ko # x230 linux_modules-$(CONFIG_LINUX_E1000E) += drivers/net/ethernet/intel/e1000e/e1000e.ko +# Dell R630 +linux_modules-$(CONFIG_LINUX_IGB) += drivers/net/ethernet/intel/igb/igb.ko + linux_modules-$(CONFIG_LINUX_USB) += drivers/usb/host/ehci-hcd.ko linux_modules-$(CONFIG_LINUX_USB) += drivers/usb/host/ehci-pci.ko linux_modules-$(CONFIG_LINUX_USB) += drivers/usb/host/xhci-hcd.ko diff --git a/patches/dropbear-2016.74.patch b/patches/dropbear-2016.74.patch new file mode 100644 index 00000000..8f806478 --- /dev/null +++ b/patches/dropbear-2016.74.patch @@ -0,0 +1,16 @@ +diff --recursive -u ../clean/dropbear-2016.74/svr-chansession.c ./dropbear-2016.74/svr-chansession.c +--- ../clean/dropbear-2016.74/svr-chansession.c 2016-07-21 11:17:09.000000000 -0400 ++++ ./dropbear-2016.74/svr-chansession.c 2017-09-19 11:01:34.889121503 -0400 +@@ -925,10 +925,10 @@ + if ((setgid(ses.authstate.pw_gid) < 0) || + (initgroups(ses.authstate.pw_name, + ses.authstate.pw_gid) < 0)) { +- dropbear_exit("Error changing user group"); ++ //dropbear_exit("Error changing user group"); + } + if (setuid(ses.authstate.pw_uid) < 0) { +- dropbear_exit("Error changing user"); ++ //dropbear_exit("Error changing user"); + } + } else { + /* ... but if the daemon is the same uid as the requested uid, we don't diff --git a/patches/linux-4.9.38.patch b/patches/linux-4.9.38.patch new file mode 100644 index 00000000..3b1399e0 --- /dev/null +++ b/patches/linux-4.9.38.patch @@ -0,0 +1,396 @@ +diff --recursive -u ../clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c ./linux-4.9.38/arch/x86/boot/compressed/eboot.c +--- ../clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/arch/x86/boot/compressed/eboot.c 2017-09-19 14:55:16.395027896 -0400 +@@ -16,6 +16,73 @@ + #include "../string.h" + #include "eboot.h" + ++#if 0 ++#define PORT 0x3f8 /* COM1 */ ++ ++#define DLAB 0x80 ++ ++#define TXR 0 /* Transmit register (WRITE) */ ++#define RXR 0 /* Receive register (READ) */ ++#define IER 1 /* Interrupt Enable */ ++#define IIR 2 /* Interrupt ID */ ++#define FCR 2 /* FIFO control */ ++#define LCR 3 /* Line control */ ++#define MCR 4 /* Modem control */ ++#define LSR 5 /* Line Status */ ++#define MSR 6 /* Modem Status */ ++#define DLL 0 /* Divisor Latch Low */ ++#define DLH 1 /* Divisor latch High */ ++ ++static void early_serial_init(int port, int baud) ++{ ++ unsigned char c; ++ unsigned divisor; ++ ++ outb(0x3, port + LCR); /* 8n1 */ ++ outb(0, port + IER); /* no interrupt */ ++ outb(0, port + FCR); /* no fifo */ ++ outb(0x3, port + MCR); /* DTR + RTS */ ++ ++ divisor = 115200 / baud; ++ c = inb(port + LCR); ++ outb(c | DLAB, port + LCR); ++ outb(divisor & 0xff, port + DLL); ++ outb((divisor >> 8) & 0xff, port + DLH); ++ outb(c & ~DLAB, port + LCR); ++} ++ ++static int is_transmit_empty() { ++ return inb(PORT + 5) & 0x20; ++} ++ ++static void write_serial(char a) { ++ outb(a, PORT); ++ while (is_transmit_empty() == 0); ++} ++ ++static void write_serial_string(const char * s) ++{ ++ while(*s) ++ write_serial(*s++); ++} ++ ++static void write_hex(unsigned long x, unsigned digits) ++{ ++ while(digits-- > 0) ++ { ++ unsigned d = (x >> (digits * 4)) & 0xF; ++ if (d >= 0xA) ++ write_serial(d + 'A' - 0xA); ++ else ++ write_serial(d + '0'); ++ } ++ write_serial('\r'); ++ write_serial('\n'); ++} ++#endif ++ ++ ++ + static efi_system_table_t *sys_table; + + static struct efi_config *efi_early; +@@ -249,6 +316,12 @@ + + void efi_char16_printk(efi_system_table_t *table, efi_char16_t *str) + { ++#if 0 ++ while(*str) ++ { ++ write_serial((char) *str++); ++ } ++#else + unsigned long output_string; + size_t offset; + +@@ -273,6 +346,7 @@ + + efi_early->call(*func, out, str); + } ++#endif + } + + static efi_status_t +@@ -739,8 +813,18 @@ + sys_table = (efi_system_table_t *)(unsigned long)efi_early->table; + handle = (void *)(unsigned long)efi_early->image_handle; + ++ if(!sys_table) ++ { ++ // We're NERFed and are the "DxeCore", so there is no system ++ // table. The efi_config argument is actually the HobStart ++ // pointer, but who cares about that stuff. ++ // TODO: actually handle this case ++ while(1) ++ outb('!', 0x3f8); ++ } ++ + /* Check if we were booted by the EFI firmware */ +- if (sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) ++ if (!sys_table || sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) + return NULL; + + if (efi_early->is64) +@@ -751,7 +835,6 @@ + status = efi_call_early(handle_protocol, handle, + &proto, (void *)&image); + if (status != EFI_SUCCESS) { +- efi_printk(sys_table, "Failed to get handle for LOADED_IMAGE_PROTOCOL\n"); + return NULL; + } + +@@ -1047,7 +1130,9 @@ + status = efi_exit_boot_services(sys_table, handle, &map, &priv, + exit_boot_func); + if (status != EFI_SUCCESS) ++ { + return status; ++ } + + e820ext = priv.e820ext; + e820ext_size = priv.e820ext_size; +@@ -1056,7 +1141,9 @@ + + status = setup_e820(boot_params, e820ext, e820ext_size); + if (status != EFI_SUCCESS) ++ { + return status; ++ } + + return EFI_SUCCESS; + } +diff --recursive -u ../clean/linux-4.9.38/arch/x86/boot/compressed/head_64.S ./linux-4.9.38/arch/x86/boot/compressed/head_64.S +--- ../clean/linux-4.9.38/arch/x86/boot/compressed/head_64.S 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/arch/x86/boot/compressed/head_64.S 2017-09-19 13:41:47.715096617 -0400 +@@ -294,8 +294,12 @@ + jne 2f + fail: + /* EFI init failed, so hang. */ ++ mov $0x3f8, %dx /* ttyS0 */ ++ mov '@', %ax ++fail_loop: ++ outb %al, (%dx) + hlt +- jmp fail ++ jmp fail_loop + 2: + movl BP_code32_start(%esi), %eax + leaq preferred_addr(%rax), %rax +diff --recursive -u ../clean/linux-4.9.38/arch/x86/realmode/init.c ./linux-4.9.38/arch/x86/realmode/init.c +--- ../clean/linux-4.9.38/arch/x86/realmode/init.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/arch/x86/realmode/init.c 2017-09-19 08:27:23.183585570 -0400 +@@ -35,8 +35,8 @@ + /* Has to be under 1M so we can execute real-mode AP code. */ + mem = memblock_find_in_range(0, 1<<20, size, PAGE_SIZE); + if (!mem) { +- pr_info("No sub-1M memory is available for the trampoline\n"); +- return; ++ mem = 0x4000; ++ pr_info("No sub-1M memory is available for the trampoline, guessing %p\n", mem); + } + + memblock_reserve(mem, size); +@@ -138,7 +138,12 @@ + static int __init init_real_mode(void) + { + if (!real_mode_header) +- panic("Real mode trampoline was not allocated"); ++ { ++ // ignore for now ++ //panic("Real mode trampoline was not allocated"); ++ pr_warn("Real mode trampoline was not allocated"); ++ return 0; ++ } + + setup_real_mode(); + set_real_mode_permissions(); +diff --recursive -u ../clean/linux-4.9.38/drivers/acpi/acpica/evxfevnt.c ./linux-4.9.38/drivers/acpi/acpica/evxfevnt.c +--- ../clean/linux-4.9.38/drivers/acpi/acpica/evxfevnt.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/drivers/acpi/acpica/evxfevnt.c 2017-09-19 15:05:20.429486756 -0400 +@@ -111,6 +111,8 @@ + } + + ACPI_ERROR((AE_INFO, "Hardware did not enter ACPI mode")); ++printk("%s:%d faking ACPI mode\n", __func__, __LINE__); ++ return_ACPI_STATUS(AE_OK); + return_ACPI_STATUS(AE_NO_HARDWARE_RESPONSE); + } + +diff --recursive -u ../clean/linux-4.9.38/drivers/acpi/acpica/hwacpi.c ./linux-4.9.38/drivers/acpi/acpica/hwacpi.c +--- ../clean/linux-4.9.38/drivers/acpi/acpica/hwacpi.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/drivers/acpi/acpica/hwacpi.c 2017-09-19 15:04:43.229254898 -0400 +@@ -168,12 +168,16 @@ + + status = acpi_read_bit_register(ACPI_BITREG_SCI_ENABLE, &value); + if (ACPI_FAILURE(status)) { ++printk("%s:%d faking ACPI mode\n", __func__, __LINE__); ++ return_UINT32(ACPI_SYS_MODE_ACPI); + return_UINT32(ACPI_SYS_MODE_LEGACY); + } + + if (value) { + return_UINT32(ACPI_SYS_MODE_ACPI); + } else { ++//printk("%s:%d faking ACPI mode\n", __func__, __LINE__); ++// return_UINT32(ACPI_SYS_MODE_ACPI); + return_UINT32(ACPI_SYS_MODE_LEGACY); + } + } +diff --recursive -u ../clean/linux-4.9.38/drivers/acpi/acpica/tbfadt.c ./linux-4.9.38/drivers/acpi/acpica/tbfadt.c +--- ../clean/linux-4.9.38/drivers/acpi/acpica/tbfadt.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/drivers/acpi/acpica/tbfadt.c 2017-09-19 13:46:37.599809800 -0400 +@@ -344,6 +344,7 @@ + + /* Obtain the DSDT and FACS tables via their addresses within the FADT */ + ++#if 0 // NERF: the dsdt and facs tables will be updated later + acpi_tb_install_standard_table((acpi_physical_address)acpi_gbl_FADT. + Xdsdt, + ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, +@@ -367,6 +368,7 @@ + &acpi_gbl_xfacs_index); + } + } ++#endif + } + + /******************************************************************************* +diff --recursive -u ../clean/linux-4.9.38/drivers/acpi/acpica/tbxface.c ./linux-4.9.38/drivers/acpi/acpica/tbxface.c +--- ../clean/linux-4.9.38/drivers/acpi/acpica/tbxface.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/drivers/acpi/acpica/tbxface.c 2017-09-19 13:47:44.572900070 -0400 +@@ -136,7 +136,11 @@ + + rsdp_address = acpi_os_get_root_pointer(); + if (!rsdp_address) { +- return_ACPI_STATUS(AE_NOT_FOUND); ++// NERF: there is no root table since we came straight from DxeCore ++printk("%s:%d No root table found, hoping for the best\n", __func__, __LINE__); ++ return_ACPI_STATUS(0); ++ //return_ACPI_STATUS(AE_NOT_FOUND); ++ //rsdp_address = fake_rsdp; + } + + /* +diff --recursive -u ../clean/linux-4.9.38/drivers/acpi/acpica/tbxfload.c ./linux-4.9.38/drivers/acpi/acpica/tbxfload.c +--- ../clean/linux-4.9.38/drivers/acpi/acpica/tbxfload.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/drivers/acpi/acpica/tbxfload.c 2017-09-19 13:49:14.358362302 -0400 +@@ -277,6 +277,7 @@ + acpi_status status; + u8 flags; + u32 table_index; ++ union acpi_name_union * sig; + + ACPI_FUNCTION_TRACE(acpi_install_table); + +@@ -289,6 +290,30 @@ + status = acpi_tb_install_standard_table(address, flags, + FALSE, FALSE, &table_index); + ++ if (!ACPI_SUCCESS(status)) ++ return_ACPI_STATUS(status); ++ ++ // NERF: the tables have been added *after* the root table ++ // was looked for, so we have to update the global pointers ++ // now that we have the actual tables. ++ sig = &acpi_gbl_root_table_list.tables[table_index].signature; ++ ++ if (ACPI_COMPARE_NAME(sig, ACPI_SIG_FADT)) { ++ printk("%s: FADT index=%d\n", __func__, table_index); ++ acpi_gbl_fadt_index = table_index; ++ acpi_tb_parse_fadt(); ++ } else ++ if (ACPI_COMPARE_NAME(sig, ACPI_SIG_FACS)) { ++ printk("%s: FACS index=%d\n", __func__, table_index); ++ acpi_gbl_facs_index = table_index; ++ } else ++ if (ACPI_COMPARE_NAME(sig, ACPI_SIG_DSDT)) { ++ printk("%s: DSDT index=%d\n", __func__, table_index); ++ acpi_gbl_dsdt_index = table_index; ++ } else { ++ // nothing special about this table ++ } ++ + return_ACPI_STATUS(status); + } + +diff --recursive -u ../clean/linux-4.9.38/drivers/acpi/tables.c ./linux-4.9.38/drivers/acpi/tables.c +--- ../clean/linux-4.9.38/drivers/acpi/tables.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/drivers/acpi/tables.c 2017-09-19 13:50:47.511879998 -0400 +@@ -475,7 +475,8 @@ + ACPI_SIG_SLIC, ACPI_SIG_SPCR, ACPI_SIG_SPMI, ACPI_SIG_TCPA, + ACPI_SIG_UEFI, ACPI_SIG_WAET, ACPI_SIG_WDAT, ACPI_SIG_WDDT, + ACPI_SIG_WDRT, ACPI_SIG_DSDT, ACPI_SIG_FADT, ACPI_SIG_PSDT, +- ACPI_SIG_RSDT, ACPI_SIG_XSDT, ACPI_SIG_SSDT, NULL }; ++ ACPI_SIG_RSDT, ACPI_SIG_XSDT, ACPI_SIG_SSDT, ACPI_SIG_FACS, ++ NULL }; + + #define ACPI_HEADER_SIZE sizeof(struct acpi_table_header) + +@@ -487,8 +488,18 @@ + + void __init acpi_table_upgrade(void) + { ++#if 0 + void *data = (void *)initrd_start; + size_t size = initrd_end - initrd_start; ++#else ++ // NERF: The initramfs that is bundled with the kernel has ++ // our tables in its cpio file. There is no boot loader to ++ // set the initrd_start variable, so we have to use this one. ++extern char __initramfs_start[]; ++extern unsigned long __initramfs_size; ++ void *data = (void *)__initramfs_start; ++ size_t size = __initramfs_size; ++#endif + int sig, no, table_nr = 0, total_offset = 0; + long offset = 0; + struct acpi_table_header *table; +@@ -528,7 +539,11 @@ + cpio_path, file.name); + continue; + } +- if (acpi_table_checksum(file.data, table->length)) { ++ ++ // NERF: ignore checksum errors on FACS since it doesn't have one ++ // but allow it to be added anyway. ++ if (memcmp(table->signature, ACPI_SIG_FACS, 4) != 0 ++ && acpi_table_checksum(file.data, table->length)) { + pr_err("ACPI OVERRIDE: Bad table checksum [%s%s]\n", + cpio_path, file.name); + continue; +diff --recursive -u ../clean/linux-4.9.38/drivers/firmware/efi/vars.c ./linux-4.9.38/drivers/firmware/efi/vars.c +--- ../clean/linux-4.9.38/drivers/firmware/efi/vars.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/drivers/firmware/efi/vars.c 2017-09-19 13:52:01.141079970 -0400 +@@ -429,6 +429,12 @@ + int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *), + void *data, bool duplicates, struct list_head *head) + { ++ // NERF: We do not have the EfiVars protocol, so none of these ++ // routines will work. This avoids a possible kernel panic by ++ // not calling the random pointers in the runtime services. ++ printk("%s: not running\n", __func__); ++ return 0; ++ + const struct efivar_operations *ops = __efivars->ops; + unsigned long variable_name_size = 1024; + efi_char16_t *variable_name; +diff --recursive -u ../clean/linux-4.9.38/init/initramfs.c ./linux-4.9.38/init/initramfs.c +--- ../clean/linux-4.9.38/init/initramfs.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/init/initramfs.c 2017-09-19 13:53:34.002593777 -0400 +@@ -609,7 +609,7 @@ + { + char *err = unpack_to_rootfs(__initramfs_start, __initramfs_size); + if (err) +- panic("%s", err); /* Failed to decompress INTERNAL initramfs */ ++ panic("%s: %s", __func__, err); /* Failed to decompress INTERNAL initramfs */ + if (initrd_start) { + #ifdef CONFIG_BLK_DEV_RAM + int fd; +diff --recursive -u ../clean/linux-4.9.38/init/main.c ./linux-4.9.38/init/main.c +--- ../clean/linux-4.9.38/init/main.c 2017-07-15 06:17:55.000000000 -0400 ++++ ./linux-4.9.38/init/main.c 2017-09-19 13:54:31.699534533 -0400 +@@ -954,7 +954,9 @@ + if (ramdisk_execute_command) { + ret = run_init_process(ramdisk_execute_command); + if (!ret) ++ { + return 0; ++ } + pr_err("Failed to execute %s (error %d)\n", + ramdisk_execute_command, ret); + } +@@ -976,7 +978,9 @@ + !try_to_run_init_process("/etc/init") || + !try_to_run_init_process("/bin/init") || + !try_to_run_init_process("/bin/sh")) ++ { + return 0; ++ } + + panic("No working init found. Try passing init= option to kernel. " + "See Linux Documentation/init.txt for guidance.");