打印

求教:怎样在OS下不通过Driver,直接编程跟HCD交互枚举Device

[复制链接]
1986|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wt180|  楼主 | 2011-10-5 22:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟请教一个问题,希望抽空给予解答,多谢!

在操作系统下,怎么不通过驱动程式的支持,直接通过HCD的STS,CMD等寄存器,配置空间等来枚举设备,而又不影响到操作系统对于控制器上的所有设备的使用。

例如,在Windows下,插入了一个U盘,一个USB键盘,我怎样能够知道在哪个Port上插的是键盘,哪个是U盘,并且获得它们各自的Device Address。

看到过一个办法是从Dev 1 -127 逐个GetDescriptor,从而判断有没有这个设备,并得到相关信息,但是并不能够知道设备在哪个Port上。

再有就是通过Reset每个Port来重行分配设备地址给每个设备,但是这样的话一个会影响到设备的使用,并且操作系统一定会截获到设备的变动。


总之就是请教怎样在操作系统不知情的情况下获取本机上所有USB设备的相关信息,例如所在的Port,VendorID等。。。

相关帖子

沙发
dqyubsh| | 2011-10-5 23:27 | 只看该作者
台湾的东西看多了,连驱动程式这样的词都用上了。。。

我怀疑你的目的,即便有这样的程序,我也不说。

使用特权

评论回复
板凳
wt180|  楼主 | 2011-10-7 00:04 | 只看该作者
本帖最后由 wt180 于 2011-10-7 00:16 编辑

楼上的大哥,您的回帖起码是说有办法做到的,让我看到了曙光,多谢了!

关于目的,这是一个合理的需求。
在ACPI模式下,需要通过ASL代码来告诉OS对于某个Port上的设备是否对于用户可见,是ACPI Spec提供的一个接口,只是要自己编程实现。
就是在插入设备后,OS会侦测到设备,并且已经进行了初始设定之后,会进入某个类似中断的地方,告诉BIOS某个Port有设备插入,但没有设备地址等相关的信息,而后BIOS判断是否将这个设备对于用户可见,并把True或False返回给OS。
目前只是在开机前插入设备的话,BIOS可以给设备分配地址,然后就是判断VendorID从而决定是否隐藏,但是启动到OS后,就不能动态的改变了,现在看能不能动态侦测来隐藏某一个设备。



另外有一个相似的问题,关于Live USB的。
就是从U盘启动时,刚开始Grub等一定是通过BIOS跟U盘交互的,可是启动到某个过程时,OS应当会枚举所有的USB设备,这里是怎样把U盘给挂上的呢,就是此时的OS怎么会知道U盘的设备地址的呢?

在网上翻很多的资料,囫囵的看,总是瞧不着门道,恳请各位不吝赐教,多谢了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

1

粉丝