어떤 장치 드라이버가 커널에 내장되어 있습니까?


14

최근 하드웨어 공급 업체에 임베디드 리눅스를 공급 한 벤더를 설치했습니다. lsmod장치 명령 줄에서 실행했을 때 응답이 비어있었습니다. 이것은 장치에서 실행되는 하드웨어의 드라이버가 .ko 파일이 아닌 커널에 내장되어 있다는 것을 의미한다고 믿었습니다. 내 질문은 이것입니다 :이 과정은 어떻게됩니까?

널리 사용되는 하드웨어에 대한 지원이 이후 버전의 커널에 점차 통합되어 .ko 파일을 대체합니까? .ko 파일은 출시 당시 커널 통합 드라이버를 지원하지 않는 새 하드웨어를 지원하기 위해 단순히 사용됩니까? 제한된 지식으로 모든 하드웨어 드라이버가 .ko 파일 형식이라고 생각했지만 분명히 잘못되었습니다.

나는 전체 과정에 약간 혼란스러워하고 상황을 잘못보고 있다고 생각하기 때문에 설명에 감사드립니다.


답변:


10

커널 로딩에 중요한 코어 드라이버는 일반적으로 커널에 내장되어 있으며 다른 하드웨어 드라이버 등은 모듈 또는 .ko 파일 로 구축되어 있습니다.

.ko 모듈은 일반적으로 아래에 저장됩니다 /lib루트 파티션에 디렉토리. 이들 중 하나를 사용하려면 커널은 먼저 기본 저장 장치를 감지하고 액세스 한 다음 파일 시스템에 액세스 할 수 있어야합니다. 따라서 SATA / SCSI 및 ext2 / 3 / 4를 지원하지 않는 커널은 내장 부팅을 지원하지 않는다고 가정하는 것이 안전합니다.)

대부분의 내장 커널 드라이버를 모듈 형태로 전환하도록 선택할 수 있습니다. Ubuntu 커널 팀은 Linux 커널 팀의 기본 구성을 수정하고 다운로드 한 스톡 커널 이미지에 대한 추가 내장 드라이버를 포함 / 제외할지 여부를 결정합니다.

자신의 커널을 빌드하면 다음과 같이 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

  • 위의 스크린 샷에서는 *내장 드라이버를 M나타내고 모듈은 모듈 을 나타냅니다.
  • 시스템 부팅에 필수적인 루프백 장치 지원은 기본적으로 내장되어 있습니다.
  • 저속 USB 드라이버 (USB 1.0)도 기본적으로 내장되어있어 USB 스틱을 부팅 할 수 있지만 여기에서는 모듈로 변경했습니다.

고마워요. 나는 결국 커널 빌드를 처음부터 할 때 이것에 대해 더 잘 이해할 것이라고 생각한다.
수학자

3

컴파일 할 때 커널을 , 당신은 얻을 구성 요소가 설치되어있다. 뿐만 아니라 커널에 내장되어 있는지 또는 모듈 인지 여부를 선택할 수 있습니다 .

예를 들어 많은 사람들이 / boot 파티션 에서 ext2 파일 시스템을 사용합니다 . 이 때문에 커널은 부팅시 ext2 파일 시스템을 읽을 수 있어야합니다. 이를 위해 ext2 모듈은 커널 자체에 내장되어 있습니다.

이제 사용 가능한 모듈의 수량을 상상해보십시오. 커널에 모두 내장되어있는 것이 이치에 맞지 않습니까? 그렇기 때문에 이러한 모듈 을 별도의 .ko 모듈 로 빌드하고 마음대로 로드 할 수 있습니다.


1
예, 마지막 단락은 제 질문에 정직한 동기가되었습니다. 답변 주셔서 감사합니다
수학자

1

이것은 리눅스 커널 빌드를 어떻게 구성했는지에 달려 있습니다.

컴파일 과정에서 일반적으로 다음을 수행 할 수 있습니다.

  • 모듈 지원 유무에 관계없이 커널을 컴파일하십시오 (종종 모듈 지원과 함께 제공됩니다)
  • 드라이버를 모듈로 또는 내장 소프트웨어 조각으로 커널에 바로 컴파일

.ko 파일가 무엇인지 이해하는 /programming/10476990/difference-between-o-and-ko-file

출력이 비어있는 이유 lsmod는 단일 커널이 있기 때문입니다.

모든 모듈을 나열하는 빠른 방법은 (있는 경우)이 명령을 실행하는 것입니다.

find /lib/modules/*/ -type f -iname '*.ko' | less

의 사용에 주목 less하면 원하는 모든 호출기를 사용하거나 원하는 위치로 출력을 리디렉션 할 수 있습니다.


따라서 모듈 지원없이 구성된 커널에서 (내 것처럼 보임) 추가 하드웨어를 사용하기 위해 .ko 파일 형식으로 드라이버를 설치할 수 없습니까?
수학자

예, 기본적으로 소스에서 다시 컴파일해야합니다. 드라이버를 편집 및 / 또는 추가 해야하는 경우 다시 빌드 .config해야합니다. 동일한 파일을 사용하고 필요에 따라 수정하십시오.
user827992

따라서이 작업을 수행하려면 공급 업체에서 커널 소스를 가져 와서 .config 파일을 수정하여 직접 컴파일 한 다음 다른 드라이버를 설치하는 것이 좋을까요?
수학자

그가 원래 소스 코드를 넘지 않고 바닐라 커널을 사용했다면 .config만으로도 괜찮고 PC로 동일한 커널을 재생할 수 있지만 바닐라 커널 + 패치 또는 수정을 사용하면 이 추가 정보가 필요한 경우 표준 Makechain 및 일반적으로 표준 빌드 프로세스에 대한 다른 수정 사항으로 사용자 정의 Makefile을 관련 변수로 간주 할 수 있습니다.
user827992

속도와 크기 때문에 임베디드 Linux에서 모듈을 사용할 수 없으며, 그러한 장치의 커널에는 종종 트리 외부 드라이버가 포함되어 있으며 소스 제어의 이점없이 임의의 직원 PC에 구축되어 있습니다. 좋은 성과 있길 바래요.
Stephen M. Webb

0

/ lib / modules / $ (uname -r) /modules.builtin 의 내용을 참조하십시오

예를 들어 특정 모듈을 검색

grep <module> /lib/modules/$(uname -r)/modules.builtin

Documentation / kbuild / kbuild.txt

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.

??? OP가 무엇을해야하는지 잘 모르겠습니다. 그는 터미널에서 첫 번째 라인을 실행해야합니까? 이것은 대답이 될 수 있지만 조금 더 자세히 설명해 주시겠습니까?
anonymous2

0
ls /sys/module

모든 내장 및 외부 모듈이 포함 된 것 같습니다.

그러나 실제로 모듈이 아닌 일부 항목이 포함 된 것으로 보입니다 : /unix/225706/are-modules-listed-under-sys-module-all-the-loaded-modules

TODO : 소스를 읽고 거기에 무엇이 들어가는 지 더 정확하게 이해하십시오.

이 방법의 장점은 /boot또는 에서 커널 구성을 찾을 수 없다는 것 /proc/config.gz입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.