커널의 기본 특성을 설정하는 방법은 무엇입니까?

커널의 기본 특성을 설정하는 방법은 무엇입니까?

필요한 응용 프로그램에 64비트에 대한 완전한 지원을 제공할 수 있도록 32비트 시스템에서 32비트 커널을 64비트 커널로 교체하려고 합니다(필요한 라이브러리가 있거나 정적으로 링크가 있는 경우). , 그러나 기타 모든 경우에는 32비트 사용자 공간을 예약합니다. 문제는 많은 32비트 사용자 공간 애플리케이션이 uname -m보고를 원하기 i686때문에 무엇이든 실행하기 전에 이 작업을 수행해야 한다는 setarch i386것입니다 init.

나는 그것을 init=/sbin/myinit커널에 전달하는 것과 같은 일을 할 수 있다고 생각했습니다. 그것은 myinit다음과 같습니다:

#!/bin/sh
exec setarch i386 /sbin/init

하지만 기본 성격을 커널 자체에 인코딩하는 방법이 있었으면 좋겠습니다. 이를 수행하기 위한 기존 커널 옵션이 있습니까?

답변1

내가 아는 한 그러한 커널 옵션은 없습니다. 원한다면 커널 소스 코드를 직접 살펴보고 관련 항목을 검색할 수 set_personality있습니다 current->personality. 원하시는 로고는 입니다 PER_LINUX32.

커널을 패치하는 것 외에도 init를 재정의하는 솔루션은 아마도 가장 간단한 솔루션일 것입니다. 이것은 실제로 놀라운 일이 아닙니다. initramfs를 사용하는 것과 매우 유사합니다. 이미 initramfs를 사용하고 있다면 initramfs를 넣을 수 있습니다 setarch.

관련 정보