chardev的主要和次要模式有多稳定?

时间:2014-04-29 19:48:48

标签: c unix serial-port pty chardev

我正在研究串口库,我正在考虑使用主/次模式 检查给定文件是否为平台串口的字符设备,a pty或usb串口,补充使用其他框架 Linux或OSX。

实际上,用于查明文件是USB串口还是平台串口 port,有一些方法可以使用可用的框架,比如linux上的libudevIOKit 在OSX上。但我认为,对于检查PTY文件,唯一的方法是使用旧的 stat()

#if defined(OS_LINUX)
#define PTY_MAJOR_NODE 136
#elif defined(OS_MAC)
#define PTY_MAJOR_NODE 16
#elif defined(OS_SOLARIS)
#define PTY_MAJOR_NODE 24
#endif

bool is_pty(const char* file) {
    struct stat filestat;
    if (0 == stat(file, &filestat)
            && S_ISCHR(filestat.st_mode)
            && major(filestat.st_rdev) == PTY_MAJOR_NODE) {
        return true;
    }
    return false;
}

到目前为止,我在我的debian linux上发现PTS chardev都有一个主要的模式 136,在我的OSX上,所有PTS的模式都为16。在ddg上爬行,我发现了 Solaris可能使用24.

的主要模式

我可以在网上找到很多关于什么是PTY / PTS及其历史的资源。 openptyptypts的联合页面 - 尽管那个主页和unix.SE 未成年人/dev/ptmx - 请勿谈论PTS设备的主要/次要模式。和不 资源列出了统一的主要模式。

所以这是我的问题:

    对于给定的Unix风格,
  • PTS(以及扩展名为其他串行chardev)的主要模式吗? (我正在寻找稳定在±2年的东西)
  • 那些定义在哪里?我想这是一个处理它的内核驱动程序,不是吗?
  • 依靠chardev的主要模式来检测这是什么类型的设备是个好主意?

N.B。:我在question on unix.SE上发帖时犹豫不决,但因为我正在使用它 在代码中,我认为这更像是一个问题,在SO。

编辑:我发布了一个相关的{{3}},寻求帮助查找其他主要模式,看看它们在整个系统中的稳定性。我的猜测是,如果没有人有答案,至少我们可以查询系统并查看来源。

1 个答案:

答案 0 :(得分:0)

主要和次要设备编号在编译或链接/加载时定义,具体取决于所涉及的硬件。将附加的SBUS卡添加到Solaris计算机可能(必须?)具有任意主设备号。我知道我的确如此 简而言之,我不认为主要/次要设备数量会做你想要的 考虑Debian Linux Ports https://www.debian.org/ports
我无法想象SPARC,s390,MIPS,PowerPC和ARM架构都使用相同的主要/次要数字;总线架构太不同了。