커널 프로그래밍을 시작하는 가장 좋은 방법은 무엇입니까?

커널 프로그래밍을 시작하는 가장 좋은 방법은 무엇입니까?

어떤 책을 묻는 대신(유용한 가이드/튜토리얼을 알고 있다면) 커널 프로그래밍을 시작하는 가장 좋은 방법이 무엇인지, 그리고 배우기에 가장 좋은 특정 배포판이 있는지 물어보는 것이 어떨까요?

나는 장치 드라이버 부분에 가장 관심이 있지만 커널이 어떻게 설정되는지(모듈 등)도 이해하고 싶습니다. C/C++에서 4~5년 정도의 경험이 있지만 대부분 대학 지식입니다. 4~5년의 직장 경력은 아닙니다. 무슨 말인지 아시겠지만)

답변1

첫 번째:

초기 단계에서는 "hello world" 모듈과 가상 하드웨어 드라이버의 변형을 작성하는 것이 가장 좋은 시작 방법입니다(실제 하드웨어는 실제 문제를 수행하는 방법에 대해 더 많이 알 때 가장 잘 직면하게 되는 문제를 소개합니다).

"Linux Device Drivers"는 훌륭한 책이며 구입할 가치가 있습니다.http://lwn.net/Kernel/LDD3/

LDD(적어도 과거에는)는 RAM 디스크 및 가상 네트워크 장치와 같은 가상 드라이버를 작성하는 연습을 해왔습니다.

두번째:

신청https://lkml.org/또는 해킹하려는 하위 시스템의 메일링 리스트로 이동하세요. 주위를 둘러보고, 스레드를 스캔하고, 코드 리뷰(패치에 대한 답변)를 읽고, 사람들이 우연히 발견하거나 발견한 내용이 무엇인지 확인하세요.

아직 지원되지 않거나 제대로 지원되지 않는 장치에 대해 (저렴한) 하드웨어를 구입할 수 있는지 확인하세요. 덜 비싼 USB NIC 또는 이와 유사한 저렴한 USB 주변 장치를 선택하는 것이 좋습니다. 오래되었거나 트리 외부 드라이버(아마도 공급업체에서 작성, 아마도 2.4.x를 대상으로 함)를 사용하는 것이 이상적입니다. 왜냐하면 어느 정도 작동하는 것으로 시작한 다음 점차적으로 조정/재작업하여 작성하고 테스트할 수 있기 때문입니다. 나의 첫 번째 드라이버 시도는 Davicom DM9601 USB NIC용이었습니다. 2.4 시리즈 공급업체에서 작성한 커널 드라이버가 있으며 천천히 2.6에 익숙해지고 있습니다. (참고: 메인라인의 드라이버는아니요내 드라이버는 마침내 다른 사람이 처음부터 작성했습니다.)

또 다른 좋은 팁은 Kernel Newbies 웹사이트, 특히 "Kernel Gatekeeper" 백로그를 확인하는 것입니다.http://kernelnewbies.org/KernelJanitors/Todo 초보자가 처리할 수 있어야 하는 작업 목록은 다음과 같습니다.

답변2

많은 코어가 존재합니다.

Linux유일한 게임은 아니지만 가장 널리 사용되는 게임입니다. 어떤 사람들은 minix운영 체제 개념을 이해하기 위해 커널을 권장합니다. 나는 가장 일반적이고 (거의) 아무도 사용하지 않는 것에 낭비할 필요가 없는 Linux 2.6.x 시리즈를 선택하겠습니다. Solaris, XNU(Mac), FreeBSD 및 Dragonfly는 잘 알려져 있습니다.1

매우 간단한 것(직렬 포트, USB 등)을 찾아 다른 작업을 수행하도록 하십시오. 추가 도전을 원하시면 아직 커널 모듈이 없는 것에 대한 커널 모듈을 작성해 보십시오. (먼저 sudo lspci -nnPCI 및/또는 USB ID로 용의자를 검색 하세요 sudo lsusb.)

고쳐 쓰다:이 작업을 메인 시스템에서 직접 수행하지 말고 위에서 설명한 대로 가상 머신(VM)(컴퓨터 내의 컴퓨터)을 사용하세요. 가상 상자이것은 이용 가능하며 무료입니다. 또한 이것이 너무 부담스러워 보이기를 원하지 않지만 가상 머신 자체에 문제가 있을 경우 다시 돌아갈 수 있도록 가상 머신 스냅샷을 사용해 보세요.

업데이트 2: Git(DVCSes inc. mercurial,fossil,bazaar,darcs)에 대한 설명은 주로 코드 및 작은 중요 파일에 대한 좋은 아이디어입니다. 그것이 무엇을 의미하는지 알지 못하는 한 Git을 사용하여 음악, 비디오 등을 백업하지 마십시오. ;)

답변3

수정하려는 모듈이나 드라이버를 찾거나 null / hello world 유형 모듈로 시작하여 거기에서 빌드하십시오. 모듈은 실행 중인 커널에 코드를 로드, 언로드, 재컴파일 및 다시 로드할 수 있도록 하기 때문에 특별히 사용됩니다. 나중에 핵심 부분을 살펴볼 수 있지만 기본적으로 모듈에는 다양한 콘텐츠가 포함되어 있으며 원하는 거의 모든 작업을 수행할 수 있습니다.

둘째, 가상머신을 사용하세요. VirtualBox 또는 일부 VM에 게스트 머신을 설정하고 잠시 동안 그곳에서 커널 테스트를 실행하세요. 이렇게 하면 문제가 발생하더라도 메인 시스템이 종료되지 않고 재부팅, 작동 중인 스냅샷으로 롤백 등이 매우 쉽습니다.

셋째, 배우다 git.

답변4

누군가가 이미 "Linux Device Drivers"라는 책을 언급했습니다. 이 책은 훌륭한 자료이며 저도 적극 추천합니다.

질문에는 개시자가 특별히 책을 요청한 것이 아니라고 언급되어 있지만 최신 버전의 책 "리눅스 커널 이해"(http://oreilly.com/catalog/9780596005658/)은 일반적인 Linux 커널을 이해하는 데 유용하며 Linux 장치 드라이버에 대한 섹션도 포함되어 있습니다.

관련 정보