免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1822 | 回复: 0
打印 上一主题 下一主题

linux如何从硬盘中读取ATA硬盘序列号? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-08 15:40 |只看该作者 |倒序浏览
各位好,如题

我想先写个小程序,尝试一下直接从硬盘读取数据,但是这还没成功。
要用的方法是,与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码),这是序列号么?

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP