새 커널이 설치될 때마다 스크립트 실행

새 커널이 설치될 때마다 스크립트 실행

현재는 새 커널 버전을 얻을 때마다 소스에서 무선 드라이버를 다시 컴파일해야 합니다. 이 프로세스를 자동화하는 것은 매우 해로울 것이라고 생각했기 때문에 Bash 빌드 스크립트를 /etc/kernel/postinst.d. 엮다.

예를 들어, 3.0.0-14-generic을 실행하고 apt-get dist-upgrade커널 3.0.0-15-generic을 실행하면 커널 3.0.0-14-generic에 대해 컴파일되는데 이는 전혀 도움이 되지 않습니다.

make새로 설치된 커널에 대해 컴파일 할 수 있도록 호출에 전달할 수 있도록 설치된 커널 버전을 커널 postinst 스크립트에서 알 수 있는 방법이 있습니까 ?

답변1

이는 귀하의 질문에 대한 실제 답변이 아니며 관련성이 있고 도움이 될 수 있는 도구에 대한 지침일 뿐입니다.


당신은dkms설치됐나요? (여기 몇 가지 정보가 있습니다, 이것아리오스 페이지순간 당황한 표정. ) 내가 오해하지 않았다면 그렇게 해야 합니다. 그것필요linux-headers설치할 적절한 패키지 및 모듈/펌웨어/유사 패키지설치된 모든 linux-image패키지.(유니버셜 모듈에 대해서는 뭐라고 말씀드릴 수 없지만, non-free nvidia 모듈과 함께 사용했을 때는 잘 작동했습니다.)

(더 많은 링크는 다음과 같습니다., 좋다맨페이지그리고linuxjournal.com이 기사프로그램에 대한 데비안 생태계 중심이 아닌 해석을 제공합니다. )

답변2

그것이 답일 수도 있지만 dkms, 해당 문제나 다른 복잡한 솔루션에 참여하고 싶지 않은 경우 더 간단한 솔루션을 제공할 수 있는 방법을 제공하고 있습니다.

재부팅하고 새 커널 실행을 시작할 때까지는 실제로 필요하지 않으므로 제 시간에(다음 부팅 시) 스크립트를 실행하면 어떨까요?

다음과 같은 독립형을 사용할 수 있습니다.이것다음 부팅 시에만 실행되도록 명령과 스크립트를 대기열에 넣는 데 사용됩니다.저것에서 /etc/kernel/postinst.d.

답변3

DKMS를 지원하는 배포판(가장 널리 사용되는 배포판과 마찬가지로)을 실행하는 경우 실제로 dkms가 답입니다. DKMS를 사용하지 않는 배포판을 실행 중이거나 자체 Linux를 설치한 경우 계속 읽어보세요.

문제는 postinst.d재부팅하기 전에 후크가 호출되어 uname여전히 이전 커널 버전을 반환한다는 것입니다.

해결책은 약간의 해킹이지만 전체 질문이 업그레이드 후 사전 구축된 모듈을 해킹하는 것과 관련되어 있다는 점을 고려하면 괜찮을 것이라고 확신합니다 :)

다음과 같이 파일을 열거하고 /boot/(커널이 다른 곳에 설치된 매우 난해한 설정을 실행하지 않는 한) mdate별로 내용을 정렬하고 가장 최근에 설치된 커널에서 커널 버전을 추출하면 됩니다.

KVERSION=$(ls -at /boot | sed -n 's/^vmlinuz-//;t p;b;:p;p;q')
# KVERSION will hold some value like 4.19.0-10-arm64

(이는 커널이 다음과 같이 압축되어 설치되었다고 가정합니다 /boot/vmlinuz-${KVERSION}.)

답변4

새로 설치/재설치된 커널 버전은 모든 postinst.d 스크립트에 전달되거나 최소한 Fedora 및 Redhat 및 그 파생 제품에 전달됩니다. Bash의 일반 스크립트에 전달된 첫 번째 인수를 읽으면 다음 값을 읽습니다.

kernel_ver = ${1}
...

전달된 값은 런타임에 얻은 값과 동일합니다.uname -r

방금 테스트했는데 전달된 값은 6.6.9-200.fc39.x86_64드라이버를 컴파일하는 데 사용한 값입니다.

관련 정보