커널 해킹 환경


22

나는 uCOS, ThreadX와 같은 임베디드 OS에서 일하고 있습니다. Linux에서 앱을 코딩하는 동안 Linux 커널 학습을 시작할 계획입니다. 환경에 관한 질문이 거의 없습니다.

  1. 커널 개발 도구를 사용하기 쉬운 가장 좋은 배포판은 무엇입니까? (지금까지는 RHEL과 Fedora를 사용했습니다. 이것에 익숙하지만 우분투에는 커널 컴파일 make_kpkg등을 위한 스크립트가 내장되어있는 것 같습니다. )

  2. 커널 디버깅에 가장 적합한 설정을 설명 할 수 있습니까? 다른 임베디드 OS를 디버깅하는 동안 직렬 포트를 사용하여 진행률, JTAG 등을 덤프했습니다. Linux 커널 개발자는 어떤 종류의 설정을 사용합니까? (시리얼 포트가있는 테스트 베드 PC로 충분합니까? 그렇다면 직렬 포트로 덤프하도록 커널을 구성하는 방법은 무엇입니까?) 커널 메시지를 직렬 콘솔로 리디렉션하여 랩톱에서 읽을 수 있습니다.

  3. 커널 코드 디버깅 및 추적에 가장 적합한 도구는 무엇입니까? 앞에서 언급했듯이 시리얼 콘솔이 유일한 방법입니까? 아니면 PC 용 IDE / JTAG 종류의 인터페이스가 있습니까?


3
# 1의 경우 Linus 자신은 Fedora를 사용하므로 무언가를 말합니다. 나는이 주제에 대해 실제로 답을하기에 충분하지 않지만, 다른 사람들의 말에 관심이 있습니다.
jonescb

1
make_kpkg는 데비안에서 나왔습니다. 데비안은 우분투와 내가 좋아하는 배포판입니다.)
삭제 된 계정

답변:


14

리눅스 커널 개발에 대한 개인적인 취향은 데비안입니다. 지금 당신의 요점을 위해 :

  1. 아마도 우분투는 데비안에서 이미 사용 가능한 것을 제외하고 개발을 용이하게하기 위해 커널에 새로운 것을 가져 오지 않습니다. 예를 들어 make_kpkg는 데비안 기능이며 우분투가 아닙니다. 다음은 데비안에서 일반적인 Linux Kernel 개발 작업을 시작할 수있는 링크입니다.

  2. 커널 디버깅을 수행하는 가장 쉬운 방법은 QEMU 및 GDB를 사용하는 것입니다. 시작할 수있는 몇 가지 링크 :

    그러나 특정 하드웨어 문제 디버깅과 같은 특정 시나리오에서는이 방법을 사용할 수 없으므로 물리적 직렬 디버깅 및 실제 하드웨어를 사용하는 것이 더 좋습니다. 이를 위해 KGDB 를 사용할 수 있습니다 (이더넷에서도 작동합니다). KDB 도 좋은 선택입니다. 아, 그리고 KGDB와 KDB는 모두 리눅스 커널에 통합 되었습니다. 이 두 가지에 대한 자세한 내용은 여기를 참조하십시오 . 비 하드웨어 관련 문제에 놀랍게 작동하는 또 다른 멋진 방법은 사용자 모드 Linux 커널을 사용하는 것 입니다. 다른 프로세스와 같이 사용자 모드에서 커널을 실행하면 다른 프로그램과 마찬가지로 커널 을 디버깅 할 수 있습니다 ( 예제 ). 사용자 모드 Linux에 대한 추가 정보여기 . UML은 2.6.0 이후 Linux Kernel의 일부이므로 다음 단계따라 공식 커널 버전을 UML 모드로 빌드 할 수 있습니다 .

  3. 불행히도 여기에는 각 도구 / 방법마다 장단점이 있기 때문에 최상의 방법은 없습니다.


감사! 자세한 답변. BTW 나는 커널의 fs와 bio 서브 시스템에 갇혀있다. 나에게 가장 적합한 설정은 무엇입니까?
rajaganesh87

UML과 QEMU는 아마도 무료로 파일 시스템을 가지고 놀 수 있기 때문에 갈 것입니다.
Shinnok

아주 좋은 링크, 단 한 가지. 내가 가장 좋아하는 것은 데비안이지만 커널 개발은 모든 배포판으로 만들 수 있습니다. 바닐라 커널을 사용하기 때문에 순수 주의자라면 느슨 함이 가장 좋은 방법 일지 모르지만 구성은 나쁜 것이 아니므로 최선을 찾을 것입니다.
D4RIO


6

i386 하드웨어를 기반으로하지 않는 임베디드 플랫폼을 개발하는 경우 교차 컴파일이 필요합니다. Emdebian 프로젝트는 PC에서 여러 아키텍처 (ARM,하는 m68k, MIPS 등) (I386 또는 AMD64)에 대한 개발 툴체인을 제공합니다. 즉, 데비안에서는 리포지토리를 추가하고 원하는 대상에 대한 툴체인을 설치하십시오.


3

JTAG 프로브는 존재하지만 상당히 비싸다 (그리고이를 구축하는 회사는 독점 계약을 맺는다). 커널 코드를 디버깅하는 가장 좋은 방법은 에뮬레이션 내에서 gdbserver를 사용하여 kvm 또는 qemu에서 시작하는 것입니다.


사용자 모드 Linux를 사용하는 것이 더 좋습니다. 일반 사용자 프로세스 인 Linux.
vonbrand

0

본질적으로 모든 주요 배포판은 이것을 위해 잘 작동해야합니다 (그들은 자체 배포판을 사용하여 해킹합니다). 더 편한 느낌이 드는 것을 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.