2017-04-11 2 views
1

Ich habe das Creating a Generic Kernel Extension with Xcode Tutorial gefolgt.Mac-Kernel-Programmierung generische Kernel-Erweiterung prinf() funktioniert nicht

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; 
} 

Ich habe auch die csrutil, deaktiviert, die mir erlauben, meine eigene kext zu laden.

# csrutil disable 

Als ich

meine eigene kext in den Kernel geladen werden
$ sudo kextload -v /tmp/MyKext.kext 

Das Ergebnis der printf() nicht in /var/log/system.log schreiben.

Ich habe auch festgelegt boot-args

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

Kann mir jemand helfen?

+0

Zuerst müssen Sie Kernal Funktionen verwenden. so sollte 'printf() '' printk() ' – user3629249

+0

sein, es gibt spezielle Funktionen zum Schreiben in das Systemprotokoll. Sie sind: 'openlog()', 'syslog()', 'closelog()' – user3629249

+0

@ user3629249: Was gibt Ihnen diese Idee? 'printf()' sollte gut funktionieren. –

Antwort

1

Offenbar, seit Sierra (10.12) zumindest, reorganisierten sie die Art, wie die Protokolle geschrieben werden (iOS-Unterstützung?), So dass Sie es nicht mehr in system.log sehen können. Dennoch haben Sie in Ihrer Konsolenanwendung in der Seitenleiste einen Bereich Devices, wo Sie Ihr Gerät auswählen können (normalerweise Ihr Mac-System) und Echtzeit-Log auf "Kernel" im Suchfeld beschränkt sehen. So kann ich diese sehen, wenn kext Last/kextunload mit:

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. 

Es besteht keine Notwendigkeit für die csrutil und nvram Änderungen.

Wichtige Aus irgendeinem Grund ausgeflippt, ich brauchte die Konsole neu zu starten meine Nachrichten Änderungen widerzuspiegeln, sonst hat es die, die zeigt (Start & Stopp) aus dem vorherigen Build. Sehr merkwürdig!

+0

Kommentar über die Konsole hat das Problem mit meinen Protokollen gelöst ..... Immer noch nicht, warum Apple es nirgends erwähnt ... Danke für die Info :) – J1and1

Verwandte Themen