- PVSM.RU - https://www.pvsm.ru -

Установка Gentoo на Playstation 3

Установка Gentoo на Playstation 3 - 1


История Linux на PS3 довольно интересна. Если вы знакомы с историей PS3, то, вероятно, знаете, что Sony выпустила её в 2006 году с поддержкой возможности запуска других операционных систем при помощи функции под названием OtherOS. OtherOS позволяла пользователям устанавливать операционные системы наподобие Linux или FreeBSD во второй раздел жёсткого диска PS3.

В 2010 году Sony в прошивке 3.21 избавилась от поддержки OtherOS «из соображений безопасности». На самом деле это означало, что некоторые люди начали использовать эту функцию для глубокого изучения внутренностей PS3 и разбираться, как пиратить игры. Благодаря модифицированной прошивке, можно использовать OtherOS с современными прошивками; именно этим мы и займёмся.

Технические характеристики PS3:

  • CPU: Cell Broadband Engine
  • ОЗУ: 256 МБ
  • GPU: не имеет значения, потому что в конце концов я его так и не использовал
  • Накопитель: 2,5-дюймовый SATA SSD

Если вы незнакомы с архитектурой PS3, то, вероятно, задаётесь вопросом: что это за Cell Broadband Engine?

Ох, трудновато будет объяснить… CPU консоли PS3 — сложное и странное устройство, а я, наверно, недостаточно умён, чтобы объяснять его структуру. Если вы хотите прочитать подробное объяснение Cell Broadband Engine, то крайне рекомендую абсолютно фантастическую статью Родриго Копетти об архитектуре PS3 [1].

В упрощённом виде можно сказать, что Cell Broadband Engine, который я далее буду называть Cell — это CPU, разработанный IBM, Sony и Toshiba для применения в суперкомпьютерах. Поэтому Sony решила, что это идеальный выбор для игровой консоли. Cell работает на частоте 3,2 ГГц, а его основной CPU называется Power Processing Element (PPE). PPE — это одноядерный двухпоточный 64-битный CPU PowerPC, спроектированный IBM. Сама по себе идея одноядерного CPU с hyperthreading звучит абсолютно ужасно, особенно в сравнении с трёхядерным шестипоточным CPU Xenon консоли Xbox 360, но хотя основным процессором Cell является PPE, он не единственный. Cell также содержит в себе восемь Synergistic Processing Element (SPE). SPE — это более мелкие ядра, спроектированные на основе проприетарной архитектуры, предназначенные для программирования на выполнение специфических задач с целью снижения нагрузки на PPE. Идея заключалась в том, чтобы PPE передавал конкретные задачи ядрам SPE, например, приказывая одному из них выполнять обработку аудио, декодирование MPEG и тому подобное. Вместо специализированных чипов для обработки конкретных функций, у разработчиков было шесть SPE, которые можно было использовать для любых специализированных операций в их играх.

Но ведь вы кажется сказали, что их восемь?

Ну, хотя теоретически в Cell их было восемь, Sony представила разработчикам доступ только к шести из них. Одно ядро всегда отключается сразу после запуска. Это сделано для того, чтобы если в процессе производства одно SPE оказалось неисправным, не пришлось выбрасывать весь чип. Ещё одно ядро использовалось гипервизором и ядром PS3 для задач, связанных с безопасностью.

И это самое хорошее объяснение процессора Cell, которое я могу дать. Если вам нужно больше подробностей, то прочитайте статью Родриго о PS3. Также стоит посмотреть другие его статьи про интересующие вас консоли, они все потрясающие.

Впрочем, наша статья должна быть про Linux.

Итак, запуск Linux на PS3. Если у вас не первая «толстая» модель PS3 с прошивкой старше 3.21, то вам сначала придётся подвергнуть её моддингу и запустить модифицированную прошивку. Я не буду вдаваться в подробности, если вам любопытно, то изучите вики [2].

У нас есть PS3 и на ней установлена модифицированная прошивка. Здорово, я могу пиратить игры, но мне хочется запустить эту штуку с пингвином!

На самом деле, я не знаю, с чего начать разговор о запуске Linux на PS3. Я экспериментировал с этим примерно пять лет назад, в конечном счёте найдя старый пост на форуме, который использовал в качестве руководства.

Установка Gentoo на Playstation 3 - 2

Установка Windows 2000 в QEMU в полной эмуляции x86 внутри Red Ribbon Linux на PS3 в 2018 году

В 2018 году я воспользовался в качестве инструкции по установке Linux на PS3 этим постом на PSX-Place [3]. К счастью, ссылки на скачивание в этом посте всё ещё работают, поэтому первым делом я скачал все файлы и заменил жёсткий диск PS3, чтобы не стереть случайно какие-то игры. Затем я установил специальную прошивку из поста, которая была модифицирована: при форматировании жёсткого диска она создаёт раздел для OtherOS. Затем я проделал простой процесс записи образа для установки загрузчика Petitboot на PS3, и можно было приступать.

Ну, или типа того…

Теперь у меня есть возможность запустить Linux, но мне всё равно нужен был дистрибутив с хорошей поддержкой ppc64 и ядром, которое заработает на PS3. После всех своих безуспешных предыдущих попыток компиляции работающего ядра для Xbox 360 я решил начать с того, чтобы поискать готовое скомпилированное ядро, которое бы заработало. Довольно быстро я нашёл на archive.org это [4] ядро 5.6.0 с патчами ядра Gentoo; я решил, что с Gentoo начать будет вполне неплохо.

Я скачал архив, положил ядро и другие загрузочные файлы из архива в раздел FAT32 на флэшку, создал на ней второй раздел ext4 и извлёк на него Gentoo stage3 tarball. Затем я просто вставил её в PS3 и запустил Petitboot.

Установка Gentoo на Playstation 3 - 3

Загрузчик Petitboot

Установка Gentoo на Playstation 3 - 4

Gentoo, запущенная на найденном мной ядре 5.6.0

Я был в таком восторге, что всё заработало и уже хотел скачать stage3, чтобы извлечь его в другой раздел OtherOS и начать работать с Gentoo, но потом осознал, что есть проблема. У этого ядра не было драйверов для чтения таблицы разделов PS3. Это означало, что Gentoo не сможет увидеть область жёсткого диска, которую создала для неё OtherOS. У меня было два варианта. Или просто установить Gentoo с USB, или попытаться скомпилировать ядро с поддержкой таблицы разделов PS3.

Поначалу я выбрал вариант с USB, потому что не хотел тратить кучу времени на то, чтобы заставить работать ядро. Всё шло хорошо, пока на следующий день я не осознал, что скачал 32-битный powerpc stage3 вместо 64-битного. Это значило, что придётся начинать всё сначала. Я решил, что если нужно начать сначала, то я всё-таки попытаюсь добиться поддержки таблицы разделов PS3.

Так с чего же начать создание собственного ядра?

Сильно упрощало ситуацию то, что, в отличие от Xbox 360, в ядре основной ветви по-прежнему сохранялась поддержка PS3. Ядро основной ветви не имеет поддержки таблицы разделов и кое-чего другого, но имеет поддержку, по сути, всего оборудования. Мне оставалось найти патчи для накопителя, и проблема бы решилась. После длительных исследований я нашёл этот [5] пост на форуме PSX-Place, в котором кто-то опубликовал множество патчей для современных ядер; самыми свежими были патчи для 5.15, поэтому я решил выбрать его.

Скачав патчи ядра, которые могли работать, я скачал исходники ps3-linux 5.15 [6] и патчи Gentoo для 5.15 [7]. Теперь, когда у меня было всё необходимое, настало время для сборки. Прежде чем пробовать найденные мной патчи ядра, я решил просто установить только патчи Gentoo и собрать его, чтобы убедиться, что скомпилированное мной действительно заработает.

Я решил собирать ядро на своём сервере, потому что хотел, чтобы оно собралось как можно быстрее. На компиляцию ядра ушло всего две минуты, однако мне пришлось пожертвовать своим слухом [8].

Итак, потратив кучу электричества в доме своих родителей, я получил двоичный файл ядра powerpc. Оставался лишь один вопрос: работает ли он?

Установка Gentoo на Playstation 3 - 5

Да

Теперь мне оставалось всего лишь запечь в ядро драйверы USB и применить патчи таблицы разделов ps3. Ещё немного минут вреда для моего слуха, и у меня появилось новое ядро для проверки.

Клавиатура заработала и нашла рут Gentoo на флешке. Увидит ли он раздел OtherOS?

Нет.

Потому что я применил патчи, но не включил их в menuconfig.

Ладно, скомпилируем ещё раз, надеюсь, теперь я его увижу?

Установка Gentoo на Playstation 3 - 6

Да

У меня получилось! Я скомпилировал работающее ядро! Я, идиот! Мне удалось сделать что-то правильно!

После всех этих восторгов я наконец-то приступил к работе с Gentoo. Я просто максимально точно следовал инструкциям, потому что раньше никогда не пользовался Gentoo. Пока я выполнял небольшие шаги наподобие конфигурирования CFLAGS и прочего, я начал искать, делал ли кто-нибудь что-то интересное с Linux на PS3. Так я нашёл ps3linux.net [9]. Моё внимание на этом сайте привлекла одна вещь.

Да, этот веб-сайт полностью хостится [10] на моём джейлбрейкнутом Linux-сервере PS3. Единственном в мире (попробуйте доказать, что это не так).

Тогда я понял, что мне нужно сделать: доказать неправоту владельца сайта.

Примерно в то же время я начал обновлять world [11] set, поэтому должно было пройти какое-то время, прежде чем можно будет приступать к установке apache или nginx. Однако у меня был Python, а у Python есть встроенный http-сервер. Меня он вполне устраивал. Я быстренько набросал веб-сайт и настроил на своём сервере iptables, чтобы он мог находиться онлайн. Если кому-то любопытно, он находится по адресу ps3.lilysthings.org [12]. Он проработает несколько дней после публикации этого поста, но рано или поздно я отключу его, чтобы снова играть в игры на PS3.

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

На следующее утро всё действительно завершилось. На этом этапе я закончил с настройкой Gentoo и уже мог сделать с ней что-нибудь. Я не знал, что хочу сделать, поэтому решил попытаться запустить X. Мне пришлось начать компилировать всё для openbox, после чего всё было готово к работе. Вскоре после этого я запустил компиляцию cmake, зная, что она, вероятно, не закончится, даже когда я вернусь домой.

Разумеется, так и произошло. На самом деле, не закончилась даже раскрутка компилятора.

Я решил попробовать заставить работать distcc, чтобы переложить всю тяжёлую нагрузку на сервер. Спустя множество проб и ошибок я смог заставить его работать, и cmake был готов всего примерно через полчаса. Я скомпилировал ещё множество разных вещей, но потом мне пришлось отправиться на несколько дней к своей маме. Я собрал PS3 и понял, что можно просто запустить distcc на своём ноутбуке там.

Но что бы я ни делал, мне не удавалось запустить distcc на ноутбуке и PS3.

На этом этапе я потерял веру в Gentoo, потому что не собирался возвращаться к компилированию на самой PS3. Я решил выбрать Void Linux, потому что существовал его неофициальный порт для powerpc, всё ещё имевший хорошую поддержку. На этот раз я не хотел заморачиваться с жёстким диском, чтобы не стирать установленную Gentoo, поэтому просто запустил его с USB. Void настолько мал, что на самом деле это неважно. Я скачал rootfs tarball, он весил всего 37 МБ.

Установка Gentoo на Playstation 3 - 7

Void запустился без проблем и после того, как начал обновление, я задумался, что мне хочется с ним сделать? У меня не было никаких идей. Я попробовал настроить X, но как ни пытался, мне не удавалось заставить его работать. Примерно в это время я решил, что пора заканчивать с этим проектом, так что придумал последнее, что можно сделать. Я скачал T2SDE, так как это был единственный дистрибутив, по-прежнему активно поддерживал PS3, и я знал, что X в нём работал.

Но он вообще не заработал.

Я даже не смог заставить запуститься установщик.

Он запускался, но зависал каждый раз, когда я пытался выполнить какую-нибудь команду. Так как T2SDE создавался с целью разработки, я решил, что, вероятно, ему нужна дополнительная память, которая имеется у девкитов PS3. У меня этого устройства не было, поэтому я решил, что на этом и закончу проект.

Как бы ни интересно мне было, я начал уставать от того, что смотрю в терминалы и пытаюсь заставить всё работать.

Все файлы и остальное, что я использовал для запуска Linux, в том числе и собранное мной ядро можно найти здесь [13].

Автор:
ru_vds

Источник [14]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/385502

Ссылки в тексте:

[1] архитектуре PS3: https://www.copetti.org/writings/consoles/playstation-3/

[2] изучите вики: https://consolemods.org/wiki/PS3:PS3_Mods_Wiki

[3] этим постом на PSX-Place: https://www.psx-place.com/threads/tutorial-read-warning-installing-red-ribbon-linux-on-rebug-4-81-2-4-84-2-d-rex.16419/

[4] это: https://archive.org/details/ps-3-boot-kernel.-7z

[5] этот: https://www.psx-place.com/threads/linux-patch-update-and-issue.34668/

[6] ps3-linux 5.15: https://git.kernel.org/pub/scm/linux/kernel/git/geoff/ps3-linux.git/tag/?h=v5.15

[7] патчи Gentoo для 5.15: https://dev.gentoo.org/~mpagano/genpatches/trunk/5.15/4567_distro-Gentoo-Kconfig.patch

[8] мне пришлось пожертвовать своим слухом: https://mastodon.lilysthings.org/@i_lost_my_bagel/110488482305395434

[9] ps3linux.net: http://ps3linux.net/

[10] хостится: https://www.reg.ru/?rlink=reflink-717

[11] world: https://habr.com/ru/users/world/

[12] ps3.lilysthings.org: https://ps3.lilysthings.org

[13] здесь: https://archive.org/details/ps3-linux-kernel-files

[14] Источник: https://habr.com/ru/companies/ruvds/articles/743070/?utm_source=habrahabr&utm_medium=rss&utm_campaign=743070