저는 Java로 프로그램을 작성 중이며 이 프로그램을 컴파일할 Linux용 아키텍처를 결정해야 합니다.
비슷한 것이 필요 uname -m
하지만 프로그램을 실행하지 않고 /proc
pseduo-fs에서 필요합니다.
신뢰할 수 있는 독서 자료란 무엇입니까?
답변1
64비트 시스템에 32비트 Linux를 설치할 수 있으므로 CPU 기능을 확인하는 것이 더 안전한 방법인 것 같습니다. Intel 및 호환 프로세서의 경우:
grep -o -w 'lm' /proc/cpuinfo
http://www.unixtutorial.org/2009/05/how-to-confirm-if-your-cpu-is-32bit-or-64bit/
당신이 찾고 있는 것은 다음 플래그입니다: lm. X86_FEATURE_LM, 긴 모드(64비트) 지원을 나타냅니다. CPU 플래그에서 "lm" 플래그를 찾을 수 있으면 64비트 지원 프로세서를 찾고 있다는 의미입니다.
답변2
내가 본 모든 것은 uname
바이너리가 uname()
정보를 얻기 위해 시스템 호출을 수행한다는 것을 말하므로 이것이 원하는 것보다 더 어려울 수 있습니다. 일부 JNI를 구현하려는 경우 그렇게 하고 시스템 호출을 실행하는 것이 좋습니다. /proc
내가 찾을 수 있는 가장 가치 있는 더미 파일은 /proc/sys/kernel/osrelease
내 시스템에서 입니다 4.2.3-300.fc23.x86_64
. 이는 버전마다 다르며 Linux 버전에 따라 크게 변경될 수 있으므로 필요한만큼 안정적이지 않을 수 있습니다.
답변3
uname -m
출력 라인을 포함하는 파일이 없는 것 같습니다 . 즉 , Arch x86_64
가 .ppc64le
/proc/cpuinfo
/proc/sys/kernel/
그러나 아마도 /proc/cpuinfo
구문 분석(Rui F Ribeiro의 xaccepted 답변)보다 약간 더 나은 것은 구문 분석입니다 /sys/devices/system/cpu/modalias
.
$ cat /sys/devices/system/cpu/modalias # x86_64
cpu:type:x86,ven0000fam0006mod005E:feature:,0000,0001,0002,0003...
$ cat /sys/devices/system/cpu/modalias # s390x
cpu:type:z13:feature:,0000,0001,0002,0003,0004,0005,0006,0007,0008,0009,000A,000B
그러나 다음 질문은 이들을 매핑하는 방법입니다.
그런데 커널에서는 UTS_MACHINE := $(ARCH)
다음과 같이 정의되어 있습니다.파일 생성
아치를 통해 조정이 필요한 경우:
ifeq ($(CONFIG_X86_32),y)
...
UTS_MACHINE := i386
...
else
...
UTS_MACHINE := x86_64
...
UTS_MACHINE := $(subst $(space),,$(machine-y))
UTS_MACHINE := s390x
ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
...
UTS_MACHINE := aarch64_be
else
...
UTS_MACHINE := aarch64
endif
답변4
uname 명령을 사용해 보세요.
$ 남자 이름
또는
$ uname -a
안녕히 가세요,