Jump to content
XPEnology Community

Сборка и модификация kernel


Recommended Posts

  • 3 months later...
Спасибо за инструкцию! Только чем отредактировать synobios.ko?

Сначала его надо дизассемблировать, найти адреса инструкций и отпатчить любым HEX редактором.

Я использую IDA Pro для дизассемблирования и HIEW для редактирования.

Link to comment
Share on other sites

  • 2 weeks later...

Andy, давай может общими усилиями попытаемся сделать подробную инструкцию по сборке загрузчика под новые прошивки? Бродя по форуму то и дело постоянно натыкаюсь на сообщения "не работает то, не работает это" Я например не разобрался, как с помощью IDA и HIEW подредактировать synobios.ko Сделав такую инструкцию, практически каждый сможет собрать себе загрузчик под свое железо. Тем более не всегда можно включить все оборудование в .config Например: у меня стоит контроллер I/O ITE8728, в конфиге можно включить либо ITE87XX, либо ITE8728. То есть универсально уже не получается.

Вот мои наработки, точнее очень ранние наработки nanoboot. Но ничего не работает... Загружается и сразу poweroff

http://sendfile.su/989149

Link to comment
Share on other sites

  • 1 month later...

Доброго времени суток. Подсобите новичку, пожалуйста.

Появилась необходимость добавить в существующеее ядро драйвер САС-контроллера. На выходе получился bzImage размером 2.4 Мб. На загрузочной флешке с Nanoboot размер zImage порядка 12 Мб.

В связи с этим вопрос: просто подменить на флешку zImage не представляется возможным? Необходимо собирать полностью pat файл и переставлять систему? Или я где-то промахнулся?

Заранее благодарю.

Link to comment
Share on other sites

  • 3 months later...

В zImage кроме ядра включен еще ram-диск, который отрабатывает между загрузкой ядра и запуском DSM. В nanoboot в этот диск встроена подмена файлов и прочая борьба с защитой Syno.

Чтобы подменить ядро на свое нужна след. последовательность действий:

1. В исходниках ядра есть утиль scripts/extract-vmlinux, которая распаковывает ядро в исходный вид.

2. Ищем в файле ядра magic для образа cpio - строка "0707" (второе вхождение, первое попадает в код). Запоминаем смещение. Ищем конец образа cpio - строка "TRAILER!!!". Вычисляем размер.

3. Вытаскиваем этот образ, например с помощью dd.

4. Если в рам-диске менять ничего не надо, оставляем его до лучших времен в покое, лучше с расширением cpio, чтобы он обратно в ядро собрался.

5. Собираем ядро (вот тут все волшебные пузырьки, не имея родных патчей и конфигурации от автора nanoboot, я ни разу пока не смог собрать ядро, которое бы без проблем грузилось, то модули не все грузятся, то synobios на символы ругается).

6. Собрали да? Зря торопились, надо было не забыть в конфигурации ядра указать файл рам-диска в параметре init_ramdisk (где-то в General kernel parameters)...

7. Получаем в boot/bzImage ядро с уже встроенным рам-диском, переименовываем на флэшку в zImage, профит.

Еще раз повторяю я пока успеха со сборкой и загрузкой ядра не достиг. Хотя очень хочу. У меня мать ASRock Z87 Extreme 11/ac c 22 каналами SATA и корпус на 22 диска простаивают. Всего-то надо драйвер для LSI 3008 встроить. Из ядра 3.12.32 я его уже в 3.2.40 перенес. Ядро пока собрать до конца не научился, чтобы nanoboot с ним заработал. Либо сам методом тыка за пару лет разберусь, либо авторы сжалятся и дадут патчи и конфиг ядра.

Link to comment
Share on other sites

Если вы про исходники, то те которые Synology выложили synogpl-4458-bromolow.tbz.

Если про nanoboot, то скачал где-то Nanoboot-5.3.1-fat.img.

 

Нашел еще в форуме архив xpenology.zip, в нем как я понял alpha9 исходники сборки от trantor, попробую еще к нему пристроить сборку ядра с драйвером.

Link to comment
Share on other sites

Не, я про исходники ядра из которых Вы пытаетесь собрать нанобут, добавив рамдиск.

Где то на гитхабе есть максимально приближенные к нанобуту исходники ядра со всеми патчами (кажется, автор liwei). Вот из них нужно собирать все воедино, а не из оригиналов синолоджи.

Link to comment
Share on other sites

Я уже нашел несколько вариантов, в том числе и liwei, сейчас пробую по очереди собирать. Свежее июня нигде исходников нет.

Корни у них вроде бы одни и те же, в основном что-то в конфиге ядра правится.

Link to comment
Share on other sites

Да, вариант с liwei прокатил.

Если кому интересно как собирать свое ядро в nanoboot:

1. Берем исходники отсюда https://github.com/liwei/xpenology-3.x. Я брал не последнюю версию, лучше берите версию на 01.06, дальше liwei стал зачем-то экспериментировать с aufs, больше ничего содержательного для DSM не менялось.

2. Собираем свое ядро (если не умеем идем читать начало этой ветки).

3. Подменяем ядро в nanoboot по процедуре, которую я описал на 4 поста выше.

4. Не все изменения в ядре так легко прокатят, например доп. модули придется вставлять в ram-диск и прописывать там в modules.d и т.п. Я этот путь пока не проходил, меня волнует только один драйвер, который я компильнул прямо в ядро. В принципе это возможно, но надо будет повозиться с рапаковкой-запаковкой рам-диска через cpio (не потеряв по дороге спец.файлы в папке /dev рам-диска!!!).

 

Если я этой инструкцией обидел авторов nanoboot, прошу прощения. Надо было четче высказывать свою позицию на просьбы народа выдать исходники. Тут как везде - либо вы оперативно реагируете на чаяния народа, либо народ пойдет своим путем :smile:.

Link to comment
Share on other sites

Я не думаю, что Вы обидели авторов нанобута.

Было бы совсем круто, если бы Вы собрали воедино Ваше ядро, сpio рамдиск и скрипты по сборке нанобута в одном месте (на том же гитхабе или здесь) чтобы каждый мог вносить изменения в загрузчик.

Link to comment
Share on other sites

Не, я про исходники ядра из которых Вы пытаетесь собрать нанобут, добавив рамдиск.

Где то на гитхабе есть максимально приближенные к нанобуту исходники ядра со всеми патчами (кажется, автор liwei). Вот из них нужно собирать все воедино, а не из оригиналов синолоджи.

 

Он же cancome, ссылку эту он же и дал, после того как его сайт перестал работать и поднялась шумиха,

в шапке темы нанобут скачать давно висит.

 

А вот скрипты так и не дал, сами мол делайте свой нанобут :smile:

Link to comment
Share on other sites

Ну и сделаем сами свой нанобут :razz:

Потому то и прошу полный комплект. Мне нужно стабильная платформа для сборки полноценной текущей версии нанобута для экспериментов с защитй новой версии DSM 5.1

У меня, к сожалению, мало времени все самому настраивать и сводить воедино. А так, глядишь и дела с защитой DSM 5.1 быстрей пойдут.

Link to comment
Share on other sites

Собирать-то я ядро научился, а драйвер так и не заработал.

Не могу понять, в ядро он собирается нормально, а при загрузке его в dmesg вообще нету, как будто и не было.

Придется учиться все таки модули в nanoboot пихать.

Link to comment
Share on other sites

В виде модуля пашет, диски увиделись, SMART читается, форматируется.

Так что если кому еще нужен драйвер под LSI 3008 (3108 и 3004), могу рассказать как его в 3.2.40 ядро вставить.

 

Выложить у меня собственно кроме вышенаписанного особо нечего, я в самих потрохах nanoboot (всякие скрипты на ramdisk для подмены файлов, обхода защиты и т.п.) пока не ковырялся.

Но судя по тому что в githab у самого sancome валяется, он взял за основу скрипты сборки gnoboot, правил только начинку. Начинку его можно достать из ramdisk вышеописанным способом, распаковать с помощью cpio.

Link to comment
Share on other sites

  • 5 months later...

Может кто нибудь подсказать где бы можно было скачать рабочие исходники для пересборки ядра?

Я безпедельно уважаю всю проделанную oгромную работу и не хочу никак обидеть этой просьбой уважайиемых авторов проекта, и лишь хочу собрать 3.2.40 kernel и иметь возможность добавить или убрать с него нужное/ненужное для моего железа.

Я перепробовал изходники 5.0 версии найденые на Github ,но мне не удалось добиться функционала как у оригинальных загрущиков - на ESXI 5.5 VM загружчик загружается нo PAT файл инсталировать нe удаеться :sad:

 

То же самое случается и с готовыми IMG файлами найдeнами на Github архивах.

 

 

Заранее огромное спосибо!!

 

UPADTE:

Очень странно для меня то, что загрузчики (Nanoboot 4458, 4493, 4528) с перекомпилированными ядрами успешно работают на железе, но не позволяют мне инсталировать DSM на ESXI VM. Может кто нибудь сталкивался с подобной проблемой? Скореее всего я должен включить каки ту настройке ядра в конфиг ноу немогу найти какие. Помогите можалуйста. :sad::sad:

PS:

Link to comment
Share on other sites

  • 11 months later...

Забавно, что в сорцах для arm девайсов никакой защиты нет вообще - на WDMyCloud Mirror заставил работать поменяв в ядре буквально 20 строк (под особенности железа). И всё. Ни рамдиск, ни образ самой системы не трогал. Только заменил updater в pat файле, дабы он u-boot не заменил на загрузчик synology.

Кстати, инфы по "Взлому" чёт маловато. Может стоит создать темку со всей инфой по особеностям ядра и прочего?

Да и переписать synobios тож не помешает, т.к. он отвечает за некоторые "Жлезные" фичи, вроде управления светодиодами, вентилятором и прочей перефирией (Хотя ядро линукса и так всё это умеет и для x86_64 synobios по сути является только прослойкой между фичами ядра и DSM.

 

Вообще я ещё много чего могу рассказать про DSM... Но интересно ли это комуто ещё кроме меня?

Link to comment
Share on other sites

Забавно, что в сорцах для arm девайсов никакой защиты нет вообще - на WDMyCloud Mirror заставил работать поменяв в ядре буквально 20 строк (под особенности железа). И всё. Ни рамдиск, ни образ самой системы не трогал. Только заменил updater в pat файле, дабы он u-boot не заменил на загрузчик synology.

Кстати, инфы по "Взлому" чёт маловато. Может стоит создать темку со всей инфой по особеностям ядра и прочего?

Да и переписать synobios тож не помешает, т.к. он отвечает за некоторые "Жлезные" фичи, вроде управления светодиодами, вентилятором и прочей перефирией (Хотя ядро линукса и так всё это умеет и для x86_64 synobios по сути является только прослойкой между фичами ядра и DSM.

 

Вообще я ещё много чего могу рассказать про DSM... Но интересно ли это комуто ещё кроме меня?

Во первых кажется спасибо именно вам за https://drive.google.com/folderview?id= ... FpYS2dzMEE

Во вторых (заранее извиняюсь, что не смог найти сам). Есть способ поменять MAC сетевой карточки на WD cloud перешитом под DSM?

В третьих периодически на Xpeno-водов нападает зуд задействовать HDMI (для KODI или GUI DSM).

http://xpenology.com/forum/viewtopic.php?f=5&t=9913

http://xpenology.com/forum/viewtopic.php?f=5&t=11637

в принципе можно на каком-то железе получить https://www.synology.com/en-global/products/NVR216 ? А если укажите направление для x86 народ придет в полный восторг...

Link to comment
Share on other sites

Не понимаю, зачем все ковыряют ядро Synology, когда можно взять список изменений (.diff), выкинуть из него платформо-зависимый код и спокойно накотить, что останется на (почти) любую версию ядра.

Собственно, с этим я сейчас и эксперементирую. Правда я нефига не прогер, такчто хз, что получится :smile:

 

Платформо-зависимый код - это почти 80% всех изменений (То, что в ветке /arch). В лучшем случае оттуда можно оставить gpio либы, чтобы DSM могла обращятсья к вентиляторам, светодиодам и прочей переферии через свои костыли. Хотя на работу системы это не влияет.

ocf, crypto-linux - исключительно для arm девайсов и на томже х86_64 нафиг не сдались. (~10% кода)

dwc-otg - Вообще используется только Comcerto (arm).

 

Тоесть в сухом остатке - aufs, btrfs (конкретно допилен), да SynoACL (Требуется для Samba, FTP и чего то ещё). Всё остальное можно смело выкидывать на мусор.

Ну и, конечноже, всё, что связано с synobios. Хотя код этого модуля частично есть в наличии (synobios dummy module). Можно дописать, добавив все нужные системные вызовы. По факту - оставить внутри лиш "заглушки". В идеале - переписать так, чтобы этот модуль брал все данные из нормальных мест - из /sys например и из стандартных драйверов)

 

***

Вот такой патч получился. Возможно потребуется допилить чегонить ещё.

Link to comment
Share on other sites

может просто все сведется к тому что можно будет сделать свой обычный дистр с фичами синолоджи? и не нужен будет загрузчик?

Собственно, он и не нужен.

По крайней мере на ARM...

Сама DSM общяется с железом через synobios и моификации в ядре.

Модификации в ядре перенести на другое ядро не проблема (При должном знании C++). Synobios можно вообще написать с нуля (Список функций получить легко, список правильных "Ответов" тоже можно подсмотреть). Есть даже готовый модуль-заглушка, в который лиш требуется дописать платформо-зависимые фичи.

 

К примеру - Мне потребовалось лиш подменить нумерацию Gpio в ядре, чтобы оно спокойно загрузилось. Плюсом - написал свой скрипт "updater" (т.к. родной наверняка перезапишит загрузчик, что может кончится весьма плачевно). Всё. Система работает! Даже Synobios спокойно определил девайс как DS213j (WDMyCloud Mirror изначально)

При портировании DSM5 на WDMC (gen1) я пошёл немного другим путём - выкинул из ядра Synology всё платформо-зависимое и сравнил оставшееся с ядром WD. Заработало с 5й попытки... Почти полноценно.

Причём тут я вообще без Synobios всё завёл - Но пришлось немного поправить загрузочные скрипты и пропатчить inex.cgi (Спасибо Vortex'у), который падал, пытаясь получить данные от synobios.

 

Если чуть проще - Synology в своё ядро добавили только SynoACL (Требуется для Samba, FTP и других файловых служб. Теоритически можно забить, подменив исполняемые файлы указанных служб на собранные вручную из обычных исходников). Всё остальное - поддержка особенностей своего железа. Synobios тут как посредник используется. Программная прослойка. В частости в ARM нет управления питанием. За это отвечает MicroP (Специальный микроконтроллер, управляемый через UART). Онже реализует поддержку спящего режима и WOL. Иногда через него реализуют термоконтроль и управление вентилятором (Если проц сам не умеет).

 

 

Кароче - теории я набрался по самое нехочу, но вот реализовывать на практике все эти фичи выходит с трудом - я не прогер и C++ знаю лиш на уровне общего синтаксиса с другими ЯП.

Нужны прогеры, желательно знакомые с написанием модулей ядра (Хотя и это не особо требуется - по ядру доков море, а примеров того, что мне нужно в сети валом - от RaspberyPI и всяких Arduino. Мне просто знаний самого C++ нехватает для реализации)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...