본문 바로가기
3. 개발 관련/정리 :: issue 와 resovle

linux kernel 개발에 참여해보자!!

by kyuho.choi 2016. 9. 29.
728x90
반응형

오랫만에 패치 작업을 하려니 처음부터 모두 설정해가며 작업을 하게되었다.

 

삽질에 삽질을 거듭해서 결국에는 어찌어찌 패치를 커밋까지는 했는데, 그냥 있으면 또 잊어먹을 테니 

 

이 참에 한번 정리하고 가보겠다.

 

================================================================

1. 개발 환경 설정

 

 - OS 설치 : 리눅스 환경에서 개발을 진행하는 관계로 우분투 최신버전을 다운 받아 설치한다.

                가상 머신을 설치해서 그 위에 리눅스를 설치하는 것도 좋다.

                (집에 노트북을 나혼자 쓰는게 아니라서...ㅠㅠ)

 

virtualbox에 대한 이미지 검색결과

 

가상머신 -> http://download.virtualbox.org/virtualbox/5.1.6/VirtualBox-5.1.6-110634-Win.exe

 

 

ubuntu에 대한 이미지 검색결과

우분투 -> http://releases.ubuntu.com/16.04/ubuntu-16.04-desktop-amd64.iso

 

가상머신을 먼저 설치하고 그 위에 우분투를 설치하도록 하자.

 

 

================================================================

2. Mailing list 가입하기

 

  - 리눅스 커널에는 다양한 mailing list 가 존재한다. 메일링리스트는 커널을 feature 별로 구분해서 개발을 진행하기 위한 토론이나 patch 내용들을 공유하게되고 각 patch 들이 리눅스 커널의 mainline 에 머지된다. 관심있는 메일링 리스트를 검색해서 어떤 식으로 논의가 이루어지고 어떤식으로 패치 작업을 공유하는지 익숙해지는 것이 매우 중요하다. 리누스 토발즈옹은 지금도 전투력 넘치는 짱짱한 현역이라 넌씨눈같은 패치를 올리거나 등등을 하다 걸리면 충공깽의 주인공이 될수도 있는 것 같다...

 

 

mailing list kernel에 대한 이미지 검색결과

메일링리스트 아카이브 -> http://vger.kernel.org/vger-lists.html

요즘은 scsi 쪽에 관심이 많은 관계로 linux-scsi 를 구독하고 있다.  

(CTRL+F 로 원하는 키워들를 찾아볼 수 있는데, 이는 커널 소스 트리와 거의 유사하니 참조할 수 있다)

 

 

 - 메일링리스트 구독하기

 

개인적으로 gmail 을 사용하고 있는 데, 위 아카이브에서 관심있는 섹션을 찾아서 majordomo 에 구독신청을 위한 subscribe 메일을 아래처럼 보내면 된다.

 

받는 사람 -> majordomo@vger.kernel.org 

제목 -> subscribe linux-scsi

내용 -> subscribe linux-scsi

=========================================================

     =========================================================

 

subscribe 이 완료되면 이제 mailing list 에 올라오는 내용들이 해당 메일 계정으로 받아볼 수 있게 된다. 멜하나만 쓰면 되니 참 쉽다

subscribe 의 완료는 authentication 관련 인증 메일이 답으로 올 것이다... 

이게 안온다면 오탈자가 있거나 메일 송/수신에 문제가 있을 수 있으니 다시 확인해보자.

 

 

 

 

================================================================

3. Workspace 생성하기

 

- 필요한 패키지 설치하기

 : build-essential, libssl-dev, gcc, vim, git, git-core, git-send-email, send-mail

 

#] sudo apt-get install build-essential libssl-dev gcc vim git git-core git-send-email send-mail

 
위의 패키지들을 설치하면 기본적인 개발 환경을 위한 녀석들은 얼추 준비가 되었다.
 

- Open Source 가져오기

 : linux kernel

 

#] mkdir scsi-devel

#] cd scsi-devel

#] git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/jejb/scsi

 

혹시 다른 프로젝트에 관심있다면 위 kernel tree 에 직접 접속해서 찾아볼 수 있다.

 

- GIT 설정하기

 : git 을 베이스로 작업하기 때문에 git과 git 사용자에 대한 정보를 설정해야 한다.
 
아래는 사용자의 기본 정보에 해당한다.
 
#] git config --global user.name "Kyuho Choi"

#] git config --global user.email kyuho.choi@sk.com

 
아래는 patch 파일을 만들 때의 편집기 설정이다. 개인적으로 vim 을 애용하니 vim 으로 설정한다.
 
#] git config --global core.editor vim

 

아래는 patch 파일 전송을 위해 gmail 을 사용할 때의 gmail 관련 smtp 설정이다.

 

#] git config --global sendemail.smtpuser chlrbgh0@gmail.com 

#] git config --global sendemail.smtpserver smtp.gmail.com 

#] git config --global sendemail.smtpencryption tls 

#] git config --global sendemail.smtppass PASSWORD <- 실제 gmail 비밀번호를 입력한다. > 

#] git config --global sendemail.smtpserverport 587 

 

~/.gitconfig
[sendemail]smtpserver = smtp.gmail.com smtpuser = chlrbgh0@gmail.com smtpencryption = tls smtppass = PASSWORD smtpserverport = 587

 

 

 

 

 

================================================================

4. Patch 작업해보기

 

- working branch 설정하기

 

막상 소스를 받아보면 뭔가 허전할 수 있다... 원하는 디렉토리에 가보니 소스들이 부족한 것 같다거나..

아니면 소스는 있는데 내용이 뭔가 많이 빠져있다거나 말이다...

 

기본적으로 git은 branch 를 기본으로 운용되는 데 일반적인 patch 작업들은 `master` 브랜치가 아닌 `for-next` 브랜치에 적용되도록 작업해야 한다.

 

#] cd scsi-devel

#] git checkout for-next

 

-> 디폴트로는 `master` 브랜치로 운용되고 이를 `for-next` 브랜치로 넘어가는 것이다...

 

이번 패치는 아래의 과정을 거쳐 이번 스텝의 가장 아래와 같이 작업되었다. 

 

#] vim drivers/scsi/ufs/ufs_quirks.h

> patch edit...

 

#] git status

> 작업한 내용을 확인해 본다...

 

#] git add drivers/scsi/ufs/ufs_quirks.h

> 작업한 내용이 맞으면 commit 을 위해 해당 파일을 추가한다...

 

#] git commit -s

-> commit 작업을 진행하며, 이 후에 `git log` command 로 내가 작업한 commit 이 최상단으로 올라온것을 확인할 수 있을 것이다.

 

commit 에서는 patch 대한 간략한 제목(첫줄)과

그에 대한 이해할 수 있는 수준의 내용이 포함되어야한다.(3/4줄)

scsi: ufs: enable no vccq quirk for skhynix device

 

This patch enable no vccq quirk for SKHynix devices.

 

SKHynix ufs device don't need vccq vrail for device operation.

 

#] git format-patch -1

> 위의 commit 된 내용을 patch 파일의 형태로 만들어준다.

 

#] ls 0001*

> 0001..... 로 시작하는 이름의 patch 파일이 생성될 것이다.

 

 

-. patch file 체크하기

 

#] ./scripts/checkpatch.pl ./0001*

> 현재 patch 에 warning 이나 error 가 있는 지 검사해준다. 공백 문자 및 기타 등등등...

  이 때에는 어떠한 error 나 warning 이 나와서는 안되고 발생되는 것이 있다면 모두 고쳐야 한다.

 

 

 

 

================================================================

5. Patch 보내기

 

#] ./scripts/get_maintainer.pl ./0001*

> 작성한 patch 를 기준으로 해당 patch를 받아보고 검토/수락/거절 등을 결정할 maintainer 및

   submitter 와 mailing list 의 정보를 보여준다. 가급적 해당 list의 모든 사용자에게 patch를 보내는    것이 빠르고 정확한 응답을 받는 데 유리하다.

 

#] git send-email --to 1st.maintainer@mailaddress.com --to 2nd.maintainer@mailaddress.com --cc address@mailinglist.org --cc any_ref@mailaddress.com

 

> 자기 자신에게는 보내지 않아도 된다.. patch 파일 내의 owner 정보를 참조하여 자동으로 본인에게 메일이 발송된다...
>> 다만 git/git-send-email 등의 설정이 정확한지 확인하기 어려울 때에는 개인 메일로 먼저 발송하는 테스트를 반드시 해보기 바란다...발송한 메일이 개인 메일에 잘 도착하고 이 것이 spam 메일이나 아무런 경고 메시지가 나오지 않아야 mailing list 에도 정상적으로 전달 된다.
 

 

 

 

 

================================================================

6. Mailing list 로 이야기하기

 

- 아래는 내가 보낸 patch 가 linux-scsi 의 mailing list 에서 보여지는 내용이다.

 

This patch enable no vccq quirk for SKHynix devices. SKHynix ufs device don't need vccq vrail for device operation.
Signed-off-by: Kyuho Choi <kyuho.c...@sk.com> ---  drivers/scsi/ufs/ufs_quirks.h | 2 ++  1 file changed, 2 insertions(+)  diff --git a/drivers/scsi/ufs/ufs_quirks.h b/drivers/scsi/ufs/ufs_quirks.h index ee4ab85..22f881e 100644 --- a/drivers/scsi/ufs/ufs_quirks.h +++ b/drivers/scsi/ufs/ufs_quirks.h @@ -25,6 +25,7 @@    #define UFS_VENDOR_TOSHIBA     0x198  #define UFS_VENDOR_SAMSUNG     0x1CE +#define UFS_VENDOR_SKHYNIX     0x1AD    /**   * ufs_device_info - ufs device details @@ -145,6 +146,7 @@ static struct ufs_dev_fix ufs_fixups[] = {                 UFS_DEVICE_QUIRK_PA_TACTIVATE),         UFS_FIX(UFS_VENDOR_TOSHIBA, "THGLF2G9D8KBADG",                 UFS_DEVICE_QUIRK_PA_TACTIVATE), +       UFS_FIX(UFS_VENDOR_SKHYNIX, UFS_ANY_MODEL, UFS_DEVICE_NO_VCCQ),           END_FIX  }; --  2.7.4

================================================================

 

 

- 그에 대한 submitter 의 의견

================================================================

Looks good to me. Reviewed-by: Subhash Jadavani <subha...@codeaurora.org>
On 2016-09-26 07:58, Kyuho Choi wrote: 
This patch enable no vccq quirk for SKHynix devices. SKHynix ufs device don't need vccq vrail for device operation.  Signed-off-by: Kyuho Choi <kyuho.c...@sk.com> ---  drivers/scsi/ufs/ufs_quirks.h | 2 ++  1 file changed, 2 insertions(+)  
diff --git a/drivers/scsi/ufs/ufs_quirks.h b/drivers/scsi/ufs/ufs_quirks.h
index ee4ab85..22f881e 100644 --- a/drivers/scsi/ufs/ufs_quirks.h +++ b/drivers/scsi/ufs/ufs_quirks.h @@ -25,6 +25,7 @@   #define UFS_VENDOR_TOSHIBA     0x198  #define UFS_VENDOR_SAMSUNG     0x1CE +#define UFS_VENDOR_SKHYNIX     0x1AD   /**   * ufs_device_info - ufs device details @@ -145,6 +146,7 @@ static struct ufs_dev_fix ufs_fixups[] = {                 UFS_DEVICE_QUIRK_PA_TACTIVATE),         UFS_FIX(UFS_VENDOR_TOSHIBA, "THGLF2G9D8KBADG",                 UFS_DEVICE_QUIRK_PA_TACTIVATE), +       UFS_FIX(UFS_VENDOR_SKHYNIX, UFS_ANY_MODEL, UFS_DEVICE_NO_VCCQ),          END_FIX  }; 
--

================================================================

 
- 그에 대한 maintainer 의 의견

================================================================

>>>>> "Kyuho" == Kyuho Choi <chlrb...@gmail.com> writes:
Kyuho> This patch enable no vccq quirk for SKHynix devices.  SKHynix ufs Kyuho> device don't need vccq vrail for device operation.  Applied to 4.9/scsi-queue.  -- 

================================================================

 

결론 : maintainer 등의 의견에 따라 별다른 문제가 없는 patch 로 보여 리눅스 커널 4.9 version 에 merge 될 예정이다!.

 

 

728x90
반응형

댓글