저는 맥 OS 용 커스텀 커널을 만들고 있습니다 (Mountain Lion, Darwin 2050.22.13). 커널을 잘 만들 수 있고 그 커널에 물건을 추가 할 수 있지만 뭔가 빠졌습니다.커스텀 다윈 커널 사용
짧은 것을 유지하기 위해 여기에 제가하려는 일의 샘플이 있습니다.
의 내가 말을 함수 [my_func (무효 *)]을 추가 할 것을 가정 해 봅시다, BSD/컨/kern_fork.c 그 때문에 메이크 파일을 포함하고 osfmk/BSD로 스틱을 추가하고 변경할 수 있습니다 새로운 .h 파일이 이제 BUILD/obj/RELEASE_X86_64/EXPORT_HDRS/
에 복사됩니다.또한 config/BSDKernel.exports에 함수 이름을 추가했습니다. /mach_kernel에 기호가있는 함수를 볼 수 있으므로 잘 보일 수 있습니다.
자, 여기 까다로운 부분이 있습니다. 그것은 본질적으로 힘들지는 않지만 그것을 이해할 수는 없습니다. 내가하고 싶은 것은 내가 쓰고있는 kext에서 내 함수를 호출 할 수있게하는 것이다. 기본적으로 그것은 나를위한 일종의 비공개 API 일 것입니다.
내 kext는 잘 컴파일되지만 kextload/kextutil을 실행하면 my_func 심볼을 찾을 수 없다는 오류가 발생합니다.
(커널) com.blah.foo.kext] kxld 다음 심볼이 KEXT (커널)로 미해결 kxld [com.blah.foo.kext]
kextlibs 복귀 _my_func : com.apple.kpi.libkern = x86_64의 12.3
: 모든 아키텍처를 들어 1 기호는
그래서 문제는 내 기능 (들)이 볼 수 있도록해야합니까 어떻게 KEXT 어떤 라이브러리에서 찾을 수 없습니다 내 kext (s)에? 감사합니다.
고마워요! 처음에는 같은 생각 이었지만 문제는 아닌 것 같습니다. 여기에 KEXT 내의 Info.plist의 일부 기능 (들)의 사용을 만들 것이라고입니다 : OSBundleLibraries 을 \t \t com.apple.kpi.libkern \t \t 10.8 \t \t 닷컴 .apple.kpi.bsd \t \t 10.8 \t \t com.apple \t \t \t 10.8 --- 내가 안할거야 무언가가 있어야합니다 .kpi.mach. 재밌는 정도로, xxxx.exports 파일을 보면 current_task()와 같은 내 보낸 api를 볼 수 있으며 내 자신의 API는 해당 파일에 없습니다. –
다른 이론으로 내 대답을 업데이트했습니다. 희망을 가지고 작업 할 수 있기를 바랍니다. 그건 그렇고, OSBundleLibraries의 10.8은 Darwin 숫자를 의미합니다. 10.8은 Mountain Lion (12.0)이 아니라 OSX 10.6.8을 의미합니다. 단지 그 것이 명확하지 않은 경우를 대비하여. – pmdj
감사합니다. 나는 그것을 때때로 희망을 갖고 시험해 볼 것이다. 이 작업을 수행하자마자 업데이트를 게시합니다. 내가 간다고 그 물건을 문서화하고있다. –