학 구동 모듈 부터
ifeq ($(KERNELRELEASE),)
#KERNELDIR ?= /home/lht/kernel2.6/linux-2.6.14
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
else
obj-m := hello.o
endif
간단 한 모듈
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE ("GPL");
int init_module (void)
{
printk (KERN_INFO "Hello world
");
return 0;
}
void cleanup_module (void)
{
printk (KERN_INFO "Goodbye world
");
2. 표준 모듈
파라미터 학습
proc 의 조작
ioctl
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
MODULE_LICENSE ("GPL");
static int __init hello_2_init (void)
{
printk (KERN_INFO "Hello world
");
return 0;
}
static void __exit hello_2_exit (void)
{
printk (KERN_INFO "Goodbye world
");
}
module_init (hello_2_init);
mo
테스트 프로그램:
#define DRIVER_AUTHOR "Foobar"
#define DRIVER_DESC "A sample driver"
MODULE_LICENSE ("GPL");
MODULE_AUTHOR (DRIVER_AUTHOR);
MODULE_DESCRIPTION (DRIVER_DESC);
MODULE_SUPPORTED_DEVICE ("TestDevice");
static short int myshort = 1;
static int myint = 420;
static long int mylong = 9999;
static char *mystring = "blah";
static int array[2]= {-1, -1};
static int arr_argc = 0;
module_param (myshort, short, 0000);
MODULE_PARM_DESC (myshort, "A short integer");
module_param (myint, int, 0000);
MODULE_PARM_DESC (myint, "An integer");
module_param (mylong, long, 0000);
MODULE_PARM_DESC (mylong, "A long integer");
module_param (mystring, charp, 0000);
MODULE_PARM_DESC (mystring, "A character string");
module_param_array (array, int, &arr_argc, 0000);
//module_param_array (array, int, arr_argc, 0000); //for kernel<2.6.10
MODULE_PARM_DESC (array, "An array of integers");
static int __init hello_2_init (void)
{
int i;
printk (KERN_INFO "myshort is a short integer: %hd
", myshort);
printk (KERN_INFO "myint is an integer: %d
", myint);
printk (KERN_INFO "mylong is a long integer: %ld
", mylong);
printk (KERN_INFO "mystring is a string: %s
", mystring);
for (i=0; i<arr_argc; i++)
printk (KERN_INFO "array[%d] = %d
",i, array[i]);
printk (KERN_INFO "Got %d arguments in array
", arr_argc);
return 0;
}
static void __exit hello_2_exit (void)
{
printk (KERN_INFO "hello driver cleaned up
");
}
module_init (hello_2_init);
module_exit (hello_2_exit);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ruby의 구조체 클래스은 접근자 메서드가 있는 속성 모음입니다. 클래스를 명시적으로 작성할 필요 없이. Struct 클래스는 구성원 및 해당 값 집합을 포함하는 새 하위 클래스를 생성합니다. 각 멤버에 대해 #attr_accessor 와...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.