2011-12-23 5 views
6

xnu 커널을 Qmu에서 전체 커널을 실행할 수 있다는 궁극적 인 목표로 ARM 아키텍처에 이식하려고합니다. 나는 이것이 매우 어려운 일임을 알고 있지만, 나는 여전히 그것에 도전하고 싶다.커널을 다른 아키텍처로 이식 하시겠습니까?

내가 아는 한, Kext/IOKit 서브 시스템을 시작하고 CPU 특정 확장을로드 할 수있는 일반 초기화 (MMU 및 PlatformExpert)를 수행하는 커널의 진입 점 (osfmk/arm/start.s) (즉, 트랩, GPIO, 클럭)은 부트 로더에 의해로드되거나 (), NAND 확장이 사용 가능하지 않기 때문에 커널이 파일 시스템과 상호 작용할 수 없기 때문에입니다.

  • 것은 저를 수행 : 나는 어떻게 ARM CPU의 작업에 대한 일반적인 생각을 할 수 있지만 내가하는 방법을 완전히 확실하지 않다 때문에

    , 난, 어디 xnu 포트를 시작하는 모른다 커널 디버깅 기능은 시작하는 동안 조기에 사용할 수 없으므로 수준 디버깅이 필요합니다.

  • ARM 분기를 나머지 커널 소스 트리와 통합하십시오 (즉, osfmk/kern의 내용이 작동하는지 확인하십시오).
  • 플랫폼 독립적 커널을 시작할 수있는 환경을 만듭니다 (machine_startup()).
  • 메인 커널 코드 안에 일부 플랫폼 관련 코드를 수정하십시오 (대부분의 플랫폼 코드는 osfmk/platform_name으로 제한되지만 그 중 일부는 osfmk/kern 등으로 통합되어야합니다). 다른 플랫폼에 XNU (또는 적어도 마하) 커널을 포팅에 어떤 점잖은 가이드 리눅스 가이드가있는 것처럼,

이 있습니까?

+1

+1 나는 당신의 용기에 박수를 보냅니다. 누군가는 힘든 일을해야합니다.나는 이것에 관해 아무 것도 모른다. 그러나 당신이 이것을 시작한다면 당신은 아마도 디버깅 가이드를 작성하게 될 것이라고 생각할 것이다. 카이 카하 형제. –

답변

2

당신에게 대답 할 수는 없지만 몇 가지 힌트 :

"큰 사람"은 프로세서가 레지스터 단일 순환 될 수 있도록 부착 된 특별한 하드웨어와 시스템에 대한 작업의 이런 종류의 작업을 수행 등등. 그리고 그들은 동일한 시설을 가진 에뮬레이터에서 많은 작업을 할 수 있습니다. 하드웨어 디버거 설정은 아마도 당신의 능력 밖에서 구입할 수 있습니다. 그러나 에뮬레이터는 완전히 실행 가능합니다. (알테어 베이직에서 게이츠와 앨런이 시작된 방법입니다. 알렌이 에뮬레이터를 작성하지 않았다면 게이츠는 하버드에서 여전히 비디오 게임을하고있다.)

전체 디버거가 부족하여 어떤 종류의 문자 표시 장치가 연결되어있는 경우 코드가 진행됨에 따라 디스플레이에 문자를 쓰도록 디버깅중인 코드에 명령을 포함시킬 수 있습니다. 경로 A는 다음 위치 (예 : 어딘가에 예약 된 메모리 단어에 보관 된 색인)에 "A"를 쓸 수 있으며 경로 B는 "B"등으로 작성합니다. 매우 원유이지만 때로는 소규모 프로젝트를 수행하기에 충분합니다.

그래서 에뮬레이터를 먼저 작성하는 것이 좋습니다. 어쨌든 프로세서에 익숙해지는 좋은 방법입니다.

(물건을 통합에 관해서는, 난 항상 그냥 "안녕, 제레미! 날 위해 통합을 할 것인가?"라고)

1

당신은 소스 코드의 모든 도전의 조금으로하지가 발생합니다 사용할 수 있습니다 . 플랫폼 전문가의 소스 코드 일부는 xnu 소스의 일부로 사용할 수 있지만 com.apple.driver.AppleACPIPlatform.kext는 그렇지 않습니다.