Andy928 Posted January 15, 2013 #1 Posted January 15, 2013 Внимание! Все действия, описанные в данной документации, производились в научно-познавательных целях, и не имеют цели извлечения какой-либо прибыли. Раздел 1. Подготовка исходников и сборка проекта. Шаг 1. Установка VirtualBox и Ubuntu Установите VirtualBox (http://www.virtualbox.org/) и создайте виртуальную машину для установки Ubuntu. Я использовал следующие параметры виртуальной машины для комфортной работы: RAM 4 gb, 2 CPU, HDD 50 Gb В качестве операционной системы, я выбрал Ubuntu 12.10 x64 (http://www.ubuntu.com) Шаг 2. Инструменты и исходные коды Скачайте инструменты компиляции и исходные коды, предоставляемые Synology, согласно лицензии GPL (http://sourceforge.net/projects/dsgpl/files/) Все действия производились с исходными кодами для процессоров Intel (серия Bromolow). Это не значит, что полученное ядро будет работать только на Bromolow процессорах. Эксперименты показали, что проект успешно запускается на AMD, Atom, Cedarview, Pineview процессорах. Вам понадобятся: DSM 4.1 Tool Chains (gcc420_glibc236_x64_bromolow-GPL.tgz) Synology NAS GPL Source (synogpl-2636-bromolow.tbz) На момент написания этого руководства были актуальны версия DSM 4.1 и исходные коды ядра (2636 сборка). Шаг 3. Распаковка исходных кодов Установка инструментов и исходных кодов сводится к простой распаковке. Распакуйте архивы. tar -xvzf gcc420_glibc236_x64_bromolow-GPL.tgz -C /usr/local/ tar -xvjf synogpl-2636-bromolow.tbz -C /usr/local/x86_64-linux-gnu/ Важное замечание! Если вы используете 64-разрядную версию Ubuntu, необходимо установить 64-битные библиотеки. sudo apt-get install libc6-i386 Для запуска конфигуратора ядра, необходимо установить Ncurses sudo apt-get install build-essential ncurses-dev Шаг 4. Сборка проекта. Для сборки проекта необходимо: переписать файл конфигурации "bromolow" из каталога "x86_64-linux-gnu/source/linux-3.x/synoconfigs" в каталог "x86_64-linux-gnu/source/linux-3.x" с именем ".config" отредактировать "makefile" и установить значения переменным ARCH и CROSS_COMPILE ARCH ?= x86_64 CROSS_COMPILE ?= /usr/local/x86_64-linux-gnu/bin/x86_64-linux-gnu- Способ редактирования файла "makefile" не является верным. Более правильным способом является указание переменных с необходимыми значениями в командной строке вызова "make". Например: "make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-linux-gnu/bin/x86_64-linux-gnu- modules" Перед сборкой модулей необходимо сконфигурировать ядро. Делается это командой "make menuconfig". Вам будет предложено невероятно огромное количество настроек ядра. По умолчанию загрузится конфигурация "bromolow", которую вы скопировали из каталога "x86_64-linux-gnu/source/linux-3.x/synoconfigs" с имеем ".config" Стоит отметить, что на этом этапе необходимо как минимум включить поддержку сетевых контроллеров Realtek. Иначе собранное ядро будет искать только определенную модель контроллера Intel. Далее выполните команду "make oldconfig". Теперь настало время собрать объектные модули. Выполните команду "make modules". Сборка модулей достаточно затяжной процесс, и на медленных машинах может занять до 15 минут. Если все вышеуказанные шаги были сделаны верно, сборка объектных модулей пройдет без ошибок. Сборка ядра является так-же достаточно простой операцией. Введите команду "make bzImage". Результатом будет собранное ядро, находящееся в каталоге "/usr/local/x86_64-linux-gnu/source/linux-3.x/arch/x86/boot" с именем "bzImage". В последствии его нужно переименовать в "zImage". Всё вышеперечисленное не является чем-то новым и не описанным. В сети множество описаний, достаточно подробно описывающих сборку ядра. Раздел 2. Модификация ядра. Сразу оговорюсь, я произвел модификацию на скорую руку, и вполне вероятно, она не является правильной и корректной. Однако необходимого эффекта я добился. Предлагаю сообществу, основываясь на моих изысканиях, доработать и возможно улучшить этот проект. Разработчики DSM сделали достаточно много изменений исходного кода ядра. В основном эти изменения направлены на контроль состояния дисков. Сердцем DSM является модуль "synobios.ko". Этот модуль содержится в двух местах: 1) на RAM диске (файл rd.gz) 2) на hda1 (файл hda1.tgz) Если попытаться запустить систему с вновь собранным ядром, модуль synobios.ko не загрузится, и запускаться не будет. Этому есть несколько причин: 1) В ядре отсутствуют функции "funcSynoSendEboxRefreshEvent" и "funcSynoEunitPowerctlType". Эту неприятность можно легко поправить в файлах "/usr/local/x86_64-linux-gnu/source/linux-3.x/drivers/ata/libata-core.c" и "/usr/local/x86_64-linux-gnu/source/linux-3.x/kernel/sysctl.c". //#ifdef MY_DEF_HERE // закомментировать int (*funcSYNOSendEboxRefreshEvent)(int portIndex) = NULL; EXPORT_SYMBOL(funcSYNOSendEboxRefreshEvent); //#endif // закомментировать //#ifdef MY_DEF_HERE // закомментировать EUNIT_PWRON_TYPE (*funcSynoEunitPowerctlType)(void) = NULL; EXPORT_SYMBOL(funcSynoEunitPowerctlType); //#endif // закомментировать 2) Если собрать ядро с вышеуказанными изменениями, то при загрузки ядра будет падать функция syno_sata_mv_gpio_write(), я не стал глубоко вдаваться о её назначении (на первый взгляд она занимается получением состояния SATA диска, чтобы радостно мигать светодиодом на передней панели корпуса, при обращениях к диску), а просто закомментировал её содержимое в файле "/usr/local/x86_64-linux-gnu/source/linux-3.x/drivers/ata/sata_mv.c" #ifdef MY_ABC_HERE /*FIXME - Too brutal and directly, should separate into levels*/ void syno_sata_mv_gpio_write(u8 blFaulty, const unsigned short hostnum) { /* struct Scsi_Host *shost = scsi_host_lookup(hostnum); struct ata_port *ap = NULL; void __iomem *host_mmio = NULL; u32 gpio_value = 0; int led_idx; if(NULL == shost) { goto END; } if(NULL == (ap = ata_shost_to_port(shost))) { scsi_host_put(shost); goto END; } if(NULL == (host_mmio = mv_host_base(ap->host))) { scsi_host_put(shost); goto END; } led_idx = ap->print_id - ap->host->ports[0]->print_id; gpio_value = readl(host_mmio + GPIO_CTL_DATA); if(blFaulty) { gpio_value |= (1 << led_idx); }else { gpio_value &= ~(1 << led_idx); } writel(gpio_value, host_mmio + GPIO_CTL_DATA); scsi_host_put(shost); END: */ return; } EXPORT_SYMBOL(syno_sata_mv_gpio_write); #endif После пересборки ядра с новыми изменениями, модуль synobios.ko уже не будет ругаться на отсутствующие функции, и не будет падать на вызове "syno_sata_mv_gpio_write()". Однако загружаться и рапортовать о своей готовности synobios.ko также не будет. Причиной всего является отсутствие на последовательном порту COM1 разработанного компанией Synology монитора (основанного на серийном микроконтроллере). Монитор занимается включением и выключением светодиодов, подачей звуковых сигналов, контролем температуры и системы охлаждения NAS. Одной из функций монитора является идентификация оборудования. В качестве примера, я буду рассматривать synobios.ko (размер файла 52840 байт). .text:0000000000002370 public SetMicropId .text:0000000000002370 SetMicropId proc near ; DATA XREF: .data:synobios_ops_0o .text:0000000000002370 .text:0000000000002370 var_18 = qword ptr -18h .text:0000000000002370 .text:0000000000002370 48 83 EC 18 sub rsp, 18h .text:0000000000002374 0F B6 15 1D 33 00 00 movzx edx, cs:syno_module+8 .text:000000000000237B 0F B6 05 17 33 00 00 movzx eax, cs:syno_module+9 .text:0000000000002382 48 C7 04 24 00 00 00 00 mov [rsp+18h+var_18], 0 .text:000000000000238A C0 EA 04 shr dl, 4 .text:000000000000238D 83 E0 0F and eax, 0Fh .text:0000000000002390 48 C1 E0 04 shl rax, 4 .text:0000000000002394 0F B6 D2 movzx edx, dl .text:0000000000002397 48 09 D0 or rax, rdx .text:000000000000239A 04 01 add al, 1 .text:000000000000239C 74 15 jz short loc_23B3 .text:000000000000239E 31 D2 xor edx, edx .text:00000000000023A0 81 3D F2 32 00 00 FF 00+ cmp cs:MpId_20729, 0FFh .text:00000000000023AA 74 1C jz short loc_23C8 .text:00000000000023AC .text:00000000000023AC loc_23AC: ; CODE XREF: SetMicropId+56j .text:00000000000023AC ; SetMicropId+76j ... .text:00000000000023AC 89 D0 mov eax, edx .text:00000000000023AE 48 83 C4 18 add rsp, 18h .text:00000000000023B2 C3 retn .text:00000000000023B3 ; --------------------------------------------------------------------------- .text:00000000000023B3 .text:00000000000023B3 loc_23B3: ; CODE XREF: SetMicropId+2Cj .text:00000000000023B3 48 C7 C7 FE 45 00 00 mov rdi, offset aGetMicropFail ; "get microp fail\n" .text:00000000000023BA 31 C0 xor eax, eax .text:00000000000023BC E8 9B 42 00 00 call printk .text:00000000000023C1 BA FF FF FF FF mov edx, 0FFFFFFFFh .text:00000000000023C6 EB E4 jmp short loc_23AC .text:00000000000023C8 ; --------------------------------------------------------------------------- .text:00000000000023C8 .text:00000000000023C8 loc_23C8: ; CODE XREF: SetMicropId+3Aj .text:00000000000023C8 48 C7 C6 13 46 00 00 mov rsi, offset aR ; "R" .text:00000000000023CF 48 89 E2 mov rdx, rsp .text:00000000000023D2 B9 08 00 00 00 mov ecx, 8 .text:00000000000023D7 48 89 F7 mov rdi, rsi .text:00000000000023DA E8 81 FE FF FF call ReadUart .text:00000000000023DF 85 C0 test eax, eax .text:00000000000023E1 BA FF FF FF FF mov edx, 0FFFFFFFFh .text:00000000000023E6 75 C4 jnz short loc_23AC .text:00000000000023E8 0F BE 04 24 movsx eax, byte ptr [rsp+18h+var_18] .text:00000000000023EC 31 D2 xor edx, edx .text:00000000000023EE 89 05 A8 32 00 00 mov cs:MpId_20729, eax .text:00000000000023F4 EB B6 jmp short loc_23AC .text:00000000000023F4 SetMicropId endp .text:00000000000023F4 .text:00000000000023F4 ; --------------------------------------------------------------------------- .text:00000000000023F6 66 66 66 90 66 66 90 66+ align 20h Выше представлена функция SetMicropId в которой по адресу .text:00000000000023E8 производиться чтение из монитора ID NAS. Результат чтения будет помещен в регистр EAX. Так как монитора у нас нет, то необходимо произвести некоторую модификацию кода. В нашем случае мы принудительно загрузим в регистр EAX необходимое значение. text:00000000000023C8 48 C7 C6 13 46 00 00 mov rsi, offset aR ; "R" .text:00000000000023CF 48 89 E2 mov rdx, rsp .text:00000000000023D2 B9 08 00 00 00 mov ecx, 8 .text:00000000000023D7 48 89 F7 mov rdi, rsi .text:00000000000023DA E8 81 FE FF FF call ReadUart .text:00000000000023DF 85 C0 test eax, eax .text:00000000000023E1 BA FF FF FF FF mov edx, 0FFFFFFFFh .text:00000000000023E6 90 nop .text:00000000000023E7 B8 42 00 00 00 mov eax, 42h ; 'B' .text:00000000000023EC 31 D2 xor edx, edx .text:00000000000023EE 89 05 A8 32 00 00 mov cs:MpId_20729, eax .text:00000000000023F4 EB B6 jmp short loc_23AC .text:00000000000023F4 SetMicropId endp P.S. Изначально этот хак был мной подсмотрен у уважаемого vortex'a, курирующего проект QNology (http://qnology.xvtx.ru/). Итак, регистр EAX должен содержать код модели, который можно подсмотреть в файле "/usr/local/x86_64-linux-gnu/source/linux-3.x/include/linux/synobios.h или ниже: typedef enum { MICROP_ID_710p = 0x31, /* '1' */ MICROP_ID_411p = 0x33, /* '3' 411+II is the same*/ MICROP_ID_1010p = 0x32, /* '2' */ MICROP_ID_1511p = 0x36, /* '6' */ MICROP_ID_810p = 0x35, /* '5' */ MICROP_ID_810rp = 0x34, /* '4' */ MICROP_ID_2211p = 0x37, /* '7' */ MICROP_ID_2211rp = 0x38, /* '8' */ MICROP_ID_2411p = 0x39, /* '9' */ MICROP_ID_3411xs = 0x43, /* 'C' 3412xs is the same */ MICROP_ID_3411rpxs = 0x41, /* 'A' 3412rpxs is the same */ MICROP_ID_3611xs = 0x42, /* 'B' 3612xs is the same*/ MICROP_ID_712p = 0x44, /* 'D' */ MICROP_ID_412p = 0x45, /* 'E' */ MICROP_ID_1512p = 0x47, /* 'G' */ MICROP_ID_1812p = 0x46, /* 'F' */ MICROP_ID_812p = 0x48, /* 'H' */ MICROP_ID_812rp = 0x49, /* 'I' */ MICROP_ID_2212p = 0x4A, /* 'J' */ MICROP_ID_2212rp = 0x4B, /* 'K' */ MICROP_ID_2413p = 0x4C, /* 'L' */ MICROP_ID_10613xsp = 0x4d, /* 'M' */ MICROP_ID_3413xsp = 0x4e, /* 'N' */ MICROP_ID_913p = 0x4f, /* 'O' */ MICROP_ID_713p = 0x50, /* 'P' */ MICROP_ID_UNKNOW = 0xFF, } SYNO_MICROP_ID; Уже в процессе эксплуатации мода, я столкнулся с постоянно вываливающимся в консоль, предупреждением: "synobios: buzzer stop button pressed" Решил проблему с ним достаточно быстро, пропатчив одну функцию .text:0000000000000395 80 7C 24 17 00 cmp [rsp+28h+var_11], 0 .text:000000000000039A EB D4 jmp short loc_370 // JZ изменил на JMP На этом, процесс модификации ядра и модуля synobios.ko можно считать завершенным. Раздел 3. Сборка комплекта для инсталляции. Шаг 1. Модификация rd.gz и hda1.tgz Теперь, имея исправленный synobios.ko, необходимо поместить его на своё законное место. В качестве подопытного, я ипользовал прошивку от DS3612xs (файл DSM_DS3612xs_2668.pat). Файл, с расширением .PAT представляет собой tar архив и содержит в себе достаточно большой набор файлов некоторое количество из которых нам никогда не понадобятся. Удаляем лишнее, и получаем минимально необходимый комплект: checksum.syno // содержит контрольные суммы всех, перечисленных ниже файлов grub_cksum.syno // содержит контрольную сумму файлов zImage и rd.gz (используется в загрузчике GRUB) hda1.tgz // образ системы rd.gz // RAM диск updater // WEB версия установщика (вместо Synology Assistent) VERSION // Файл, содержащий версию DSM zImage // Образ ядра Первым делом нужно поместить новый "synobios.ko" на RAM диск в файле "rd.gz". Для этого его необходимо распаковать и смонтировать gunzip /tmp/rd.gz sudo mount -t ext2 -o loop rd /mnt/ramdisk Перезаписываем "synobios.ko" в каталоге /mnt/ramdisk/lib/modules Пакуем RAM диск sudo umount /mnt/ramdisk gzip /tmp/rd Вторым делом, нужно заменить "synobios.ko" в образе системы (файл hda1.tgz) Для этого я использовал вспомогательную утилиту Archivemount (http://en.wikipedia.org/wiki/Archivemount). Её необходимо предварительно установить. Копируем hda1.tgz в /tmp и монтируем командой: sudo archivemount /tmp/hda1.tgz /mnt/hdd Перезаписываем "synobios.ko" в каталоге /mnt/hdd/lib/modules Размонтируем командой: sudo umount /mnt/hdd В каталоге /tmp появится обновленный файл hda1.tgz Его необходимо переименовать в hda1 и запаковать архиватором xz командой: xz -z9 hda1 Полученный файл "hda1.xz" переименовать в "hda1.tgz" Шаг 2. Пересчет контрольной суммы Теперь мы имеем собранный zImage, модифицированные rd.gz и hda1 Настало время собрать валидный PAT файл, который можно использовать для установки системы. Чтобы PAT файл был валидным, необходимо пересчитать контрольную сумму файлов и поместить их в checksum.syno Для этих целей есть генератор файла контрольных сумм: Раздел 4. Загрузочный диск. Модификация GRUB[/size] Шаг 1. Структура загрузочного диска. Загрузочный диск состоит из двух разделов. На первом разделе находится загрузчик модифицированный загрузчик GRUB. Функции, которые производит загрузчик являются достаточно ключевыми: 1) Проверка контрольных сумм файлов ядра системы (zImage) и RAM диска (rd.gz) и сверка их со значениями, хранящимися в файле grub_cksum.syno с второго раздела загрузочного диска. 2) Идентификация оборудования (чтение из монитора, висящего на COM1) аналогично функции SetMicropId в synobios.ko 3) Чтение конфигурации железа (MAC адрес сетевых карт и серийный номер) из файла vender Для корректной работы загрузчика необходимо модифицировать его код. Описывать этот процесс не имеет смысла, так как готовый к употреблению загрузчик содержится в сборке XPEnology. Стоит отметить, что код устройства можно изменить по адресу: seg000:0000DEF7 E8 F1 38 01 00 call serial_port_READ seg000:0000DEFC B8 36 00 00 00 mov eax, 42h Регистр EAX должен содержать код оборудования, согласно таблицы, представленной выше. Эта инструкция содержится по смещению 0x5efc модуля stage2 загрузчика. Для расчета контрольной суммы файлов zImage и rd.gz можно воспользоваться встроенной в загрузчик функцией проверки контрольных сумм. Если контрольная сумма zImage не верная, загрузчик сообщит об этом и покажет корректную. Перепишите корректную в файл grub_cksum.syno и запустите загрузчик повторно. Он рассчитает соответственно вторую контрольную сумму для файла rd.gs Желающие копнуть глубже могут выудить алгоритм из загрузчика (stage2). Он основан на алгоритме MD5 c небольшими изменениями. Шаг 2. Изменение MAC адреса и серийного номера. файл vender 0000000000: 00 11 32 08 D6 2A 4B 00 │ 11 32 08 D6 2B 4C 00 00 ◄2◘Ц*K ◄2◘Ц+L 0000000010: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00 0000000020: 42 33 4A 34 4E 30 30 30 │ 30 30 31 00 00 00 00 00 B3J4N000001 0000000030: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00 0000000040: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00 0000000050: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00 0000000060: 00 00 00 00 5B 00 00 00 │ 69 00 00 00 01 01 00 00 [ i ☺☺ 0000000070: 00 00 00 00 00 00 00 00 │ 00 00 00 00 01 01 01 01 ☺☺☺☺ 0000000080: 00 00 00 00 00 00 00 00 │ 00 00 00 00 01 01 01 01 ☺☺☺☺ 0000000090: 01 01 01 01 01 01 01 00 │ 00 01 00 00 00 00 00 00 ☺☺☺☺☺☺☺ ☺ 00000000A0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 01 01 01 00 ☺☺☺ 00000000B0: 01 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00 ☺ Смещение 0x0001 - MAC адрес 1 Смещение 0x0008 - MAC адрес 2 Смещение 0x000F - MAC адрес 3 Смещение 0x0017 - MAC адрес 4 Смещение 0x0020 - серийный номер На этом данное описание можно считать завершенным. Благодарю за внимание. В ближайшие дни инструкция будет дополнена и переведена на английский. Принимаю любые дополнения и предложения ! С Уважением, Andy хренолог В планах: 1) Нарисовать эмулятор монитора и встроить его в ядро. Либо выполнить его в виде демона. 2) Адаптировать какой-нибудь китайский девайс, типа (http://www.aliexpress.com/item/4-Fan-Sp ... 36498.html) для вывода информации о дисках и т.д... synologychecksum.zip Quote
nighthawk Posted January 15, 2013 #2 Posted January 15, 2013 (edited) Cпасибо! Ещё хочу добавить: При попытке запустить на AMD железе, ядро виснет. Нужно включить поддержку AMD процессоров в ваш .config: CONFIG_CPU_SUP_AMD=y Далее ядро скорее всего начнет сыпать ошибками в лог: [ 14.166781] parameter error. gpiobase=00000000, pin=16, pValue=ffff88041c0a1d9c [ 14.175453] parameter error. gpiobase=00000000, pin=18, pValue=ffff88041c0a1d8c [ 14.184580] parameter error. gpiobase=00000000, pin=20, pValue=ffff88041c0a1d9c Для подавления вывода этих ошибок можно в файле drivers/pci/quirks.c закомментировать строку "printk("parameter error. gpiobase=%08X, pin=%d, pValue=%p\n", gpiobase, pin, pValue);" так: if ( 0 == gpiobase || ( pin < 0 || pin >= 96 ) || NULL == pValue ) { //printk("parameter error. gpiobase=%08X, pin=%d, pValue=%p\n", gpiobase, pin, pValue); goto END; } Для подавления ругани "Unknown cmd fd блаблабла" закомментировать в файле compat_ioctl.c с 1606 по 1611 строку вот так: sprintf(buf,"'%c'", (cmd>>_IOC_TYPESHIFT) & _IOC_TYPEMASK); if (!isprint(buf[1])) sprintf(buf, "%02x", buf[1]); //compat_printk("ioctl32(%s:%d): Unknown cmd fd(%d) " // "cmd(%08x){t:%s;sz:%u} arg(%08x) on %s\n", // current->comm, current->pid, // (int)fd, (unsigned int)cmd, buf, // (cmd >> _IOC_SIZESHIFT) & _IOC_SIZEMASK, // (unsigned int)arg, fn); Edited January 16, 2013 by Guest Quote
Andy928 Posted January 15, 2013 Author #3 Posted January 15, 2013 Далее нужно поискать, как решить проблему с определением usb устройств и назначением нашей usb флешки как /dev/synoboot У меня на реальном железе флешка правильно встала. Виной тому, какие-то настройки в BIOS. Не могу вспомнить точно. Попробую завтра изучить железо. Еще в планах написать на PC тулзу, которая бы вставляла synobios.ko куда надо и пересчитывала бы контрольки. А то слишком много ручной работы. Quote
nighthawk Posted January 15, 2013 #4 Posted January 15, 2013 Еще в планах написать на PC тулзу, которая бы вставляла synobios.ko куда надо и пересчитывала бы контрольки.А то слишком много ручной работы. Можно зашить подмену модуля в рамдиск в скрипт обновления или после него, чтобы использовать оригинальный pat файл. Это будет удобно для обновления. Нужно попробовать на выходных на тестбоксе. Quote
Andy928 Posted January 15, 2013 Author #5 Posted January 15, 2013 Можно зашить подмену модуля в рамдиск в скрипт обновления или после него, чтобы использовать оригинальный pat файл. Это будет удобно для обновления. Нужно попробовать на выходных на тестбоксе. Предполагаю что за несколько месяцев тут соберется отличная команда, и общими усилиями мы сделаем "конфетку" Кстати, рассматривая сорцы, я заметил что есть некоторое количество кода, спрятанное за дефайном "ifdef MY_DEF_HERE" Данный код не собирается и этот дефайн нигде не устанавливается. Очень любопытно, что это за ветка кода такая.... Quote
TopBrick Posted January 15, 2013 #6 Posted January 15, 2013 перебилдил ядро. включив несколько опций. увы, не работает. ошибка на скриншоте... где копать ? Заранее спасибо. Quote
Andy928 Posted January 16, 2013 Author #7 Posted January 16, 2013 перебилдил ядро. включив несколько опций.увы, не работает. ошибка на скриншоте... где копать ? Покажите весь лог загрузки ядра. Quote
TopBrick Posted January 16, 2013 #8 Posted January 16, 2013 подскажите пожалуйста как ? я забросил модифицированое ядро на synoboot.img Откуда там можно выдрать лог загрузки ? Quote
Andy928 Posted January 16, 2013 Author #9 Posted January 16, 2013 подскажите пожалуйста как ?я забросил модифицированое ядро на synoboot.img Откуда там можно выдрать лог загрузки ? Включите виртуальный последовательный порт COM1. Все логи падают на него. Quote
nighthawk Posted January 16, 2013 #10 Posted January 16, 2013 где копать ? Второй пост в этом треде Quote
w00t Posted January 16, 2013 #11 Posted January 16, 2013 Can you Translate it to Eng please Thanks Quote
Andy928 Posted January 16, 2013 Author #12 Posted January 16, 2013 Can you Translate it to Eng please Thanks Please wait 2-3 days. Quote
nighthawk Posted January 16, 2013 #14 Posted January 16, 2013 рассматривая сорцы, я заметил что есть некоторое количество кода, спрятанное за дефайном "ifdef MY_DEF_HERE"Данный код не собирается и этот дефайн нигде не устанавливается. Очень любопытно, что это за ветка кода такая.... Задефайнил, пересобралось несколько файлов, визуально ничего не поменялось, ничего не отвалилось. Кстати вы сказали, что косяк с определением usb устройств кроется в настройках биоса. Не могу понять, где это исправить можно. Да, если надоела ругань на Unknown cmd fd ... - во втором посте этого треда добавил ещё один грубый хак. Quote
makemyday Posted January 21, 2013 #15 Posted January 21, 2013 Включение "MY_DEF_HERE" ничего не даст, так как оно сильно завязано на "MY_ABC_HERE", которая в свою очередь на самом деле является несколькими разными дефайнами, которые были заменены на один и тот же по всему исходному коду, чтобы исходный код нормально не собирался. Quote
aTan Posted March 15, 2013 #16 Posted March 15, 2013 Спасибо за статью. В vendor поменял мак на мак карты (с х01 6 байтов и с 0х08 обнулил второй мак) и загрузился с флэшки. ДСМ ассистент ПК засек, есть опция установить, но на ПК во время загрузки написано у МАК1 Empty or invalid checksum (Random 'случайныймак'). И в ассистенте виден этот случайный мак. Что может быть не так? Если теперь установить pat, будет работать с таким нюансом? Quote
ixzit Posted April 9, 2013 #17 Posted April 9, 2013 Подскажите можно ли как-то добавить драйвера в систему без сборки ядра. Собрать ядро пробовал, но неосилил. Драйвера нужны для внутренней DVB-S карты. Поскольку TVheadend (тв-сервер) для synology уже существует и работает в виде плагина очень не хочется городить отдельную систему. XPEnology установлена на HP Microserver. Quote
XPEH Posted November 13, 2013 #19 Posted November 13, 2013 Спасибо за статью. В vendor поменял мак на мак карты (с х01 6 байтов и с 0х08 обнулил второй мак) и загрузился с флэшки. ДСМ ассистент ПК засек, есть опция установить, но на ПК во время загрузки написано у МАК1 Empty or invalid checksum (Random 'случайныймак'). И в ассистенте виден этот случайный мак. Что может быть не так? Если теперь установить pat, будет работать с таким нюансом? Нужно еще пересчитать и правильно заменить контрольную сумму, которая идет сразу за MAC адресом. Почитай внимательно здесь viewtopic.php?f=5&t=584 Quote
aisman Posted January 21, 2014 #20 Posted January 21, 2014 Здравствуйте! Пересобрал ядро 3.2.40 для DS414 (armadaxp), включил драйверы DVB, родные из videostation работают некорректно для skystar usb hd. Запнулся на synobios.ko. Во-первых не знаю как корректно его разобрать и отредактировать, а во-вторых понятия не имею какие значения и на что нужно там менять. Не могли бы Вы помочь в данном вопросе? Спасибо! На всяк случай прикладываю модуль. synobios.rar Quote
sl0n Posted January 28, 2014 #21 Posted January 28, 2014 Can you Translate it to Eng please Thanks Please wait 2-3 days. Этот план еще в силе? Есть желание самому "пофтыкать" ну и howto запилить на английском. Quote
Andy928 Posted January 31, 2014 Author #22 Posted January 31, 2014 Я вроде публиковал перевод на английский: http://xpenology.com/wiki/en/building_xpenology Quote
sl0n Posted January 31, 2014 #23 Posted January 31, 2014 Andy928: Спасибо, не видел этой странички. Попробую воспроизвести =) Quote
NisSam Posted February 11, 2014 #24 Posted February 11, 2014 А я по этой ссылке ничего не вижу Точнее вижу только оглавление. Что я делаю не так? Quote
sl0n Posted February 12, 2014 #25 Posted February 12, 2014 А я по этой ссылке ничего не вижу Точнее вижу только оглавление. Что я делаю не так? Статья действительно "пропала" .. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.