Собственно началась эта история с покупки мной пары б/у тонких клиентов Compaq Evo T30. Т.к. до этого с фирменными тонкими клиентами дел не имел то не чуял никакого подвоха. Первым делом решил восстановить оригинальную прошивку от T30 т.к. терминалы были прошиты прежним хозяином прошивкой от одного умельца в которой содержался BIOS от T20 (почти идентичный тонкий клиент за исключением отсутствия PS/2 и различий в разводке некоторых GPIO выполняющих вспомогательные функции вроде отображения текущего режима). Была скачана оригинальная прошивка с hp.com, однако прошиваться железки отказались с руганью на «Invalid security key». Загуглив нашел описание формата этого образа и bundle-tools для упаковки/распаковки этих образов. Подменил оригинальный файлик с ключиком на файл из прошивки умельца, собрал, прошил нормально тем самым восстановив оригинальный биос. Теперь началось самое интересное. Изначально эта модификация поддерживает только WinCE и как следствие этого имеет на борту только NAND флеш на 32 метра и весьма оригинальный BIOS умеющий либо напрямую грузить из NAND файл nk.bin с ядром WinCE либо вешать на int 0x13 обработчик эмулирующий наличие жесткого диска и транслирующий все обращения к нему в файл filesys0.img в том же самом NAND. Первым делом попробовал подсунуть в фирмварь образ HDD с FreeDOS но все оказалось не так просто, железка просто зависала после сплэша биоса (как оказалось в последствии рабочие образы HDD содержали весьма специфичный MBR который кроме загрузки PBS дергал неизвестную функцию). Далее я переключил внимание на файл nk.bin. Загуглил формат, написал свой упаковщик/распаковщик секций и попытался найти универсальный загрузчик способный запускаться подобным образом но это не увенчалось успехом. Грузить ОС посредством цепочки nand_bios->filesys0.img_mbr->ntlrd->grub4dos->fd_image->other_loader->OS_or_gPXE мне жутко не хотелось и я переключил свое внимание на единственный адекватный способ заставить железо грузить то что я хочу. Дело в том что на системной плате присутствует 44 контактный IDE разъем но кастрированный BIOS заточенный под WinCE не умеет его использовать. На запрос о возможности загрузки T30 с IDE гугль выдавал только рекомендации по замене NAND флеша с дефолтного 2 мегабитного на 4 мегабитный с прошивкой от старших моделей а также упоминалось что диски этих моделей содержат некую служебную партицию (в версии для WinCE загрузка так же была многостадийной. Сперва запускался ROM BIOS который содержал функции ранней инициализации а так же утилиту netxfer для удаленной прошивки. Потом ROM BIOS считывал из NAND образ «нормального» BIOS'а и передавал ему управление, после чего уже этот BIOS загружал OS). Принялся искать товарищей имеющих программатор и нужное кол-во 4 мегабитных чипов попутно пытаясь отреверсить формат образа с Win NT Embedded и Win XP Embedded. Собственно сегодня днем до конца разобрался с форматом этого образа и написал утилиты для упаковки/распаковки. Внутри образа оказалось 2 интересующих меня файла, это ulc512.rom содержащий ROM BIOS и sst.raw содержащий образ диска с ОС. К сожалению найти человека способного одолжить на неопределенное время программатор и отсутствие 4 мегабитных чипов вынудило меня взглянуть что же содержится в этом образе и нельзя ли из него выкинуть ненужное. В итоге я обнаружил что в 512к на самом деле лежит 2 абсолютно идентичных образа BIOS. Так же выяснилось что в служебной партиции опять таки лежат образы с полным BIOS'ом, VGA BIOS'ом и PXE Option ROM (т.е. загрузка остается многостадийной но получаем возможность стандартными средствами загружаться с IDE или по PXE). Прошил железки выковырянным и порезанным пополам биосом, впаял в китайский CF2IDE 44 контактный разъем, залил на CF образ служебной партиции, установил CF2IDE с картой на системную плату и включил железку. Самое удивительное что это сразу же заработало и даже попыталось загрузить ОС. Вспомнив про грабли с нестандартным MBR в версии с WinCE залил на CF MBR от Plan9, включил, работает!
вот такой вот поток сознания вышел. вы уж не обессудьте. P.S. сейчас доставится Plan9 на CF и можно со спокойной душой идти спать ^_^