제2장 모듈 매개 변수

5978 단어 운영 체제
일부 모듈은 불러올 때 서로 다른 매개 변수에 따라 서로 다른 기능을 만들어야 할 수도 있다.이 매개 변수의 값은 insmod나modprobe 명령으로 불러올 때 직접 지정할 수 있습니다.물론, 당신의 코드는 모듈 파라미터를 사용하기 전에 이 파라미터를 정의하고 사용할 수 있도록 해야 합니다.모듈 파라미터를 사용한 장치 구동 모듈의 원본 코드는 다음과 같다. 이 코드는 원래의 가장 기초적인 Hello World를 바탕으로 수정된 것이다.
 1 #include <linux/init.h>
2 #include <linux/module.h>
3 MODULE_LICENSE("Dual BSD/GPL");
4 static char *whom = "world";
5 static int howmany = 1;
6 module_param(howmany, int, S_IRUGO);
7 module_param(whom, charp, S_IRUGO);
8 static int hello_init(void)
9 {
10 int i;
11 for(i=0;i<=howmany;i++)
12 {
13 printk(KERN_ALERT "Hello %c
",whom);
14 }
15 return 0;
16 }
17 static void hello_exit(void)
18 {
19 printk(KERN_ALERT "Goodbye, world
");
20 }
21 module_init(hello_init);
22 module_exit(hello_exit);

위의 모듈을 컴파일한 다음 insmod(hello.ko 경로)howmany=Xwhom=X 형식으로 장치 드라이브 모듈을 불러오면 됩니다. 출력 효과는 코드에서 뚜렷하게 알 수 있습니다. 설정된 파라미터와 관련하여 howmany를'hello'whom'회 출력합니다.
   module_param 매크로는 모듈 파라미터를 성명하는 것과 같다. 첫 번째 파라미터는 성명할 파라미터이고, 두 번째 파라미터는 파라미터 유형이며, 세 번째 파라미터는 권한이다.
내가 실현할 때 겪는 문제에 대해 덧붙여 말하자면, 만약 내가 평소와 같이 순환 for (int i=0; i<=howmany; i++) 를 쓰고 싶다면, 컴파일할 때 loop initial declarations are only allowed in C99 모드의 오류가 발생할 것이다.순환 표지의 위치를 정의한 후에 문제가 해결되었다.다음 linux의 원본 코드를 보면 기본적으로 순환 로고의 정의를 꺼낸 것 같다. 보아하니 linux의 c 컴파일링은 통용되는 c 표준과 분리되어야 한다.
이렇게 하면 모듈 파라미터를 지원하는 Helloworld가 있습니다.물론 진정한 장치 구동 모듈은 이렇게 간단할 수 없다. Helloworld의 실례는 가장 근본적인 초기화 함수와 종료 함수만 포함하고 다른 일부 함수, 예를 들어 모듈의 열기, 닫기, 읽기, 쓰기, 통신 등은 나중에 천천히 언급할 것이다.
전재 대상:https://www.cnblogs.com/shadox/archive/2011/07/28/2119950.html

좋은 웹페이지 즐겨찾기