사용 중인 커널이 지원하는 모든 하드웨어를 보고 싶습니다. 예를 들어, 3.8.xx 버전의 Linux 커널이 있는 경우 어떤 하드웨어가 지원되는지 어떻게 알 수 있습니까? lspci
, lshw
, , lscpu
등의 도구는 dmidecode
현재 사용되는 하드웨어만 확인하고, 로드된 모듈을 이용해 찾아보려고 하는 것도 불편하다 lsmod
.
내가 원하는 것은 해당 하드웨어를 사용하는지 여부에 관계없이 내가 사용하고 있는 커널이 실제로 지원하는 모든 하드웨어를 확인하는 것입니다.
현재 나는 다음과 같은 것을 생각하고 있습니다.
- 각 파일을 읽고
/lib/modules/3.8.0-5-generic/kernel/drivers
구문 분석합니다. - 이에 대한 자세한 내용을 보려면 커널 및 grep의 git 소스 코드를 다운로드하세요.
- 다른 이상하고 긴 접근 방식.
이를 달성하는 다른 작은 방법이 있습니까?
답변1
사용 가능한 모든 모듈을 호출할 수 있습니다 modinfo
. 그러면 모듈의 별칭이 인쇄됩니다. 이 모듈의 별칭 중 하나 e1000e
는 다음과 같습니다(별칭이 많이 있음).
pci:v00008086d00001559sv*sd*bc*sc*i*
이는 공급업체 ID가 있는 PCI 장치에 대해 로드되어야 함을 의미합니다.8086및 장치 ID1559 화. USB 장치의 패턴은 비슷해 보입니다.
답변2
내가 원하는 것은 해당 하드웨어를 사용하는지 여부에 관계없이 내가 사용하고 있는 커널이 실제로 지원하는 모든 하드웨어를 확인하는 것입니다.
.config
커널을 빌드하는 데 사용된 파일이 있는 경우 소스 코드를 다운로드하여 실행하면 make menuconfig
A) 어떤 하드웨어에 대해 커널을 구성할 수 있는지에 대한 아이디어를 얻을 수 있습니다(그러나 참조노트) 및 B) 커널이 실제로 구성되어 있는 하드웨어입니다.
이렇게 하려면 다음을 수행하세요.
- 소스 코드를 다운로드하세요. 배포판에 패키지가 있을 수도 있고 다음에서 얻을 수도 있습니다.kernel.org;버전을 찾으세요
uname -r
. .config
귀하의 핵심에 적합한 것을 찾으십시오 . 배포판을 통해 소스 코드를 얻은 경우에는 /boot에서 찾을 수도 있습니다. 더 나은 점은 이제 배포 커널이/proc/config.gz
이 기능으로 구축되는 경우가 많다는 것입니다. 존재하는 경우 복사하여 압축을 풀고 파일 이름을 변경한.config
후 커널 소스 트리의 최상위 수준에 복사합니다.make menuconfig
소스 트리의 최상위 수준 내에서 실행합니다. ncurses가 필요합니다개발하다패키지가 이미 설치되어(ncurses-dev
또는ncurses-devel
) 있으므로 루트 권한이 있어야 합니다.
menuconfig를 사용할 때 파일 내용을 변경하는 것 외에는 .config
나쁜 일을 할 수 없다는 것은 중요하지 않습니다 (앞으로 이 내용과 혼동하지 마십시오).
노트: 실제로는 볼 수 없어요모두하드웨어 구성도 가능합니다. 다른 곳에서 선택한 항목에 따라 다른 옵션이 한 곳에 나타날 수 있기 때문입니다. 커널 구성은 약간의 미로입니다. 그러나 실제로 선택된 모든 항목을 확실히 볼 수 있습니다( M
즉, 모듈이고 *
내장되어 있음을 의미).
답변3
나는 당신이 찾고 있는 것이 가능하다고 생각하지 않습니다. 예를 들어 모듈식 커널을 가정하면 많은 모듈이 실제로 지원하는 하드웨어를 찾을 수 없으면 스스로 초기화할 수 없습니다. 그래서 그들은 조용히 유산하게 될 것입니다.
하드웨어 이름/버전/모델을 찾기 위해 커널 소스 코드를 자동으로 구문 분석하는 것은 어려운 작업입니다. 공통 하위 시스템(예: 직렬, scsi, usb)이 있지만 코드가 반드시 통합되는 것은 아닙니다. 당신은 곧 이것을 이해하게 될 것입니다.