Linux 운영 체제에서 커널은 컴퓨터 하드웨어와 소프트웨어 간의 상호 작용을 제어하는 핵심 부분입니다. 커널 모듈은 커널에서 중요한 개념으로, 런타임 시 커널에 동적으로 로드되어 커널 기능을 확장할 수 있습니다. 이 기사에서는 Linux 커널 모듈이 작동하고 구성되는 방식에 대해 자세히 알아보고 직접 작성하는 방법을 설명합니다.
Linux 커널 모듈식 설계
1. Linux 커널 설계: 단일 커널, 모듈식(동적 로딩 및 언로딩)
(1) Linux: 단일 커널 설계이지만 마이크로커널 시스템 설계의 장점을 완전히 활용하여 커널에 모듈식 메커니즘을 도입합니다.
(2) 커널 구성 요소:
커널: 일반적으로 bzImage 형식의 커널 코어로, 일반적으로 vmlinuz-VERSION-release라는 이름의 /boot 디렉토리에 있습니다.
이 파일은 시스템 시작 후에는 더 이상 사용되지 않습니다. 쉽게 관리할 수 있도록 메모리에 로드되고 /boot 아래에 배치되기 때문입니다
커널 객체: 커널 모듈, 일반적으로 /lib/modules/VERSION-release/
에 위치
커널 모듈과 커널 코어 버전은 엄격하게 일치해야 합니다.
[ ]: 아니요, 이 부분은 컴파일하지 마세요
[M]: 모듈 방식으로 컴파일된 모듈은 임시 로드가 가능하고 디스크 공간을 차지하며 커널 공간을 차지하지 않습니다
[*]: 커널 코어에 컴파일된 Y는 직접 호출할 수 있습니다
ramdisk: 루트 파일 시스템의 단순화된 버전입니다. 사용 가능한 드라이버는 다음과 같습니다.
SCSI 장치 드라이버와 같은 대상 장치 드라이버
LVM 장치 드라이버와 같은 논리 장치 드라이버
xfs 파일 시스템과 같은 파일 시스템
1.ldd: 바이너리 애플리케이션이 의존하는 라이브러리 파일 인쇄 - 공유 라이브러리 종속성 인쇄
형식: ldd [옵션]… 파일…
디스플레이:
1) 종속 라이브러리 파일 이름 => 종속 라이브러리 파일 경로(메모리 로딩 심볼릭 링크 매핑 지점에 해당)
2) 전체 시스템콜 라이브러리 입장
으아악
형식: uname [OPTION]…
uname -a: 모든 커널 정보 표시
uname -v: 커널의 컴파일된 버전 번호
uname -r: 커널 릴리스 번호
uname -n: 호스트 이름
표시된 커널은 /proc/modules
에서 제공됩니다. 모듈 이름, 크기, 인용 횟수 및 인용 내용
형식: modinfo [-F 필드] [-k 커널] [모듈 이름|파일 이름…] -k kernel: 여러 커널이 공존하는 경우 다른 커널의 모듈 정보를 쿼리합니다
-F 필드: 지정된 필드에 대한 정보만 표시합니다. -n: 파일 경로 표시
/lib/modules/#######/* 파일
의 원본 데이터를 읽어 관련 정보를 표시합니다.
표시 내용: 파일 이름, 프로토콜, 설명, 작성자, 별칭, RHEL에 적용 가능한 버전 번호, 종속 모듈, 서명 단위, 서명, 암호화 알고리즘
5.modprobe: 모듈 로드 및 언로드를 실현하고 종속 모듈도 마운트합니다
형식: modprobe [-r] 모듈_이름 모듈의 동적 로딩: modprobe module_name
동적 제거: modprobe -r module_name
참고: 기본적으로 로드된 모듈을 제거하지 마세요
6.depmod:-modules.dep 및 맵 파일 생성
커널 모듈 종속 파일 및 시스템 정보 매핑 파일을 생성하기 위한 도구
7.insmod, rmmod: 모듈 로드 및 언로드, 모듈 종속성을 자동으로 해결할 수 없습니다
insmod [파일 이름] [모듈 옵션…] 파일 이름: 모듈 파일의 파일 경로 rmmod [모듈_이름]
램디스크 파일 관리
1.mkinitrd(CentOS 5): 현재 사용되는 커널용 램디스크 파일을 리메이크합니다
# mkinitrd [옵션…] [] –with=: 기본 모듈 외에도 initramfs에 로드해야 하는 모듈입니다. –preload=: initramfs가 제공하는 모듈에는 사전 로드된 모듈이 필요합니다. 예: ~]# mkinitrd /boot/initramfs-(uname -r)
2.dracut(CentOS 6/7, 5와 호환): – initramfs 이미지 생성을 위한 하위 수준 도구
# dracut [옵션…] [ []]
예: ~]# dracut /boot/initramfs-(uname -r) 커널 정보 출력 의사 파일 시스템 1./proc: 커널 상태 및 통계 정보에 대한 출력 인터페이스는 /proc/sys (1) 매개변수: (3) 중요한 커널 매개변수
net.ipv4.ip_forward: 코어 전달
sys 파일 시스템: 커널이 인식한 각 하드웨어 장치의 관련 속성 정보를 출력하며, 하드웨어 특성에 대한 커널의 설정 가능한 매개변수도 포함합니다.
이러한 매개변수를 수정하면 하드웨어 장치의 작동 특성을 맞춤 설정할 수 있습니다.
읽기 전용: 정보 출력(예: /proc/#/, 프로세스 관련 정보
)
쓰기 가능: 사용자는 커널의 특정 기능이나 기능을 구성하기 위해 "새 값"을 지정할 수 있습니다.
형식: /proc/sys: net/ipv4/ip_forward는 net.ipv4.ip_forward
(2) 매개변수 수정 방법
1) sysctl 명령
/proc/sys 디렉토리의 매개변수 값을 보거나 설정하는 데 특별히 사용됩니다. [옵션] [변수[=값]]
보기: #sysctl -a #sysctl 변수
해당 값을 수정합니다: # sysctl -w 변수=value
2) 파일 시스템 명령(cat, echo)
확인: # cat /proc/sys/PATH/TO/SOME_KERNEL_FILE
설정: # echo "VALUE" > /proc/sys/PATH/TO/SOME_KERNEL_FILE
3) 구성 파일: /etc/sysctl.conf, /etc/sysctl.d/
.conf
즉시 적용되는 방법: sysctl -p [/PATH/TO/CONFIG_FILE]
vm.drop_caches:
kernel.hostname: 호스트 이름
net.ipv4.icmp_echo_ignore_all: 모든 ping 작업을 무시합니다.
udev: /sys 디렉토리에서 하드웨어 장치 정보를 읽어 필요에 따라 각 하드웨어 장치에 대한 장치 파일을 생성합니다.
udev는 사용자 공간 프로그램입니다: devadmin, hotplug;
udev가 장치에 대한 장치 파일을 생성하면 사전 정의된 규칙 파일을 읽습니다
일반적으로 /etc/udev/rules.d/ 디렉토리와 /usr/lib/udev/rules.d/ 디렉토리에 있습니다.
요약하자면, 커널 모듈은 Linux 커널의 매우 중요한 부분으로, 커널에 풍부한 확장 기능을 제공하고 사용자가 특정 하드웨어 또는 애플리케이션 시나리오에 더 잘 적응할 수 있도록 도와줍니다. 커널 모듈을 사용할 때에는 커널의 안정성과 보안성을 훼손하지 않도록 주의해야 하며, 꼭 필요한 경우에만 커널 모듈을 사용하고 작성하는 것을 권장합니다. 나는 이 글의 내용이 독자들이 리눅스 커널 모듈을 더 잘 이해하고 적용하는 데 도움이 될 것이라고 믿습니다.
위 내용은 Linux 커널 모듈의 신비를 탐험해보세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!