Centos 7.6 ISO 부팅시 업데이트된 initrd.img 파일과 업데이트된 드라이버를 로드하려고 했으나, 드라이버를 교체해도 여전히 이전 드라이버가 로드되는 것 같습니다.
취해야 할 단계:
ISO에서 initrd 이미지를 추출합니다.
- CentOS 7.6 ISO 설치
- isolinux/initrd.img에서 initrd.img를 임시 폴더(/tmp/image)로 복사합니다.
- /tmp/image/initrd에 새 폴더를 만듭니다.
- 다음을 실행하여 initrd.img 폴더를 추출합니다.
xz -dc < ../initrd.img | cpio -idmv
e1000e.ko.kz 드라이버 파일 생성
- Intel 웹사이트에서 최신 e1000e 네트워크 카드 드라이버를 다운로드하십시오. e1000e 다운로드 링크
- tar 파일 추출
tar xvf e1000e-3.6.0.tar.gz
소스 코드를 작성하고 gcc 및 kernel-devel 라이브러리가 설치되어 있는지 확인하십시오.
cd e1000e-3.6.0/src make install
참고: 이 드라이버는 CentOS 7.6 ISO로 생성된 Linux 환경에서 컴파일되었습니다.
생성된 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에 복사한 후 ISO 설치 부팅 프로세스가 완료된 후 새 드라이버(e1000e 버전 3.6.0)를 로드하려고 합니다.
실제 결과
ISO에서 부팅하여 Centos 7을 설치할 수 있지만 Centos를 설치한 후 다음 명령을 실행합니다.
modinfo e1000e
initrd.img 이미지에 로드한 버전 3.6.0 대신 원래 initrd.img에 있는 이전 버전의 드라이버(e1000e 버전 3.2.6)를 제공합니다.
드라이버를 잘못 생성했는지, 드라이버를 잘못 로드했는지, initrd.img를 잘못 생성했는지 등 내가 무엇을 잘못했는지 잘 모르겠습니다.
지난 며칠 동안 작동시키려고 노력했기 때문에 어떤 도움이라도 대단히 감사하겠습니다. 이것은 내 첫 번째 게시물이므로 내가 뭔가 잘못하고 있거나 이 문제를 디버깅하기 위해 추가 정보가 필요한 경우 알려 주시기 바랍니다.
건배
답변1
방금 알아 냈습니다. 드라이버는 LiveOS/squashfs.img rootfs.img에도 있습니다. 따라서 initrd 모듈은 rootfs.img에 의해 덮어쓰여집니다. 이는 설치 중에 발생하지만 설치된 시스템이 부팅되면 드라이버는 설치된 RPM(이 경우 커널)에서 제공되므로 initrd는 더 이상 이와 관련이 없습니다. 설치된 시스템에서 실행되도록 하려면 이 RPM을 업데이트하거나 업데이트된 드라이버가 포함된 별도의 RPM을 추가해야 합니다.