FreeBSD 커널 구성 파일과 실제 장치 간의 관계 이해

FreeBSD 커널 구성 파일과 실제 장치 간의 관계 이해

내가 아는 한, FreeBSD의 커널은 텍스트 파일을 통해 구성됩니다. 각 커널 구성 항목은 한 줄에 있습니다. 많은 항목에는 해시 표시로 구분된 주석도 있습니다. 일반적인 구성. 파일은 /usr/src/sys/<'arch'>/conf/GENERIC에서 찾을 수 있습니다. 이를 복사하여 사용자 정의 커널로 변경할 수 있습니다.

예:

    device      ehci            # EHCI PCI->USB interface (USB 2.0)

하지만 이것이 실제 장치와 어떤 관련이 있습니까? USB 플래시 드라이브를 삽입한다고 가정하면 USB 장치가 핸드셰이크나 일종의 인식을 수행합니까? 또한 드라이버가 코어 드라이버가 아니고 로드 가능한 커널 모듈인 경우 커널이 요청한 드라이버를 찾습니까?

부수적인 질문으로. KERNCONF='' 명령은 make(1)에게 커널 이름만 알려줍니다.

답변1

ident커널 이름은 커널 conf 파일의 행으로 정의됩니다. KERNCONF 변수는 사용할 kernelconf 파일을 정의합니다.

FreeBSD 아키텍처 매뉴얼의 "장치 검색 및 연결" 섹션에서는 USB 장치를 감지하는 방법을 설명합니다. https://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/usb-devprobe.html

답변2

텍스트 파일은 커널에 내장된 것만 정의합니다. 거기에 넣지 않은 것들은 일반적으로 로드 가능한 커널 모듈로 컴파일됩니다.

예, 부팅 중 또는 커널 모듈을 kld로드한 후 드라이버의 "프로브" 루틴이 실행됩니다. 이 루틴은 드라이버가 특정 하드웨어를 지원하는지 여부를 결정합니다. 그렇다면 "연결" 드라이버 기능이 실행되어 실제로 드라이버 인스턴스를 장치에 연결합니다. FreeBSD는 일반적으로 커널 모듈을 자동으로 로드하려고 시도하지 않으므로 드라이버가 커널에 내장되어 있지 않으면 수동으로 로드하거나(kldload), rc 스크립트를 사용하여 로드하거나(kld_list rc 변수 사용) 부트로더를 사용하여 미리 로드합니다(/boot/loader.conf를 편집하여).

관련 정보