2-3-linux驱动基础篇-linux驱动模块编程helloworld1.pptxVIP

  • 4
  • 0
  • 约1.75千字
  • 约 14页
  • 2021-03-24 发布于北京
  • 举报

2-3-linux驱动基础篇-linux驱动模块编程helloworld1.pptx

广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd 内核模块简介 模块开发常用的命令 最简单的模块HelloWorld 01 内核模块简介 第 1 部分 内核模块简介 内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),简称为模块。 何为内核模块 作用: 不用编译进内核,控制内核大小; 新增或删除功能,不需重新编译内核,只需加载或卸载模块。 内核模块简介 内核模块程序结构 1. 模块加载函数 Linux内核模块加载函数一般以__init标识声明,示例代码如下: static int __init myModule_init(void) { return 0; } module_init(myModule_init); 内核模块简介 内核模块程序结构 2. 模块卸载函数 模块卸载函数一般以__exit标识声明,示例代码如下: static void __exit myModule_exit(void) { } module_exit(myModule_exit); 内核模块简介 内核模块程序结构 3. 模块声明 MODULE_LICENSE(“GPL”); 内核可以识别的许可证有GPL(任意版本GNU通用 公共许可证)、GPL v2等 MODULE_AUTHOR(“author”); 声明作者信息,可不用 MODULE_VERSION (“version”); 声明版本信息,可不用 MODULE_DESCRIPTION (“description”); 声明模块功能,可不用 注意:许可证(LICENSE)声明描述内核模块的许可权限,如果不声明LICENSE,模块被加载时,将收到内核被污染(kernel tainted)的警告. 02 模块开发常用的命令 第 2 部分 模块开发常用的命令 insmod XXX.ko 加载内核模块 rmmod XXX 卸载内核模块 lsmod 查看所有已加载的内核模块 modprobe XXX 可加载指定的个别模块,或是载入一组相依赖的模块 modinfo XXX.ko 查看模块信息 03 最简单的模块HelloWorld 第 3 部分 最简单的模块HelloWorld 编写hello.c static int __init hello_init(void) { printk(Hello World!\n); return 0; } static void __exit hello_exit(void) { printk(Goodbye World!\n ); } 最简单的模块HelloWorld 编写Makefile ifneq ($(KERNELRELEASE),) obj-m := hello.o else KDIR=内核路径 CROSS_COMPILE=编译工具路径 all: make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) clean: rm -rf *.ko *.o *.mod.o *.mod.c *.symvers modul* .hello.* .tmp_versions .*.*.cmd help: @echo make KDIR=you kernel path CROSS_COMPILE=your CROSS_COMPILE endif 最简单的模块HelloWorld 如果不会编写Makefile怎么办? 谢谢 广州创龙电子科技有限公司 官网: 论坛: 微信公众号:广州创龙

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档