저는 네트워크 부팅 프로젝트를 위한 완전히 사용자 정의된 initramfs를 구축하고 그 과정에서 많은 것을 배우고 있지만 모듈 로딩에 대해 약간 혼란스럽습니다.
모듈을 로드하는 데 사용할 수 있다는 것은 알고 있지만 modprobe
로드할 모듈을 어떻게 결정합니까?
내가 지금 가지고 있는 것은 가상 상자에서 쉘이 실행되고 있는 initramfs입니다. 하지만 lsmod
모듈이 로드되지 않은 것으로 표시됩니다. 내가 해야 할 일은 init
네트워크를 설정할 수 있도록 올바른 네트워크 모듈을 로드하는 것입니다.
modprobe e1000
실제로 올바른 모듈을 로드 하면 .
Ubuntu 부팅 프로세스를 볼 때 Ubuntu가 로드 방법을 결정하는 것을 볼 수 없습니다 e1000
. 나는 그것이 단지 사용 가능한 모든 네트워크 카드에 대한 드라이버일 것이라고 생각했지만 modprobe
, 그렇게 하지 않는 것 같습니다.
UDEV가 이것과 관련이 있는 것 같아요?
답변1
modprobe를 사용하여 모듈을 로드할 수 있다는 것을 알고 있지만 로드할 모듈을 어떻게 결정합니까?
커널이 커널에 상주하지 않는 기능을 요구할 때, 커널 모듈 데몬kmod
1execs는 modprobe
모듈을 로드합니다. modprobe
두 가지 형식 중 하나로 문자열을 전달합니다.
- Softdog 또는 ppp와 같은 모듈 이름입니다.
- char-major-10-30과 같은 보다 일반적인 식별자
따라서 링크에서 붙여넣는 대신 시스템에서 찾은 내용을 설명하겠습니다.
cat /proc/modules
- 이 명령은 로드된 모듈을 나열하며 그 목록은 상당히 큽니다.
이제 시스템 시작 중에 이미 언급했듯이 kmod
데몬 프로세스가 실행되어 modprobe
모듈을 로드합니다. 이미 설명한 두 가지 방법으로 로드할 모듈을 지정할 수 있습니다. 범용 식별자를 지정하면 /etc/modprobe.conf
별칭에서 해당 항목을 찾습니다. 그래서 내 안에는 /etc/modprobe.conf
아래와 같은 별칭이 있습니다.
alias eth0 tg3
그래서 다음 명령을 실행하여 내 시스템에 tg3이 무엇인지 확인했습니다.
-bash-3.2$ cat /proc/modules | grep tg3
tg3 139225 0 - Live 0xf8bd1000
다음으로, 요청된 모듈을 로드하기 전에 다른 모듈을 로드해야 하는지 modprobe
파일을 살펴보세요 . /lib/modules/version/modules.dep
이 파일은 depmod -a
모듈 종속성에 의해 생성되고 포함됩니다.
마지막으로 요청된 모듈을 로드하기 전에 먼저 모든 필수 구성 요소 모듈을 커널에 로드하는 modprobe
데 사용됩니다 . 모듈의 표준 디렉터리인 [ 3 ] 을 가리킵니다 . 모듈의 위치에 대해 매우 어리석은 것을 목표로 하되, 모듈의 기본 위치를 알기 위해서는 종속성을 파악하고 올바른 순서로 모듈을 로드하는 방법을 알아야 합니다.insmod
modprobe
insmod
/lib/modules/version/
insmod
modprobe
하지만 새 하드웨어는 어떻게 감지됩니까?
이러한 링은 운영 체제가 아닌 CPU에 의해 생성됩니다. 모든 운영 체제 커널은 가장 높은 권한 수준인 링 0에서 실행되며 하드웨어 및 CPU와 직접 통신할 수 있습니다. 링 1과 2는 일반적으로 장치 드라이버에서 사용됩니다. 링 3은 사용자 공간 애플리케이션(미디어 플레이어, 웹 서버 및 사용자가 직접 통신할 수 있는 기타 모든 것)을 위한 것입니다. 장치 드라이버는 사용자 공간 응용 프로그램과 하드웨어 사이의 "브리지"입니다.
Linux 커널은 모든 컴퓨터 버스에서 변경 사항과 새 하드웨어를 지속적으로 검색합니다. 버스에서 변화가 감지되는 순간 마법이 시작됩니다.
마법
- 하드웨어 정보를 사용자 공간(SYSFS)으로 내보내기
- *하드웨어를 사용할 수 있음을 사용자 공간 도구에 알립니다(UEVENT 및 UDEVD)
- 예, 귀하의 가정이 정확합니다. udev는 마법에 관한 것입니다 :)*
- 이벤트를 처리하고 /ETC/UDEV/RULES.D/의 규칙과 일치시키고 /DEV 디렉터리(UDEVD 및 UDEV)를 채웁니다.
- 장치 드라이버 로드(UDEV, MODPROBLE)
- 사용자 공간 애플리케이션에 알림(D-BUS를 통해)
udevd는 커널과 모든 udev 시스템 사이에 위치하며 몇 가지 중요한 기능을 수행하는 데몬 프로세스입니다(나중에 언급하겠습니다). udev 데몬(udevd)은 부팅 시 시작되며 /etc/udev/rules.d/에 있는 모든 규칙을 읽고 구문 분석하고 udev에서 나중에 사용할 수 있도록 이러한 규칙을 메모리(udev 데이터베이스)에 저장합니다. 나중에 udevd는 커널 드라이버 코어의 uevent에 대해 netlink에서 수신 대기를 시작합니다.