dbg_proc

本文档介绍了用于嵌入式系统的调试工具宏定义和配置文件,包括PRT/PRN/PFL/PFR宏,用于打印和内存检查,以及dbg_stat和dbg_para结构及其操作。展示了如何创建和管理调试统计和参数结构,适合深入理解嵌入式系统调试和配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#ifndef __DBG__
#define __DBG__

#define PRT(fmt, args...)   do { if(g_dbg_para.printken & 1) printk(fmt, ## args); } while(0)
#define PRN(fmt, args...)   do { PRT(fmt"\r\n", ## args); } while(0)
#define PFL(fmt, args...)   do { PRT("[DBG:%s(%d)] "fmt, __func__, __LINE__, ## args); } while(0)
#define PFR(fmt, args...)   do { PFL(fmt"\r\n", ## args); } while(0)
#define PRT_MEM(type, mem, fmt...)      do { if (type).mem) PFR("\t"#mem"\t:\t"fmt, (type).mem); } while(0)

#define PFRERR(fmt, args...)            do { fprintf(stderr, "[DBG:%s(%d)] "fmt"\r\n", __func__, __LINE__, ## args); } while(0)

#define SEQ_PFR(fmt, args...)           do { seq_printf(seq, fmt"\r\n", ## args); } while(0)
#define SEQ_PRT_MEM(type, mem, fmt...)  do { if (type).mem) seq_printf(seq, "\t"#mem"\t:\t"fmt"\r\n", (type).mem); } while(0)

struct dbg_stat {
    u32 stat0;
    u32 stat1;
    u32 stat2;
    u32 stat3;
    u32 stat4;    
    u32 stat5;
    u32 stat6;
    u32 stat7;
    u32 stat8;
    u32 stat9;
};
    
struct dbg_para {
    u32 printken;
    u32 para1;
    u32 para2;
    u32 para3;
    u32 para4;
    u32 para5;
    u32 para6;
    u32 para7;
    u32 para8;
    u32 para9;
};

extern struct dbg_stat g_dbg_stat;
extern struct dbg_para g_dbg_para;

#endif
 

#ifndef __DBG_PROC__

#ifndef __DBG_STAT__

struct dbg_stat g_dbg_stat = {0};
static int dbg_stat_show(struct seq_file* seq, void* v)
{
    SEQ_PFR("%10s%10s%10s%10s%10s%10s%10s%10s%10s%10s\r\n"
            "%10u%10u%10u%10u%10u%10u%10u%10u%10u%10u\r\n",
        "stat0", "stat1", "stat2", "stat3", "stat4", "stat5", "stat6", "stat7", "stat8", "stat9",
        dbg_stat.stat0, dbg_stat.stat1, dbg_stat.stat2, dbg_stat.stat3, dbg_stat.stat4,
        dbg_stat.stat5, dbg_stat.stat6, dbg_stat.stat7, dbg_stat.stat8, dbg_stat.stat9);
    return 0;
}

static int dbg_stat_write(struct file * filp, const char __user * *ubuf, 
                               size_t count, loff_t *f_ops)
{
    memset(&g_dbg_stat, 0, sizeof(g_dbg_stat));
    return count;
}
                               
static int dbg_stat_open(struct inode *inode, struct file *file)
{
    return single_open(file, dbg_stat_show, NULL);
}

struct file_operations dbg_stat_fops = {
    .owner        = THIS_MODULE,
    .open       = dbg_stat_open,
    .write      = dbg_stat_write,
    .read       = seq_read,
    .llseek     = seq_lseek,
    .release    = seq_release,
};

#endif

#ifndef __DBG_PARA__

struct dbg_para g_dbg_para = {.printken = 1};

static int dbg_para_show(struct seq_file* seq, void* v)
{
    SEQ_PRT_MEM(g_dbg_para, printken);
    SEQ_PFR("%10s%10s%10s%10s%10s%10s%10s%10s%10s\r\n"
            "%10u%10u%10u%10u%10u%10u%10u%10u%10u\r\n",
        "para1", "para2", "para3", "para4", "para5", "para6", "para7", "para8", "para9",
        dbg_para.para1, dbg_para.para2, dbg_para.para3, dbg_para.para4, dbg_para.para5, 
        dbg_para.para6, dbg_para.para7, dbg_para.para8, dbg_para.para9);

    return 0;
}

static int dbg_para_write(struct file * filp, const char __user * *ubuf, 
                               size_t count, loff_t *f_ops)
{
    char buf[32]  = {0};
    if(copy_from_user(buf, ubuf, (31 > count)?count:31)) {
        return -1;
    }

    // g_dbg_para.printken = simple_strtol(buf, NULL, 0);
    if (sscanf(buf, "%u %u %u %u %u %u %u %u %u %u", 
            &g_dbg_para.printken, &g_dbg_para.para1, 
            &g_dbg_para.para2   , &g_dbg_para.para3, 
            &g_dbg_para.para4   , &g_dbg_para.para5, 
            &g_dbg_para.para6   , &g_dbg_para.para7, 
            &g_dbg_para.para8   , &g_dbg_para.para9) < 0) {
        return -1;
    }

    return count;
}
                               
static int dbg_para_open(struct inode *inode, struct file *file)
{
    return single_open(file, dbg_para_show, NULL);
}

struct file_operations dbg_para_fops = {
    .owner        = THIS_MODULE,
    .open       = dbg_para_open,
    .write      = dbg_para_write,
    .read       = seq_read,
    .llseek     = seq_lseek,
    .release    = seq_release,
};

#endif

static int __init proc_dbg_init(void)
{
    proc_create("dbg_stat", 0, NULL, &dbg_stat_fops);
    proc_create("dbg_para", 0, NULL, &dbg_para_fops);
    return 0;
}

fs_initcall(proc_dbg_init);

#endif
 

[ 1824.193195][T721880] kworker/7:9: [FTS_TS/I]mtk_power_misc_psy_event:tran tp charger notifier val.intval=0 [ 1824.194822][T600230] tee_log: Trustonic TEE: [name:mcDrvModule&]1401(1)|fpCoreTA DBG:fpsensordriver.c [zmtian]----set_tiny_capture: 1 [ 1824.194826][T600230] tee_log: Trustonic TEE: [name:mcDrvModule&]1401(1)|fpCoreTA DBG:fpsensordriver.c [zmtian]----set_capture_mode: 11 [ 1824.194829][T600230] tee_log: Trustonic TEE: [name:mcDrvModule&]1401(1)|fpCoreTA DBG:fpsensordevice.c [liuxn]----gesture bytes_read:0, size:3572 [ 1824.194833][T600230] tee_log: Trustonic TEE: [name:mcDrvModule&]1401(1)|fpCoreTA DBG:fpsensordriver.c [zmtian]----read [ 1824.196155][T700940] fuelgauged: [name:mt635x_auxadc&]vbat_out_old=38970, vthr=688, T_curr=375, vbat_out=39000 [ 1824.198560][T600230] tee_log: Trustonic TEE: [name:mcDrvModule&]1401(4)|fpCoreTA DBG:fpsensordevice.c [liuxn]----gesture read cnt this time:3572 [ 1824.200256][T300220] pd_dbg_info: [name:pd_dbg_info&]///PD dbg info 130 2 [ 1824.201116][T600230] tee_log: Trustonic TEE: [name:mcDrvModule&]1401(4)|fpCoreTA DBG:fpsensordevice.c fpsensor_GetRelativeCoords dX:0, dY:0, res: 0 [ 1824.201121][T600230] tee_log: Trustonic TEE: [name:mcDrvModule&]1401(4)|fpCoreTA INFO:fp_mem.c HEAP_DBG TCI_FP_CMD_GET_REL_COORDS, cur_heap_size(byptes): 171516, max_heap_size: 171516, block count sum:23 [ 1824.201124][T600230] tee_log: Trustonic TEE: [name:mcDrvModule&]1401(4)|fpCoreTA DBG:fp_ta_entry.c TA return 0 [ 1824.201127][T600230] tee_log: Trustonic TEE: [name:mcDrvModule&]1401(2)|fpCoreTA DBG:fp_ta_entry.c TA_InvokeCommandEntryPoint cmdId=0x3 nParamTypes=0x7, buildtime=Feb 28 2024-11:58:38 [ 1824.201131][T600230] tee_log: Trustonic TEE: [name:mcDrvModule&]1401(2)|fpCoreTA DBG:fp_ta_entry.c cmd: TCI_FP_CMD_GET_REL_COORDS, sn=8607, cmdLen :8, cmd_id:15 频繁调用这些日志是为什么
04-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值