이것은 항상 Linux가 다른 시스템의 장치 드라이버를 어떻게 처리하는지 궁금하게 만들었습니다. 이를 컴퓨터 A에 연결한 다음 완전히 다른 사양을 가진 컴퓨터 B로 이동한다고 가정해 보겠습니다. 또한 영구 설치를 하고 다른 컴퓨터로 옮기면 드라이버도 영향을 받나요? 물론 커널이 시작 시 자체적으로 조정되는지 여부는 사용자 정의 컴파일된 커널의 범위를 벗어납니다.
답변1
Linux 드라이버는 커널 모듈입니다.
이는 커널의 큰 바이너리(따라서 내장)의 일부이거나 커널 부팅 후에 로드될 수 있음을 의미합니다.
커널에 실제로 내장되어야 하는 유일한 드라이버는 루트 파일 시스템에 액세스하는 드라이버입니다. 그렇더라도 초기 RAM 디스크에 필요한 모든 것이 있으면 그러한 드라이버 없이도 사용 가능한 시스템을 가질 수 있습니다. (부트로더는 커널 바이너리와 초기 RAM 디스크를 로드하는 역할을 담당하며, 부트로더는 커널을 시작할 때 초기 RAM 디스크가 어디에 있는지 커널에 알려줍니다.)
따라서 몇 가지 일이 발생할 수 있습니다. 모든 것은 귀하에게 달려 있습니다.
필요한 모든 드라이버를 내장하여 커널을 구축할 수 있습니다. 그런 다음 적절한 파일
/dev
이나mknod
이와 유사한 파일을 생성하면 제대로 작동합니다. 이것이 UNIX와 초기 Linux가 작동한 방식입니다. 물론, 다른 시스템에서 커널 + 초기 RAM 디스크를 실행하면 일부 장치가 작동하지 않을 수 있으며, 하드 드라이브 컨트롤러가 그 중 하나라면 성공적으로 부팅할 수 없습니다.사용자 공간 프로세스가 드라이버를 로드하도록 할 수 있습니다. 커널 초기화 작업 중 하나는 가상 파일
proc
시스템이sys
ACPI 및 PCI 버스에 액세스하도록 준비하는 것입니다. 이를 추가로 검사하여 현재 하드웨어를 확인할 수 있습니다. 담당 실행 파일과 지원 파일은 초기 RAM 디스크에 위치할 수 있습니다. 그것이 바로udev
그 것입니다systemd
. 기존 Linux init 시스템에서는udev
백그라운드에서 생성된 첫 번째 서비스 중 하나이며 ACPI와 모든 버스를 통과하고/dev
동적으로 노드를 생성합니다. 최신systemd
시스템에는 의 기능이udev
포함되어 있으며 동일한 작업을 수행합니다.
두 번째 경우는 일반적으로 얼마나 많은 Linux 커널 + 사용자 영역 도구가 설치되어 있는지입니다. Linux는 부팅할 때마다 거의 재부팅되며 Windows처럼 레지스트리와 같은 시스템의 어떤 것도 참조하지 않습니다.
솔직히 말해서, 위의 내용은 제가 직접 알지 못하기 때문에 일부 세부 사항이 누락되었을 수 있지만 이것이 기본 요점입니다. 내가 읽은 바에 따르면 커널 자체는 부팅 중에 모듈을 로드할 수 있지만 그 방법과 이유는 확실하지 않습니다.
답변2
부팅할 때마다 따르는 하드웨어 및 해당 드라이버 목록을 작성하는 Windows와 같은 일부 다른 운영 체제와는 달리, 많은 Linux 배포판에는 대부분의 하드웨어 구성을 지원하는 커널 모듈이 포함되어 있습니다. 사용의 용이성.
이렇게 하면 포함된 모든 드라이버(커널 모듈)가 필요한 드라이버뿐만 아니라 하드웨어를 검색하므로 부팅 프로세스가 확실히 길어집니다. Linux 커널 설계로 인해 전체 프로세스는 일반적으로 사전 구성된 시스템을 실행하는 것보다 크게 느리지 않지만 사용자 정의 Linux 설치는 더 빠르게 부팅할 수 있습니다.