我刚刚开始了解内核的工作原理和内部结构,首先,我正在尝试构建内核并启动它。
我使用 qemu 作为 x86 架构的模拟器。
我正在关注这篇文章(尽管是针对arm的):http://www.kaizou.org/2016/09/boot-minimal-linux-qemu/
我使用以下命令构建了内核:
cd kernel_4.9
make x86_64-defconfig
make -j8
这给了我bzImage。现在我开发了一个虚拟的
initramfs
,其中只有 hello world 作为可执行文件。这是init.c
:
#include <stdio.h>
void main()
{
printf("Tiny init - Hello World...\n");
while(1);
}
打包
initramfs
gcc -static init.c -o init
chmod +x init
echo init | cpio -o --format=newc > initramfs
现在运行 qemu :
qemu-system-x86_64 -kernel ~/data/linux/arch/x86/boot/bzImage -append 'console=ttyS0' -serial stdio -initrd ~/data/linux/arch/x86/boot/initramfs
我收到此错误:
[ 1.158556] Write protecting the kernel text: 8528k
[ 1.158842] Write protecting the kernel read-only data: 2396k
[ 1.163684] Failed to execute /init (error -2)
[ 1.163973] Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
[ 1.164026] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.0 #3
[ 1.164026] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
[ 1.164026] c78a5f78 c12dd8e4 c184c900 00000000 c78a5f98 c110d8a0 c19b465c c1c400a0
[ 1.164026] c19a5f8c c184c930 00000000 00000000 c78a5fac c184ca18 c19a5fd8 c19a5bc1
[ 1.164026] fffffffe 00000000 c1851537 00000000 00000000 00000000 00000000 00000000
[ 1.164026] Call Trace:
[ 1.164026] [<c12dd8e4>] dump_stack+0x47/0x63
[ 1.164026] [<c184c900>] ? rest_init+0x30/0x60
[ 1.164026] [<c110d8a0>] panic+0x93/0x1bc
[ 1.164026] [<c184c930>] ? rest_init+0x60/0x60
[ 1.164026] [<c184ca18>] kernel_init+0xe8/0x100
[ 1.164026] [<c1851537>] ret_from_fork+0x1b/0x28
[ 1.164026] Kernel Offset: disabled
[ 1.164026] ---[ end Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
以下是完整的启动串行日志:
Failed to initialize module: /usr/lib/x86_64-linux-gnu/qemu/block-iscsi.so
Note: only modules from the same build can be loaded.
Failed to initialize module: /usr/lib/x86_64-linux-gnu/qemu/block-curl.so
Note: only modules from the same build can be loaded.
Failed to initialize module: /usr/lib/x86_64-linux-gnu/qemu/block-rbd.so
Note: only modules from the same build can be loaded.
Failed to initialize module: /usr/lib/x86_64-linux-gnu/qemu/block-dmg.so
Note: only modules from the same build can be loaded.
warning: TCG doesn't support requested feature: CPUID.01H:ECX.vmx [bit 5]
[ 0.000000] Linux version 4.9.0 (naveen@intel) (gcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu2) ) #3 SMP Tue May 15 14:30:37 IST 2018
[ 0.000000] x86/fpu: Legacy x87 FPU detected.
[ 0.000000] x86/fpu: Using 'eager' FPU context switches.
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000007fdffff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000007fe0000-0x0000000007ffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
[ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel!
[ 0.000000] SMBIOS 2.8 present.
[ 0.000000] e820: last_pfn = 0x7fe0 max_arch_pfn = 0x100000
[ 0.000000] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WC UC- WT
[ 0.000000] found SMP MP-table at [mem 0x000f6640-0x000f664f] mapped at [c00f6640]
[ 0.000000] Scanning 1 areas for low memory corruption
[ 0.000000] RAMDISK: [mem 0x07f02000-0x07fdffff]
[ 0.000000] ACPI: Early table checksum verification disabled
[ 0.000000] ACPI: RSDP 0x00000000000F6460 000014 (v00 BOCHS )
[ 0.000000] ACPI: RSDT 0x0000000007FE16EE 000034 (v01 BOCHS BXPCRSDT 00000001 BXPC 00000001)
[ 0.000000] ACPI: FACP 0x0000000007FE0C14 000074 (v01 BOCHS BXPCFACP 00000001 BXPC 00000001)
[ 0.000000] ACPI: DSDT 0x0000000007FE0040 000BD4 (v01 BOCHS BXPCDSDT 00000001 BXPC 00000001)
[ 0.000000] ACPI: FACS 0x0000000007FE0000 000040
[ 0.000000] ACPI: SSDT 0x0000000007FE0C88 0009B6 (v01 BOCHS BXPCSSDT 00000001 BXPC 00000001)
[ 0.000000] ACPI: APIC 0x0000000007FE163E 000078 (v01 BOCHS BXPCAPIC 00000001 BXPC 00000001)
[ 0.000000] ACPI: HPET 0x0000000007FE16B6 000038 (v01 BOCHS BXPCHPET 00000001 BXPC 00000001)
[ 0.000000] 0MB HIGHMEM available.
[ 0.000000] 127MB LOWMEM available.
[ 0.000000] mapped low ram: 0 - 07fe0000
[ 0.000000] low ram: 0 - 07fe0000
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000000001000-0x0000000000ffffff]
[ 0.000000] Normal [mem 0x0000000001000000-0x0000000007fdffff]
[ 0.000000] HighMem empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000001000-0x000000000009efff]
[ 0.000000] node 0: [mem 0x0000000000100000-0x0000000007fdffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x0000000007fdffff]
[ 0.000000] Using APIC driver default
[ 0.000000] ACPI: PM-Timer IO Port: 0x608
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])
[ 0.000000] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)
[ 0.000000] Using ACPI (MADT) for SMP configuration information
[ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs
[ 0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[ 0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff]
[ 0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000effff]
[ 0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
[ 0.000000] e820: [mem 0x08000000-0xfffbffff] available for PCI devices
[ 0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1910969940391419 ns
[ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:1 nr_node_ids:1
[ 0.000000] percpu: Embedded 20 pages/cpu @c7deb000 s50284 r0 d31636 u81920
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32382
[ 0.000000] Kernel command line: console=ttyS0
[ 0.000000] PID hash table entries: 512 (order: -1, 2048 bytes)
[ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
[ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
[ 0.000000] Initializing CPU#0
[ 0.000000] Initializing HighMem for node 0 (00000000:00000000)
[ 0.000000] Memory: 115236K/130552K available (8524K kernel code, 784K rwdata, 2388K rodata, 728K init, 608K bss, 15316K reserved, 0K cma-reserved, 0K highmem)
[ 0.000000] virtual kernel memory layout:
[ 0.000000] fixmap : 0xfff16000 - 0xfffff000 ( 932 kB)
[ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB)
[ 0.000000] vmalloc : 0xc87e0000 - 0xff7fe000 ( 880 MB)
[ 0.000000] lowmem : 0xc0000000 - 0xc7fe0000 ( 127 MB)
[ 0.000000] .init : 0xc1b71000 - 0xc1c27000 ( 728 kB)
[ 0.000000] .data : 0xc185349f - 0xc1b6f1e0 (3183 kB)
[ 0.000000] .text : 0xc1000000 - 0xc185349f (8525 kB)
[ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok.
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] Hierarchical RCU implementation.
[ 0.000000] Build-time adjustment of leaf fanout to 32.
[ 0.000000] RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[ 0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=32, nr_cpu_ids=1
[ 0.000000] NR_IRQS:2304 nr_irqs:256 16
[ 0.000000] Console: colour VGA+ 80x25
[ 0.000000] console [ttyS0] enabled
[ 0.000000] tsc: Fast TSC calibration using PIT
[ 0.000000] tsc: Detected 3990.752 MHz processor
[ 0.003738] Calibrating delay loop (skipped), value calculated using timer frequency.. 7981.50 BogoMIPS (lpj=3990752)
[ 0.004100] pid_max: default: 32768 minimum: 301
[ 0.004298] ACPI: Core revision 20160831
[ 0.018424] ACPI: 2 ACPI AML tables successfully acquired and loaded
[ 0.019070] Security Framework initialized
[ 0.019253] SELinux: Initializing.
[ 0.019731] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.019863] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.027879] mce: CPU supports 10 MCE banks
[ 0.028880] Last level iTLB entries: 4KB 0, 2MB 0, 4MB 0
[ 0.028964] Last level dTLB entries: 4KB 0, 2MB 0, 4MB 0, 1GB 0
[ 0.066432] Freeing SMP alternatives memory: 32K (c1c27000 - c1c2f000)
[ 0.072781] smpboot: APIC(0) Converting physical 0 to logical package 0
[ 0.072931] smpboot: Max logical packages: 1
[ 0.073183] Enabling APIC mode: Flat. Using 1 I/O APICs
[ 0.075427] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
[ 0.086000] smpboot: CPU0: AMD QEMU Virtual CPU version 2.5+ (family: 0x6, model: 0x6, stepping: 0x3)
[ 0.086000] Performance Events: PMU not available due to virtualization, using software events only.
[ 0.092173] Huh? What family is it: 0x6?!
[ 0.093089] x86: Booted up 1 node, 1 CPUs
[ 0.093224] smpboot: Total of 1 processors activated (7981.50 BogoMIPS)
[ 0.098310] devtmpfs: initialized
[ 0.102509] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275000 ns
[ 0.103555] RTC time: 11:32:24, date: 05/15/18
[ 0.106305] NET: Registered protocol family 16
[ 0.113898] kworker/u2:0 (16) used greatest stack depth: 7104 bytes left
[ 0.116939] cpuidle: using governor menu
[ 0.117699] ACPI: bus type PCI registered
[ 0.120641] PCI: PCI BIOS revision 2.10 entry at 0xfd40f, last bus=0
[ 0.120800] PCI: Using configuration type 1 for base access
[ 0.128384] kworker/u2:1 (45) used greatest stack depth: 6840 bytes left
[ 0.205191] HugeTLB registered 4 MB page size, pre-allocated 0 pages
[ 0.207229] ACPI: Added _OSI(Module Device)
[ 0.207322] ACPI: Added _OSI(Processor Device)
[ 0.207411] ACPI: Added _OSI(3.0 _SCP Extensions)
[ 0.207481] ACPI: Added _OSI(Processor Aggregator Device)
[ 0.219594] ACPI: Interpreter enabled
[ 0.220185] ACPI: (supports S0 S3 S4 S5)
[ 0.220292] ACPI: Using IOAPIC for interrupt routing
[ 0.220749] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[ 0.256389] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
[ 0.257153] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments]
[ 0.257559] acpi PNP0A03:00: _OSC failed (AE_NOT_FOUND); disabling ASPM
[ 0.258039] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.
[ 0.260137] PCI host bridge to bus 0000:00
[ 0.260323] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]
[ 0.260489] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]
[ 0.260648] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[ 0.260810] pci_bus 0000:00: root bus resource [mem 0x08000000-0xfebfffff window]
[ 0.261106] pci_bus 0000:00: root bus resource [bus 00-ff]
[ 0.266648] pci 0000:00:01.1: legacy IDE quirk: reg 0x10: [io 0x01f0-0x01f7]
[ 0.267038] pci 0000:00:01.1: legacy IDE quirk: reg 0x14: [io 0x03f6]
[ 0.267212] pci 0000:00:01.1: legacy IDE quirk: reg 0x18: [io 0x0170-0x0177]
[ 0.267388] pci 0000:00:01.1: legacy IDE quirk: reg 0x1c: [io 0x0376]
[ 0.269092] pci 0000:00:01.3: quirk: [io 0x0600-0x063f] claimed by PIIX4 ACPI
[ 0.269271] pci 0000:00:01.3: quirk: [io 0x0700-0x070f] claimed by PIIX4 SMB
[ 0.287173] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)
[ 0.287967] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)
[ 0.288550] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)
[ 0.289246] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)
[ 0.289629] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)
[ 0.291383] ACPI: Enabled 16 GPEs in block 00 to 0F
[ 0.294509] vgaarb: setting as boot device: PCI:0000:00:02.0
[ 0.294694] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none
[ 0.294864] vgaarb: loaded
[ 0.295054] vgaarb: bridge control possible 0000:00:02.0
[ 0.296564] SCSI subsystem initialized
[ 0.298270] ACPI: bus type USB registered
[ 0.298918] usbcore: registered new interface driver usbfs
[ 0.299384] usbcore: registered new interface driver hub
[ 0.299663] usbcore: registered new device driver usb
[ 0.300606] pps_core: LinuxPPS API ver. 1 registered
[ 0.300720] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
[ 0.301225] PTP clock support registered
[ 0.304522] Advanced Linux Sound Architecture Driver Initialized.
[ 0.305080] PCI: Using ACPI for IRQ routing
[ 0.312927] NetLabel: Initializing
[ 0.313058] NetLabel: domain hash size = 128
[ 0.313185] NetLabel: protocols = UNLABELED CIPSOv4
[ 0.313816] NetLabel: unlabeled traffic allowed by default
[ 0.316063] clocksource: Switched to clocksource refined-jiffies
[ 0.381394] VFS: Disk quotas dquot_6.6.0
[ 0.381690] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[ 0.383559] pnp: PnP ACPI init
[ 0.389350] pnp: PnP ACPI: found 6 devices
[ 0.402753] kworker/u2:1 (571) used greatest stack depth: 6796 bytes left
[ 0.452615] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[ 0.453280] clocksource: Switched to clocksource acpi_pm
[ 0.455402] NET: Registered protocol family 2
[ 0.459357] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.459595] TCP bind hash table entries: 1024 (order: 1, 8192 bytes)
[ 0.459779] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.460212] UDP hash table entries: 256 (order: 1, 8192 bytes)
[ 0.460409] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
[ 0.461374] NET: Registered protocol family 1
[ 0.462874] RPC: Registered named UNIX socket transport module.
[ 0.463082] RPC: Registered udp transport module.
[ 0.463192] RPC: Registered tcp transport module.
[ 0.463330] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.463523] pci 0000:00:00.0: Limiting direct PCI/PCI transfers
[ 0.463697] pci 0000:00:01.0: PIIX3: Enabling Passive Release
[ 0.463897] pci 0000:00:01.0: Activating ISA DMA hang workarounds
[ 0.464260] pci 0000:00:02.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
[ 0.467306] Unpacking initramfs...
[ 0.473860] Freeing initrd memory: 888K (c7f02000 - c7fe0000)
[ 0.476653] Scanning for low memory corruption every 60 seconds
[ 0.482223] futex hash table entries: 256 (order: 1, 8192 bytes)
[ 0.482606] audit: initializing netlink subsys (disabled)
[ 0.483232] audit: type=2000 audit(1526383943.481:1): initialized
[ 0.487391] workingset: timestamp_bits=30 max_order=15 bucket_order=0
[ 0.521354] NFS: Registering the id_resolver key type
[ 0.521913] Key type id_resolver registered
[ 0.522513] Key type id_legacy registered
[ 0.531936] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[ 0.532322] io scheduler noop registered
[ 0.532530] io scheduler deadline registered
[ 0.532992] io scheduler cfq registered (default)
[ 0.535402] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[ 0.537948] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input0
[ 0.538556] ACPI: Power Button [PWRF]
[ 0.542194] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[ 0.564322] 00:05: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[ 0.570759] hpet_acpi_add: no address or irqs in _CRS
[ 0.572175] Non-volatile memory driver v1.3
[ 0.572626] Linux agpgart interface v0.103
[ 0.574796] [drm] Initialized
[ 0.590888] loop: module loaded
[ 0.600539] scsi host0: ata_piix
[ 0.602350] scsi host1: ata_piix
[ 0.602865] ata1: PATA max MWDMA2 cmd 0x1f0 ctl 0x3f6 bmdma 0xc040 irq 14
[ 0.603187] ata2: PATA max MWDMA2 cmd 0x170 ctl 0x376 bmdma 0xc048 irq 15
[ 0.605942] e100: Intel(R) PRO/100 Network Driver, 3.5.24-k2-NAPI
[ 0.606265] e100: Copyright(c) 1999-2006 Intel Corporation
[ 0.606537] e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI
[ 0.606639] e1000: Copyright (c) 1999-2006 Intel Corporation.
[ 0.770123] ata2.00: ATAPI: QEMU DVD-ROM, 2.5+, max UDMA/100
[ 0.771169] ata2.00: configured for MWDMA2
[ 0.780823] scsi 1:0:0:0: CD-ROM QEMU QEMU DVD-ROM 2.5+ PQ: 0 ANSI: 5
[ 0.797856] sr 1:0:0:0: [sr0] scsi3-mmc drive: 4x/4x cd/rw xa/form2 tray
[ 0.798184] cdrom: Uniform CD-ROM driver Revision: 3.20
[ 0.801572] sr 1:0:0:0: Attached scsi generic sg0 type 5
[ 0.816855] ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 11
[ 1.093251] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 52:54:00:12:34:56
[ 1.093505] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection
[ 1.093945] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[ 1.094092] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[ 1.094383] sky2: driver version 1.30
[ 1.096254] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 1.096381] ehci-pci: EHCI PCI platform driver
[ 1.096606] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 1.096897] ohci-pci: OHCI PCI platform driver
[ 1.097279] uhci_hcd: USB Universal Host Controller Interface driver
[ 1.098362] usbcore: registered new interface driver usblp
[ 1.098982] usbcore: registered new interface driver usb-storage
[ 1.099966] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12
[ 1.101934] serio: i8042 KBD port at 0x60,0x64 irq 1
[ 1.102277] serio: i8042 AUX port at 0x60,0x64 irq 12
[ 1.103964] mousedev: PS/2 mouse device common for all mice
[ 1.106301] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input1
[ 1.109219] rtc_cmos 00:00: RTC can wake from S4
[ 1.111243] random: fast init done
[ 1.112992] rtc_cmos 00:00: rtc core: registered rtc_cmos as rtc0
[ 1.113528] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram
[ 1.115407] device-mapper: ioctl: 4.35.0-ioctl (2016-06-23) initialised: [email protected]
[ 1.116222] hidraw: raw HID events driver (C) Jiri Kosina
[ 1.121501] usbcore: registered new interface driver usbhid
[ 1.121599] usbhid: USB HID core driver
[ 1.132988] Netfilter messages via NETLINK v0.30.
[ 1.133823] nf_conntrack version 0.5.0 (2048 buckets, 8192 max)
[ 1.136193] ctnetlink v0.93: registering with nfnetlink.
[ 1.138450] ip_tables: (C) 2000-2006 Netfilter Core Team
[ 1.139693] Initializing XFRM netlink socket
[ 1.141378] NET: Registered protocol family 10
[ 1.145915] ip6_tables: (C) 2000-2006 Netfilter Core Team
[ 1.147303] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[ 1.149505] NET: Registered protocol family 17
[ 1.149894] Key type dns_resolver registered
[ 1.151507] microcode: AMD CPU family 0x6 not supported
[ 1.151630] Using IPI No-Shortcut mode
[ 1.153701] registered taskstats version 1
[ 1.155785] Magic number: 2:763:529
[ 1.156245] console [netcon0] enabled
[ 1.156330] netconsole: network logging started
[ 1.157653] ALSA device list:
[ 1.157719] No soundcards found.
[ 1.186333] Freeing unused kernel memory: 728K (c1b71000 - c1c27000)
[ 1.186687] Write protecting the kernel text: 8528k
[ 1.186986] Write protecting the kernel read-only data: 2396k
[ 1.191970] Failed to execute /init (error -8)
[ 1.192330] Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
[ 1.192664] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.0 #3
[ 1.192756] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
[ 1.192992] c78a5f78 c12dd8e4 c184c900 00000000 c78a5f98 c110d8a0 c19b465c c1c400a0
[ 1.193079] c19a5f8c c184c930 00000000 00000000 c78a5fac c184ca18 c19a5fd8 c19a5bc1
[ 1.193079] fffffff8 00000000 c1851537 00000000 00000000 00000000 00000000 00000000
[ 1.193079] Call Trace:
[ 1.193079] [<c12dd8e4>] dump_stack+0x47/0x63
[ 1.193079] [<c184c900>] ? rest_init+0x30/0x60
[ 1.193079] [<c110d8a0>] panic+0x93/0x1bc
[ 1.193079] [<c184c930>] ? rest_init+0x60/0x60
[ 1.193079] [<c184ca18>] kernel_init+0xe8/0x100
[ 1.193079] [<c1851537>] ret_from_fork+0x1b/0x28
[ 1.193079] Kernel Offset: disabled
[ 1.193079] ---[ end Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
过去两天我看到了几篇讨论类似问题的帖子,但没有任何帮助。事实上,我作为参考的博客文章一直为作者和其他人工作(可能适用于不同的架构)。我还在内核存储库中引用了 Documentation/init.txt。我因沮丧而失去动力。 有人可以指导我并帮助我继续前进吗?
有一件奇怪的事情 - 您正在使用名为 x86_64-defconfig 的配置文件编译内核,但您的内核正在 32 位模式下运行。另外,您可能正在 64 位 Linux 系统下编译 init - 我认为这就是问题所在。第二件事 - 你给了我们日志的两个不同部分,因为在第一个部分 - /init 甚至在你的 initramfs 上找不到,但在第二个部分 - 内核报告“exec 格式错误”。
结论:要么将内核真正编译为 64 位,要么将 init 编译为 32 位应用程序(-m32 切换到 gcc)。
看起来您正在将
init
二进制文件打包到 initramfs 的根目录中,而不是内核查找的 通常的位置:
/sbin/init
/etc/init
/bin/init
/bin/sh
尝试将您的
init
二进制文件移动到这些目录之一,或者按照您收到的错误消息的建议指定 init=/init
作为内核参数。
如果 Linux 内核配置错过了执行以“#!”开头的文件的选项,也可能会发生这种情况
在我的例子中,错误是因为我的 BusyBox 二进制文件是动态链接的而引起的。为了解决这个问题,我只是在制作 BusyBox 时通过在
make menuconfig
中执行以下操作将其静态链接:
导航到“设置”->“构建选项”->“构建静态二进制文件(无共享库)”,然后按“Y”。
在
make
并将其重新打包到initramfs之后,不再出现内核恐慌。