LINUX.ORG.RU

Как собрать ядро для Alchemy Au1250


0

1

Всем привет. Имеется плеер Cowon Q5W, с WinCE на борту. Есть загрузчик loadlce, который роняет винду и грузит ядро линукса из ELF-файла. ELF спёрт из какого-то iStation на линуксе, нормально не работает. Я установил Убунту на старом компе, и хочу попробовать собрать ядро под MIPS (платформа Alchemy Au1250). Проблема в том, что за линукс я сел впервые, и разбираться гуглением очень долго. Почитал вот тут (http://dmilvdv.narod.ru/Translate/ELSDD/index.html?elsdd_building_toolchain.html), скачал binutils и ядро. GCC, судя по терминалу, в системе уже имеется. Искал здесь, скачал crosstool, но как его настроить на MIPS, пока не понял. Подскажите, пожалуйста, что ещё нужно сделать, чтоб получить ELF-образ ядра для мипс? Спасибо.

Тулчейн лучше взять от sourcery (потому что есть шанс, что кто-то его минимально протестировал, и ошибки будет проще нагуглить) https://sourcery.mentor.com/sgpp/lite/mips/portal/subscription3130?lite=MIPS

Ну или собрать через ct-ng (crosstool ng), он попроще - делаешь make menuconfig, выбираешь, что надо, и делаешь make, он все скачает

Главное - найди исходники того ядра, которое хоть как-то грузится (фреймбуффер работает или светодиоды мигают), и оттуда копать

компилить как обычно - добавляешь в PATH тулчейн - и вперед export PATH=/home/alexander/handhelds/armv6/codesourcery/bin:$PATH export ARCH=arm export CROSS_COMPILE=arm-none-eabi-

cd path-to-kernel make foo_defconfig (как там называется конфиг для твоей борды) можно еще make menuconfig, загрузить конфиг, поставить опции, сохранить и сделать make с тем именем, под которым сохранил конфиг make (или make zImage)

в файле vmlinux будет именно ELF образ

alexst
()

Запустил crosstool, вроде что-то собирает, но потом выдаёт ошибку, как описано здесь: http://sites.google.com/site/iprinceps/Home/embedded-system-and-operating-sys.... Пробовал править mconf.c, но после повторной команды вылезает то же самое, и в файле опять появляется «static». Правлю в папке /home/triplekill/crosstool-0.43/build/mipsel-linux/gcc-3.4.0-glibc-2.3.2/linux-2.6.8/scripts/kconfig/mconf.c Правильный ли путь?

TripleKill
() автор топика
Ответ на: комментарий от TripleKill

Ну зачем вам эта древняя хрень? Есть же crosstool-ng, есть готовые тулчейны. Дженту есть, в конце концов.

crosstool наверняка каждый раз распаковывает исходники, так что модификации теряются. неправильный способ - распаковать вручную и в настройках указать путь к исходникам вместо версии с kernel.org. Правильный - взять crosstool-ng и выбрать gcc4 и ядро посвежей, где это исправлено.

alexst
()
Ответ на: комментарий от anonymous

На x86, наверное, это так. Хотя никто не мешает загрузчику расположить секции ELF в памяти так, как надо. На mips и alpha вроде как все юзают ELF образы, так что наверное и бутлодеры стандартные.

Что такое loadice - не знаю, но, судя по тому, что нашел, оно и srec образы может грузить. Наверняка на wince 5.0 можно использовать бутлодер CyaCE для wince 3.0 - до wince 6.0 в ядре ничего серьезно не менялось в плане перехода в системный режим (SetKMode). Ну раз у ТС было рабочее ядро, надо или найти его исходники, или взять от более-менее схожей железки. В конце концов, WinCE все инициализирует, для первой попытки надо только фреймбуффер настроить, а между бордами различия в основном в gpio

alexst
()
Ответ на: комментарий от alexst

Если под фреймбуффером подразумевается вывод на экран, то это уже настроено. Он даже заставку начинает показывать, только пароль просит. А пароль неизвестен, и исходники тоже вряд ли найдутся. Мы пробовали пароль обойти, но как-то не вышло.

TripleKill
() автор топика
Ответ на: комментарий от TripleKill

Ядро вроде скомпилилось, файл переименовал в *.elf, запускаю, но в уарте ничего не видно. Можно как-то заставить ядро выплёвывать информацию о загрузке в уарт? Или оно и так должно это делать?

TripleKill
() автор топика
Ответ на: комментарий от TripleKill

что-то типа console=ttyS0,115200n8 (хотя, там, опять же, порт может по-другому называться, например, ttyACM0, ttyHS0) - лучше глянуть, как на старом ядре. А там, на старом ядре, initramfs собран в ядро? Нет отдельного рамдиска, который можно было бы подменить?

Вообще, там много может быть подводных камней, вплоть до того, что адрес загрузки может быть разным у разных борд. В идеале - смотреть в dmesg рабочего ядра и настраивать опции в конфиге и исходниках согласно тому, что там пишется. Что там с оригинальным образом? Если есть доступ к рутфс - всегда можно в /etc/rc.local написать что-то типа

#!/bin/bash mount -o remount,rw / passwd -d root sync

как-то так

alexst
()
Ответ на: комментарий от alexst

Где бы образ открыть, чтоб посмотреть... Собственно образ вот: http://zalil.ru/33201981. Грузится до заставки, т.е. вывод на экран работает. А вот лог, собранный с уарта плеера при загрузке этого ядра: http://zalil.ru/33202014. Там что-то упоминается про рамдиск, даже несколько раз.

TripleKill
() автор топика
Ответ на: комментарий от TripleKill

Из переписки: "(рамдиск) В ядре по какому-то смещению, но passwd из него не читаются. И рут в нем не находится даже в режиме single user. Только вот, толку-то с этого всего. Там винт не монтируется в старом ядре."

TripleKill
() автор топика
Ответ на: комментарий от TripleKill

Ну, делаешь типа dd if=foo.elf bs=$((0x2eb000)) skip=1 of=test.gz

(адрес - поиск по сигнатуре 1f 8b 08, gzip). в архиве будет tmp_ram.img - ext2 образ с корневой файловой системой. Что-то (файлы в /etc) подсказывает мне, что это с плеера viliv p2 сперто. Ну а ядро, видимо, надо собирать под db1200_defconfig. Хотя даже если оно загрузится - наверняка придется прописывать всю периферию (аудиокодек там, тачскрин) под свой девайс - адреса i2c чипов и разводка gpio будут отличаться.

А на аккаунте root же пароля вроде как нет.

alexst
()
Ответ на: комментарий от alexst

Нашлась тут в инете пара патчей, специфичных для Alchemy. Подскажите, пожалуйста, как при сборке их накатить? patch -p1 < my_patch.patch будет достаточно, если я нахожусь в папке, куда собирается образ? Поймёт ли система, что я собрался патчить собираемое ядро, а не то, на котором работает комп? Спасибо.

TripleKill
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.