Skip to main content

리눅스 / 유닉스 명령에 관한 모든 것 : insmod

[스무디] 리눅스 저장장치 mount (4 월 2025)

[스무디] 리눅스 저장장치 mount (4 월 2025)
Anonim

Linux / Unix 명령 인사 실행중인 커널에로드 가능한 모듈을 설치합니다.인사 커널의 내 보낸 심볼 테이블에서 모든 심볼을 해석하여 모듈을 실행중인 커널에 연결하려고 시도합니다.

모듈 파일 이름이 디렉토리 나 확장자없이 주어지면,인사 일반적인 기본 디렉토리에서 모듈을 검색합니다. 환경 변수MODPATH 이 기본값을 무시하는 데 사용할 수 있습니다. 모듈 구성 파일 (예 :/etc/modules.conf 존재하면, 다음에 정의 된 경로를 오버라이드합니다.MODPATH.

환경 변수MODULECONF 기본값에서 다른 구성 파일을 선택하는 데 사용할 수도 있습니다/etc/modules.conf (또는/etc/conf.modules (더 이상 사용되지 않음)). 이 환경 변수는 위의 모든 정의를 무시합니다.

환경 변수UNAME_MACHINE 이 설정되면 modutils는 uname () 시스템 콜의 machine 필드 대신 해당 값을 사용합니다. 이것은 32 비트 사용자 공간에서 64 비트 모듈을 컴파일하거나 그 반대로 컴파일 할 때 주로 사용됩니다.UNAME_MACHINE 모듈의 유형. 현재 modutils는 모듈의 전체 교차 빌드 모드를 지원하지 않지만 호스트 아키텍처의 32 비트와 64 비트 버전 중에서 선택하는 것으로 제한됩니다.

옵션

-이자형 persist_name , - 연설자= persist_name

이 모듈의 인스턴스화가 언로드 될 때로드 할 때 모듈의 영구 데이터를 읽고 쓰는 위치를 지정합니다. 이 옵션은 모듈에 지속적 데이터가없는 경우 자동으로 무시됩니다. 영구 데이터는 다음에 의해서만 읽혀집니다.인사 이 옵션이있는 경우 기본적으로인사 영구 데이터를 처리하지 않습니다.

속기 양식으로,-e "" (빈 문자열)은에 의해 해석됩니다인사 가치로서persistdir 에 정의 된대로modules.conf그 뒤에 발견 된 모듈 검색 경로를 기준으로 한 모듈의 파일 이름 뒤에 ".gz", ".o"또는 ".mod"가 없습니다. 만약modules.conf "persistdir ="(즉,persistdir 빈 필드이면)이 속기 양식은 자동으로 무시됩니다. (만나다modules.conf (5).)

-에프, --힘

실행중인 커널의 버전과 모듈이 컴파일 된 커널의 버전이 일치하지 않더라도 모듈을로드하십시오. 이는 커널 버전 검사를 무시하며 기호 이름 검사에는 영향을 미치지 않습니다. 모듈의 심볼 이름이 커널과 일치하지 않으면 강제로 실행할 방법이 없습니다.인사 모듈을로드합니다.

-h, --도움

옵션 요약을 표시하고 즉시 종료하십시오.

-케이, - 자동 정리

모듈에 자동 청소 플래그를 설정하십시오. 이 플래그는에서 사용됩니다.kerneld(8)을 사용하여 일정 기간 (일반적으로 1 분) 동안 사용되지 않은 모듈을 제거합니다.

-엘, --자물쇠

용도대군(2) 동일한 모듈의 동시로드를 방지합니다.

-엠, --지도

stdout에로드 맵을 출력하여 커널 패닉이 발생할 경우 모듈을 디버그하는 것이 더 쉽습니다.

-엔, --무부하

더미를 실행하고 모듈을 커널에로드하는 것을 제외한 모든 작업을 수행하십시오. 에 의해 요청 된 경우-엠 또는-영형, 실행은지도 또는 blob 파일을 생성합니다. 모듈이로드되지 않았으므로 실제 커널로드 주소는 알 수 없으므로 맵 및 BLOB 파일은 0x12340000의 임의로드 주소를 기반으로합니다.

-영형 module_name , --이름= module_name

소스 개체 파일의 기본 이름에서 이름을 파생시키는 대신 모듈의 이름을 명시 적으로 지정합니다.

-영형 blob_name , --얼룩= blob_name

이진 개체를에 저장하십시오. blob_name . 결과는 섹션 조작 및 재배치 후에 커널에로드되는 것을 정확하게 보여주는 바이너리 BLOB (ELF 헤더 없음)입니다. 선택권-엠 개체의지도를 가져 오는 것이 좋습니다.

-피, --조사

모듈을 조사하여 모듈을 성공적으로로드 할 수 있는지 확인하십시오. 여기에는 모듈 경로에서 개체 파일 찾기, 버전 번호 확인 및 기호 확인이 포함됩니다. 재배치를 검사하거나지도 또는 blob 파일을 생성하지 않습니다.

-피 접두사 , --접두사= 접두사

이 옵션은 심볼 이름에 여분의 접두어가 추가 된 SMP 또는 bigmem 커널의 버전이있는 모듈에서 사용할 수 있습니다. 커널이 심볼 버전으로 빌드 된 경우인사 "get_module_symbol"또는 "inter_module_get"의 정의에서 접두어를 자동으로 추출합니다.이 중 하나는 모듈을 지원하는 모든 커널에 있어야합니다. 커널에 기호 버전이 없지만 기호 버전으로 모듈이 작성된 경우 사용자가 제공해야합니다-피.

-큐, --조용한

해결되지 않은 기호 목록을 인쇄하지 마십시오. 버전 불일치에 대해 불평하지 마십시오. 문제는의 종료 상태에만 반영됩니다.인사.

-아르 자형, --뿌리

일부 사용자는 비 루트 사용자 ID로 모듈을 컴파일 한 다음 루트로 모듈을 설치합니다. 이 프로세스는 modules 디렉토리가 root에 의해 소유되어 있더라도 비 루트 사용자 ID가 소유 한 모듈을 남겨 둘 수 있습니다. 비 루트 사용자 ID가 유출 된 경우, 침입자는 해당 사용자 ID가 소유 한 기존 모듈을 겹쳐 쓰고이 노출을 사용하여 루트 액세스까지 부트 스트랩 할 수 있습니다.

기본적으로 modutils는 루트가 소유하지 않은 모듈 사용 시도를 거부합니다. 지정 중 -아르 자형 이 검사를 토글하고 루트가 루트가 소유하지 않은 모듈을로드 할 수있게합니다.

노트 : 루트 검사의 기본값은 modutils가 구성 될 때 변경 될 수 있습니다.루트 검사를 사용하지 않으려면 -r을 사용하고 구성 시간에는 "루트 확인 안 함"을 기본값으로 설정하는 것이 주요 보안 노출이므로 권장되지 않습니다.

-에스, - 시스 로그

모든 것을 출력syslog(3) 대신에.

-에스, --kallsyms

로드 된 모듈에 강제로드kallsyms 비록 커널이 그것을 지원하지 않더라도. 이 옵션은 커널이로드되지 않은 소형 시스템을위한 것입니다.kallsyms 데이터가 필요하지만 선택한 모듈에는kallsyms 디버깅 용. 이 옵션은 Red Hat Linux에서 기본값입니다.

-V, --말 수가 많은

장황하게하십시오.

-V, --번역

버전 표시인사.

-엑스, --수출; -엑스, --noexport

모듈의 모든 외부 심볼을 ​​내보내거나 가져 오지 않습니다. 기본값은 기호를 내보내는 것입니다. 이 옵션은 모듈이 자체 제어 기호 표를 명시 적으로 내보내지 않으므로 더 이상 사용되지 않는 경우에만 유효합니다.

-와이, --ksymoops; -와이, --noksymoops

추가하고 추가하지 않음ksymoops ksyms에 기호. 이 기호는ksymoops 이 모듈에 죄송합니다. 더 나은 디버깅을 제공합니다. 기본값은ksymoops정의 할 기호. 이 옵션은-엑스/-엑스 옵션.

ksymoops 심볼은로드 된 모듈 당 약 260 바이트를 추가합니다. 커널 공간이 부족하고 ksym을 최소 크기로 줄이려하지 않는 한, 기본값을 사용하여 정확한 Oops 디버깅을 얻으십시오.ksymoops 영구 모듈 데이터를 저장하려면 기호가 필요합니다.

-엔, - 숫자 전용

모듈 버전의 숫자 부분을 커널 버전과 비교하여 확인하십시오 (예 : 모듈이 커널에 속하는지 여부를 결정할 때 EXTRAVERSION을 무시하십시오). 이 플래그는 커널 2.5 이상에서 자동으로 설정되며 이전 커널에서는 선택 사항입니다.

모듈 매개 변수

일부 모듈은 작업을 사용자 정의하기 위해로드 시간 매개 변수를 허용합니다. 이러한 매개 변수는 종종 컴퓨터마다 다르며 하드웨어에서 확인할 수없는 I / O 포트 및 IRQ 번호입니다.

2.0 계열 커널 용으로 빌드 된 모듈에서 정수 또는 문자 포인터 기호는 매개 변수로 처리되어 수정 될 수 있습니다. 2.1 계열 커널에서 시작하여 기호는 명시 적으로 매개 변수로 표시되어 특정 값만 변경 될 수 있습니다. 또한로드시 제공된 값을 확인하기위한 유형 정보가 제공됩니다.

정수의 경우 모든 값은 10 진수, 8 진수 또는 16 진수 일 수 있습니다. C : 17, 021 또는 0x11. 배열 요소는 쉼표로 구분 된 지정된 시퀀스입니다. 값을 생략하면 요소를 건너 뛸 수 있습니다.

2.0 계열 모듈에서 숫자로 시작하지 않는 값은 문자열로 간주됩니다. 2.1에서 시작하여 매개 변수의 유형 정보는 값을 문자열로 해석할지 여부를 나타냅니다. 값이 큰 따옴표로 시작하는 경우 ('), 문자열은 C 에서처럼 이스케이프 시퀀스와 모두로 해석됩니다. 쉘 프롬프트에서 따옴표 자체가 쉘 해석으로부터 보호되어야 할 수도 있음에 유의하십시오.

GPL 라이센스 모듈 및 심볼

커널 2.4.10부터 모듈에는 다음을 사용하여 정의 된 라이센스 문자열이 있어야합니다.MODULE_LICENSE (). 여러 문자열은 GPL 호환으로 인식됩니다. 다른 라이센스 문자열 또는 전혀 라이센스가 없으면 모듈이 독점권으로 취급됩니다.

커널이/ proc / sys / kernel / tainted 깃발인사 GPL 라이센스없이 모듈을로드 할 때 오염 된 플래그를 '1'로 OR합니다. 커널이 오염을 지원하고 모듈이 라이센스없이로드되면 경고가 발행됩니다. 경고 메시지는 항상 모듈에 대해 발행됩니다.MODULE_LICENSE () 이는 GPL과 호환되지 않습니다. 심지어 더러운 (tainting)을 지원하지 않는 오래된 커널에서도 가능합니다. 이렇게하면 새 커널 modutils가 이전 커널에서 사용될 때 경고가 최소화됩니다.

insmod -f (강제) 모드는 오염을 지원하는 커널에서 오염 된 플래그를 '2'로 설정합니다. 항상 경고를 발행합니다.

일부 커널 개발자는 코드에서 내 보낸 심볼을 GPL 호환 라이센스가있는 모듈에서만 사용해야한다고 요구합니다. 이 기호는EXPORT_SYMBOL_GPL 정상 대신에EXPORT_SYMBOL. 커널과 다른 모듈에서 내 보낸 GPL 전용 심볼은 GPL 호환 라이센스가있는 모듈에서만 볼 수 있습니다./ proc / ksyms 접두사 'GPLONLY_'. 인사 ~을 무시하다GPLONLY_ 접두어없이 GPL 라이센싱 모듈을 로딩하는 동안 모듈은 단지 일반적인 심볼 이름을 참조 할 수 있도록 심볼에 접두사를 붙이십시오. GPL 호환 라이센스가없는 모듈에는 GPL 전용 심볼을 사용할 수 없으며 라이센스가없는 모듈도 포함됩니다.

Ksymoops 지원

모듈을 사용할 때 커널 oops의 디버깅을 돕기 위해,인사 기본적으로 ksyms에 일부 기호를 추가하는 방법은-와이 선택권. 이 기호는로 시작합니다.__insmod_ 모듈 이름 _ . 그만큼 모듈 이름 기호를 고유하게 만들기 위해 필요합니다. 동일한 객체를 다른 모듈 이름으로 두 번 이상로드하는 것은 합법적입니다. 현재 정의 된 기호는 다음과 같습니다.

__insmod_ 모듈 이름 _ 객체 파일 _ 엠 타임 _ Vversion

오브젝트 파일 객체가로드 된 파일의 이름입니다. 이렇게하면 ksymoops가 코드를 올바른 객체와 일치시킬 수 있습니다. mtime stat가 실패하면 그 파일의 마지막으로 수정 된 시간 소인 (hex)입니다. 번역 모듈이 컴파일 된 커널 버전이며 사용 가능한 버전이없는 경우 -1입니다. 그만큼_영형 symbol은 모듈 헤더와 동일한 시작 주소를가집니다.

__insmod_ 모듈 이름 _ 섹션 이름 _ 길이

이 기호는 선택된 ELF 섹션의 시작 부분에 현재 .text, .rodata, .data, .bss 및 .sbss로 나타납니다. 섹션의 크기가 0이 아닌 경우에만 나타납니다. 섹션 이름 ELF 섹션의 이름입니다. 길이 섹션의 길이를 십진수로 나타냅니다. 이 기호는 기호를 사용할 수 없을 때 ksymoops가 주소를 섹션에 매핑하는 데 도움이됩니다.

__insmod_ 모듈 이름 _Ppersistent_ 파일 이름

작성자 :인사 모듈에 영구 데이터로 표시된 하나 이상의 매개 변수와 영구 데이터를 저장하기위한 파일 이름이있는 경우 (-이자형, 위에) 사용할 수 있습니다.

모듈에서 커널 웁스를 디버깅 할 때의 다른 문제는 / proc / ksyms의 내용 로그 파일을 처리 할 때 / proc / modules가 Oops 사이에서 변경 될 수 있습니다. 이 문제를 해결하려면 / var / log / ksymoops 디렉토리가 존재하면인사rmmod 자동으로 / proc / ksyms와 / proc / modules를`date + % Y % m % d % H % M % S` 접두어로 / var / log / ksymoops에 복사합니다. 시스템 관리자는 ksymoops에게 스냅 샷 파일을 디버깅 할 때 사용할 스냅 샷 파일을 알릴 수 있습니다. 이 자동 복사본을 사용하지 않으려면 스위치가 없습니다. 이 작업을 원하지 않으면 / var / log / ksymoops를 생성하지 마십시오. 해당 디렉토리가 존재하면 루트가 소유하고 644 또는 600 모드 여야하며 매일이 스크립트를 실행해야합니다. 아래 스크립트는 insmod_ksymoops_clean으로 설치됩니다.

#! / bin / sh # 저장된 ksyms 및 2 일 동안 액세스하지 않은 모듈 삭제 -d / var / log / ksymoops 그때 세트 -e # 항상 적어도 하나의 버전이 있는지 확인하십시오. d =`날짜 + % Y % m % d % H % M % S` cp -a / proc / ksyms /var/log/ksymoops/${d}.ksyms cp -a / proc / modules /var/log/ksymoops/${d}.modules / var / log / ksymoops -type f -atime +2 -exec rm {} 을 찾으십시오. fi

알아 두어야 할 기본 정보

이름

인사 -로드 가능한 커널 모듈 설치

개요

인사 -fhkLmnpqrsSvVxXyYN -e persist_name -o module_name -O blob_name -P 접두사 기준 치수 상징= 값 …