Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

56189
2265
156767


리눅스 커널 기여(Contribution) 및 참여하기 - 1.설정 부록



부록 B에서 리눅스 커널을 익히는 다양한 방법을 소개했습니다. 그런데 리눅스 커널 실력을 키우는 또 다른 좋은 방법은 '리눅스 커널 프로젝트'에 참여해 기여하는 것입니다. 그럼 리눅스 커널 오픈소스 프로젝트에 기여하는 것이 뭘까요? 여러분이 수정한 소스코드가 리눅스 커널 소스코드에 반영되는 것입니다. 리눅스 커널 소스를 분석하는 데 그치지 말고 코드를 개선해 보면 더 많은 것을 얻을 수 있습니다.

이번에는 리눅스 커널 오픈소스 프로젝트에 참여해 여러분이 수정한 코드를 기여하는 방법을 소개합니다.

1. 리눅스 커널 오픈소스 프로젝트 소개

리눅스 커널 오픈소스 프로젝트를 진행하다 보면 낯선 용어를 만나게 됩니다. 먼저 관련 용어를 배워봅시다.

1.1 용어

메인테이너란?
여러분이 리눅스 커널 오픈소스 프로젝트를 진행하면 가장 먼저 메인테이너(Maintainer)를 만나게 됩니다. 그 이유는 여러분이 커널 패치 코드를 이메일로 보내면 이를 리뷰해주는 개발자가 메인테이너이기 때문입니다.

리눅스 커널 서스시스템별로 메인테이너가 있는데 이들은 각 서브시스템에서 가장 실력이 뛰어나거나 활발하게 활동하는 개발자로서 여러 커널 개발자가 제안한 패치를 수락하거나 거절하는 역할을 합니다.

만약 여러분이 제안한 내용을 메인테이너가 수락하면 리눅스 커널의 메인 저장소에 병합(Merge)될 가능성이 높습니다. 리누스 토발즈(Linus Torvalds)도 메인테이너의 권한을 존중해주기 때문입니다.

서브시스템이란?
서브시스템은 리눅스 커널의 세부 기능을 의미합니다. 예를 들면 다음과 같습니다.

ext4 파일 시스템
xfs 파일 시스템
USB 드라이버
perf
tracing

리눅스 커널은 수십 개의 서브시스템으로 구성돼 있으며, 각 서브시스템별로 메인테이너가 있습니다.


1.2 패치 반영 과정

여러분이 커널 코드를 수정한 후 패치를 보내면 다음과 같은 과정을 거칩니다.
여러분이 패치 코드를 이메일로 전송하면 먼저 메인테이너의 코드 리뷰를 받습니다.
메인테이너가 패치를 승락하면 서브시스템별로 관리되는 저장소에 병합됩니다.
일주일 후 서브시스템별로 관리되는 저장소는 linux-next 메인 브랜치에 병합됩니다.

2. 설정 방법

리눅스 커널 패치를 생성하기 전에 먼저 간단한 설정을 해야 합니다. 이를 위한 리눅스 배포판을 소개하고 프로그램을 설치하는 방법을 설명하겠습니다.

2.1 리눅스 배포판 소개

리눅스 커널 소스코드를 내려받은 후 커널 패치를 생성하려면 두 가지 리눅스 배포판을 사용하면 됩니다.
이번 책에서 사용한 라즈베리 파이
버추얼박스로 로딩한 우분투 리눅스(16.04 버전)

이어지는 절에서는 라즈베리 파이에서 커널 소스를 내려받고 빌드하고 패치를 메일로 전송하는 방법을 소개하겠습니다.

2.2 git과 mutt 프로그램 설정

먼저 리눅스 컴퓨터에는 mutt와 git 프로그램이 설치돼 있어야 합니다.

root@raspberrypi:/home/pi# apt-get install mutt git

위 명령어를 입력하면 mutt와 git 프로그램을 설치할 수 있습니다. 이 프로그램이 제대로 설치됐는지 확인해 봅시다. 이를 위해 다음 명령어를 입력합니다.

root@raspberrypi:/home/pi#which mutt
/usr/bin/mutt
root@raspberrypi:/home/pi#which git
/usr/local/bin/git
 


Git은 소스코드 파일 간 변경사항을 추적하기 위한 분산 버전 관리 시스템이자 프로그램입니다. 많은 소프트웨어 회사에서 Git을 버전 관리 시스템으로 많이 활용하고 있으며, 리눅스 커널의 오픈소스도 Git을 사용해 버전을 추적 관리합니다.

Mutt는 리눅스 계열에서 구동하는 텍스트 기반 이메일 클라이언트 프로그램입니다. 많은 리눅스 커널 개발자들이 Mutt 프로그램을 사용해 리눅스 커널 패치를 '리눅스 메일링 리스트'와 커널 개발자에게 전송합니다. 



'cd ~' 명령어를 입력해 계정의 홈 디렉터리로 이동합니다.

root@raspberrypi:/home/pi# cd ~

다음으로 .muttrc 파일을 생성하고 .muttrc 파일에 ‘읽기+쓰기’ 권한을 부여합니다. 

root@raspberrypi:/home/pi# touch .muttrc
root@raspberrypi:/home/pi# chmod 777 .muttrc

이번에는 .muttrc 파일을 텍스트 편집기로 열고 다음 정보를 입력합니다.

root@raspberrypi:/home/pi# vi .muttrc

[설정 내용]
set realname = "Austin Kim"
set from = "austindh.kim@gmail.com"
set use_from = yes
set envelope_from = yes

set smtp_url = "smtps://austindh.kim@gmail.com@smtp.gmail.com:465/"
set smtp_pass = "enter_your_passwd"
set imap_user = "austindh.kim@gmail.com"
set imap_pass = "enter_your_passwd"
set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set ssl_starttls=yes
set ssl_force_tls = yes

bind index G imap-fetch-mail
set editor = "vim"
set charset = "utf-8"
set record = ''

앞에서 소개한 내용은 필자의 이메일 계정을 기준으로 설정한 것이므로 아래의 두 항목을 여러분의 계정에 맞게 변경하길 바랍니다.  

"austindh.kim@gmail.com": 여러분의 이메일 주소
"enter_your_passwd": 여러분의 이메일 비밀번호

이렇게 해서 mutt 설정이 끝났습니다.

2.3 리눅스 커널 소스코드 내려받기

리눅스 커널 소스코드를 수정하려면 최신 리눅스 커널 소스를 내려받아야 합니다. 이를 위해 다음 명령어를 입력합니다.

git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next

다음은 리눅스 터미널에서 리눅스 커널 소스코드를 내려받기 위해 사용한 명령어입니다.

root@raspberrypi:/home/pi# mkdir kernel_src
root@raspberrypi:/home/pi# cd kernel_src
root@raspberrypi:/home/pi/kernel_src# git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next

Cloning into 'linux-next'...
remote: Sending approximately 1.32 GiB ...
remote: Counting objects: 13164, done
remote: Finding sources: 100% (7076597/7076597)
remote: Total 7076597 (delta 5964592), reused 7076255 (delta 5964592)
Receiving objects: 100% (7076597/7076597), 1.31 GiB | 10.35 MiB/s, done.
Resolving deltas: 100% (5964592/5964592), done.
Checking connectivity... done.
Checking out files: 100% (65459/65459), done.

이렇게 kernel_src 디렉터리를 생성한 후 해당 디렉터리에 이동해 소스를 내려받았습니다. 소스를 다 내려 받고 나면 linux-next 폴더가 생성됐음을 확인할 수 있습니다. 

root@raspberrypi:/home/pi/kernel_src# ls
linux-next

이어서 linux-next 디렉터리에 이동해 커밋을 확인해 봅시다.

root@raspberrypi:/home/pi/kernel_src# cd linux-next/
root@raspberrypi:/home/pi/kernel_src/linux-next# git log
commit 5d18cb62218608a1388858880ad3ec76d6cb0d3b
Author: Stephen Rothwell <sfr@canb.auug.org.au>
Date:   Wed Aug 28 19:59:14 2019 +1000

    Add linux-next specific files for 20190828

    Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>

이렇게 커밋 정보를 볼 수 있습니다.
2.3 리눅스 커널의 git 정보
참고로 세부 커밋 정보는 다음 사이트에서 확인할 수 있습니다.

https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next/

리눅스 커널에서는 세부 서브시스템별로 git 저장소를 운영합니다. 이 정보를 확인하려면 다음 페이지를 참고합니다.

https://kernel.googlesource.com/pub/scm/linux/kernel/git/

#Reference 다음 글...


"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)

# Reference: For more information on 'Linux Kernel';

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2


 



핑백

덧글

댓글 입력 영역