-------------------------------hello.c-----------------------------------------
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("hgj Xie");
MODULE_DESCRIPTION("Hello World Module");
MODULE_ALIAS("a simplest module");
extern int add_integar(int a,int b);
extern int sub_integar(int a,int b);
stastatic char *name = "David Xie";
static int age = 30;
module_param(age, int, S_IRUGO);
module_param(name, charp, S_IRUGO);
static int __init hello_init()
{
int res = add_integar(1,2);
return 0;
}
static void __exit hello_exit()
{
int res = sub_integar(2,1);
}
module_init(hello_init);
module_exit(hello_exit);
-------------------------------calculate.c-----------------------------------------
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
int add_integar(int a,int b)
{
return a+b;
}
int sub_integar(int a,int b)
{
return a-b;
}
static int __init sym_init()
{
return 0;
}
static void __exit sym_exit()
{
}
module_init(sym_init);
module_exit(sym_exit);
/* EXPORT_SYMBOL(add_integar); */
/* EXPORT_SYMBOL(sub_integar); */
----------------------------------------makefile ----------------------------------------------------------------------------------------------------------------------------
ifneq ($(KERNELRELEASE),)obj-m := hello.o calculate.o
hello-objs : =file1.o hello.o
else
KDIR := /ext/myandroid_sabrelite/android-imx6-r13.3/kernel_imx
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=/ext/myandroid_sabrelite/android-imx6-r13.3/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
//这里这个脚本必须命名为makefile
//这个脚本是编译2个ko文件。hello模块有2个源文件
----------------------------------------------------------------------------------
S_IRUGO 任何用户都对/sys/module中出现的参与有读权限
S_IWUSR 允许root 修改在/sys/module中的该参数
1|root@android:/sys/module # cd hello/parameters/
root@android:/sys/module/hello/parameters # ll
-r--r--r-- root root 4096 1970-01-02 01:44 age
-r--r--r-- root root 4096 1970-01-02 01:44 name
root@android:/sys/module/hello/parameters #
root@android:/sdcard/mine # insmod calculate.ko
calculate.c:sym_init
root@android:/sdcard/mine # lsmod
calculate 755 0 - Live 0xbf006000
hid_multitouch 7772 0 - Live 0xbf000000
root@android:/sdcard/mine # insmod hello.ko
calculate.c:add_integar
Hello init
root@android:/sdcard/mine # rm hello.ko
root@android:/sdcard/mine # rmmod hello
Hello exit!
root@android:/sdcard/mine # rmmod calculate
calculate.c:sym_exit
root@android:/sdcard/mine #
root@android:/sdcard/mine # insmod hello.ko age=50
使用
-------------------------------
modprobe 会自动先安装依赖的模块,根据/lib/modules/$version/modules.dep来查阅依赖关系。这个文件是编译内核时自动生成的。