Andy928

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

Recommended Posts

Починил. Врагам проект покоя не даёт ! :smile:

Постоянно то жалуются, то испортить что-то норовят :smile:

Но мы не сдаёмся!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Спасибо за инструкцию! Только чем отредактировать synobios.ko?

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

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

Share this post


Link to post
Share on other sites

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

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

http://sendfile.su/989149

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

В 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 с ним заработал. Либо сам методом тыка за пару лет разберусь, либо авторы сжалятся и дадут патчи и конфиг ядра.

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
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:.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
Не, я про исходники ядра из которых Вы пытаетесь собрать нанобут, добавив рамдиск.

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

Я безпедельно уважаю всю проделанную 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:

Share this post


Link to post
Share on other sites

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

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

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

 

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

Share this post


Link to post
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 народ придет в полный восторг...

Share this post


Link to post
Share on other sites

хм.... думаю, разумно вам будет создать отдельную тему про WDMyCloud Mirror и там обсудить.

чтобы не заходить в оффтопик.

Share this post


Link to post
Share on other sites

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

 

Весьма интересно, и про ARM и про DSM

Share this post


Link to post
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 например и из стандартных драйверов)

 

***

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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++ нехватает для реализации)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now