[Linux Kernel Study] 커널 공부 시작 해보기
리눅스 커널을 공부하려는 개발자 분들은 분명 많을 거라고 생각을 합니다.
허나 보통 어떻게 시작을 하는지 모르거나 리눅스가 익숙치 않아서 포기 하려는 개발자분들도 많을것이고 코드를 패치 하고 싶지만 용기가 없어서 패치를 보네지 않는경우도 있을겄이다.
리눅스 커널을 공부 하는 방법으로는 개발 서적을 읽으면서 커널 소스를 수정하여 빌드하고 적용해보는 방법
각종 디바이스 (라즈베리 파이, 비글본 블랙, 오드로이드 등) 드라이버를 개발해 보는 방법이 있다.(개인적으로 적극 추전)
리눅스 커널은 엄청나게 방대 해졌기 떄문에 개발자가 모든 코드를 이해 하거나 수정을 할수 없다. (리누즈 토발즈 또한 그렇다고 카더라..)
따라서 모든 코드를 이해 할려고 시간을 낭비 하지 말자 자신이 커널의 어느 부분을 사용 하거나 수정 하는지 알아둘 필요가 있다.
또한 직접 패치를 하고 싶은 개발자 분들은 자신의 코드 스타일 보다 여러 사람들의 코드 스타일에 맞춰 주어야 합니다.
여러 규칙이 있는데 예로 패치를 보넬때에는 지원되는 이메일 클라이언트만 사용해야 하며, 패치는 한가지 이상의 수정 사항이 반영되어야 한다는 것이다.
이를 지키지 않고 성의 없이 처리하면 다른 개발자가 화를 낸다.
메일링 리스트라는 것이 있는데 메일로 리눅스의 수정 사항이나 패치내용 또는 최신 이슈 혹은 기술 등을 받아 볼수 있다.
리눅스 커널을 공부 해보면서 기본적으로 알아야 할것이 있는데
Git과 Perl 또는 Python 등 을 배우면서 저장소에 올리는 방법이나 수정 방법 (Git의 개념이나 철학을 알아 두고 있으면 좋다)
perl 또는 python으로 간단한 스크립트나 반복되는 코드를 위한 스크립트를 짜보는 것도 좋다.
이제 간단히 공부를 위한 것이 무엇? 인지를 알았으니 개발 환경을 만들어 보자
가장 기본적인걸로 리눅스가 필요하다!
리눅스!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!111
리눅스를 사용하는 방법으로는 크게 두가지가 있다.
vm 과 리얼 컴퓨터에 설치해보는것 그리고 도커 이다.(실은 도커에서 개발해도 상관 없을거 같아서 생각을 해보았다 자세히는 나도 모른다는게 함정)
리눅스를 가상머신에 설치를 하여서 개발하는것도 좋다. 리눅스 커널 개발은 그렇게 하드워어를 요구 하지 않는다.
리눅스환경에서 커널을 개발해본다. 리눅스가 익숙치 않아서 힘든 사람들도 있을것이다. 익숙해지면 해보자!
도커에서 개발 해보기 리눅스 컨테이너로 호스트위에 올려서 개발해 보는것도 나쁘진 않을 거 같다.
컨테이너로 올리면 vm처럼 하드웨어 단에서 나누어지는것이 아니라서 버벅 거림이나 하드웨어가 느려져서 호스트가 힘들어 지는 경우가 없어지기 떄문이다.
간단하게 vm 종류로는 vmware, virtual box, qemu등 이 있다. (찾아보면 많다)
그럼 이제 리눅스 배포판을 선택해보자
나는 리눅스를 사용해보면서 커스터마이징 된 리눅스는 몇몇 기능이 안되거나 빠져 있는경우도 있고 기능이 정상 작동하지 않는 경우도 있다.
이런경우를 대비하여서 Ubuntu, Debian, cent os 를 추천한다. 참고로 제 경험일 뿐 이지 꼭 따를 필요는 없다. 절대로 그냥 제 경험일 뿐 입니다.
리눅스를 설치하면 사용하는 방법으로는 그냥 사용하는 방법이랑 ssh로 연결해서 사용하는 방법이 있는데
ssh로 연결시 desktop모드로 설치를 하면 많은 자원이 소모되기 떄문에 몇몇 분들은 server버전으로 설치를 하는데
이과정 에서 한글로 설치를 하는데 그냥 영문으로 설치를 하자 한글을 꺠져서 나온다!!!!(분명 해결방법도 있을것이다. 하지만 영문을 추천한다)
이제 리눅스가 준비 되었고 리눅스에서 필요한 라이브러리를 설치해 보자
libncurses5-dev gcc make git vim emacs
libncurses5-dev는 커널 빌드를 세부 설정할때 텍스트 기반 UI를 제공하기 위한 라이브러리
gcc와 make는 빌드 도구 git은 소스를 내려받거나 다운받을떄 사용한다.
vim과 emacs는 소스를 편집하기 위한 에디터 이다.