리눅스 커널에 커밋해보자!
리눅스 커널에 커밋한다는 건 정말 멋진 일이다. 하지만 나는 아직 쪼렙이기 때문에 커널의 중요한 파트에 기여할 수는 없다. 하지만 리눅스 커널에 커밋하기 위해서 항상 엄청난 일을 해야하는 건 아니다. 대신 나는 아주 작고 귀여운, 코딩 스타일 고치기를 해보기로 했다. 코딩 스타일을 점검해주는 checkpatch.pl 스크립트의 warning을 고쳐보자.
우선 git 저장소를 클론한다.
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
drivers/staging 폴더에는 TODO 파일이 있는데, 코딩 스타일을 고쳐야 할 경우에는 "fix checkpatch.pll warning"이라고 보통 쓰여있다. 그런 파일들을 한 번 찾아보자.
cd drivers/staging
cat */TODO | grep "checkpatch"
명령어를 실행해보니 drivers/staging/rtl8723bs/TODO에 checkpatch를 고칠 것이 많아서 커밋을 작성하고 email을 보내봤다. 그리고 3분만에 Greg-KH bot에게 reject 당했다.
요약하면 내용은 다음과 같다.
- 1. 한 patch는 한 가지 일만 해야한다. 디렉토리의 모든 코딩 스타일을 고치는 등의 행위는 review를 힘들게 만든다.
- 2. Signed-off-by line을 명시하지 않았다.
- 3. 실제 이름으로 이메일을 보내야 한다 (닉네임 X)
나는 위에 있는걸 셋다 어겼다 ㅋㅋㅋ 그래서 youtube에서 Greg-KH 아저씨가 patch 작성법을 설명한 동영상이 있어서 듣고 다시 작성해본다.
checkpatch.pl
커밋을 하기 전에 먼저 고유의 브랜치를 만들어주자. 이름은 중요하지 않다.
git checkout -b fix_braces
그리고 drivers/staging/rtl8723bs로 이동해서 checkpatch.pl을 돌려보자. checkpatch.pl은 scripts 폴더에 있다. 나는 이 폴더를 PATH에 추가해뒀다.
checkpatch.pl --file --terse core/rtw_cmd.c
warning이 정말 많이 뜨는데, 한번에 여러개를 고쳤다가 reject 당했으므로 "braces {} are not necessary for any arm of this statement" 오류만 고쳐보자.
checkpatch.pl --file --terse core/rtw_cmd.c | grep "braces"
실제로 오류가 뜬 line을 보면 다음과 같이 if에 single line임에도 불구하고 괄호를 쓴다. 이건 linux kernel codingstyle에서 벗어나므로 고쳐주자. 리눅스 코딩스타일은 www.kernel.org/doc/html/v4.10/process/coding-style.html에 나와있다.
compile
커밋 하기 전에 컴파일이 되는지 확인해본다. 커널을 컴파일하려면 config를 설정해야하는데, 아직 커널 컴파일 하는법을 자세히 모르므로... make allyesconfig를 해주고 빌드해보자.
make allyesconfig
make drivers/staging/rtl8723bs/core/rtw_cmd.o
다행히 잘 컴파일이 되었다!
commit
git add core/rtw_cmd.c
git commit
지금 보니까 영어가 좀 이상한데, 받아줄지 모르겠다 ㅋㅋㅋ 일단 커밋을 했으면 patch를 만들자.
git format-patch master..fix_braces
patch가 생겼다! 이제 이걸 email로 보내보자. 근데 email을 누구한테 보내나? 이것도 scripts에 get_maintainer.pl이라는 스크립트가 있어서 관련된 maintainer들을 볼 수 있다. 그런데 난 그냥 영상 따라서 Greg KH 아저씨한테 보내봤다.
그런데 이메일을 보내려면 apt-get install git-email을 깔고, 메일 설정을 먼저 해주어야 한다. 나는 Gmail 기준으로 설명을 작성해보겠다.
git config --global sendemail.smtpserver smtp.gmail.com
git config --global sendemail.smtpencryption tls
git config --global sendemail.smtpserverport 587
git config --global sendemail.smtpuser 42.hyeyoo@gmail.com
그리고 google은 안전하지 않은 클라이언트에서 접속하는걸 기본적으로 허용하지 않으므로, myaccount.google.com/lesssecureapps에서 허용해주어야 로그인이 된다.
git send-email --to gregkh@linuxfoundation.org --cc devel@driverdev.osuosl.org 0001-Staging-rtl8723bs-fixed-a-brace-coding-style.patch
그리고 비밀번호를 입력해주면 패치를 이메일로 보내게 된다!
제 인내의 시간이다.. 나의 작고 귀여운 패치가 승인될 때까지 기다려보자.
Accepted!
우와 내 patch가 accept되었다! 메일 보낸지 반나절도 안됐는데, 생각보다 빨리됐다.
참고 링크
'Kernel' 카테고리의 다른 글
[Linux Kernel] proc 파일시스템과 seq_file 인터페이스 (1) | 2021.04.18 |
---|---|
[LInux Kernel] 문자 디바이스 드라이버 작성 (5) | 2021.04.17 |
[Linux Kernel] 가상 파일시스템이란 (VFS, Virtual Filesystem Switch) (0) | 2021.04.13 |
[Linux Kernel] 리눅스 커널 모듈 작성 (0) | 2021.04.13 |
리눅스 커널 입문에 도움이 될만한 것들 (0) | 2020.01.02 |
댓글