제2장 모듈 매개 변수
5978 단어 운영 체제
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
독서 노트문제1: 한 파일에 10000000개의 기록이 포함되어 있으며, 각 기록의 내용은 7자리의 정수이다.기록은 중복되지 않는다.파일 내용을 읽는 프로그램이 필요하고, 이 기록을 정렬한 후 파일을 출력해야 하며, 메모리는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.