커널 아키텍처와 운영 체제 아키텍처의 차이점은 무엇입니까? 바이너리를 컴파일할 아키텍처를 알아내려고 할 때 다음 중 어떤 것이 관련이 있습니까?
내가 아는 한, 일부 배포판에서는 32비트 운영 체제를 사용하더라도 64비트 커널을 설치할 수 있습니다.
무엇을 인쇄할 것인가 uname -i
, 커널 아키텍처 또는 운영 체제 아키텍처? 그리고 ?dpkg --print-architecture
arch
답변1
커널 아키텍처는 커널의 "선호되는" 아키텍처입니다. 이는 uname -m
및 에서 제공하는 아키텍처 입니다 arch
. 예를 들어, 64비트 x86 호환 CPU에서 실행되는 64비트 커널에서 파일은 x86_64
.
일부 플랫폼에서는 커널이 여러 아키텍처에 대한 바이너리를 실행할 수 있습니다. 예를 들어 64비트 x86 커널은 32비트 바이너리("이전" i386
/ i686
ABI 및 x32
. 이러한 바이너리를 실행할 때 CPU에 32비트 모드에서 실행하도록 지시하고 32비트 시스템 호출과 기본 64비트 시스템 호출 간의 변환을 제공함으로써 이를 지원합니다. 사용자 모드 시뮬레이션 추가통과하다QEMU를 사용하면 커널은 QEMU가 지원하는 모든 아키텍처(예: armhf
64비트 Intel CPU)에 대해 바이너리를 실행할 수도 있습니다. 바이너리 자체와 필요한 번역 레이어 외에도 바이너리와 동일한 아키텍처를 공유하는 적절한 라이브러리도 필요합니다. 이는 멀티 아키텍처가 도움이 되는 부분이며, 멀티 아키텍처 이전에는 작업 분업이 /lib32
있었습니다 . /lib64
(ABI 2~3개를 다루는 것이 번거롭다고 생각된다면 MIPS 시스템을 살펴보세요...)
이러한 맥락에서 "운영 체제 아키텍처"는 여러 가지를 의미할 수 있습니다. 즉, 시스템이 설치될 때 사용된 아키텍처일 수도 있고, 시스템의 대부분의 바이너리에서 사용되는 아키텍처일 수도 있습니다. Debian 파생 제품에서는 dpkg
에 의해 제공되는 설치된 패키지입니다 dpkg --print-architecture
.
바이너리를 빌드할 때 가장 간단한 대상 아키텍처는 적절한 라이브러리도 있다고 가정할 때 컴파일러의 기본 대상 아키텍처입니다. 일반적으로 이것이 무엇을 의미하든 운영 체제 아키텍처가 됩니다. 여기서는 커널 아키텍처가 특별히 중요하지 않습니다. Debian 파생 제품에서 다중 아키텍처 확장은 교차 컴파일을 포함합니다. 이는 모든 Debian 시스템에서 지원되는 Debian 아키텍처에 대한 바이너리를 구축하는 것이 더 쉬워진다는 것을 의미합니다. 그러나 이는 상당히 구체적인 사용 사례이며 여전히 특정 사항에 대한 이해가 필요합니다. 크로스 컴파일 제약 조건에 대한 친숙도 수준. 그러니 기본 아키텍처를 고수하세요...
uname -i
무엇이든 인쇄할 때 커널 아키텍처 변형을 인쇄하세요.uname -p -i 알 수 없음그것에 대해 더 자세히 알려줄 것입니다.