linux内核判断设备是否为usb设备

static int dev_is_usb(const char *dev_name, const char *k_dev_name)
{
    int is_usb = 0;
    struct kstat stat;

    if (strncmp(k_dev_name, "/dev/", 5))
    {
        // 不是这个路径的不用管了
        return 0;
    }

    if (vfs_stat(dev_name, &stat))
    {
        return 0;
    }

    // 是否是块设备
    if (S_ISBLK(stat.mode))
    {
        struct path path;
        char tmp[64] = {0};
        snprintf(tmp, 64, "/sys/dev/block/%d:%d", MAJOR(stat.rdev), MINOR(stat.rdev));
        if (!kern_path(tmp, LOOKUP_FOLLOW, &path))
        {
            char *buf = (char *)__getname();
            if (!IS_ERR(buf))
            {
                char *name = d_path(&path, buf, PATH_MAX);
                if (!IS_ERR(name) && strstr(name, "/usb"))
                {
                    is_usb = 1;
                }
                __putname(buf);
            }

            path_put(&path);
        }
    }

    printk(KERN_INFO"dev: %s %s usb device.\n", k_dev_name, is_usb ? "is": "not");
    return is_usb;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值