Просто черный экран после запуска Qemu

Я только что установил QEMU и скомпилировал ядро ​​Linux с поддержкой ARM, но когда я запускаю команду ниже

qemu-system-arm -M versatilepb -m 128M -kernel /home/arit/QEMU/linux-3.8.4/arch/arm/boot/uImage -append "console=tty1"

Я мог видеть только черный экран, я также пробовал то, что предлагается в потоке ниже

Qemu показывает черный экран

Но все равно это не сработало.

Ниже приведен вывод команды make, которую я запускаю для компиляции исходного кода ядра.

сделать ARCH = arm CROSS_COMPILE = arm-none-linux-gnueabi- uImage -s

 Image Name:   Linux-3.8.4
 Created:      Tue Dec 24 12:49:07 2013
 Image Type:   ARM Linux Kernel Image (uncompressed)
 Data Size:    4406472 Bytes = 4303.20 kB = 4.20 MB
 Load Address: fffffff2
 Entry Point:  fffffff2

Точки загрузки и въезда здесь в порядке?


person Amit Singh Tomar    schedule 24.12.2013    source источник
comment
Попробуйте с опцией -sdl. У меня никогда не работал интерфейс gtk.   -  person Bandrami    schedule 24.12.2013
comment
@Bandrami Не могли бы вы более конкретно указать параметр -sdl. Как мне его использовать?   -  person Amit Singh Tomar    schedule 24.12.2013
comment
Это опция для qemu, например -m. Просто добавьте -sdl в конец вашей команды qemu.   -  person Bandrami    schedule 24.12.2013
comment
Серийник работает? А можно попробовать с VNC вместо SDL? Я обнаружил специфичную для SDL ошибку по адресу: bugs.launchpad.net/qemu/+bug/1778182   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 22.06.2018


Ответы (3)


Нет, ваши точки загрузки и въезда НЕПРАВИЛЬНЫ. как правило, ниже указан адрес загрузки и ввода

Image Name:   Linux-3.9.0
Created:      Thu Dec 26 09:50:57 2013
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1908056 Bytes = 1863.34 kB = 1.82 MB
Load Address: 00008000
Entry Point:  00008000

Более того, если вы попытаетесь использовать свою команду, ядро ​​be panic при отсутствии rootfs. Параметры initrd отсутствуют. Также вам может не хватать некоторых настроек при сборке ядра.

Попробуйте следующие шаги:

1)make ARCH=arm distclean

2)make ARCH=arm versatile_defconfig

3)make ARCH=arm menuconfig

здесь вам нужно включить функцию ниже.

Kernel Features ---> [*] Use the ARM EABI to compile the kernel. (enable this).

4)make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

5)qemu-system-arm -M versatilepb -m 128M -kernel arch/arm/boot/uImage -append "console=tty1"

Здесь вы получите консоль с сообщением о панике ядра. чтобы избежать этого, передайте свой параметр rootfs.

Я предполагаю, что вы создали rootfs из busybox, если это так, попробуйте команду ниже для полной загрузки системы

6)qemu-system-arm -M versatilepb -m 128M -kernel arch/arm/boot/uImage -initrd rootfs.img -append "root=/dev/ram mem=128M rdinit=/sbin/init" -serial stdio.

person vinay hunachyal    schedule 26.12.2013
comment
Спасибо Vinay за ваш ответ. Я попытался изменить адрес загрузки и адрес входа на 00008000 и 00008000 с помощью команды mkimage, но это не сработало. Также я уже включил ARM EABI из функций ядра. Должен ли я указывать адрес входа и загрузки через файл конфигурации ядра? - person Amit Singh Tomar; 28.12.2013
comment
Не пытайтесь использовать mkimage .. просто запустите make ARCH = arm CROSS_COMPILE = arm-none-linux-gnueabi- uImage .. это позаботится о конце компиляции, чтобы добавить адрес записи - person vinay hunachyal; 28.12.2013
comment
Но так я и раньше делал. - person Amit Singh Tomar; 28.12.2013
comment
Еще одна вещь, которую я наблюдаю в размере изображения ur слишком велик ... сделал слишком много изменений в конфигурации по умолчанию .. 1-я попытка с ma выше шаги с конфигурацией по умолчанию, если она работает f9 .. de go с включением ваших требований - person vinay hunachyal; 28.12.2013
comment
Спасибо, Vinay, я попробовал ваши шаги, и он работает нормально, Нам не хватало шага make ARCH = arm versatile_defconfig ранее. Этот файл конфигурации отвечает за настройку входа и адреса загрузки uImage или за то, как настраиваются адрес загрузки и входа - person Amit Singh Tomar; 06.01.2014
comment
@vinayHunachyal Как вы собираете rootfs? - person codey modey; 09.03.2014
comment
Я пошел по твоим стопам, и это не работает. По-прежнему черный экран для меня. - person Calmarius; 17.03.2018

Как вы просите Is this config file is responsible for setting up entry and load address of uImage

Да make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

эта команда отвечает за загрузку точки входа. Как ? ---> В исходном коде ядра откройте vi scripts/mkuboot.sh

здесь проверьте MKIMAGE=$(type -path "${CROSS_COMPILE}mkimage")

сценарий позаботится о вызове scripts/Makefile.lib.

здесь в коде

MKIMAGE: = $ (srctree) /scripts/mkuboot.sh

  UIMAGE_ARCH ?= $(SRCARCH)
  UIMAGE_COMPRESSION ?= $(if $(2),$(2),none)
  UIMAGE_OPTS-y ?=
  UIMAGE_TYPE ?= kernel
  UIMAGE_LOADADDR ?= arch_must_set_this
  UIMAGE_ENTRYADDR ?= $(UIMAGE_LOADADDR)
  UIMAGE_NAME ?= 'Linux-$(KERNELRELEASE)'
  UIMAGE_IN ?= $<
  UIMAGE_OUT ?= $@

-->

если пользователь не упоминает LOADADDR в командной строке, адрес берется снизу
UIMAGE_LOADADDR? = arch_must_set_this

ifneq ($(LOADADDR),)
UIMAGE_LOADADDR=$(LOADADDR)
else
   ifeq ($(CONFIG_ZBOOT_ROM),y)
   UIMAGE_LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
  else
UIMAGE_LOADADDR=$(ZRELADDR)
endif
endif

UIMAGE_LOADADDR=$(ZRELADDR) -> эта переменная, отвечающая за загрузку адреса записи

клапан $ (ZRELADDR) взят из специальной платы, в нашем случае универсальной, поэтому

arch/arm/mach-versatile/Makefile.boot

здесь

   zreladdr-y   += 0x00008000
params_phys-y   := 0x00000100
initrd_phys-y   := 0x00800000

Так в ядре скрипты автоматизируются, когда make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

выполнен.

person vinay hunachyal    schedule 07.01.2014
comment
Спасибо Vinay за подробный ответ, не могли бы вы также узнать ise команды make ARCH = arm versatile_defconfig? - person Milan; 07.01.2014
comment
@singh, извините, я не могу получить, вы можете повторить ваш запрос, пожалуйста - person vinay hunachyal; 07.01.2014
comment
просто хотите знать, что будет делать make ARCH = arm versatile_defconfig? - person Milan; 07.01.2014

На вопрос SINGH

what make ARCH=arm versatile_defconfig will do?

1) при компиляции ядра первый вопрос: для какой архитектуры вы строите?

Предположим, что если вы строите для архитектуры x86, вам не нужно указывать ARCH = x86, по умолчанию он принимает x86, а для x86 вам не нужен кросс-компилятор, компилятор позаботится о компиляции. Вы можете проверить это в Makefile верхнего уровня.

если вы дадите команду `make menuconfig ', то по умолчанию потребуется /boot/config-x.x.x, это для x86.

Таким образом, текущая конфигурация системы записывается в .config из /boot/config-x.x.x

Но что за архитектура arm, которую вы строите на архитектуре x86 с собственным компилятором?

здесь вам понадобится инструмент кросс-компилятора cahin для компиляции ядра для ARM.

так что из этого фона ясно, что вам нужно предоставить переменные ARCH и CROSS_COMPILE.?

когда make ARCH=arm versatile_defconfig

Файл makefile верхнего уровня считывает эту команду, что архитектура - это arm копирует versatile_defconfig, который присутствует в arch / arm / configs / versatile_defconfig

и пишет в .config.

Здесь вы получите минимальную конфигурацию. Затем, используя menuconfig, вы активируете все, что вам нужно.

person vinay hunachyal    schedule 07.01.2014
comment
Хорошо, хорошо @Vinay, а versatile_defconfig - это файл конфигурации для универсальной физической платы, верно? - person Milan; 07.01.2014
comment
да, это для универсальной доски - person vinay hunachyal; 07.01.2014