Рубріки: Новости

Энтузиаст разработал самый удобный способ переключения между Windows и Linux

Богдан Мирченко

Разработчик программного обеспечения (ПО) в Weta Digital Стивен Холдэуэй создал физический переключатель между операционными системами (ОС) Windows и Linux при включении компьютера. По словам автора, его утомила постоянная двойная загрузка, чтобы изменить выбор ОС в загрузчике GRUB, поэтому разработал переключатель, который выполнил на микроконтроллере STM32.

Переключатель выбора аппаратной ОС

Доступ к USB-устройству в GRUB

Сначала автор хотел создать USB-устройство с настраиваемым интерфейсом для считывания положение переключателя, но не был уверен, справится ли с этой задачей GRUB. Загрузчик настроен с помощью упрощенного языка сценариев. Под ним находится система модулей, написанных на C. 

GRUB реализует встроенную поддержку USB в модулях ehciuhci и ohci, но загрузка любого из них отключает обычный механизм, используемый для доступа к дискам через BIOS. В качестве альтернативы мог бы использоваться модуль nativedisk для доступа к дискам независимо от BIOS, но он не позволяет GRUB загружать Windows по цепочке, что делает данный подход не подходящим. 

Вместо того, чтобы создавать пользовательский интерфейс USB, автор использовал наличие у GRUB доступа ко всем подключенным устройствам хранения. Для этого он определил переключатель ОС как хранилище, содержащее файл с информацией о положении переключателя Windows/Linux. 

Сборка чипа

Для сборки физической оболочки чипа были использованы: 

  • Тумблер;
  • Микроконтроллер STM32 с поддержкой USB;
  • Программатор ST-Link;
  • Классическая плата разработчика «синяя таблетка» STM32F103;
  • «Черная таблетка» STM32F4xx;
  • Макетная плата Adafruit Feather.

Прошивка чипа

Программная часть и инструкция по прошивке находятся в коде и доступны на 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

Возможные проблемы и их решение

  • Устройство недоступно в GRUB. Для решения проблемы убедитесь, что BIOS настроен на перечисления USB-накопителей. На некоторых материнских платах для этого требуется переключиться с режима «fast boot» на «normal boot». Если получается загрузиться с флешки, получится получить доступ к устройству и из GRUB.
  • Чтение из операционной системы. Чтобы получить доступ к состоянию переключателя из операционной системы необходимо реализовать второй интерфейс USB на устройстве или работать с отключенным блочным устройство.

Полная запись процесса доступна в журнале проекта.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023