Я пытаюсь загрузить обновленный файл initrd.img с обновленными драйверами при загрузке Centos 7.6 ISO, однако, похоже, он все еще загружает старый драйвер, хотя я заменил драйвер.
Предпринятые шаги:
Извлеченный образ initrd из ISO:
- Смонтированный CentOS 7.6 ISO
- Скопировал initrd.img из isolinux/initrd.img во временную папку (/tmp/image)
- Создал новую папку в /tmp/image/initrd
- Извлеките initrd.img из папки, запустив
xz -dc < ../initrd.img | cpio -idmv
Создан файл драйвера e1000e.ko.kz
- Загрузите последнюю версию драйвера сетевой карты e1000e с веб-сайта Intel: ссылка для скачивания e1000e
- Извлек файл tar
tar xvf e1000e-3.6.0.tar.gz
Создайте исходный код, убедившись, что установлены библиотеки gcc и kernel-devel
cd e1000e-3.6.0/src make install
Примечание: этот драйвер был скомпилирован в среде Linux, созданной с помощью CentOS 7.6 ISO.
Скопируйте созданный файл e1000e.ko во временную папку (/tmp/image)
Сожмите его в формат .kz
xz -k e1000e.ko
Замените старый драйвер и перепакуйте образ initrd.img
Скопируйте сжатый файл драйвера, чтобы заменить существующий драйвер.
cp e1000e.ko.kz /tmp/image/initrd/files/lib/modules/3.10.0.957.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000e
- Перепаковываем initrd.img
cd /tmp/image/initrd find . 2>/dev/null | cpio -c -o | xz -9 --check=crc32 > ../initrd.img
- Скопируйте сгенерированный initrd.img обратно в ISO по адресу isolinux/initrd.img и images/pxe/initrd.img
Ожидаемые результаты
После обновления драйвера в initrd.img и копирования его в ISO я ожидаю, что новый драйвер (e1000e версии 3.6.0) будет загружен после завершения процесса загрузки установки ISO.
Фактические результаты
Мне удаётся загрузиться с ISO-образа и установить Centos 7, однако после установки Centos, выполняю следующую команду:
modinfo e1000e
Выдает старую версию драйвера, которая изначально была в образе initrd.img (e1000e версии 3.2.6), а не версию 3.6.0, которую я загрузил в образ initrd.img.
Я не совсем понимаю, что я делаю не так: неправильно ли создаю драйвер, неправильно ли загружаю драйвер, неправильно ли создаю initrd.img или что-то еще.
Любая помощь будет оценена по достоинству, так как я пытаюсь заставить это работать последние несколько дней. Это мой первый пост, так что дайте мне знать, если я делаю что-то неправильно или если требуется дополнительная информация для устранения этой проблемы.
Ваше здоровье
решение1
Только что разобрался. Драйверы также находятся в LiveOS/squashfs.img rootfs.img. Таким образом, модули initrd накладываются на rootfs.img. Это происходит во время процесса установки, но после загрузки установленной системы драйвер берется из установленного RPM (вероятно, в данном случае ядра), поэтому initrd больше не имеет к этому никакого отношения. Вам нужно будет обновить этот RPM или добавить отдельный RPM с обновленным драйвером, чтобы он работал в установленной системе.