Разработчик программного обеспечения (ПО) в 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
Полная запись процесса доступна в журнале проекта.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…