Linux kernel QEMU在为ARM创建Linux uImage后显示黑屏

Linux kernel QEMU在为ARM创建Linux uImage后显示黑屏,linux-kernel,arm,qemu,Linux Kernel,Arm,Qemu,所以我一直在关注这篇文章: 我首先确保在menuconfig中启用了“使用ARM EABI编译内核”选项,并将其保存为.config 之后,我运行以下命令并获得以下输出: ivan@UbuntuMATE:~/Programming/linux$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- uImage -s LOADADDR=0x00008000 <stdin>:1332:2: warning: #warning

所以我一直在关注这篇文章:

我首先确保在menuconfig中启用了“使用ARM EABI编译内核”选项,并将其保存为
.config

之后,我运行以下命令并获得以下输出:

ivan@UbuntuMATE:~/Programming/linux$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- uImage -s LOADADDR=0x00008000
<stdin>:1332:2: warning: #warning syscall io_pgetevents not implemented [-Wcpp]
Image Name:   Linux-4.18.0-10986-g778a33959a8a
Created:      Mon Aug 20 23:09:46 2018
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2816048 Bytes = 2750.05 kB = 2.69 MB
Load Address: 00008000
Entry Point:  00008000
我有一个黑屏。我知道内核会崩溃,但我仍然希望看到屏幕上的文本。在网上阅读了与此类似的评论和几个问题后,我尝试以下命令:

ivan@UbuntuMATE:~/Programming/linux$ qemu-system-arm -M versatilepb -m 256M -kernel arch/arm/boot/uImage
ivan@UbuntuMATE:~/Programming/linux$ qemu-system-arm -M versatilepb -m 256M -kernel arch/arm/boot/uImage -append "console=ttyAMA0"
我也尝试了tty1,甚至尝试了此链接所建议的内容:

请告知如何进行。提前谢谢

编辑:我想出来了!!感谢@bornfree为我提供了答案的起点

低看,我不再得到一个空白屏幕,但我仍然得到一个错误:

Error: invalid dtb and unrecognized/unsupported machine ID
  r1=0x00000183, r2=0x00000100
  r2[]=05 00 00 00 01 00 41 54 01 00 00 00 00 10 00 00 Available machine support:

ID (hex)    NAME
ffffffff    Generic DT based system
ffffffff    ARM-Versatile (Device Tree Support)

Please check your kernel config and/or bootloader.
因此,在做了一些研究之后,我了解到我的旧命令不起作用的原因是,在那一天,它们在内核中拥有不同板的所有代码。因此,他们决定将其分为设备树文件(我相信您在上一封电子邮件中提到的是设备树文件?),因此我注意到电路板文件包含在/arch/arm/dts文件夹中,但它们只是源文件。因此,我必须找到一种方法将该板编译成dtb,以便能够使用-dtb将其包含到qemu中。起初,我发现这个命令:

ivan@UbuntuMATE-VBox:~/linux/scripts/dtc$ ./dtc -I dts -O dtb -o versatile-pb.dtb /home/ivan/linux/arch/arm/boot/dts/versatile-pb.dts
Error: /home/ivan/linux/arch/arm/boot/dts/versatile-pb.dts:2.1-2 syntax error FATAL ERROR: Unable to parse input tree
所以这有点令人沮丧,直到我发现有一种方法可以用make来制作我需要的图像。首先生成配置文件

ivan@UbuntuMATE-VBox:~/linux$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- versatile_defconfig
然后生成dtb文件:

ivan@UbuntuMATE-VBox:~/linux$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- dtbs
(在继续之前,我应该提到我构建了原始教程中提到的简单根文件系统。您将在下面看到我的意思)

然后我再次尝试运行该命令:

qemu-system-arm -M versatilepb -m 256M -nographic -kernel /home/ivan/linux/arch/arm/boot/uImage -initrd /home/ivan/opt/test/rootfs -dtb dts/versatile-pb.dtb -append "root=/dev/ram rdinit=/hello console= ttyS0"
然后我得到另一个错误:

vpb_sic_write: Bad register offset 0x2c
所以我发现ttyS0模拟PC风格的8250/16550串行端口,QEMU在多功能机器上使用AMBA PL011,所以它使用ttyAMA0,这是我最初测试的。既然我的路线改变了,我想我应该改变它

qemu-system-arm -M versatilepb -m 256M -nographic -kernel /home/ivan/linux/arch/arm/boot/uImage -initrd /home/ivan/opt/test/rootfs -dtb dts/versatile-pb.dtb -append "root=/dev/ram rdinit=/hello console= ttyAMA0"
低,看…它终于起作用了

vpb_sic_write: Bad register offset 0x2c
Booting Linux on physical CPU 0x0
Linux version 4.18.0+ (ivan@UbuntuMATE-VBox) (gcc version 7.3.0 (Ubuntu/Linaro 7.3.0-16ubuntu3)) #1 Tue Aug 21 15:56:30 PDT 2018
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00093177
CPU: VIVT data cache, VIVT instruction cache
OF: fdt: Machine model: ARM Versatile PB Memory policy: Data cache writeback
random: get_random_bytes called from start_kernel+0x7c/0x3e4 with crng_init=0 Built 1 zonelists, mobility grouping on.  Total pages: 65024 Kernel command line: root=/dev/ram rdinit=/hello console=ttyAMA0 Dentry cache hash table entries: 32768 (order: 5, 131072 bytes) Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 253796K/262144K available (3935K kernel code, 144K rwdata, 964K rodata, 176K init, 130K bss, 8348K reserved, 0K cma-reserved) Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0xd0800000 - 0xff800000   ( 752 MB)
    lowmem  : 0xc0000000 - 0xd0000000   ( 256 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .text : 0x(ptrval) - 0x(ptrval)   (3937 kB)
      .init : 0x(ptrval) - 0x(ptrval)   ( 176 kB)
      .data : 0x(ptrval) - 0x(ptrval)   ( 145 kB)
       .bss : 0x(ptrval) - 0x(ptrval)   ( 131 kB)
NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 VIC @(ptrval): id 0x00041190, vendor 0x41 FPGA IRQ chip 0 "intc" @ (ptrval), 20 irqs, parent IRQ: 47
clocksource: arm,sp804: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275 ns
sched_clock: 32 bits at 1000kHz, resolution 1000ns, wraps every 2147483647500ns Failed to initialize '/amba/timer@101e3000': -22
sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
Console: colour dummy device 80x30
Calibrating delay loop... 290.20 BogoMIPS (lpj=1451008)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes) Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
CPU: Testing write buffer coherency: ok
Setting up static identity map for 0x8400 - 0x8458 VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns futex hash table entries: 256 (order: -1, 3072 bytes)
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
OF: amba_device_add() failed (-19) for /amba/smc@10100000
OF: amba_device_add() failed (-19) for /amba/mpmc@10110000
OF: amba_device_add() failed (-19) for /amba/sctl@101e0000
OF: amba_device_add() failed (-19) for /amba/watchdog@101e1000
OF: amba_device_add() failed (-19) for /amba/sci@101f0000
OF: amba_device_add() failed (-19) for /amba/ssp@101f4000
OF: amba_device_add() failed (-19) for /amba/fpga/sci@a000
Serial: AMBA PL011 UART driver
101f1000.uart: ttyAMA0 at MMIO 0x101f1000 (irq = 28, base_baud = 0) is a PL011 rev1 console [ttyAMA0] enabled
101f2000.uart: ttyAMA1 at MMIO 0x101f2000 (irq = 29, base_baud = 0) is a PL011 rev1
101f3000.uart: ttyAMA2 at MMIO 0x101f3000 (irq = 30, base_baud = 0) is a PL011 rev1
uart-pl011 10009000.uart: aliased and non-aliased serial devices found in device tree. Serial port enumeration may be unpredictable.
10009000.uart: ttyAMA3 at MMIO 0x10009000 (irq = 54, base_baud = 0) is a PL011 rev1
clocksource: Switched to clocksource arm,sp804
NET: Registered protocol family 2
tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes) TCP established hash table entries: 2048 (order: 1, 8192 bytes) TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048) UDP hash table entries: 256 (order: 0, 4096 bytes) UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
Trying to unpack rootfs image as initramfs...
Freeing initrd memory: 492K
NetWinder Floating Point Emulator V0.97 (double precision)
workingset: timestamp_bits=30 max_order=16 bucket_order=0 Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
romfs: ROMFS MTD (C) 2007 Red Hat, Inc.
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252) io scheduler noop registered io scheduler deadline registered io scheduler cfq registered (default) io scheduler mq-deadline registered io scheduler kyber registered pl061_gpio 101e4000.gpio: PL061 GPIO chip @0x101e4000 registered pl061_gpio 101e5000.gpio: PL061 GPIO chip @0x101e5000 registered pl061_gpio 101e6000.gpio: PL061 GPIO chip @0x101e6000 registered pl061_gpio 101e7000.gpio: PL061 GPIO chip @0x101e7000 registered versatile-tft-panel 10000000.sysreg:display@0: no panel detected
drm-clcd-pl111 dev:20: set up callbacks for Versatile PL110
brd: module loaded
of-flash 34000000.flash: versatile/realview flash protection
34000000.flash: Found 1 x32 devices at 0x0 in 32-bit bank. Manufacturer ID 0x000000 Chip ID 0x000000 Intel/Sharp Extended Query Table at 0x0031 Using buffer write method
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@fluxnic.net> smc91x 10010000.net eth0: SMC91C11xFD (rev 1) at (ptrval) IRQ 41 smc91x 10010000.net eth0: Ethernet addr: 52:54:00:12:34:56
rtc-ds1307 0-0068: registered as rtc0
versatile reboot driver registered
mmci-pl18x fpga:05: mmc0: PL181 manf 41 rev0 at 0x10005000 irq 59,60 (pio) mmci-pl18x fpga:0b: mmc1: PL181 manf 41 rev0 at 0x1000b000 irq 49,50 (pio) leds-syscon 10000000.core-module:led@08.0: registered LED versatile:0 leds-syscon 10000000.core-module:led@08.1: registered LED versatile:1 leds-syscon 10000000.core-module:led@08.2: registered LED versatile:2 leds-syscon 10000000.core-module:led@08.3: registered LED versatile:3 leds-syscon 10000000.core-module:led@08.4: registered LED versatile:4 leds-syscon 10000000.core-module:led@08.5: registered LED versatile:5 leds-syscon 10000000.core-module:led@08.6: registered LED versatile:6 leds-syscon 10000000.core-module:led@08.7: registered LED versatile:7
ledtrig-cpu: registered to indicate activity on CPUs
NET: Registered protocol family 17
input: AT Raw Set 2 keyboard as /devices/platform/amba/amba:fpga/10006000.kmi/serio0/input/input0
drm-clcd-pl111 dev:20: set up callbacks for Versatile PL110
drm-clcd-pl111 dev:20: set up callbacks for Versatile PL110
rtc-ds1307 0-0068: setting system clock to 2018-08-22 23:24:34 UTC (1534980274) Freeing unused kernel memory: 176K This architecture does not have kernel memory protection.
Hello World!random: fast init done
input: ImExPS/2 Generic Explorer Mouse as /devices/platform/amba/amba:fpga/10007000.kmi/serio1/input/input2
drm-clcd-pl111 dev:20: set up callbacks for Versatile PL110

Hello World!
Hello World!
vpb_sic_写入:寄存器偏移量0x2c错误
在物理CPU 0x0上引导Linux
Linux版本4.18.0+(ivan@UbuntuMATE-VBox)(gcc版本7.3.0(Ubuntu/Linaro 7.3.0-16ubuntu3))#1星期二2018年8月21日15:56:30 PDT
CPU:ARM926EJ-S[41069265]版本5(ARMv5TEJ),cr=00093177
CPU:VIVT数据缓存,VIVT指令缓存
OF:fdt:机器型号:ARM通用PB内存策略:数据缓存写回
random:获取从start_内核+0x7c/0x3e4调用的_random_字节,crng_init=0构建1个分区列表,移动分组打开。总页数:65024内核命令行:root=/dev/ram rdinit=/hello console=ttyam0 Dentry缓存哈希表条目:32768(顺序:513072字节)Inode缓存哈希表条目:16384(顺序:465536字节)
内存:253796K/262144K可用(3935K内核代码、144K rwdata、964K rodata、176K初始化、130K bss、8348K保留、0K cma保留)虚拟内核内存布局:
向量:0xffff0000-0xffff1000(4KB)
固定映射:0xffc00000-0xfff00000(3072 kB)
vmalloc:0xd0800000-0xff800000(752 MB)
低内存:0xc0000000-0xd0000000(256 MB)
模块:0xbf000000-0xc0000000(16 MB)
.text:0x(ptrval)-0x(ptrval)(3937KB)
.init:0x(ptrval)-0x(ptrval)(176 kB)
.数据:0x(ptrval)-0x(ptrval)(145 kB)
.bss:0x(ptrval)-0x(ptrval)(131 kB)
NR_IRQ:16,NR_IRQ:16,预分配IRQ:16 VIC@(ptrval):id 0x00041190,供应商0x41 FPGA IRQ芯片0“intc@(ptrval),20 IRQ,父IRQ:47
时钟源:arm,sp804:掩码:0xffffffff最大周期:0xFFFFFF,最大空闲周期:1911260446275纳秒
sched_时钟:32位,1000kHz,分辨率1000ns,每2147483647500ns包裹一次,未能初始化“/amba/timer@101e3000': -22
sched_时钟:24MHz时32位,分辨率41ns,每894784971ns换行一次
控制台:彩色虚拟设备80x30
校准延迟回路。。。290.20波哥米普斯(lpj=1451008)
pid_最大值:默认值:32768最小值:301
装载缓存哈希表条目:1024(顺序:04096字节)装载点缓存哈希表条目:1024(顺序:04096字节)
CPU:测试写入缓冲区一致性:正常
为0x8400-0x8458 VFP支持v0.3设置静态标识映射:实施者41架构1第10部分变体9版本0
时钟源:jiffies:mask:0xffffffff最大循环数:0xffffff,最大空闲数:19112604462750000 ns futex哈希表条目:256(顺序:-13072字节)
网络:注册协议系列16
DMA:用于原子一致分配的预分配256 KiB池
OF:amba\u设备添加()失败(-19)for/amba/smc@10100000
OF:amba\u设备添加()失败(-19)for/amba/mpmc@10110000
OF:amba\u设备添加()失败(-19)for/amba/sctl@101e0000
OF:amba\u设备添加()失败(-19)for/amba/watchdog@101e1000
OF:amba\u设备添加()失败(-19)for/amba/sci@101f0000
OF:amba\u设备添加()失败(-19)for/amba/ssp@101f4000
OF:amba\u设备添加()失败(-19)for/amba/fpga/sci@a000
串行:AMBA PL011 UART驱动器
101f1000.uart:MMIO 0x101f1000处的ttyAMA0(irq=28,基本波特率=0)是一个PL011 rev1控制台[ttyAMA0]已启用
101f2000.uart:MMIO 0x101f2000处的ttyAMA1(irq=29,基本波特=0)是PL011版本1
101f3000.uart:MMIO 0x101f3000处的ttyAMA2(irq=30,基本波特率=0)是PL011版本1
uart-pl011 10009000.uart:在设备树中找到别名和非别名串行设备。串行端口枚举可能不可预测。
10009000.uart:MMIO 0x10009000处的ttyAMA3(irq=54,基本波特率=0)是PL011版本1
时钟源:切换到时钟源臂,sp804
网络:注册协议系列2
tcp\u侦听\u端口DDR\u哈希表条目:512(顺序:0496字节)tcp已建立哈希表条目:2048(顺序:18192字节)tcp绑定哈希表条目:2048(顺序:18192字节)
TCP:已配置哈希表(已建立2048绑定2048)UDP哈希表条目:256(顺序:0,4096字节)UDP Lite哈希表条目:256(顺序:0,4096字节)
净: