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
- https://savannah.nongnu.org/projects/quilt/
- https://man7.org/linux/man-pages/man1/quilt.1.html
- https://wiki.debian.org/UsingQuilt
- https://docs.yoctoproject.org/dev/dev-manual/quilt.html