Chinaunix

标题: linux如何从硬盘中读取ATA硬盘序列号? [打印本页]

作者: RqSHg    时间: 2013-05-08 15:40
标题: linux如何从硬盘中读取ATA硬盘序列号?
各位好,如题

我想先写个小程序,尝试一下直接从硬盘读取数据,但是这还没成功。
要用的方法是,与1f0h到1f7h端口读写信息,于是编写汇编代码,比如,程序流开头是:

        mov dx,1f6h ; 要读入的磁盘号及磁头号
        mov al,0a0h ;磁盘0,磁头0
        out dx,al

这是向1f6h端口写数据。

调试时发现,程序走到out指令时,会有“Segmentation fault”:
Program received signal SIGSEGV, Segmentation fault.

这是怎么回事?是因为执行权限不够么?我是用root权限运的,不管用。
还看到有提到3f6h端口的,有说法是:先要“向端口 3F6 写入控制字节,建立相应的硬盘控制方式;”
但我没有查到有关3f6端口的细节,不知怎么用,所以想暂时跳过试一试。是不是和这个有关?

另外一个问题,硬盘序列号是什么?有说法是:事实上,
“现在的硬盘并没用到全部的10个word,
只用到了10-13 这四个word,
每个word 是16 bit,一共64 bit数据。”
但我在linux下用hdparm看到的我的硬盘信息中,"Serial Number"有112位(14个ascci码),这是序列号么?

其实不太懂什么是驱动编程,但感觉比较底层。又没有别的板块好发问,所以就发在这里了。
先谢过各位了,希望各种牛人解答。小子虚心求教





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2