커널 소스 코드 얻기(우분투)

커널 소스 코드 얻기(우분투)

Linux 드라이버를 작성해 보고 싶습니다. 환경을 구축하려고 합니다. 내 현재 커널:

$ uname -r
4.10.0-37-generic

그런 다음 소스 코드를 다운로드합니다.

$ apt-get source linux-image-$(uname -r)
Reading package lists... Done 
Picking 'linux' as source package instead of 'linux-image-4.10.0-37-generic'
...

드라이버를 컴파일하고 수정하려고 했지만 실패했습니다. dmesg 보기:

version magic '4.10.17 SMP mod_unload ' should be '4.10.0-37-generic SMP mod_unload '

이 시점에서 나는 혼란스러워진다. 다운로드한 소스 트리로 돌아가 실행하면

$ make kernelversion
4.10.17

좋습니다. 두 개를 시도해 보세요. 커널 4.10.17을 다운로드하여 설치합니다.

$ uname -r
4.10.17-041017-generic

여전히 오류:

version magic '4.10.17 SMP mod_unload ' should be '4.10.17-041017-generic SMP mod_unload

그렇다면 누군가가 도움을 줄 수 있을 것입니다. 우분투에서 작동하는 커널과 일치하는 소스를 얻는 가장 좋고 올바른 방법은 무엇입니까(글쎄, xubuntu, 하지만 그게 중요하지 않다고 생각합니다)? kernel.org에서 코드를 가져와 처음부터 다시 빌드해야 합니까? 나는 출시된 Ubuntu 커널과 일치시키고 싶습니다.

답변1

방법은 여러 가지가 있습니다...

  1. 개발 중인 모듈을 포함하여 외부 모듈을 빌드하려는 경우 커널 헤더만 필요합니다.

    apt install linux-header-$(uname -r)
    

    /lib/modules/$(uname -r)/{build,source}그러면 심볼릭 링크가 의미 있는 것을 가리키는 데 필요한 파일이 제공됩니다 . 그런 다음 다음을 실행하여 다른 디렉터리에 모듈을 빌드할 수 있습니다.

    make -C /lib/modules/$(uname -r)/build SUBDIRS="/path/to/your/module" modules
    

    이렇게 하면 실행 중인 커널에 맞게 모듈이 빌드됩니다.

  2. Ubuntu 커널을 기반으로 개발하려면 linux-source현재 Ubuntu 버전에 적합한 패키지를 사용하십시오.linux-source-4.10.0:

    apt install linux-source-4.10.0
    cd /usr/src
    tar xf linux-source-4.10.0.tar.bz2
    

    여기에는 Ubuntu 커널 패치가 포함되어 있어 현재 커널과 동일한 기능을 갖춘 커널을 구축할 수 있습니다. 그러나 패키지 설명의 경고에 유의하십시오.

    이 패키지는 주로 다른 패키지에서 사용자 정의 버전을 빌드하는 데 사용됩니다.

    이 패키지를 사용하여 사용자 정의 Linux 커널을 생성하려면 커널 이미지 패키지 생성 작업을 단순화하도록 설계된 kernel-package 패키지를 살펴보는 것이 좋습니다.

    커널용 타사 모듈을 빌드하려는 경우에는 이 패키지가 필요하지 않습니다. 적절한 linux-headers 패키지를 설치하십시오.

  3. 업스트림 커널을 기반으로 개발하려면(제가 권장하는 것입니다) 다음을 복제해야 합니다.리누스나무그리고 거기서 일하세요. 모듈을 테스트하려면 전체 업스트림 커널을 빌드하거나 위의 1번 항목에 제공된 방법을 사용하여 모듈을 빌드해야 합니다.

어쨌든, 사용리눅스소스 패키지 자체( Obtain 사용 apt-get source)는 실제로 Ubuntu에서 사용되는 모든 커널을 빌드하도록 설계되었습니다. 이 소스 패키지를 맹목적으로 사용하면 debuild빌드가 완료될 때까지 몇 시간을 기다려야 합니다... (어떤 경우에는 이적절하게도 Ubuntu 커널 문서에서는 이를 수행하는 방법을 설명하지만 이는 아마도 그중 하나가 아닐 것입니다. )

관련 정보