2017-04-11 9 views
1

나는 Creating a Generic Kernel Extension with Xcode 튜토리얼을 따라 갔다.맥 커널 프로그래밍 일반 커널 확장 prinf() 작동하지 않음

MyKext.c :

#include <sys/systm.h> 
#include <mach/mach_types.h> 

kern_return_t MyKext_start (kmod_info_t * ki, void * d) 
{ 
    printf("MyKext has started.\n"); 
    return KERN_SUCCESS; 
} 

kern_return_t MyKext_stop (kmod_info_t * ki, void * d) 
{ 
    printf("MyKext has stopped.\n"); 
    return KERN_SUCCESS; 
} 

나는 또한 내 자신의 KEXT를로드 허용 csrutil을 비활성화했습니다. 나는 커널

$ sudo kextload -v /tmp/MyKext.kext 

로의 printf의 결과를 내 자신의 KEXT를로드

# csrutil disable 

() /var/log/system.log에 쓸 수 없습니다.

나는 또한 설정 한 부트 인수

$ sudo nvram boot-args="original_contents debug=0x4" 

이 사람이 나를 도울 수 있습니까?

+0

먼저 kernal 함수를 사용해야합니다. 그래서'printf()'는'printk()'이어야합니다. – user3629249

+0

시스템 로그에 쓰는 특정 함수가 있습니다. 그것들은 다음과 같습니다 :'openlog()','syslog()','closelog()' – user3629249

+0

@ user3629249 : 'printf()'는 잘 동작 할 것이다. –

답변

1

적어도 Sierra (10.12) 이후로 로그가 작성되는 방식이 재구성되었으므로 (iOS 지원?) 더 이상 system.log에서 볼 수 없습니다. 그래도 콘솔 응용 프로그램에서는 사이드 바에 기기 (일반적으로 Mac 시스템)를 선택할 수있는 검색 창에서 "커널"로 제한된 실시간 로그를 볼 수있는 Devices 섹션이 있습니다. KEXT로드/kextunload를 사용할 때 그래서 나는이를 볼 수 있습니다 다음 csrutilnvram 변화에 대한 필요가 없습니다

default 11:58:27.608228 +0200 kernel MyKext has started. 
default 11:58:34.446824 +0200 kernel MyKext has stopped. 
default 11:58:44.803350 +0200 kernel MyKext has started. 

.

어떤 이상한 이유로

중요 , 나는 그렇지 않으면 이전 빌드에서 사람을 (& 정지를 시작)를 표시했다, 내 메시지의 변경 사항을 반영하기 위해 콘솔을 다시 시작해야했습니다. 정말로 이상한!

+0

콘솔에 대한 설명은 내 로그와 함께 문제를 해결했습니다 ..... 아직도 사과가 어디에도 언급하지 않는 이유는 모르겠지만 ... 정보를 주셔서 감사합니다 :) – J1and1