checkpatch.pl 사용법

리눅스 커널은 코딩 스타일(https://www.kernel.org/doc/Documentation/process/coding-style.rst)을 가지며, 이를 준수해야 한다. checkpatch 는 커널 소스에서 제공하는 Perl 스크립트로, 커널 패치에 대해 커널 코딩 스타일을 체크하여 수정해야 하는 부분을 알려준다. 이 글에서는 이 checkpatch 스크립트 사용법에 대해 살펴본다.

만약 vim을 사용한다면, kernel 코딩 스타일 플러그인을 적용하여 코드를 작성하고, 제출 전에 checkpatch 스크립트로 점검하는 것이 좋다. vim 커널 코딩 스타일 적용 방법은 아래 글을 참고 하기 바란다.

사용법(Usage)

사용법은 다음과 같이 간단하다.

./scripts/checkpatch.pl [OPTION]... [FILE]...

아래는 arch/arm64/kernel/syscall.c를 checkpatch로 돌려봤다.

$ ./scripts/checkpatch.pl -q -f arch/arm64/kernel/syscall.c
WARNING: externs should be avoided in .c files
#20: FILE: arch/arm64/kernel/syscall.c:20:
+long sys_ni_syscall(void);

WARNING: Missing a blank line after declarations
#26: FILE: arch/arm64/kernel/syscall.c:26:
+       long ret;
+       if (is_compat_task()) {

WARNING: ENOSYS means 'invalid syscall nr' and nothing else
#28: FILE: arch/arm64/kernel/syscall.c:28:
+               if (ret != -ENOSYS)

WARNING: Missing a blank line after declarations
#51: FILE: arch/arm64/kernel/syscall.c:51:
+               syscall_fn_t syscall_fn;
+               syscall_fn = syscall_table[array_index_nospec(scno, sc_nr)];

WARNING: externs should be avoided in .c files
#79: FILE: arch/arm64/kernel/syscall.c:79:
+void syscall_trace_exit(struct pt_regs *regs);

WARNING: ENOSYS means 'invalid syscall nr' and nothing else
#136: FILE: arch/arm64/kernel/syscall.c:136:
+                       syscall_set_return_value(current, regs, -ENOSYS, 0);

total: 0 errors, 6 warnings, 190 lines checked

checkpatch.pl이 항상 옳은 것은 아니다. checkpatch 메시지에도 불구하고 저자의 판단이 우선한다. 즉, 위반 사항이 있다고 나오더라도 본인 판단에 코드가 더 좋아 보인다면 본인 결정이 우선순위를 높게 가져가도 된다. 나중에 리뷰어의 의견이 있다면 그 부분만 반영하면 된다.

주요 옵션(Options)

주요 옵션은 다음과 같다.

  • -q, –quite : Quiet 모드에서 실행
  • -v, –verbos : verbose 모드에서 실행
  • –no-tree : kernel tree 없이 checkpatch 수행
  • –no-signoff : ‘Signed-off-by’ 체크를 하지 않음
    Example:
Signed-off-by: Random J Developer <random@developer.example.org>
  • –patch: 파일을 패치로 취급. 기본 옵션이어서 명시적으로 지정할 필요가 없음
  • -f, –file: 파일을 일단 소스 파일로 취급. 이 옵션은 커널 소스에 대해 checkpatch를 사용할 때 사용해야 함.

더 자세한 옵션은 https://docs.kernel.org/dev-tools/checkpatch.html 를 참고하자

참고

vim 리눅스 커널 코딩 스타일 적용법

답글 남기기