2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > android 打印kernel log Android native log输出为kernel log方法

android 打印kernel log Android native log输出为kernel log方法

时间:2023-12-02 00:38:13

相关推荐

android 打印kernel log Android native log输出为kernel log方法

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

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。