在linux环境下获取相关硬件信息

这两天,因为程序中的一个功能需要用到硬件的一些信息,如处理器的序列号,硬盘的序列号,和网卡的物理地址,查找了一下这方面的资料,由于网上这方面的资料也是比较多,但多而不全,找起来比较花气力。现将这两天的看的东西稍微做个总结,希望以后再遇到这方面问题的时候少走点弯路。

 

1。获取处理器的序列号。这个需要用到汇编指令,主要是用到CPUID这一条指令。推荐看一看官方文档--Intel@ Processor Identification and the CPUID Instruction。里面写的比较详尽。CPUID指令根据eax寄存器中的不同的值,会对eax,ebx,ecx,edx四个寄存器置位不同的值,我们依次从这四个寄存器中取出我们想要得到的信息。要想获得处理器的序列号,主要分三步完成:第一步,对eax置0,CPUID指令会返回cpu的基本信息到eax,ebx,ecx,edx,这四个寄存器中,此时eax中的返回值反映的信息是cpu level。如果该值<3,就不能得到serialno。第二步,对eax置1,执行CPUID指令后,eax中存放的就是cpu的signature,也即序列号的高32位.该signature值对于相同型号的处理器一般是相同的。(处理器的序列号由一组96位二进制数字组成,一般将序列号写成6组十六进制的形式:XXXX-XXXX-XXXX-XXXX-XXXX-XXXX)。此时检查edx的第18位(最低位为0),如果该位为1,则表示可以得到处理器的序列号的低64位,如果该位为0,则表示不能取得处理器的低64位。如果该位为1,则可执行第三步,对eax置3,执行CPUID指令后,edx存放的是序列号的中间32位,ecx存放的是序列号的低32位。至此,将这三部分的序列号串接起来就组成了处理器的完整序列号。

 

代码的实现可以看看这篇文章 http://blog.chinaunix.net/u/548/showart_365503.html

 

2。获取硬盘的序列号。一般是读取linux中的设备文件。对于ide硬盘,读取/dev/hda,对于sata硬盘,读取/dev/sda. 可以通过hdparm -i  /dev/hda 或者hdparm -i /dev/sda查看相关信息。相关代码实现可以看一看hdparm的源码,其代码都写得比较规范,也比较好看懂。

 

3。获取网卡的物理地址。

 

关于后面的这两个部分以后慢慢补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值