커널 코드를 빌드할 때 Linux/Android 커널에 대한 아키텍처 정보 찾기

커널 코드를 빌드할 때 Linux/Android 커널에 대한 아키텍처 정보 찾기

커널 파일을 수정하고 있습니다. 32비트 아키텍처라면 하나의 함수를 로드하고, 64비트 아키텍처라면 다른 함수를 로드하고 싶습니다. 빌드 시 커널에서 아키텍처 정보를 가져오고 이를 기반으로 다양한 기능을 로드하는 것이 가능합니까? 스키마 정보는 어디에서 저장되거나 획득됩니까? 감사해요.

답변1

대상 머신 자체에서 컴파일하면 uname -m대부분의 머신에서 원하는 것을 얻을 수 있습니다. 예를 들어 64비트 데스크탑의 경우:

$ uname -m
x86_64

이는 머신이 64비트인지 32비트인지를 명시적으로 알려주지 않습니다. 이는 해석해야 하는 문자열일 뿐입니다(예: 일련의 if/then명령문 또는 단일 case명령문 사용).

다음은 sh의 (매우 대략적인) 예입니다.

machine=$(uname -m)
bits=0

case "$machine" in
       *64*) bits=64 ;;
  *[3-6]86*) bits=32 ;;
    *armv7*) bits=32 ;;  # replace with a pattern to match your 32-bit android cpu
    *armv8*) bits=64 ;;  # replace with a pattern to match your 64-bit android cpu
esac

[ "$bits" = 0 ] && echo "Unknown machine type" && exit 1

관련 정보