В последнее время, изучив операционную систему и прочитав теоретические книги, планирую реализовать ее самостоятельно и углубить свое понимание. Поэтому я выбрал книгу Ю Юаня «Внедрение операционной системы Orange» и следовал этой книге, чтобы попрактиковаться. Устранены некоторые проблемы, возникшие при установке виртуальной машины bochs, которые специально записаны здесь.
моя среда:
- Хост win10
- Виртуальная машина vagrant (нижний слой — виртуальный бокс), здесь можно использовать и виртуальный бокс, и вмваре.
- Система в виртуальной машине — CentOS 7, версия для командной строки, без интерфейса. Конечно, лучше, если у вас будет версия linux discovery с интерфейсом.
- Терминал командной строки на win использует git bash, и здесь также можно использовать другие, такие как xshell или secureCRT.
Если Bochs хочет запустить функцию отладки, вы не можете использовать yum для ее прямой установки, вы можете только загрузить исходный пакет для его компиляции и установки.
Установите среду сборки и зависимости
yum install -y gcc glibc-headers gcc-c++ libXrandr-devel
скачать и установить бокс
Текущее время — 26 декабря 2019 года. Введите следующую команду, чтобы загрузить версию 2.6.9.
# 下载
curl -O https://nchc.dl.sourceforge.net/project/bochs/bochs/2.6.9/bochs-2.6.9.tar.gz
# 解压
tar -zxvf bochs-2.6.9.tar.gz
cd в распакованный каталог и настроить параметры компиляции
# cd进入目录
cd bochs-2.6.9
# 配置编译选项
./configure --with-x11 --with-wx --enable-debugger --enable-disasm --enable-all-optimizations --enable-readline --enable-long-phy-address --enable-ltdl-install --enable-idle-hack --enable-plugins --enable-a20-pin --enable-x86-64 --enable-smp --enable-cpu-level=6 --enable-large-ramfile --enable-repeat-speedups --enable-fast-function-calls --enable-handlers-chaining --enable-trace-linking --enable-configurable-msrs --enable-show-ips --enable-cpp --enable-debugger-gui --enable-iodebug --enable-logging --enable-assert-checks --enable-fpu --enable-vmx=2 --enable-svm --enable-3dnow --enable-alignment-check --enable-monitor-mwait --enable-avx --enable-evex --enable-x86-debugger --enable-pci --enable-usb --enable-voodoo
Введите команду make для компиляции.
make
Решение ошибки
Ошибка заключается в следующем:
make: *** No rule to make target 'misc/bximage.cc', needed by 'misc/bximage.o'. Stop.
Решение:
cp misc/bximage.cpp misc/bximage.cc
Далее есть аналогичное правило No make target 'xxxx', решение аналогичное.
cp iodev/hdimage/hdimage.cpp iodev/hdimage/http://hdimage.cc
cp iodev/hdimage/vmware3.cpp iodev/hdimage/http://vmware3.cc
cp iodev/hdimage/vmware4.cpp iodev/hdimage/http://vmware4.cc
cp iodev/hdimage/vpc-img.cpp iodev/hdimage/http://vpc-img.cc
cp iodev/hdimage/vbox.cpp iodev/hdimage/http://vbox.cc
После успешного выполнения make установите его.
make install
конфигурационный файл бокса
Чтобы запустить bochs для запуска написанной нами операционной системы, вам нужно сначала настроить bochs. В каталоге распаковки bochs bochs-2.6.9 скопируйте файл конфигурации,
# cp后的第一个参数有点号.
cp .bochsrc bochsrc
Здесь предполагается, что вы уже написали ассемблерный код и написали образ дискеты boot.img. vi bochsrc откройте файл и измените его следующим образом.
# romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot改为如下,其中$BXSHARE改为你的解压目录下+bios
romimage: file=/usr/local/bochs-2.6.9/bios/BIOS-bochs-latest, options=fastboot
# 同上
vgaromimage: file=/usr/local/bochs-2.6.9/bios/VGABIOS-lgpl-latest
# floppya: 1_44=/dev/fd0, status=inserted这行改为你的软盘镜像,我的是boot.img
floppya: 1_44=boot.img, status=inserted
#ata0-master: type=disk, mode=flat, path="30M.sample"这行要加注释注释掉
# 启动盘修改,改为软盘启动
boot: floppy
#boot: disk
#sound: driver=default, waveout=/dev/dsp. wavein=, midiout=注释掉这行声音配置
ОК, приведенная выше конфигурация завершена, используйте следующую команду для запуска bochs
sudo ./bochs -f bochsrc
Обратите внимание, что вам нужно использовать привилегии sudo для выполнения здесь, иначе не будет сообщено об ошибке загрузочного устройства.
решение ошибки запуска Bochs
Message: ata0-0: could not open hard drive image file '30M.sample'
Вышеупомянутая ошибка связана с тем, что загрузочным устройством по умолчанию является жесткий диск, и его следует заменить на записанную нами дискету boot.img. Закомментируйте строку жесткого диска ниже и откройте строку гибкого диска.
boot: floppy
#boot: disk
Bochs is not compiled with lowlevel sound support.
Просто закомментируйте строчку о звуковом устройстве в конфигурационном файле.
sound: driver=default, waveout=/dev/dsp. wavein=, midiout=
Следующая ошибка сообщается, если вы используете командную строку для подключения к виртуальной машине.
00000000000p[GUI ] >>PANIC<< Cannot connect to X display
========================================================================
Event type: PANIC
Device: [GUI ]
Message: Cannot connect to X display
Как показано ниже:
Причина этой проблемы в том, что я использую командную строку git bash для подключения к CentOS 7 в виртуальной машине, а у bochs есть интерфейс, а графический интерфейс не может отображаться под командной строкой git bash. Есть два решения:
-
- Вы устанавливаете bochs в linux под графическим интерфейсом, что, конечно, не соответствует нашим потребностям, потому что мы устанавливали bochs под командной строкой, а установить версию linux с графическим интерфейсом слишком хлопотно.
-
- Установите X11 в linux, подключите win к linux с помощью vnc viewer, и vnc viewer сможет отобразить графический интерфейс.
Используем второй, устанавливаем vnc viewer для подключения к linux для отображения графического интерфейса, см. другую мою статью,VNC Viewer вход в визуальный интерфейс Linux (centos7)
no bootable device
Если вы подтвердите, что ваше загрузочное устройство настроено как дискета и нет ошибки конфигурации, это означает, что вы выполняете ./bochs -f bochsrc без добавления sudo, и вы можете выполнить его с помощью sudo.
Окончательный рабочий интерфейс выглядит следующим образом:
Сразу после выполнения sudo ./bochs -f bochsrc для запуска bochs наш Hello OS World не отображается сразу! , потому что Bochs запускает режим отладки, как показано ниже.
В это время нам нужно переключиться на интерфейс терминала оболочки, и дисплей терминалаbochs:1, мы вводим c и нажимаем Enter, и продолжаем запускать bochs.Наконец, если вы чувствуете, что застряли, увеличьте объем памяти виртуальной машины.