Разработчик программного обеспечения (ПО) в Weta Digital Стивен Холдэуэй создал физический переключатель между операционными системами (ОС) Windows и Linux при включении компьютера. По словам автора, его утомила постоянная двойная загрузка, чтобы изменить выбор ОС в загрузчике GRUB, поэтому разработал переключатель, который выполнил на микроконтроллере STM32.
Переключатель выбора аппаратной ОС
Сначала автор хотел создать USB-устройство с настраиваемым интерфейсом для считывания положение переключателя, но не был уверен, справится ли с этой задачей GRUB. Загрузчик настроен с помощью упрощенного языка сценариев. Под ним находится система модулей, написанных на C.
GRUB реализует встроенную поддержку USB в модулях ehci, uhci и ohci, но загрузка любого из них отключает обычный механизм, используемый для доступа к дискам через BIOS. В качестве альтернативы мог бы использоваться модуль nativedisk для доступа к дискам независимо от BIOS, но он не позволяет GRUB загружать Windows по цепочке, что делает данный подход не подходящим.
Вместо того, чтобы создавать пользовательский интерфейс USB, автор использовал наличие у GRUB доступа ко всем подключенным устройствам хранения. Для этого он определил переключатель ОС как хранилище, содержащее файл с информацией о положении переключателя Windows/Linux.
Для сборки физической оболочки чипа были использованы:
Программная часть и инструкция по прошивке находятся в коде и доступны на GitHub.
Прошивка действует как запоминающее устройство USB, содержащая динамический скрипт загрузчика GRUB, который устанавливает переменную для указания положения физического переключателя.
В Linux нужен установленный gcc-arm-none-eabi для сборки чипа и openocd для прошивки.
# Pull in libopencm3 git submodule init git submodule update # Build libopencm3 (only needed once) make -C libopencm3 -j8 # Build the firmware make # Flash with a J-Link programmer connected by SWD make flash # Flash with an ST-Link programmer connected by SWD make flash PROGRAMMER=stlink
Положение переключателя считывается с контакта A6. Подключите тумблер между этим контактом и GND для управления сообщаемым состоянием.
Чтобы искать и читать файлы с устройства, нужно изменить конфигурацию GRUB системы. В системах на основе Debian и Arch это спровоцирует включение редактирования скрипта в etc/grub.d/, а затем запуск update-grub для создания и проверки файла /boot/grub/grub.cfg, исполняемого при загрузке. Чтобы узнать, как это делается в конкретной ОС, нужно посмотреть документацию дистрибутива.
Ниже пример того, как переключатель можно использовать в скрипте GRUB.
# Look for hardware switch device by its hard-coded filesystem ID
search --no-floppy --fs-uuid --set hdswitch 55AA-6922
# If found, read dynamic config file and select appropriate entry for each position
if [ "${hdswitch}" ] ; then
source ($hdswitch)/switch_position_grub.cfg
if [ "${os_hw_switch}" == 0 ] ; then
# Boot Linux
set default="0"
elif [ "${os_hw_switch}" == 1 ] ; then
# Boot Windows
set default="2"
else
# Fallback to default
set default="${GRUB_DEFAULT}"
fi
else
set default="${GRUB_DEFAULT}"
fi Полная запись процесса доступна в журнале проекта.
На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…