1:包含kernel log对应用户空间头文件#include
2:
#define KPOC_LOGI(x...) do { KLOG_ERROR("client", x); } while (0)
#define KPOC_LOGE(x...) do { KLOG_WARNING("client", x); } while (0)
#define KPOC_LOGD(x...) do { KLOG_DEBUG("client", x); } while (0)
定义log宏。 默认kernel log为最低等级3 可以使用
void klog_init(void);
int klog_get_level(void);
void klog_set_level(int level); 设置输出等级
3:如果没有看到输出日志可能selinux 权限问题 需要使用security_setenforce(false)。
static const struct selinux_opt seopts_prop[] = {
{ SELABEL_OPT_PATH, "/property_contexts" },
{ SELABEL_OPT_PATH, "/data/security/current/property_contexts" },
{ 0, NULL }
};
struct selabel_handle* selinux_android_prop_context_handle(void)
{
int policy_index = selinux_android_use_data_policy() ? 1 : 0;
struct selabel_handle* sehandle = selabel_open(SELABEL_CTX_ANDROID_PROP,
&seopts_prop[policy_index], 1);
if (!sehandle) {
ALOGD("SELinux: Could not load property_contexts: %s\n",
strerror(errno));
return NULL;
}
ALOGD("SELinux: Loaded property contexts from %s\n", seopts_prop[policy_index].value);
return sehandle;
}
void selinux_init_all_handles(void)
{
sehandle = selinux_android_file_context_handle();
selinux_android_set_sehandle(sehandle);
sehandle_prop = selinux_android_prop_context_handle();
}
static void selinux_initialize(void)
{
selinux_init_all_handles();
security_setenforce(false);
}