📄 setserial.c
字号:
/* <LIC_AMD_STD> * Copyright (C) 2003-2005 Advanced Micro Devices, Inc. All Rights Reserved. * * Unless otherwise designated in writing, this software and any related * documentation are the confidential proprietary information of AMD. * THESE MATERIALS ARE PROVIDED "AS IS" WITHOUT ANY * UNLESS OTHERWISE NOTED IN WRITING, EXPRESS OR IMPLIED WARRANTY OF ANY * KIND, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, * NONINFRINGEMENT, TITLE, FITNESS FOR ANY PARTICULAR PURPOSE AND IN NO * EVENT SHALL AMD OR ITS LICENSORS BE LIABLE FOR ANY DAMAGES WHATSOEVER. * * AMD does not assume any responsibility for any errors which may appear * in the Materials nor any responsibility to support or update the * Materials. AMD retains the right to modify the Materials at any time, * without notice, and is not obligated to provide such modified * Materials to you. AMD is not obligated to furnish, support, or make * any further information available to you. * </LIC_AMD_STD> *//* <CTL_AMD_STD> * </CTL_AMD_STD> *//* <DOC_AMD_STD> * </DOC_AMD_STD> */#define NEED_FILES#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include "base64.h"#include "secure_serial.h"#include "secure_serial_priv.h"#include "sfiles.h"#include "oemkeys.h"#include "linux/nvram.h"#include <stdlib.h>int main(int argc, char *argv[]){ int nvramfd=-1; long hostid; char serialStr[MAX_SERIAL_NUM_SIZE+1]; int rc,c; int setSerialFlg=0; int oemFlg=0; int modelFlg=0; int divxFlg=0; int errflg=0; char modelId[MODEL_ID_SIZE+1]; char manufStr[MANUF_SIZE+1]; short divxId; char outStr[500]; extern char *optarg; extern int optind, optopt; while ((c = getopt(argc, argv, "rs:o:m:d:")) != -1) { switch(c) { case 'o': strncpy(manufStr,optarg,MANUF_SIZE); memset(manufStr,MANUF_SIZE+1,0); oemFlg++; break; case 'm': memset(modelId,MODEL_ID_SIZE+1,0); strncpy(modelId,optarg,MODEL_ID_SIZE); modelFlg++; break; case 'd': divxId = atoi(optarg); divxFlg++; break; case 'r': nvramfd = open("/dev/nvram",O_RDWR); if (nvramfd < 0) { perror("NVRAM Driver not found. Exiting\n"); fprintf(stderr,"\n"); return(-1); } rc = ioctl(nvramfd,NVRAM_RESET_ALL,NULL); if (rc < 0) { printf("NVRAM reset failed\n"); } else { printf("NVRAM has been reset/cleared\n"); } close(nvramfd); return(0); break; case 's': setSerialFlg++; strncpy(serialStr,optarg,MAX_SERIAL_NUM_SIZE); serialStr[MAX_SERIAL_NUM_SIZE]=0; // make sure string is terminated if (strlen(serialStr) < MIN_SERIAL_NUM_SIZE) { errflg++; fprintf(stderr,"Serial Number must be >= %d characters and <= %d characters\n", MIN_SERIAL_NUM_SIZE,MAX_SERIAL_NUM_SIZE); } hostid = getMyHostid(serialStr); sethostid(hostid); break; case '?': fprintf(stderr,"%s: Unrecognized option: -%c\n", argv[0],optopt); errflg++; } } if (errflg) { fprintf(stderr,"Usage: setserial [-r] [-s serial Number] [-o OEM-Name] [-m OEM-Model ] [-d DivX Model ID]\n"); return(-1); } nvramfd = open("/dev/nvram",O_RDWR); if (nvramfd < 0) { perror("NVRAM Driver not found. Exiting"); return(-1); } if (setSerialFlg) { printf("input serial: %s\n",serialStr); rc = ioctl(nvramfd,NVRAM_SET_SERIAL,serialStr); if (rc != 0) { perror("set serial"); fprintf(stderr,"\nSerial number change not be changed once set.\n"); fprintf(stderr,"NVRAM maybe reset to default with -r option\n"); } rc = ioctl(nvramfd,NVRAM_GET_SERIAL,outStr); printf("Serial Number is: %s\n",outStr); } if (oemFlg) { rc = ioctl(nvramfd,NVRAM_SET_MANUFACTURER,manufStr); if (rc != 0) perror("Setting Manufacturer String failed"); else { rc = ioctl(nvramfd,NVRAM_GET_MANUFACTURER,outStr); printf("Manufacturer is: %s\n",outStr); } } if (modelFlg) { rc = ioctl(nvramfd,NVRAM_SET_MODEL_ID,modelId); if (rc != 0) perror("Setting Model Id failed"); } if (divxFlg) { // not tested rc = ioctl(nvramfd,NVRAM_SET_DIVX_MODEL_ID,&divxId); if (rc != 0) perror("Setting Model Id failed"); } close(nvramfd); return(0); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -