2011-12-12 2 views
12

첫 번째 부팅과 후속 부팅에 대해 알고 싶습니다.리눅스 커널은 부팅 할 때 어떤 드라이버를로드해야하는지 어떻게 알 수 있습니까?

나는 내 자신의 커널을 컴파일하고 가능한 한 가늘고 싶다. .config 파일을 손으로 (주로 학습 경험으로) 만들고 싶습니다. 그래서 제외 할 수있는 모든 것을 알아야합니다. 가능한 해결책은로드 된 드라이버의 현재 배포판 목록을 보는 것입니다. 그러나, 내 배포판이 처음에로드 할 드라이버를 어떻게 발견했는지 궁금합니다.

TIA.

+3

이렇게 추측하면 http://unix.stackexchange.com에서 더 좋은 질문이 될 것입니다. – ziesemer

+0

http://doc.opensuse.org/documentation/html/openSUSE_113/opensuse-reference/cha.udev.html – firo

답변

3

그렉 크로아 (Greg Kroah)는 커널에 필요한 드라이버를 정확하게 찾는 방법에 대한 훌륭한 예를 제공합니다. 친절 그렉 그의 책은 리눅스 커널은 부팅시로드 할 드라이버를 알고 있나요 얼마나 멀리 무료 온라인

http://files.kroah.com/lkn/

견적 그렉의 책

I'm especially proud of the chapter on how to figure out how to configure 
a custom kernel based on the hardware running on your machine. This is an 
essential task for anyone wanting to wring out the best possible speed and 
control of your hardware. 
+0

답변 주신 Adrian에게 감사드립니다. 저는 실제로 지금 제 7 장을 통해 작업하고 있습니다. Greg Kroah는 현재 실행중인 커널에 의해로드되는 모듈을 발견하는 과정을 자세히 설명합니다. 이는 매우 가치있는 작업입니다. 내가 궁금한 점은 운영체제가 처음에 모듈을로드하는 방법을 알고 있다는 것입니다. – izzy

+0

ASAIK Brute force 일반적으로 - 그것을로드하려고 시도합니다. 작동하지 않으면 하드웨어가 없을 수 있습니다. –

12

에서 제공?

커널은 다음과 같은 장치에 대한 이벤트를 생성합니다. PCI 버스가 막혔을 때 (hot 또는 cold, 사용자 공간이 AFAIR을 실행할 때까지 이벤트 대기). udev는 이러한 이벤트를 수신하고 장치의 PID/VID (제품/공급 업체 ID)를 포함하는 modprobe 호출을 수행합니다. 이것은 대개 문자열에 *가 들어간 문자열입니다. 그런 다음 modprobe는 udev의로드 요청 와일드 카드로 표현 된 집합과 커널 모듈의 별칭 세트 (그 자체도 와일드 카드가 될 수 있음)의 교집합을 계산합니다.

이후 USB/Firewire/etc. 컨트롤러는 일반적으로 PCI 버스에 연결되어 HCI 드라이버가로드되는 방식입니다. 저것은 일이 아래로 재발하는 까라고이다; 그런 다음 USB/Firewire PID/VID로 로딩합니다.

그러나 네트워크 프로토콜 모듈 (예 : ipv6)은 udev를 통해 처리되지 않습니다. 대신 프로그램이 socket(AF_INET6, ...)을 호출하면 커널은 AF_INET6에 값이 10이되므로 modprobe (더 정확하게는 : /proc/sys/kernel/modprobe에 있음)와 IPv6의 경우에 와일드 카드 화되지 않은 별칭 (net-pf-10)을 직접 호출합니다. modprobe는 ipv6.ko을로드합니다. net-pf-10 별칭은 무엇입니까?

마찬가지로 파일 시스템에 대한 mount -t foo를 시도하면 ( ____call_usermodehelper를 통해 다시)으로 modprobe를 호출하는 커널 인수로 foo이 시간을 발생합니다.

기기 노드에 액세스 (예 : /dev/loop0, 이미 존재하는 경우)는 loop.ko이로드되어 있지 않으면 동일한 전략을 사용합니다. 여기서 커널은 block-major-7-0을 요청합니다 (loop0는 보통 (7,0), cf. ls -l을 사용하기 때문에) loop.koblock-major-7-* 별칭을 갖습니다.

+0

모듈과 같은 파일이 없습니까?부팅 할 때로드 할 장치를 나열하는 syms? – brokenfoot

관련 문제