LINUX.ORG.RU

[DIR-320] Максимальный размер ELF-ядра


0

0

Попытаюсь вкратце описать ситуацию: есть сабжевый девайс, хочу запустить на нем ядро, которое подцепит с USB-диска корневую ФС, короче эдакий микро-дистрибутив, собранный из сорсов. Но проблема вот в чем: макс. размер ядра, которое может загрузить CFE, составляет чуть более 3х Мбайт. Ядро содержащее все минимально необходимое для загрузки (драйверы USB + ext2, etc...) не вписывается в эти 3 с копейками мегабайта.

Собственно тут видится два решения проблемы:

1. Модификация CFE;

2. Каким-либо образом еще уменьшить ядро.

З.Ы. Оптимизация для маленького размера, при компиляции ядра, уже включена.

Заранее спасибо всем за ответы!


Ну OpenWRТ же влазит, и не только ядро, а и юзерспейс, достаточный, чтобы подключить юсб-винт и сделать в него chroot. В нем и смотреть конфиги.

vga ★★
()

Собирал я монолит, включающий

все минимально необходимое для загрузки

размером ~2M на x86_64, так что копайте дальше.

anon_666
()

Можно взять любую прошивку и дописать туда свой дополнительный стартовый скрипт.

PolarFox ★★★★★
()

>Ну OpenWRТ же влазит, и не только ядро, а и юзерспейс

Ну то понятно, но оно во флеше живет

Собирал я монолит, включающий

все минимально необходимое для загрузки

размером ~2M на x86_64, так что копайте дальше.

Может это у вас размер сжатого GZip'ом ядра? При загрузке CFE распаковывает (если ядро сжато) или просто копирует ядро в определенную область ОЗУ, вот она-то и ограничена 3 с копейками Мб (хотя там 32 метра оперативы)

На а вообще попробую покопать дальше, всем спасибо. Ах да, ядро 2.6.33.

Evalle
() автор топика

Собрал заново утерянный тулчейн, тепер о чем-то можно говорить. Собрал ядро (2.6.33.6), которое включает в себя все для загрузки (USB 1.1, SCSI disk support, ...) + некоторые сетевые примочки (Netfilter пока отсутствует).

Strip'нутый ELF (+ Optimize kernel for size) весит 3 251 232 байт.

Пытаемся загрузить:

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

CFE> boot -elf -tftp 192.168.0.5:mini

cmd = boot -elf -tftp 192.168.0.5:mini

Loader:elf Filesys:tftp Dev:eth0 File:192.168.0.5:mini Options:(null)

Loading: 0x80001000/3246276 Failed.

Could not load 192.168.0.5:mini: Section would load outside available DRAM

*** command status = -17

CFE>

Так что ни о каких 2х мегабайтных ядрах и речи быть не может, хотя может я что-то неправильно делаю?

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

попробуй собрать совсем минимальное ядро, без юсб, только с поддержкой ком как консоли и всё.

DuratarskeyK
()

http://blog.famzah.net/2009/11/15/build-a-very-small-linux-kernel-with-all-po... Пробовал замодить конфиг в соответствии с этим гайдом, особой разницы в размере не заметил (хотя там собирают для x86, может поэтому у них в 900+ кб помещается)

А также пробовал собирать самое минимальное ядро (консоль и все, даже без поддержки сети): вышло гдето 2.7 мб, но оно почему-то не работает. Добавляем сеть или USB, уже не влазит.

Так что буду благодарен, если кто-нибудь поможет замоддить CFE.

Evalle
() автор топика

Товарищи нужна ваша помощь: с размером ядра вроди порядок (usb + все необходимое успешно влезло).

Теперь проблема в другом: когда я собирал старым тулчейном (gcc-4.4.3, без патчей), то все работало:

CFE> boot -elf -tftp 192.168.0.5:vmlinux_nousb

...

Starting program at 0x80005250

Linux version 2.6.33.2 (root@host) (gcc version 4.4.3 (GCC) ) #2 Sun Apr 18 20:43:35 EEST 2010

Теперь новый тулчейн на основе ГЦЦ 4.4.4 - ядро не запускается, пробовал патчить (патчи от openwrt) и пересобирать, изменений нет:

CFE> boot -elf -tftp 192.168.0.5:vmlinux

...

Starting program at 0x80005250

На этом все, никаких сообщений, роутер виснет. Теперь собственно вопрос: откатываться на 4.4.3, или же это бок в конфиге ядра?

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

Внесу свою маленькую лепту.
DIR-320 — роутер на броадкоме. OpenWRT не любит броадком, потому что они ратуют за полную открытость кода. Поэтому тут уж надо смотреть что есть не у OpenWRT, а у DD-WRT.
Для DIR-320 после небольшой правки работает прошивка от Олега (в частности wl500g-1.9.2.7-10). Поэтому можете смотреть те конфиги, которые у Олега.
И ещё. Я знаю только один роутер (на броадкоме), для которого были бы дрова для 2.6 — N16. Так что, думайте сами про 2.6.33.2 и т.д.

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