sysfs 中的数字是以十进制还是十六进制表示的?

sysfs 中的数字是以十进制还是十六进制表示的?

我正在查看 sysfs 中的文件,特别是/sys/bus/usb/devices

文件包含小数字,表示为两个字符,例如“00”

我的所有示例都包含“09”或更低的数字。

我正在编写一个脚本来解释这些,我不清楚我是否应该期望“0A”或“10”作为下一个值(即,它是十进制还是十六进制?)

我已经看到这些是内核 kobject 的视图,但我无法找到它们序列化的来源。

您能否告诉我这些数字(例如,bInterfaceNumber 中的数字)是十进制还是十六进制,还是根据具体情况而变化。如果确实有所不同,我可以在源代码中的哪个位置检查 sysfs 中的特定文件?

如果相关的话,我的电脑主要是 Ubuntu,20.04 和 22.04 的混合体。我查看了usb-devices脚本作为比较点,版本之间发生了变化,这让我对它想要做什么不太有信心。

答案1

它取决于 kobject 字段及其序列化函数。找到这些并不总是那么容易,但对于 USB 来说,它们很方便分组的bInterfaceNumber如此声明:

usb_intf_attr(bInterfaceNumber, "%02x\n");

第二个参数是格式字符串,因此它显示十六进制值。下面的行显示显示bAlternateSetting为十进制值。

所有 sysfs 条目都应该是有记录的,并被bInterfaceNumber描述为

What:       /sys/bus/usb/devices/usbX/bInterfaceNumber
Description:
        Interface number, in hexadecimal.

相关内容