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;
}
linux内核判断设备是否为usb设备
最新推荐文章于 2024-04-17 03:25:58 发布