Quilt 사용법

quilt은 Linux 커널이나 오픈소스 프로젝트에서 패치 세트를 관리할 때 자주 사용하는 도구이다. 여러 개의 패치를 순서대로 적용하고, 수정하고, 제거할 수 있게 도와준다. 기본적인 사용법은 다음과 같다.

1. 초기 설정

quilt init
  • 현재 디렉터리에 .pc/ 디렉터리를 만들어 패치 관리 환경을 초기화한다.

2. 새 패치 생성

quilt new mypatch.patch
  • mypatch.patch라는 이름의 새 패치를 생성한다.
  • 이후 변경할 파일을 추가해야 한다.

3. 수정할 파일 추가

quilt add src/main.c
  • src/main.c 파일을 현재 패치에 포함시킨다.
  • 이후 이 파일을 수정하면 해당 변경 내용이 패치에 반영된다.

4. 패치 저장

quilt refresh
  • 현재까지의 변경 내용을 패치 파일에 저장한다.

5. 패치 적용 및 제거

quilt push
quilt pop
  • push: 다음 패치를 적용한다.
  • pop: 마지막으로 적용한 패치를 되돌린다.

6. 패치 목록 확인

quilt series
quilt applied
quilt unapplied
  • series: 전체 패치 목록을 표시한다.
  • applied: 현재 적용된 패치 목록을 표시한다.
  • unapplied: 아직 적용되지 않은 패치 목록을 표시한다.

7. 패치 내용 보기

quilt diff
  • 현재 패치의 변경 내용을 확인할 수 있다.

8. 리눅스 커널 패치 작업 예시

커널 소스 준비

git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
  • 최신 커널 소스를 clone한다.
  • quilt은 Git과 별개로 패치를 관리하므로, Git 브랜치와 병행해 사용할 수 있다.

quilt 초기화

quilt init
  • .pc/ 디렉터리가 생성되어 패치 관리 환경이 준비된다.

패치 시리즈 파일 생성

echo "mypatch.patch" >> series
  • series 파일은 패치 적용 순서를 정의한다.
  • 여러 패치를 순서대로 관리할 때 유용하다.

새 패치 생성

quilt new mypatch.patch
  • mypatch.patch라는 이름의 새 패치를 생성한다.
  • 이후 수정할 파일을 추가해야 한다.

수정할 파일 추가

예를 들어, drivers/net/ethernet/intel/e1000/e1000_main.c 파일을 수정한다고 가정하면:

quilt add drivers/net/ethernet/intel/e1000/e1000_main.c
  • 이 파일이 현재 패치에 포함된다.
  • 이후 에디터로 파일을 수정한다.

코드 수정

vi drivers/net/ethernet/intel/e1000/e1000_main.c

임의로 파일을 수정한다. 예를 들어, 디버그 로그를 추가하거나 주석을 수정한다.

패치 저장

quilt refresh
  • 현재까지의 변경 내용을 mypatch.patch 파일에 저장한다.
  • patches/ 디렉터리에 패치 파일이 생성된다.

패치 적용/해제 테스트

quilt pop -a   # 모든 패치 제거
quilt push -a # 모든 패치 다시 적용
  • 패치가 정상적으로 적용되고 제거되는지 확인한다.

패치 내용 확인

quilt diff
  • 현재 패치의 변경 내용을 확인할 수 있다.
  • 또는 less patches/mypatch.patch로 직접 패치 파일을 열어볼 수도 있다.

패치 제출

  • 커널 메일링 리스트에 제출할 때는 git send-email을 사용하거나,
    quilt mail 명령으로 메일 형식의 패치를 생성할 수 있다.
quilt mail -m "Fix typo in e1000 driver log message"

Reference

답글 남기기