Linux设备驱动(1)模块的相关概念

最简单的内核模块

#include<linux/init.h>
#include<linux/module.h>
static int __init hello_init(void) //内核初始化函数 
{  
        printk("hello world!\n"); //打印函数,和prinft类似 
        return 0;  
}  


static void __exit hello_exit(void)//内核清除函数 
{  
        printk("good bye!\n");  
}  


module_init(hello_init); //指定初始化函数 
module_exit(hello_exit); //指定清除函数 

MODULE_LICENSE("GPL"); //指定代码使用的许可证 
MODULE_AUTHOR("laowu"); //指定作者 
MODULE_VERSION("1.0"); //指定代码修订号 

内核模块的makefile

obj-m := hello.o             
KDIR:=~/linux-2.6
make -C $(KDIR) M=`pwd` modules  
  1. obj-m := hello.o说明有一个内核模块需要从hello.o构造,生成的模块名称是hello.ko.
    如果hello.ko是由两个源文件生成,例如file1.c file2.c,则应该如下编写
    obj-m := hello.ko
    hello-objs := file1.o file2.0
  2. make -C $(KDIR) M=pwd modules
    首先改变目录到-C指定的位置(即内核源代码目录),其中保存有内核的顶层makefile文件, M=选项,让该makefile在构造modules目标之前返回到模块源代码目录

内核的插入

insmod hello.ko

内核参数

module_param函数使用方法:
module_param(name, type, perm)
name:内核参数的名称,自己定义;
type:内核参数的类型,常见的类型byte、short、int、long、ulong、bool 、charp(字符指针);
perm:内核参数的权限S_IRUGO(对模块参数具有读权限)。其实权限和文件的 权限差不多
内核加载模块时传递参数的方法:
使用命令:insmod xxx.ko a=1
模块加载后,并且他的权限不为0,就可在/sys/module/xxx/parameter目录下 找到对应的模块参数。

导出符号表

使用EXPORT_SYMBOL将函数导出,供其他模块使用;在”/proc/kallsyms”文件中对应这符号表,它记录了函数的符号和函数在内存所在的地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Linux设备驱动程序》是由RiChard Stevens和Jonathan Corbet共同撰写的一本经典的Linux设备驱动开发指南。该书深入浅出地介绍了Linux驱动开发的核心概念和技术,对于想要深入学习Linux设备驱动开发的工程师和开发人员而言,是一本非常实用的参考书。 这本书的内容包括了Linux设备驱动开发的基础知识,如字符设备驱动、块设备驱动和网络设备驱动等。它详细介绍了Linux内核设备驱动的关系,以及设备驱动程序的结构和编写方法。此外,书中还包括了实例代码和案例分析,帮助读者理解和掌握各种驱动开发技术。 《Linux设备驱动程序》的特点之一是对Linux内核中各种设备驱动框架进行了深入的剖析,如字符设备框架、块设备框架和网络设备框架等。书中还介绍了设备树和ACPI等高级设备管理技术,并通过实例代码演示了如何在实际项目中应用这些开发技术。 该书自第一版问世以来,已经被广泛应用于Linux设备驱动开发的实践中。许多工程师和开发人员都将它作为学习和开发Linux设备驱动的重要参考资料。同时,该书的第四版已经发布,对一些新的设备驱动开发技术和新的内核特性进行了更新和扩充,保持了与时俱进的特点。 总之,如果你想要深入学习和掌握Linux设备驱动开发,那么《Linux设备驱动程序》是一本不可或缺的好书。它扎实的理论基础和丰富的实例代码都将对你的学习和实践有很大的帮助。无论你是新手还是经验丰富的开发人员,都能从中获得很多宝贵的经验和知识。 ### 回答2: 《Linux设备驱动程序》是一本经典的技术书籍,主要介绍了Linux系统中设备驱动程序的原理、编写方法和调试技巧。该书从理论和实践相结合的角度,深入探讨了Linux设备驱动的开发流程和相关知识点。 首先,该书详细介绍了Linux设备驱动程序的框架和模型,包括驱动的加载、初始化和卸载等。通过理解这些概念和原理,读者可以快速入门,并在开发中能够灵活运用。同时,该书还介绍了Linux设备模型和设备文件系统的相关知识,让读者了解设备驱动在系统中的位置和作用。 其次,该书深入讲解了设备驱动的编写方法和开发工具。通过实例代码的解析和实践案例的讲述,读者可以学会如何编写各种类型的设备驱动,包括字符设备驱动、块设备驱动和网络设备驱动等。此外,书中还介绍了调试设备驱动程序的常用工具和方法,帮助读者快速定位和解决问题。 此外,该书还涵盖了Linux内核模块的编写和加载、设备的自动配置、中断处理和设备与用户空间的通信等方面内容。这些内容的讲解,为读者提供了全面了解和掌握设备驱动程序开发的能力。 总的来说,该书系统全面地介绍了Linux设备驱动程序的开发内容,适合已有一定Linux基础的读者学习和参考。通过阅读和学习该书,读者可以深入理解Linux设备驱动的原理和技术细节,提升自己在设备驱动开发领域的能力。无论是作为学习教材还是作为实际开发过程中的参考手册,该书都是一本不可或缺的工具书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值