저는 uCOS 및 ThreadX와 같은 임베디드 운영 체제 작업을 해왔습니다. Linux에서 애플리케이션을 작성했지만 이제는 Linux 커널을 배우기 시작할 계획입니다. 환경에 관해 몇 가지 질문이 있습니다.
어떤 배포판이 최고의 배포판이고 사용하기 쉬운 커널 개발 도구가 있는 배포판은 무엇입니까? (저는 지금까지 RHEL과 Fedora를 사용했습니다. 이에 만족하지만 Ubuntu에도 커널을 쉽게 컴파일할 수 있는 내장 스크립트가 있는 것 같습니다.
make_kpkg
)커널 디버깅을 위한 최상의 설정을 설명할 수 있습니까? 다른 임베디드 운영 체제를 디버깅할 때 직렬 포트를 사용하여 진행 상황, JTAG 등을 덤프합니다. Linux 커널 개발자는 어떤 설정을 사용합니까? (직렬 포트가 있는 테스트벤치 PC가 내 요구에 충분합니까? 그렇다면 직렬 포트로 덤프하도록 커널을 어떻게 구성합니까?) 커널 메시지를 내 노트북에서 읽을 직렬 콘솔로 리디렉션할 계획입니다.
커널 코드 디버깅 및 추적에 가장 적합한 도구는 무엇입니까? 언급한 대로 직렬 콘솔이 유일한 방법입니까? 아니면 PC용 IDE/JTAG 인터페이스가 있나요?
답변1
Linux 커널 개발에 대한 개인적 선호는 Debian입니다. 이제 당신의 관점에서는:
짐작할 수 있듯이 Ubuntu는 이미 Debian에 있는 것 이상으로 개발을 단순화하기 위해 커널에 새로운 기능을 제공하지 않습니다. 예를 들어 make_kpkg는 Ubuntu가 아닌 Debian 기능입니다. 데비안에서 일반적인 Linux 커널 개발 작업을 시작하는 데 도움이 되는 링크는 다음과 같습니다:
커널 디버깅을 수행하는 가장 쉬운 방법은 QEMU와 GDB를 사용하는 것입니다. 시작하는 데 도움이 되는 일부 링크:
- http://files.meetup.com/1590495/debugging-with-qemu.pdf
- http://www.cs.rochester.edu/~sandhya/csc256/locationments/qemu_linux.html
그러나 실제 직렬 디버깅과 실제 하드웨어를 사용하는 것이 더 나은 일부 시나리오(예: 특정 하드웨어 문제 디버깅 등)에서는 이 접근 방식이 적합하지 않다는 점을 알아야 합니다. 이를 위해 다음을 사용할 수 있습니다.한국GDB(이더넷에서도 작동합니다).한국개발은행또한 좋은 선택입니다. 아 그런데 KGDB와 KDB는 모두병합리눅스 커널을 입력하세요. 이 두 남자에 대해 더 알아보기여기. 또 다른 멋진 방법은 다음과 같습니다.사용자 모드 Linux 커널. 다른 프로세스와 마찬가지로 사용자 모드에서 커널을 실행합니다.다른 프로그램처럼 디버깅할 수 있습니다.(예). 사용자 모드 Linux에 대한 추가 정보여기. 2.6.0부터 UML은 Linux 커널의 일부이므로 다음을 통해 UML 패턴으로 그보다 높은 공식 커널 버전을 빌드할 수 있습니다.다음과 같이하세요.
항목 2를 참조하세요. 불행하게도 각 도구/방법에는 장단점이 있으므로 궁극적인 최선의 방법은 없습니다.
답변2
i386 하드웨어를 기반으로 하지 않는 임베디드 플랫폼용으로 개발하는 경우 크로스 컴파일이 필요합니다. 이것엔데비안이 프로젝트는 PC(i386 또는 amd64)에서 여러 아키텍처(ARM, m68k, MIPS 등)를 개발하기 위한 도구 체인을 제공합니다. 즉, 데비안에서는 간단히 저장소를 추가하고 선택한 대상에 대한 툴체인을 apt-get 설치할 수 있습니다.
답변3
JTAG 프로브가 존재하지만 상당히 비쌉니다(그리고 이를 만드는 회사는 독점 계약을 맺고 있습니다). 커널 코드를 디버깅하는 가장 좋은 방법은 kvm 또는 qemu에서 시작하고 에뮬레이션에서 gdbserver를 사용하는 것입니다.
답변4
기본적으로 모든 메인라인 배포판은 잘 작동해야 합니다(그들은 자체 배포판을 사용하여 크랙합니다). 더 편안하다고 느끼는 것을 사용하십시오.