99 lines
2.1 KiB
C
99 lines
2.1 KiB
C
|
#include <stdio.h>
|
||
|
#include <time.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
/* 硬件类型 */
|
||
|
#define MODEL "SG368Z(RK3568) HDMI+VGA (Linux)"
|
||
|
|
||
|
/* 固件版本 */
|
||
|
#define FIRMWARE "V1.00"
|
||
|
|
||
|
/* 固件版本 */
|
||
|
#define DATE "20240321-2343"
|
||
|
|
||
|
void get_version_process(void);
|
||
|
|
||
|
static void exec(char* data, char* command, char* filter);
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
if(argc == 1)
|
||
|
{
|
||
|
printf("Usage:\r\n");
|
||
|
printf("hvgo: show this usage\r\n");
|
||
|
printf("hvgo version: get version\r\n");
|
||
|
printf("\r\n");
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if(strcmp(argv[1], "version") == 0)
|
||
|
get_version_process();
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void get_version_process(void)
|
||
|
{
|
||
|
char os_data[1024] = {0}, kernel_data[1024] = {0};
|
||
|
exec(os_data, "cat /etc/issue", "\\n \\l");
|
||
|
exec(kernel_data, "cat /proc/version", "");
|
||
|
|
||
|
/* 系统版本 */
|
||
|
printf("OS: %s\r\n", os_data);
|
||
|
/* 硬件类型 */
|
||
|
printf("MODEL: %s\r\n", MODEL);
|
||
|
/* 固件版本 */
|
||
|
printf("FIRMWARE: %s\r\n", FIRMWARE);
|
||
|
/* 固件生成日期 */
|
||
|
printf("DATE: %s\r\n", DATE);
|
||
|
/* 系统内核版本信息 */
|
||
|
printf("KERNEL: %s\r\n", kernel_data);
|
||
|
|
||
|
printf("\r\n");
|
||
|
}
|
||
|
|
||
|
void replace(char *str, char *orig, char *rep)
|
||
|
{
|
||
|
if(strlen(orig) > 0)
|
||
|
{
|
||
|
static char buffer[1024];
|
||
|
char *p;
|
||
|
|
||
|
while (p = strstr(str, orig))
|
||
|
{
|
||
|
memcpy(buffer, str, p-str);
|
||
|
buffer[p-str] = '\0';
|
||
|
strcat(buffer, rep);
|
||
|
strcat(buffer, p+strlen(orig));
|
||
|
strcpy(str, buffer);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void replace_char(char *str, char find, char replace)
|
||
|
{
|
||
|
for (int i = 0; str[i]; i++){
|
||
|
if (str[i] == find){
|
||
|
str[i] = replace;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void exec(char* data, char* command, char* filter)
|
||
|
{
|
||
|
FILE *fp;
|
||
|
char buffer[1024];
|
||
|
|
||
|
fp = popen(command, "r"); // 打开 messages 日志文件并只显示最后一行
|
||
|
fgets(buffer, sizeof(buffer), fp);
|
||
|
|
||
|
strcpy(data, buffer);
|
||
|
|
||
|
pclose(fp);
|
||
|
|
||
|
replace(data, filter, "");
|
||
|
replace_char(data, '\n', ' ');
|
||
|
replace_char(data, '\r', ' ');
|
||
|
}
|