저는 기본적으로 Ubuntu 20.04인 Layerscape를 실행하는 NXP Layerscape LS1012A 개발 보드(FRWY)를 가지고 있습니다. Murata의 Type 1XL PCIe WiFi 모듈(NXP WiFi 칩 88W9098 사용)을 개발 보드의 PCIe 슬롯에 연결하고 드라이버를 생성하는 데 필요한 모든 바이너리를 얻었습니다.
"make build" 명령을 사용하는 데 문제가 있습니다. 제가 읽은 바로는 빌드할 커널을 올바르게 설정하지 않았기 때문입니다(저는 커널 5.10.35를 사용하고 있습니다). 이 드라이버 빌드가 실행될 수 있도록 커널 디렉토리를 올바르게 설정/빌드/준비하는 방법을 아는 사람이 있습니까?
답변1
일반적으로 커널 모듈(드라이버)을 빌드하기 위한 첫 번째 요구 사항은 드라이버를 빌드하려는 정확한 커널 버전에 대한 빌드 헤더를 갖는 것입니다. 배포판에 따라 kernel-headers-<kernel version number>
(Fedora/RHEL 스타일) 또는 linux-headers-<kernel version number
(Debian/Ubuntu 스타일)로 패키지될 수 있습니다. 일부 배포판에서는 별도의 헤더 패키지를 생략하고 전체 커널 소스 패키지를 설치하여 커널 모듈을 빌드할 수 있습니다(SuSE가 이 작업을 수행하거나 적어도 익숙하다고 생각합니다).
따라서 Ubuntu와 같은 배포판의 경우 아직 수행하지 않았다면 apt-get install linux-headers-$(uname -r)
해야 합니다. 또한 apt-get install build-essential
컴파일러와 필요한 모든 기본 도구가 있는지 확인 해야 합니다 .
여기서 한 가지 문제는 최근에 시스템을 업데이트했지만 아직 재부팅하지 않은 경우입니다. 패키지 관리자는 종종 여러 커널 버전이 공존하도록 허용하지만 명시적으로 지시하지 않는 한 일반적으로 최신 버전의 빌드 헤더만 유지합니다. 따라서 패키지 관리자는 업데이트된 커널을 설치하고 다음 재부팅 시 활성화되기를 기다리고 일치하도록 빌드 헤더도 업데이트했을 수 있습니다.저것커널...이것은 모듈용 모듈을 만드는 것을 방지합니다.현재의핵심.
/lib/modules/$(uname -r)/build
일반적으로 압축된 커널을 사용하고 커널 버전에 대한 헤더가 포함된 적절한 패키지를 설치한 경우 헤더가 있는 디렉터리를 가리키는 심볼릭 링크가 있어야 합니다 . 일반적으로 타사 모듈/드라이버 빌드 프로세스는 이를 사용하여 현재 커널에 대한 빌드 헤더를 자동으로 찾을 수 있습니다.
자신만의 사용자 정의 커널을 구축하는 경우 이러한 심볼릭 링크를 직접 생성할 수 있습니다. 커널 구축에 사용된 Linux 소스 트리의 루트를 가리키기만 하면 됩니다. 예를 들어:
ln -s /usr/local/src/linux-5.10.35 /lib/modules/5.10.35/build