Запускаем Windows 10 на калькуляторе

S

SSHMAN

Original poster
fe46d6924a00ceba7cc025e97391dea3.jpg

HP Prime G2 под операционной системой Windows 10 IoT



83c1bc19e073de4640016ff7d896d798.png



Спецификации SoC на HP Prime G2. В SoC NXP i.MX 6ULL (Ultra Lite) установлен одноядерный процессор Cortex А7



Предыдущие работы
Мой друг

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

сделал

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

по обратной разработке GPIO и технических характеристик калькулятора. Кроме того, ему

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

на калькулятор рабочую

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

и

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

.

Согласно

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

, в калькуляторе предусмотрено большое количество тестовых пинов, включая SD/MMC, JTAG и UART.


Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

изучила возможность запуска Windows RT на платформе

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

. К 2019 году кое-что изменилось, но статья не потеряла своей ценности.

Microsoft заключила соглашение NXP, чтобы обеспечить поддержку Windows 10 IoT на микросхемах iMX SoC. Таким образом, технически Windows 10 IoT должна работать на этом калькуляторе (как и вообще, Windows на ARM).



Уточняем системные требования Windows


Системные требования для запуска ОС семейства Windows 10

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

. Даже самые минимальные требования больше, чем у Linux: системе нужен процессор x86/x64/ARMv7/AArch64, по крайней мере 256 МБ памяти и 2 ГБ на диске. Требуется функциональная прошивка UEFI, полные таблицы ACPI и SMBIOS.



В нашем случае на устройстве недостаточно места (и Windows также не поддерживает Raw SLC NAND), но к калькулятору можно подключить загрузочное устройство по USB.



Сара перечисляет архитектурные требования к ARMv7 для запуска Windows. За прошедшие годы требования немного изменились, вот как они выглядят на данный момент:



Системный процессор: ARMv7-A совместимый процессор с VFPv3+VFP HalfPrec, VFPv4 также подойдёт
Память: минимум 256 МБ RAM (вероятно, можно и меньше)
Периферийные устройства:
- Системный таймер (или по архитектуре, или от вендора)
- ARM Generic Interrupt Controller (GIC) или Broadcom Interrupt Controller на BCM2835/2836/2837, наличие CPU и Distributor Interface. Если в системе присутствует и декларируется GIC, требуется GICv2 иои выше
- Фреймбуфер
- Поддержка UART, или NS16550, BCM283x, или от вендора (в случае Qualcomm и NXP)
- Прошивка: UEFI 2.3 или выше



Наш калькулятор соответствует этим жёстким требованиям. Однако SoC по умолчанию работает на 396 МГц, это меньше базового уровня 400 МГц/1 ГГц. Также сообщается о 250 МБ системной памяти, в то время как минимальное требование для системы с UI составляет 512 МБ. Но она загружается!



8191463700b55caf66ef3589cfb3306a.jpg

По данным cpuinfo из WinDbg, SoC работает на частоте 396 МГц



Думаю, можно ещё сильнее сократить требования. Если я правильно помню, Windows Server Nano хватает около 150 МБ памяти для загрузки на системах amd64.



UEFI и ACPI



Я уже несколько раз писал о

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

, так что здесь ничего нового. В основном UEFI состоит из набора драйверов устройств и компонентов ядра

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

. Таблицы ACPI копируются из репозитория

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

и урезаются.



UEFI загружается из

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

. iMX по умолчанию не разрешает доступ к невыровненной памяти, и это вызывает много проблем на этапах UEFI DXE и BDS, так что следует включить его как можно раньше.



mrc p15, 0, r0, c1, c0, 0
bic r0, r0, #2
mcr p15, 0, r0, c1, c0, 0



Компилятор с аппаратной поддержкой float ускоряет загрузчик примерно с 30 до 4 секунд. На платформах ARMv7 Windows заявляет поддержку VFPv3+.



Инициализация экрана, а также некоторые назначения I/O mux выполняются в U-Boot. Сейчас U-Boot не поддерживает интерфейс 24/32bpp Serial RGB LCD, поэтому я добавил поддержку Serial RGB через реализацию фреймбуфера iMX в ядре Linux. Код ещё не в мастере, но я позже передам его туда.



ryycdw-dae7kuyg1e04tqc4mdom.jpeg

Кажется, LCD работает. Вся процедура:



  1. Запустить uboot.
  2. Найти пин для подсветки экрана.
  3. Найти пин для SPI и последовательность инициализации LCD.
  4. Найти пин I2C и настроить PMIC через I2C для правильного напряжения.


9xkbbekvqzc21vlimqughncfygo.jpeg



Демонстрация работы интерфейса Serial RGB LCD в U-Boot



UEFI просто берёт фреймбуфер, выделенный U-Boot, и регистрирует протокол вывода графики Graphics Output Protocol. К сожалению, разрешение экрана не удовлетворяет минимальным требованиям консоли 80*25, поэтому я изменил компоненты Console DXE, добавив новый режим 40*12.



in5u5nj6i7w-6al9z356l3bxhcq.jpeg



Компонент EDK2 утверждает, что разрешение экрана не соответствует минимальным требованиям консоли 80*25



Перед хаком компонентов консоли я сделал небольшой трюк, зарепортив разрешение 640*480 в протокол UEFI GOP. Трюк также помог получить диагностическую информацию из Диспетчера загрузки Windows, потому что разрешения 320*240 недостаточно для отображения кода ошибки. Я периодически запускаю из фреймбуфера block-transfer (BLT) в файловую систему и сохраняю BMP-файлы на USB-накопителе.



quqyatdtrwf-sr8ibwmty1cm5nu.jpeg



Хак делает доступным режим 80*25 с некоторыми графическими артефактами



После подключения нового режима качество изображения значительно улучшается.



x6js9xbo_ietmgqnihcr5aocayk.jpeg



Режим 40*12



933ta2c6xtz1edrjqqqvb6_ouzw.jpeg



Режим 40*12



Вот как выглядит сообщение диспетчера загрузки Windows на разрешении 320*240:



ptwlgcqlzye8ykjmfv-fdxz5rlw.jpeg





Первая попытка терпит неудачу ещё на этапе служб загрузки UEFI. Из-за маленького экрана не виден код ошибки.



zv0v8zpumqqaynhcmuovmdq7r6c.png



Block-transfer (BLT) из фреймбуфера позволяет сохранить сообщение в графический файл и прочитать его



По поводу поддержки USB. К счастью, USB в iMX6 полностью соответствует стандарту, а поддержка включена в последние версии Windows. Поэтому, как только я настроил контроллер OTG в режим хоста и передал область MMIO в UEFI и Windows, он волшебно работает без проблем. Но мы не нашли VBus на порту OTG (предполагаем, что там какая-то схема DC-DC, управляемая SoC или PMIC, но это лишь непроверенная гипотеза), поэтому для корректной работы порт нужно запитывать через некий внешний источник.



SMBIOS



Убедитесь, что правильно сообщаете в SMBIOS размер памяти и адресные области, или Windows начнёт вытворять невероятно странные вещи (tm).



76cb124cd519c4b280c9170f38379dc6.jpg



Отладчик Windows не может считать память из-за неправильной конфигурации SMBIOS



Таймер и расширения HAL



Кажется, мы справились с конфигурацией памяти (LPAE), но наверняка появится какая-то другая проблема. О да…



80nr0iilsuwgzgkqvs2edu0fv1i.png





Итак, загрузка Windows пока доходит только до этого этапа.



6evetavhyuog9s7uyuirhxku6e8.png



Если не найден подходящий системный таймер, Windows обращается к некоему предполагаемому и недопустимому адресу памяти



Windows не загрузится, если не найден контроллер прерываний или системный таймер. Системное время можно зарегистрировать с помощью таблицы GTDT (таблица архитектуры ARM) или расширений HAL через таблицу CSRT.



iMX6ULL поставляется с тремя таймерами: iMX GPT (Generic Purpose Timer), EPIT (Enhanced Periodic Timer) и ARM Architectural Timer. Последний появился только в iMX6UL/ULL, тогда как предыдущие системы iMX6 SoC работали на старых ядрах вроде Cortex A15 без поддержки архитектурного таймера. Microsoft реализовала для системного таймера расширение EPIT HAL, но оно сначала не загружалось из-за несоответствия идентификатора оборудования в таблице CSRT и системном образе (я загрузил более ранний FFU для iMX6 Solo). Поэтому когда таймер недоступен, Windows будет отчаянно пытаться инициализировать предполагаемый таймер, и система упадёт из-за недопустимого доступа к памяти.



В документации iMX6ULL упоминается архитектурный таймер, но без подробностей о процедуре инициализации. Счётчик таймера можно инициализировать кодом EDK2, но GIC PPI (Per Processor Interrupt) не будет корректно работать. Однако Windows успешно инициализирует и использует таймер через таблицу GTDT.



В данный момент UEFI использует таймер EPIT и отключает его при передаче в Windows. В свою очередь, Windows инициализирует таймер GPT. В какой-то более поздний момент UEFI тоже может переключиться на GPT с надлежащей процедурой инициализации.



Некоторым периферийным устройствам требуется расширение HAL для контроллера Smart DMA (SDMA), его не слишком трудно загрузить.



Покажи, как это работает!



[Security] 3rd party image[0] can be loaded after EndOfDxe: VenHw(0D51905B-B77E-452A-A2C0-ECA0CC8D514A,004118020000000000)/USB(0x0,0x0)/USB(0x2,0x0)/HD(1,GPT,F9ADAEA9-E8DE-4291-B191-5DABA6DC1215,0x800,0x100000)/\efi\boot\bootarm.efi.
InstallProtocolInterface: 5B1B31A1-9562-11D2-8E3F-00A0C969723B 8F257028
ConvertPages: failed to find range 10000000 - 100EEFFF
Loading driver at 0x0008E9D6000 EntryPoint=0x0008E9E7511 bootmgfw.efi
InstallProtocolInterface: BC62157E-3E33-4FEC-9920-2D3B36D750DF 8F28EB10
ProtectUefiImageCommon - 0x8F257028
0x000000008E9D6000 - 0x00000000000EF000
InstallProtocolInterface: 752F3136-4E16-4FDC-A22A-E5F46812F4CA 8FBFF88C
ConvertPages: failed to find range 102000 - 102FFF
Disabling EPIT timer on ExitBootServicesEventSetUefiImageMemoryAttributes - 0x000000008F78A000 - 0x0000000000003000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000008F787000 - 0x0000000000003000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000008F784000 - 0x0000000000003000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000008F77F000 - 0x0000000000005000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000008F77C000 - 0x0000000000003000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000008F779000 - 0x0000000000003000 (0x0000000000000008)



Если интересно, насколько медленно это загружается, то около трёх с половиной минут.



Видео на ускоренной скорости 2х:









Где Secure Boot и TPM?



На самом деле это необязательно. Но поскольку OP-TEE поддерживает iMX6/7/8, вы можете запустить Secure Monitor в TrustZone (TZ) и реализовать эти сервисы через вызовы (Secure Monitor Calls) от EL1/PL1.



На самом деле официальная реализация iMX Windows IoT поставляется с OP-TEE, но я её проигнорировал ради экономии памяти.



Что насчёт драйверов?



В репозитории

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

лежит множество драйверов для iMX6/7/8. Драйвер USB работает из коробки, как уже упоминалось. Для калькулятора нужны ещё драйверы тачскрина и клавиатуры.



Они доступны в дереве ядра Linux, так что не должно быть слишком сложно портировать их на Windows.



Можно ли загрузить Windows RT 8.1?



Возможно. Обновление: Windows RT 8.1 не загрузится, только более поздние версии. Windows PE не загрузится в режиме ramdisk, поскольку 256 МБ памяти недостаточно. Мне не удалось запустить режим flat boot, после перечисления устройств (включая USB-накопитель) он входит в какой-то цикл без дальнейшей инициализации.



8qoidosbunc7xdy8ogqrcygg28o.jpeg



HP Prime G2 загрузил Windows, которая запустила приложение калькулятора



osh7ladn3vfqypyeexumq09kgvo.jpeg



Блокнот на калькуляторе



vzk0e2vi2huuhj5okxqym6jn5ge.jpeg



Блокнот на калькуляторе пытается отправить текст на печать



Но я хочу загрузить Linux тоже!



Есть два варианта:



  • Просто использовать U-Boot для загрузки zImage, дерева устройств и initrd.
  • Переместить области памяти FD, MpPark и FrameBuffer в верхнюю часть системной памяти, оставив свободными 128 МБ в нижней области памяти.


Загрузите Linux через GRUB или непосредственно из EFISTUB. Всё нормально загружается, вот фрагмент лога:



EFI stub: Exiting boot services and installing virtual address map…
Disabling EPIT timer on ExitBootServicesEventSetUefiImageMemoryAttributes - 0x000000008F97B000 - 0x0000000000003000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000008F978000 - 0x0000000000003000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000008F973000 - 0x0000000000005000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000008F970000 - 0x0000000000003000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000008F96D000 - 0x0000000000003000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000008F96A000 - 0x0000000000003000 (0x0000000000000008)
Booting Linux on physical CPU 0x0
Linux version 4.14.98-g371433a62906-dirty (imbushuo@bc-macbookpro) (gcc version 7.4.1 20181213 [linaro-7.4-2019.02 revision 56ec6f6b99cc167ff0c2f8e1a2eed33b1edc85d4] (Linaro GCC 7.4-2019.02)) #2 PREEMPT Thu Nov 14 03:10:29 EST 2019
CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
CPU: div instructions available: patching division code
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt: Machine model: HP Prime G2 Calculator
Memory policy: Data cache writeback
efi: Getting EFI parameters from FDT:
efi: EFI v2.70 by EDK II
efi: ACPI 2.0=0x8f49b000 SMBIOS=0x8f9a8000 SMBIOS 3.0=0x8f9a6000
OF: reserved mem: failed to allocate memory for node 'linux,cma'
CPU: All CPU(s) started in SVC mode.
Built 1 zonelists, mobility grouping on. Total pages: 64516
Kernel command line: zImage.efi root=/dev/ram0 rw initrd=/rootfs.cpio.gz dtb=/imx6ull-14x14-prime.dtb



Если вы используете конфигурацию NXP Linux, это приведёт к сбою ядра, потому что она читает адрес памяти initrd из дерева устройств или некоторых предопределённых параметров конфигурации, и, конечно же, initrd загружается где-то ещё в UEFI. Необходимо удалить эти параметры и сделать конфигурацию более универсальной.
 

Вложения

  • 1582659049232.png
    1582659049232.png
    48 КБ · Просмотры: 41 141
2

2we1rd

Original poster
Я так понимаю, логичным продолжением этой статьи станет установка kali? :D
 
Название темы
Автор Заголовок Раздел Ответы Дата
M Запускаем муравьев на рабочий стол Свободное общение и флейм 5
K Запускаем GSM-сеть у себя дома Полезные статьи 3
Allen Запускаем собственный VPN-сервер на SSD VDS Полезные статьи 0
Support81 Пользователи Windows, будьте осторожны: DarkGate использует уязвимость нулевого дня Новости в сети 0
R Windows 11 Ukraine Свободное общение и флейм 0
S Новый Windows 11 этой осенью Свободное общение и флейм 4
R Скоростные VPS сервера на Windows — OneDash RDP Сайты/Хостинг/Сервера 1
R Незагружается Windows 10 + VeraCrypt Свободное общение и флейм 4
E Уязвимости в SolarWinds позволяли перехватить контроль над Windows-серверами Новости в сети 0
D Повышение прав Windows Server 2008 Предоставляю работу. Ищу специалиста. 0
Y Windows 10. Настройка и мифы Полезные статьи 2
G Интересно [Chrome] режим Инкогнито по ярлыку в Windows. Анонимность и приватность 0
H Очистка и перезагрузка кеша DNS в Windows Корзина 0
H Новый Linux-модуль платформы TrickBot тайно атакует Windows-ПК Подробнее: https://www.securitylab.ru/news/510661.php Корзина 0
V Ожидает оплаты Продажа дедиков серверов купить vps vds на windows от 60 рублей! магазин vps vds дедиков и виртуальных серверов vps vds https://vpskot.ru Дедики/VPN/соксы/ssh 72
NickelBlack Интересно Уязвимость Zero Day в Защитнике Windows AV Уязвимости и взлом 1
Denik Интересно Взлом WINDOWS 10 с помощью TORAT Уязвимости и взлом 4
Д Аренда VPS/VDS сервера. Аренда VPS от 260 руб. Windows/Linux Server. Сайты/Хостинг/Сервера 3
Y Установка и настройка OpenVPN сервера на windows Полезные статьи 2
Denik Интересно Учимся использовать Windows при полной анонимности Анонимность и приватность 1
Denik Интересно Трояны для слежки под Windows, macOS, Linux, Android, iOS Анонимность и приватность 0
CMDfromBAT Интересно Ninjutsu-OS: "Kali Linux" в среде Windows Полезные статьи 48
G Продам GhostSeller - Windows VPS (дедики) практически под любой софт Дедики/VPN/соксы/ssh 1
andre5787 Whonix + Windows 7 x64 Вопросы и интересы 1
E Интересно Превращаем обычный смартфон с Android в настоящий Windows Полезные статьи 0
Y Продам софт Windows,Антивирусы,Набор Office Pro Plus,Google диски Продажа софта 1
S Усовершенствованный метод сокрытия подгруженной dll в изложении на C для новых ОС семейства Windows Уязвимости и взлом 0
GhosTM@n Интересно Adobe Acrobat Reader DC for Windows - Use of Uninitialized Pointer due to Malformed JBIG2Globals Stream Полезные статьи 0
S Продам vps windows linux 2.50 $ месяц, вы также можете арендовать на час за 0.03 $ Сайты/Хостинг/Сервера 2
S Разработка ПО под Windows Ищу работу. Предлагаю свои услуги. 3
G Перепродажа ключей windows Способы заработка 5
W Ключ на Windows 10 pro Другое 0
W Быстрая активация любой версии Windows | Office без программ. Обновления воркают Другое 3
M RedAlert - издеваемся над Windows вашего друга Полезные статьи 0
Multi-VPN Как отключить IPv6 в Windows и не спалить свой IPv6 адрес за VPN SSH / дедики / Vpn / Proxy / Socks 0
M Разведка в Active Directory. Получаем пользовательские данные в сетях Windows без привилегий Корзина 2
M Сочетания клавиш Windows которые полезно знать Полезные статьи 0
M Взлом пароля Windows 10, 8 и 7 программой John the Ripper Анонимность и приватность 0
4 4server.su - Аренда дедиков на windows от 298р/мес(любые задачи)[NEW Аренда через бота Telegram] Ищу работу. Предлагаю свои услуги. 0
S Прятачем файлы в картинке (Windows) Полезные статьи 0
M Конфиденциальность Windows 10: минимизируем передачу данных Настройка системы для работы 2
M Wox Launcher - сильная альтернатива поиску Windows Софт для работы с текстом/Другой софт 0
B Интересно Kali Linux в WINDOWS Полезные статьи 7
M Хакер установил Windows 10 на калькулятор Новости в сети 5
M Новый Windows Terminal Полезные статьи 0
CMDfromBAT Интересно sAINT - стиллер на Kali Linux, который твой Windows Защитник не распознает Вирусология 33
B Продам Продам Windows 7,10. Office 2010-2019, 365. Все что не подошло по разделу 0
M Как отключить Защитник в Windows навсегда Настройка системы для работы 0
M Error Lookup - чтение кодов ошибок Windows Софт для работы с текстом/Другой софт 0
M BleachBit - умный уборщик в Windows Настройка системы для работы 0

Название темы