DREAMER

[patch] patch 파일 생성 및 적용 본문

프로그래밍/Linux

[patch] patch 파일 생성 및 적용

연소민 2023. 5. 9. 12:08
728x90
반응형

patch 파일을 만드는 방법은 크게 2가지가 있다.

1. git

2. diff

 

1, git diff로 patch파일 생성

kernel 소스의 패치를 생성하려면 다음 명령어를 사용하여 새로운 shell을 열어준다. {linux-tegra}에 원하는 패키지 명을 넣어주면 해당 패키지의 경로에서 shell이 열린다.

$ bitbake linux-tegra -c devshell

git diff로 patch파일을 생성하기 위해서 해당 shell에서 git 레파지토리 설정을 한다. 아래 내용은 사용자에 따라 편한 방식대로 변경되어도 좋다. 단, patch를 만들 commit을 생성해야 한다.

$ git init
$ git add .
$ git commit -m "First Commit"

commit을 생성한 후에, 원하는대로 kernel 소스를 수정한다. patch가 너무 커지면 가독성 및 관리가 힘들기 때문에, 모듈 별, 기능 별 등으로 commit을 쪼개서 생성한다.

수정 후 commit.

$ git add .
$ git commit -m "Add functions for wireless"

patch 파일의 수정 전 (First Commit)과 수정 후 (Second Commit)을 맞게 commit 하였다면 diff로 해당 사항을 출력하여 확인할 수 있다.

$ git diff

현재 레파지토리에서 수정 내역을 확인 할 수 있다. 해당 사항이 내가 업데이트한 내역이 맞는 지 확인 후 패치파일을 생성한다.

$ git diff > 0001-Add-functions-for-wireless.patch

현재 디렉터리에 패치파일이 생성된 것을 확인 할 수 있다.

만약 여러개의 commit을 1개의 patch파일로 생성하고 싶으면 original commit id & update commit id를 사용하면 된다.

$ git log

<출력>
commit ae676f2ec15c6355d26142addas86e1401646fa9 (HEAD -> master)
Author: user <user@github.com>
Date:   Wed Mar 15 18:53:16 2023 +0900

    Fourth Commit

commit a8d482cdf03da576de3d5fbb33eb350f6dd231d6
Author: user <user@github.com>
Date:   Wed Mar 15 15:15:14 2023 +0900

    Third Commit

commit 42563fc5631a7410b91142fa77e26ed0c6f0607b
Author: user <user@github.com>
Date:   Wed Mar 15 11:24:09 2023 +0900

    Second Commit

commit 848b4f58fa46988c42a8a3c79716ae468abdea5e
Author: user <user@github.com>
Date:   Thu Mar 9 09:55:25 2023 +0900

    First Commit

commit id로 patch파일 생성

$ git diff [original-commit-id] [update-commit-id] > [patch-file]
=== 예시 ===
$ git diff 42563fc5631a7410b91142fa77e26ed0c6f0607b ae676f2ec15c6355d26142addas86e1401646fa9 > 0002-Delete-old-modules.patch

 

2. diff로 patch 파일 생성

$ diff -uNr <file1> <file2> > test.patch

 

 

 

[patch파일 적용]

옵션 -pNumber는 skip할 디렉터리의 수를 의미한다.

예를들어, 패치파일에서 p3 옵션을 주면 다음과 같이 경로가 생략된다.

   --- a/etc/xdg/weston/weston.ini +++ b/etc/xdg/weston/weston.ini ->   --- a/weston.ini +++ b/weston.ini

 

$ patch -p1 < [패치파일명]

 

728x90
반응형
Comments