forked from namhyung/uftrace
-
Notifications
You must be signed in to change notification settings - Fork 0
[RISC‐V 64] 2. cpuinfo.c 구현 과정
최기철 edited this page Aug 27, 2023
·
1 revision
-
모든 아키텍처의
cpuinfo.c
파일은 아래와 같이/proc/cpuinfo
파일을 열어 cpu 정보를 확인하는 구조이다.fp = fopen("/proc/cpuinfo", "r"); if (fp == NULL) return -1;
-
x86_64 아키텍처는
/proc/cpuinfo
파일을 열어 아래와 같이 각 줄에서 “model name\t” 문자열과 일치하는 줄이 있는지 확인한다.while (fgets(buf, sizeof(buf), fp) != NULL) { if (!strncmp(buf, "model name\t:", 12)) { ...... } }
-
x86_64 아키텍처의 cpuinfo 결과 예시는 아래와 같다.
-
aarch64 아키텍처는
/proc/cpuinfo
파일을 열어 아래와 같이 각 줄에서 "CPU architecture:” 문자열과 일치하는 줄이 있는지 확인한다.while (fgets(buf, sizeof(buf), fp) != NULL) { if (!strncmp(buf, "CPU architecture:", 17)) { ...... } }
- aarch64 아키텍처의 cpuinfo 결과 예시는 아래와 같다.
- 해당 부분에 aarch64 아키텍처의 cpuinfo 결과 예시 추가하기
- 아래 결과 예시는 Qemu에서 동작하는 risc-v 64bit Ubuntu 22.04에서 확인한 결과이며, 동작하는 시스템의 Extension 적용 결과와 코어 수에 따라 출력되는 다를 수 있다.
-
Qemu 에서 동작하는 RISC-V 64bit CPU는 “isa\t\t:” 문자열을 확인해야 하는 것을 확인할 수 있다.
-
문자열 사이의 공백이 빈칸인지 탭인지 확인하고 싶다면,
vi /proc/cpuinfo
명령을 실행 후esc
를 누르고:set list
입력 후 엔터를 누르면 탭은^I
로 표기되고 엔터는^M
으로 표기된다.
-
-
RISC-V 64bit의 최종 코드
#include <stdio.h> #include <string.h> int arch_fill_cpuinfo_model(int fd) { char buf[1024]; FILE *fp; int ret = -1; fp = fopen("/proc/cpuinfo", "r"); if (fp == NULL) return -1; while (fgets(buf, sizeof(buf), fp) != NULL) { if (!strncmp(buf, "isa\t\t:", 6)) { dprintf(fd, "cpuinfo:desc=%s", &buf[7]); ret = 0; break; } } fclose(fp); return ret; }