В моих тестах работает что-то вроде этого:
awk -F"/>" -v RS=" " -v RS="
Finding Cuplicates:
Протестируйте это онлайн здесь
Мы пользуемся преимуществом awk, чтобы объявить настраиваемый разделитель записей (RS) и настраиваемый разделитель полей (FS). Вышеупомянутые две команды могут быть объединены в одном awk offourse, это был просто тест.
Мне удалось исправить контрольную сумму. Теперь Ethernet отлично работает под Linux. Я объяснил детали в моем ответе на мой вопрос SuperUser.SE.
По сути, я сначала пропатчил e1000e
, чтобы пропустить проверку контрольной суммы NVM
for (i = 0;; i++) {
if (e1000_validate_nvm_checksum(&adapter->hw) >= 0)
break;
if (i == 2) {
dev_err(pci_dev_to_dev(pdev),
"The NVM Checksum Is Not Valid\n");
err = -EIO;
goto err_eeprom;
}
}
в src / netdev.c
, и после того, как у меня был доступ к микросхеме Ethernet, я написал его NVM с ethtool
, который автоматически фиксирует контрольную сумму.
Драйвер e1000e
- это тот драйвер, который может запускать контроллеры Ethernet I2xx
Intel. А последний драйвер e1000e (на момент написания) может работать с микросхемой I219
.
Сообщение Неправильная контрольная сумма NVM
во время загрузки препятствовало загрузке старых драйверов. В других ОС (особенно в окнах MS) эта ошибка игнорируется. Но Linux кажется более строгим.
NVM - это ПЗУ (постоянное запоминающее устройство) в микросхеме, которое проверяет контрольную сумму, и более старая версия драйвера e1000
не знала о содержимом NVM новых микросхем. Поскольку карта работает в других операционных системах, которые игнорируют ошибку, другой возможностью было заставить драйвер игнорировать ошибку.
Контрольная сумма выполняется внутри nvm.c
, хотя некоторые другие модели представляют свои собственные функции fix_checksum
, которые выполняются до e1000e_validate_nvm_checksum_generic
.
s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
s32 ret_val;
u16 checksum = 0;
u16 i, nvm_data;
for (i = 0; i < (NVM_CHECKSUM_REG + 1); i++) {
ret_val = e1000_read_nvm(hw, i, 1, &nvm_data);
if (ret_val) {
e_dbg("NVM Read Error\n");
return ret_val;
}
checksum += nvm_data;
}
if (checksum != (u16)NVM_SUM) {
e_dbg("NVM Checksum Invalid\n");
return -E1000_ERR_NVM;
}
return 0;
}
NVM_SUM
определяется внутри define.h
#define NVM_SUM 0xBABA
Если вы уверены, что карта работает (и дает сбой только из-за контрольной суммы NVM), вы можете попробовать изменить функцию контрольной суммы на:
s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
return 0;
}
И это заставит контрольную сумму всегда быть успешной.
Дополнительные (более или менее) заслуживающие доверия ссылки:
Подробное руководство Поддержка Ubuntu 18.04.1 LTS -для Intel I219 -V
Скачать драйвер из
https://downloadcenter.intel.com/download/15817/Intel-Network-Adapter-Driver-for-PCI-E-Gigabit-Network-Connections-under-Linux-?product=71307(Тест на версии 3.4.0.2)
Распаковать zip в папку по вашему выбору
Перейдите в каталог src драйвера,
например.cd e1000e-3.4.2.1/src/
Перед загрузкой нового модуля убедитесь, что все старые драйверы e1000e удалены из ядра.sudo rmmod e1000e
Скомпилируйте модуль драйвера :sudo make install
Загрузите модуль с помощью команды modprobe :sudo modprobe e1000e
Бинарный файл будет установлен как :/lib/modules//updates/drivers/net/ethernet/intel/e1000e/e1000e.ko
Убедитесь, что интерфейс работает. Введите следующее, где IP-адрес _это IP-адрес другого компьютера в той же подсети, что и интерфейс который проходит испытания :пинг
Сделать драйвер постояннымsudo dpkg-reconfigure linux-image-$(uname -r)
Я думаю, это то, что делает pkt 8 ::.... Примечание. :Для некоторых дистрибутивов, таких как (, но не ограничиваясь )RedHat Enterprise. Linux 7 и Ubuntu, после установки драйвера файл initrd/initramfs может необходимо обновить, чтобы ОС не загружала старые версии драйвера e1000e. Для Ubuntu :#обновление -initramfs -u