驱动调试接口-debugfs

  • 创建目录
spidev->root_dir = debugfs_create_dir(SPIDEV, NULL);
  • 在目录下创建文件节点
 spidev->debug_level = debugfs_create_file("debug_level",
                                0664, spidev->root_dir, spidev, &debug_level_ops);
        if (spidev->debug_level == NULL) {
                dev_err(&spi->dev, "debugfs create debug_level failed\n");
                ret = -EINVAL;
                goto create_err;
        }

  • file_operations的实现
static int debug_level_open(struct inode *inode, struct file *file)
{
        return single_open(file, debug_level_show, inode->i_private);
}

static ssize_t debug_level_write(struct file *file,
                                const char __user *buffer, size_t count, loff_t *ppos)
{
    unsigned int level = 0;
    struct seq_file *seq = file->private_data;
        struct spidev_data *spidev = seq->private;
        struct spi_device *spi = spidev->spi;

    level = simple_strtoul(buffer, NULL, 10);

        if (level < SPI_DEBUG_LEVEL_MIN)
                spidev->level = SPI_DEBUG_LEVEL_MIN;
        else if (level > SPI_DEBUG_LEVEL_MAX)
                spidev->level = SPI_DEBUG_LEVEL_MAX;
        else
                spidev->level = level;

        dev_info(&spi->dev, "debug_level = %d\n", spidev->level);

    return count;
}

static struct file_operations debug_level_ops = {
        .owner   = THIS_MODULE,
        .open    = debug_level_open,
        .read    = seq_read,
        .write   = debug_level_write,
        .llseek  = seq_lseek,
        .release = single_release,
};         

工作队列的实现:

  • 初始化一个工作队列,包括了实现函数.
      for (i = 0; i < WORK_COUNT; i++)
                INIT_WORK(&spidev->work[i], rx_assemble_work);
  • 将消息放入到工作队列中
      if (!queue_work(spidev->work_queue, &spidev->work[index++]))                              
                dev_err(&spidev->spi->dev, "queue_work failed index = %d\n", index);

        index %= WORK_COUNT;

  • 空闲时间调用工作队列
static void rx_assemble_work(struct work_struct *work)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值