大孩爱小孩 2012-09-27
linux:
一个C程序,如下:
#include<stdio.h>
#include<unistd.h>
intmain(){
longid=0,res=0;
id=gethostid();
printf("currenthostidis:%x\n",id);
res=sethostid(0x837b1d2c);
if(res==0)printf("ifresultiszero-success!(%d)\n",res);
id=gethostid();
printf("currenthostidis:%x;ppppp\n",id);
return0;
}
假设命名为ch_hostid.c
编译gcc-och_hostidch_hostid.c
执行:./ch_hostid
使用hostid命令查看是否已经修改成功。
说明:gethostid()获取当前hostid,sethostid(参数为要设置的hostid(16进制的))
solaris系统
本来也想用上述程序来修改,但sethostid在solaris里没用,现用以下方法
还是以要修改后的hostid为837b1d2c为例
方法如下
1、837b1d2c转换成10进制
2205883692
2、然后每4位一组,不足4位补0,将数字转换为对应的ASCII码
32323035
38383336
39320000
3、写个脚本内容如下
adb-w-k/dev/ksyms/dev/mem<<END>/dev/null
hw_serial/W0x32323035
hw_serial+4/W0x38383336
hw_serial+8/W0x39320000
END
注:使用上述脚本修改后,会将hostid临时修改,系统重启,会失效;为使得永久生效,
可以将脚本放入/etc/rc2.d目录下,则系统启动将自动运行脚本将hostid进行修改但在我这没永久修改,重启后hostid又恢复成以前的了,如果不行换成下面的方法试试,我是采用了下面的方法,永久修改成功)
或者:修改/etc/rc2.d/S20sysetup
增加如下内容
adb-w-k/dev/ksyms/dev/mem<<END>/dev/null
hw_serial/W0x32323035
hw_serial+4/W0x38383336
hw_serial+8/W0x39320000
END
保存后,执行shS20sysetup