커널 파일을 수정하고 있습니다. 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