amarao (amarao_san) wrote,
amarao
amarao_san

Как ставить драйвера под линукс

Дано: свежайший e1000 не опознаёт SFP'ный модуль. Цитирую дословно:

[559438.960484] ixgbe: 0000:09:00.1: ixgbe_probe: failed to load because an unsupported SFP+ module type was detected.

Решение (после многих попыток) - поправить функцию обнаружения SFP в ядренном модуле. Спасибо, исходники в наличии.


If your intel 10G does not recognize SFP module and wrote something like: "ixgbe_probe: failed to load because an unsupported SFP+ module type was detected.", thats means wrong detection.

Solution:

1) You need freshest e1000 driver:

http://sourceforge.net/projects/e1000/files/ixgbe%20stable/

2) setup required packages to build kernel modules.
(for debian lenny)
aptitude install build-essentials linux-headers-2.6.26-2-all-i386 (note: for amd64 headers have different name; for other distors setup required packages).

3) after downloading file (let's assume you are root and in /root folder):
tar -xzf ixgbe*
cd ixgbe*
cd src
nano  ixgbe_phy.c  (or vi, or vim, or even gedit)

find function ixgbe_identify_sfp_module_generic
(it looks like s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw))

now, _after_ line:
status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER,
                                             &identifier);


add line
return 0;


results will looks like:

        if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
                hw->phy.sfp_type = ixgbe_sfp_type_not_present;
                status = IXGBE_ERR_SFP_NOT_PRESENT;
                goto out;
    }

        status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER,
                                             &identifier);

        return 0;
        if (status == IXGBE_ERR_SFP_NOT_PRESENT || status == IXGBE_ERR_I2C) {
                status = IXGBE_ERR_SFP_NOT_PRESENT;
                hw->phy.sfp_type = ixgbe_sfp_type_not_present;
                if (hw->phy.type != ixgbe_phy_nl) {
                        hw->phy.id = 0;
                        hw->phy.type = ixgbe_phy_unknown;
                }
                goto out;
        }


Now, save changes and exit.

run make, and if no error detected, make install.

After that:

rmmod ixgbe
modprobe ixgbe


After that you can check your dmesg and looks to ifconfig -a (do not forget to bring interface up).

That's all.



Да, забыл. Всё это (после проверки на тестовом сервере) было сделано на работающем сервере, обслуживающим диски примерно 40 виртуальных машин без перерыва в обслуживании.
Tags: debian, linux, sfp, администрирование, грабли
Subscribe

  • ансибло-философия

    А вот я хочу продолжить думать умное про ансибл, ci/cd и прочую рабочую фигню между гитом и сервером. Классическое программирование стремится…

  • positive nagging

    Для повышения морали в коллективе было решено запретить токсичные и негативные сообщения в чате. Теперь все сообщения в чате выглядят так: Resolved…

  • Шли годы, а я учусь башу.

    Офигеть. Офигеть. echo <(echo hello) foobar /dev/fd/63 foobar Я этого честно не знал. Я знал, что в конце можно, а что можно в середине -…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 16 comments

  • ансибло-философия

    А вот я хочу продолжить думать умное про ансибл, ci/cd и прочую рабочую фигню между гитом и сервером. Классическое программирование стремится…

  • positive nagging

    Для повышения морали в коллективе было решено запретить токсичные и негативные сообщения в чате. Теперь все сообщения в чате выглядят так: Resolved…

  • Шли годы, а я учусь башу.

    Офигеть. Офигеть. echo <(echo hello) foobar /dev/fd/63 foobar Я этого честно не знал. Я знал, что в конце можно, а что можно в середине -…