LINUX.ORG.RU

[r8168b] [загрузка по сети] Не работает на 1Gb/s


0

2

Карта

lspci | grep Ether 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)

Драйвер вкомипилен в ядро.

cat .config | grep 8169 CONFIG_R8169=y

Загрузка по сети. Во время загрузки ядра всё замирает на минуту после чего выпадает надпись:

8169 0000:04:00.0: eth0: unable to apply firmware patch

Дальше всё загружается, но ethtool говорит 1000Mb/s, но аплоад 9 мегабайт в секунду.

Гугл говорит, что для исправления такой ругани надо скачать прошивку, но как подсунуть её ядру во время загрузки? Корня ещё нет, он монтируется по нфс, инитрд ещё не распаковался. И вылечит ли это беду со скоростью?

Ядро 2.6.38-r6 gentoo-sources



Последнее исправление: nkv-d (всего исправлений: 1)
Ответ на: комментарий от free_serj

Где взять прошивку понятно. Вопрос в том как заставить ядро её загружать. Корень монтируется по сети, попробовал добавить прошивку в инитрд, но он подмонтировался уже после инициализации сетевого драйвера.

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

Когда драйвер делает запрос на firmware, он вызывает бинарник, указанный в /proc/sys/kernel/hotplug. Этот бинарник смотрит на environment, понимает, что от него хотят, и отдаёт firmware через sysfs (выставляет loading в 1, пишет firmware в data, выставляет loading обратно в 0; если что-то пошло не так, то пишет -1 в loading).

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

Получается в любом случае не обойтись без инитрамфс с примонтированными /proc и /sys. Тогда возникает новая проблема. Монтирование корня по нфс. Если я правильно понимаю ядро уже не будет ничего монитровать после того как запущен /init из initramfs. Примонтировал нфс корень руками, но после switch_root в эту папку выпадает ошибка mount general protection содержимое регистров и адрес ld-linux.so.

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

У меня получалось монтировать nfs из /init. Можно попробовать пересобрать busybox с uClibc без динамической компоновки.

Если есть ещё какая-то причина, по которой использование initramfs (даже внедрённого в образ ядра) невозможно, то может помочь такой способ: при помощи bin2h превратить firmware в .h-файл и похачить драйвер, заменив request_firmware на взятие адреса.

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

Спасибо. Всё получилось. С прошивкой не стал заморачиваться - собрал драйвер от производителя и гружу его из инитрамфс. С переключением корня помогло это http://forums.overclockers.com.au/showthread.php?t=947450. Где был беда не знаю. Или монтировал не так, или аргументы ядра не передавал в switch_root. Скорость потестирую завтра. Под рукой нет ничего гигабитного.

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

>в любом случае не обойтись без инитрамфс с примонтированными /proc и /sys

можно вшить фирмварь прямо в ядро

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

Превратив в .h как советовал kmeaw?

На драйверах реалтека таки заработало 1Gb/s

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