[Edit]
Из справочной страницы GNU make:
Если параметр -f отсутствует, программа make будет искать файлы сборки GNUmakefile, makefile и Makefile в указанном порядке.
Передача аргументов возможна только в том случае, если у вас есть переменная, например, CFLAGS
, определенная в вашем Makefile:
CC=gcc
CFLAGS=-g -O -Wall -Werror
all: foo
foo: foo.o
$(CC) $(CFLAGS) $<
Здесь вы можете переопределить переменную с помощью
$ make CFLAGS="-ggdb -std=c99 -Wall -Werror"
gcc -ggdb -std=c99 -Wall -Werror -c -o foo.o foo.c
gcc -ggdb -std=c99 -Wall -Werror foo.o
Однако легче отредактировать Makefile.
Я пытался запустить один и тот же диск Windows поочередно на оборудовании и внутри виртуальной машины, но всегда терпел неудачу, потому что устройства, представленные внутри виртуальной машины, отличались от фактического оборудования.
Но, опираясь на ваш пункт " какая-то другая идея ", позвольте мне объяснить, как я запускаю Linux и Windows на одной машине.
Windows работает на виртуальной машине KVM, но виртуальная -программа просмотра контролирует одну виртуальную консоль. Когда я переключаюсь на эту консоль, для всего мира это выглядит так, как будто это выделенная машина с Windows. И я могу независимо входить и выходить из Linux и Windows. (И с Cygwin , установленным в Windows, я могу ssh
между ними.)
Вот примерно шаги, которые я предпринял для его настройки. Я скачал.iso от Microsoft и купил лицензию отдельно. Вы можете переустановить существующую лицензию Windows.
sudo vgcreate vg0 /dev/sd...
sudo lvcreate --size 128G --name win10 vg0
sudo virt-install --name Windows --connect qemu:///system --virt-type kvm --disk path=/dev/vg0/win10,format=raw --cdrom '<path>/Win10_1607_English_x64.iso' --network bridge=br0 --video qxl --chanel spicevm,target_type=virtio --graphics spice,listen=0.0.0.0,port=5900 --os-variant win10 --memorybacking nosharepages=true --memory 2048 --vcpus 1
Я создал устройство сетевого моста br0
на хосте Linux, чтобы можно было прозрачно подключать виртуальные машины. Но это отдельная тема.
Команда virt-install
автоматически вызывает virt-viewer
в первый раз, что приводит к запуску программы установки Windows 10. Единственный диск, который он видит, это виртуальный диск, который я создал и поместил в строку команды virt-install
-.Затем я загружаю его впоследствии:
virsh --connect qemu:///system start Windows
Это запускает машину, но не просматривает вывод. Чтобы просмотреть вывод, я переключаюсь на неиспользуемую виртуальную консоль, нажимая, например. CTRLALTF6 и введите эту команду. Обратите внимание, что мы запускаем X-приложение(virt-viewer
)непосредственно на X-сервере без оконного менеджера.
Переключатель -k
переводит виртуальную -программу просмотра в режим киоска , что эффективно скрывает тот факт, что программа действительно работает на виртуальной машине.
startx /usr/bin/virt-viewer -a -k -r -w -c qemu:///system Windows -- :6 -config CtrlAltBksp.conf -nolisten tcp -novtswitch
Файл CtrlAltBksp.conf
является необязательным. Он позволяет закрыть виртуальную -программу просмотра, нажав CTRLALTBackspace . Он должен быть помещен в /etc/X11/ на хосте или в другом каталоге, о котором xorg
знает. Вот он:
Section "ServerFlags"
Option "DontZap" "false"
EndSection
Section "InputClass"
Identifier "CTRL_ALT_BACKSPACE"
MatchIsKeyboard "on"
Option "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection
Примечание. :Вам не нужно устанавливать spice и qxl, как это сделал я, но если вы это сделаете, лучше установить инструменты spice .
Я запускал несколько операционных систем, установленных для двойной -загрузки со стороны -и -с QEMU, расположенным на дисках, но я не думаю, что когда-либо была установлена одна из них без загрузчика.
Если вы загружаетесь с UEFI, вам нужно будет использовать OVMF для QEMU, что означает, что все стало намного сложнее и выходит за рамки моих знаний.
Попробуйте установить и настроить GRUB в разделе Windows или загрузить загрузочный/установочный носитель Windows с помощью QEMU (, в противном случае Windows съест GRUB )и переустановит его, чтобы вернуть загрузчик Windows. Чтобы установить GRUB, используйте grub-install /dev/sdxY
, смонтируйте файловую систему и запустите grub-mkconfig -o /mnt/grub/grub.cfg
. Затем скопируйте то, что вам нужно, из существующего файла grub.cfg и отредактируйте его по мере необходимости --. Не стесняйтесь обращаться за помощью в этой теме.
Еще один вариант — изучить возможность простой установки загрузчика в Windows.
Ядерный вариант — это что-то вроде создания файла.img того же размера, что и ваш раздел Windows, с помощью qemu -img, переустановки Windows через QEMU в этот файл и копирования всего после определенного смещения из раздела (, вероятно, сразу после первых 1024 цилиндров или около того )в файл.img с dd.
Очень опасно продолжать использовать существующий GRUB для цепочки -загрузки в Windows, используя все ваши диски с опцией -только для чтения. См. комментарий @telcoM к OP;НЕ ЗАПУСКАЙТЕ ВИРТУАЛЬНУЮ МАШИНУ НА ДИСКЕ, -ИСПОЛЬЗУЕМОМ ХОСТИ! ФАЙЛОВАЯ СИСТЕМА БУДЕТ ПОВРЕЖДЕНА И НЕВОССТАНОВИМА!(ONLY, если он не используется для чтения -только гостем. )Попробуйте qemu-xxxxxxx -drive file=/dev/sdxX,format=raw,readonly
.
Тем не менее, QEMU может запускать необработанный диск:
qemu-xxxxxxxx -drive file=/dev/sdxY,format=raw
(см. man 1 qemu
и найдите диск -для получения дополнительной информации ).
Если у вас нет большого опыта работы с QEMU/KVM,запуск и настройка его непосредственно из командной строки -может быть пугающей и разочаровывающей --рассмотрите интерфейс -для вашего здоровья.
Вы можете использоватьdmsetup
из инструментов устройства -сопоставления с опцией--table
для «создания» блочного -устройства , напоминающего ваше /dev/sda
указавtable file
(Поиск «Формат таблицы»).
Вы можете использовать карты -только для чтения (или копии )некоторых разделов, таких как разделEFIBOOT
и раздел gpt / mbr-. ] таблица вместе с некоторыми zero
целями для «замены» ваших разделов Linux -на этой карте. Просто убедитесь, что вы включили настоящий раздел Windows (с )в карту таблицы и в нужное место в таблице.
Я использовал это в прошлом для аналогичной попытки, и, скорее всего, это механизм, виртуальный бокс , который используется под капотом в Linux для создания пользовательских составных блочных устройств.
Убедитесь, что ни один из ваших разделов не монтируется и не используется более чем одной ОС одновременно.