Debian Linux 커널 ABI 버전 제어

Debian Linux 커널 ABI 버전 제어

데비안 커널 이미지 패키지 버전 관리를 이해하려고 합니다.

다음 출력을 예로 들어 보겠습니다.

$ apt search linux-image | grep amd64-unsigned

linux-image-5.10.0-10-amd64-unsigned/stable 5.10.84-1 amd64
linux-image-5.10.0-11-amd64-unsigned/stable-security 5.10.92-1 amd64
. . .

내가 올바르게 이해했다면 다음과 같습니다.

  • 커널 버전 5.10.84-1 → ABI 버전 5.10.0-10
  • 커널 버전 5.10.92-1 → ABI 버전 5.10.0-11

분명히, 리눅스 커널은 따르지 않는 것 같습니다서비스 모델ABI는 패치 버전 간에 무작위로 변경되기 때문입니다.

그렇다면 데비안은 ABI 버전 번호를 변경해야 하는 시기를 어떻게 결정합니까?

답변1

이 내용은 다음과 같이 기록됩니다.데비안 커널 매뉴얼(Debian 사용자도 이 debian-kernel-handbook패키지를 설치할 수 있습니다):

ABI 유지 및 업데이트

사용자가 트리 외부 모듈을 자주 다시 빌드하는 것을 방지하기 위해 우리는 Debian 안정 릴리스 또는 이전 안정 릴리스로 업데이트하는 동안 커널 ABI를 변경하지 않으려고 노력합니다. 가장 중요한 것은 트리 외부 모듈이 ABI의 해당 부분에 의존하지 않는 것으로 보이지 않는 한 ABI 이름을 변경하지 않고 그러한 변경을 피하는 것입니다.

버그 수정이나 커널 구성 변경으로 인해 ABI가 변경될 수 있습니다. 함수를 조건으로 내보내 CONFIG_FOO거나 해당 정의가 의존하는 유형을 사용하는 경우 CONFIG_FOO함수를 켜 CONFIG_FOO거나 끄면 해당 함수의 ABI가 변경되므로 전체 커널의 ABI가 변경됩니다. 대부분의 드라이버는 아무것도 내보내지 않기 때문에 개별 드라이버의 구성을 활성화하거나 변경해도 일반적으로 ABI가 변경되지 않습니다.

커널 빌드 프로세스는 내보낸 각 함수 또는 변수에 대해 "기호 버전"을 생성합니다. 이는 의존하는 정의의 해시이며 함수의 ABI가 변경될 때마다 변경되어야 합니다. 커널 모듈 로더는 기호 버전을 비교하여 호환되지 않는 모듈을 감지합니다. 전체 기호 버전 세트는 커널 ABI를 나타냅니다.

이 디렉터리에 이전에 업로드된 패키지의 기호 버전을 수집한 debian/abi다음 새 커널을 이러한 버전과 비교합니다. ABI 이름은 변경되지 않았지만 ABI 자체가 변경된 경우(허용 가능한 것으로 표시한 추가 또는 변경 제외) 빌드가 중단됩니다.

따라서 기본적으로 기존 모듈과의 호환성을 보장할 수 없다면 ABI를 변경해야 합니다. ABI 변경 사항은 패키지 변경 로그에서 추적되지만, 변경에 대한 구체적인 이유가 반드시 포함되는 것은 아닙니다(둘 이상이 있을 수 있음).

바라보다Debian Linux 커널 버전 제어데비안 커널 버전 관리 체계에 대한 보다 일반적인 설명입니다.

관련 정보