gchen
驱动牛犊
驱动牛犊
  • 注册日期2001-08-19
  • 最后登录2002-03-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2026回复:6

linux下如何读取硬盘参数

楼主#
更多 发布于:2001-09-26 22:14
我在linux下想读取硬盘参数,如硬盘序列号,怎么读?请大虾帮帮我吧
matt
驱动中牛
驱动中牛
  • 注册日期2001-07-24
  • 最后登录2016-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-09-27 10:38
在应用层,(需有Root权限),open(/dev/hda ...)之后,然后就可以调用read来读,以扇区为单位。

在内核层,
  1,利用bread函数
  2,若是ide设备,可直接读ide controller,利用PIO方式。为避免冲突,最好不要用这种方式。

Matt Wu
System Internals http://sys.xiloo.com
gchen
驱动牛犊
驱动牛犊
  • 注册日期2001-08-19
  • 最后登录2002-03-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-09-27 10:46
多谢您的帮助,我想再问硬盘参数到底存在哪个扇区?结构如何?
matt
驱动中牛
驱动中牛
  • 注册日期2001-07-24
  • 最后登录2016-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-09-27 11:13
你要做的是应用程序还是driver?

硬盘参数不存在于磁盘上,而是在controller上。
应用程序:用ioctl,cmd=HDIO_GETGEO
driver: 如果是做文件系统的driver,这不是问题,其它的有点麻烦。

Matt Wu
System Internals http://sys.xiloo.com
gchen
驱动牛犊
驱动牛犊
  • 注册日期2001-08-19
  • 最后登录2002-03-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-09-28 17:17
我想读取ide的序列号,就是厂家写入的序列号,是关于一个加密问题。我看了ide controller的数据结构,没看到相关项,还请大虾再次指点,我是2。2。14内核!不胜感激。
matt
驱动中牛
驱动中牛
  • 注册日期2001-07-24
  • 最后登录2016-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-09-29 10:16
序列号只有每个分区会有,硬盘的控制电路上存有的是硬盘的型号。
分区的序列号存放在该分区的第一扇区,是在创建分区时赋的随机值,不过要根据分区类型才能得到。硬盘的型号的获取,就只有通过ioctl或直接ata pio,对于同一类型的硬盘这个型号是一样的。
System Internals http://sys.xiloo.com
matt
驱动中牛
驱动中牛
  • 注册日期2001-07-24
  • 最后登录2016-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-09-30 11:59
根据ATA-3的规范,流程如下: (以primary ide controller为例)

//Select Device
outb(0x1f0 + 0x06, 0xa0 + secondary ? 0x10: 0);
outb(0x1f0 + 0x07, 0xec); //向CMD_REG发送IDENTIFY_DEVICE指令。

while (inb(0x1f0 + 0x07) & 0x80)
delay();

for(int i=0;i<256;i++)
??? = inw(0x1f0); // 共256个word,偏移10 - 19为serial number.

你可参考一下ata-3 spec。不过我认为这样直接在多任务系统中操纵ide controller不太好。你好通过ioctl: HDIO_GET_IDENTITY来获取。

你在linux下读取时,是通过kernel module(driver)还是直接在应用层做的。在应用层做与ide有关的端口操作可能会有问题,对此我不能肯定。
[matt 编辑于 2001-10-08 10:34]
System Internals http://sys.xiloo.com
游客

返回顶部