상황을 상상해보세요.
당신은 자신만의 커스텀 커널을 실행하고 있습니다 . 새로운 작은 업데이트가 출시되었습니다. 그것이 어제 출시되었고 이미 실행 중이라고 .config
가정해 보겠습니다 .5.16.16
5.16.15
어떻게 결정합니까?~ 해야 하다5.16.16
변경 사항이 포함됨실제로설정에 영향을 미치나요? 컴파일하고 다시 시작해야 합니까, 아니면 0으로 변경되어 안전하게 건너뛸 수 있습니까?
나는 이것에 대해 생각하고 있습니다 :
- 패치 적용
- 커널 버전을 이미 실행 중인 버전으로 되돌립니다.
- 커널을 빌드하고 임시 디렉터리에 설치합니다.
- 바이너리 비교 결과 파일
이것은 것이다아니요. 모듈은 일치할 수 있지만(완전히 확실하지는 않습니다) vmlinuz
빌드 날짜/시간과 커널이 빌드된 횟수를 식별하는 숫자(예: Linux localhost.localdomain 5.16.15 #1 SMP PREEMPT Thu Mar 17 11:20:15 2022 x86_64 x86_64 x86_64 GNU/Linux
- 보시다시피) 가 포함되어 있으므로 다를 것입니다 #1
.
이건 어떻게든 건너뛰어야 합니다.
즉, 지역 변수를 무시하는 재현 가능한 커널 빌드를 찾고 있습니다.
가지다턱시도 만들기 하지만 내 사용자 정의 .config를 사용하는 방법을 모르겠습니다. 그게 전부입니다.
답변1
여기서 알아야 할 사항을 알려주는 재현 가능한 커널 빌드를 얻는 쉬운 방법은 없습니다.
그러나 이제 커널 빌드는 실제로 다시 빌드해야 하는 파일만 다시 빌드하는 데 매우 능숙하므로 이를 사용하여 범프의 관련성을 잘 나타낼 수 있습니다.
$ git checkout v5.16.14
$ make bzImage modules
$ md5sum $(find . -name \*.o | sort) > v5.16.14.sums
$ git checkout v5.16.15
$ make bzImage modules
$ md5sum $(find . -name \*.o | sort) > v5.16.15.sums
(및 위의 사용은 커널의 파일 이름 지정 제한으로 인해 find
낙관적으로 가능합니다 .)sort
vmlinux.o
및 파일 kallsyms
이외의 대상 파일에 변경 사항이 표시되면 해당 소스 파일의 변경 사항을 조사할 수 있습니다.
가장 안정적인 포인트 릴리스의 이탈 정도를 고려하면 이는 다음과 같습니다.아무것도 없다빌드를 변경하는 소스 코드에서. 를 사용하면 make allnoconfig
최소 x86-64 커널은 5.16.14와 5.16.15 사이에 25개의 변경된 개체를 표시합니다.