device driver

코드를 수정하여 iso 이미지가 만들어지는 원리

의지의 엘린 2024. 7. 18. 16:59

커널 모듈을 수정한 후 이를 RPM 패키지에 반영하려면, 먼저 커널 모듈을 재빌드해야 합니다. 이렇게 해야 수정된 모듈이 새로운 RPM 패키지에 포함될 수 있습니다. 다음은 이 과정을 자세히 설명합니다.

1. 소스 파일 수정

먼저 igb.c 파일을 수정합니다. 예를 들어, 파일 경로가 /home/user/igb/src/igb.c라고 가정합니다. 원하는 수정 작업을 완료합니다.

2. 커널 모듈 재빌드

수정된 소스 파일을 기반으로 커널 모듈을 재빌드해야 합니다. 이를 위해 커널 소스 트리와 필요한 빌드 도구들이 설정되어 있어야 합니다.

cd /home/user/igb/src
make

이 명령어는 Makefile을 사용하여 igb.ko 커널 모듈을 생성합니다.

3. RPM 패키지 생성

수정된 커널 모듈을 포함하는 RPM 패키지를 생성합니다. 이를 위해 SPEC 파일을 작성하거나 수정해야 합니다. 예를 들어, igb.spec 파일을 작성하거나 수정합니다:

igb.spec 파일 예시:

Name: igb
Version: 5.4.0
Release: 2%{?dist}
Summary: Intel Gigabit Ethernet driver
License: GPLv2
Source0: %{name}-%{version}.tar.gz

BuildRequires: kernel-devel
Requires: kernel

%description
This package contains the Intel Gigabit Ethernet driver.

%prep
%setup -q

%build
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules

%install
mkdir -p %{buildroot}/lib/modules/%{kver}/extra
install -m 644 igb.ko %{buildroot}/lib/modules/%{kver}/extra/

%files
/lib/modules/%{kver}/extra/igb.ko

%changelog
* Thu Jul 18 2024 Your Name <your.email@example.com> - 5.4.0-2
- Rebuilt with modified igb.c

4. 소스 아카이브 생성

수정된 소스 파일을 포함하는 디렉터리를 tar.gz 아카이브로 압축합니다:

tar czvf igb-5.4.0.tar.gz igb/

5. RPM 빌드 환경 설정

RPM 빌드를 위해 홈 디렉터리에 RPM 빌드 환경을 설정합니다:

mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
cp igb-5.4.0.tar.gz ~/rpmbuild/SOURCES/
cp igb.spec ~/rpmbuild/SPECS/

6. RPM 패키지 빌드

rpmbuild 명령을 사용하여 RPM 패키지를 빌드합니다:

rpmbuild -ba ~/rpmbuild/SPECS/igb.spec

이 명령은 새로운 igb.ko 모듈이 포함된 RPM 패키지를 생성합니다.

7. ISO 이미지 생성

RPM 패키지를 포함하는 ISO 이미지를 생성하기 위해 다음 단계를 따릅니다.

디렉터리 구조 설정

ISO 이미지에 필요한 디렉터리 구조를 설정합니다:

mkdir -p /iso-root/Packages

RPM 패키지 복사

생성된 RPM 패키지를 ISO 이미지 디렉터리에 복사합니다:

cp ~/rpmbuild/RPMS/x86_64/igb-5.4.0-2.x86_64.rpm /iso-root/Packages/

YUM 리포지토리 생성

YUM 리포지토리를 생성합니다:

createrepo /iso-root/Packages/

부팅 설정 파일 작성

부팅 설정 파일을 작성합니다 (isolinux.cfg 등):

default vesamenu.c32
timeout 600

menu background splash.png
menu title Welcome to Custom Linux
label linux
  menu label ^Install Custom Linux
  kernel vmlinuz
  append initrd=initrd.img

초기 램디스크 이미지 생성

커널 이미지와 초기 램디스크 이미지를 준비하고 ISO 디렉터리에 복사합니다:

cp /boot/vmlinuz-$(uname -r) /iso-root/images/vmlinuz
cp /boot/initrd.img-$(uname -r) /iso-root/images/initrd.img

ISO 이미지 생성

최종 ISO 이미지를 생성합니다:

mkisofs -o /path/to/output.iso \
  -b isolinux/isolinux.bin \
  -c isolinux/boot.cat \
  -no-emul-boot \
  -boot-load-size 4 \
  -boot-info-table \
  -J -R -V "Custom Linux" /iso-root

요약

  1. 소스 파일 수정: igb.c 파일을 수정합니다.
  2. 커널 모듈 재빌드: 수정된 소스 파일로 커널 모듈을 빌드합니다.
  3. RPM 패키지 생성: 수정된 커널 모듈을 포함하는 RPM 패키지를 생성합니다.
  4. ISO 디렉터리 구조 설정: ISO 이미지의 디렉터리 구조를 설정합니다.
  5. RPM 패키지 복사: 생성된 RPM 패키지를 ISO 디렉터리에 복사합니다.
  6. YUM 리포지토리 생성: 리포지토리를 생성합니다.
  7. 부팅 설정 파일 작성: 부팅 설정 파일을 작성합니다.
  8. 초기 램디스크 이미지 생성: 초기 램디스크 이미지를 준비합니다.
  9. ISO 이미지 생성: 최종 ISO 이미지를 생성합니다.

이 과정을 통해 수정된 igb.c 파일이 반영된 커스터마이즈된 리눅스 설치 ISO 이미지를 만들 수 있습니다.