필요한 응용 프로그램에 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
.