第八章 蜂鸣器驱动

摘要:
如果Linux驱动程序包含多个文件,则需要使用模块yC或模块objs来指定目标文件。cat/proc/kallsymsIgrepsymbol_生产者注意:在安装symbol_消费者之前,您需要安装symbol_producer,卸载两个Linux驱动程序的顺序正好相反。depmod命令用于分析Linux模块之间的依赖关系。该函数对于多个Linux模块之间的复杂依赖关系非常有用。

主要看一下:Linux驱动代码重用

  1. 编译是由多个文件组成的 Linu x 驱动

对于复杂的 Linux 驱 动,就需要使用多个源代码文件存放不同的功能代码,这样做有利于代码分类和管理。

C或C++语言中编译多个源代码文件时,如果a.c使用 b.c文件中的函数,需要在 a.c 文件中使用 extern 预先定义 b.c中的函数, extern 的作用就是告诉编译器该 函数的函数名、参数个数、参数类型和返回值类型.这些信息对于将a.c 编译成 a.o。已经足够了.等到将 a.o 和 b.o链接成可执行文件或程序库时,编译器再到 b.o中寻找函数的具体实现,也就是说, extern只在编译阶段起作用.

除此之外,Makefile中如果 Linux驱动只有 1 个源代码文件, obj-m变量的值可以和源代码文件同名。例如,源代码文件为 main.c, obj-m 的值为 main.o。如果 Linux驱动包含多个文件现, 就需要使用module-y C或 module-objs)来指定所在的目标文件。而不能只指定被引用的目标文件。

编译完Makefile之后-----à输入su builed.sh-----àdmesg。

2.Linux 驱动模块的依赖(导出符号)

(1)代码重用分为静态和动态两种。上述介绍的方式是代码的静态重用,这种方式是代码级的重用,也就是将需要重用的代码和使用这些代码的使用者放在一起进行编译,最终生成一个可执行文件或程序库(.ko、 .so 等)。

另外一种代码共享的方式:模块依赖,也称为导出符号。如果只能用一句话解释如何利用导出符号实现代码共卒,这句话就是“在一个驱动模块里使用另一个驱动模块里的被导出的符号(常量、变量、函数等)”

(2)在 Linux 驱动中可以使用如下两个宏导出函数。

EXPORT_SYMBOL (符号名)

EXPORT_SYMBOL_GPL (符号名)【EXPORT_SYMBOL_GPL 仅用于采用 GPL 协议的 Linux 驱动模块中】

(3) 输入如下的命令可以从/proc/kallsyms 文件中查看 symbol_producer 驱动导出的符号。

 cat /proc/kallsyms I grep symbol_producer

   注意:在安装symbol_consumer 之前,需要先安装 symbol_producer,卸载这两个 Linux 驱动的顺序正好相反。需要先卸载 symboI_consumer,然后才能卸载 symbol_producer。

输入下面的命令可以看到 symbol_prodoucer和 symbol_consumer之间的依赖关系:lsmod I grep symbo1.

(4) depmod 和 modprobe 命令。其中 depmod 命令用于分析 Linux 模块之间的依赖性,这一功能在多个 Linux 模块之间拥有复杂的依赖关系方面非常有用。使用 depmod 分析完 Linux 模块的依赖关系后,就可以使用 modprobe 命令装载Linux模块。 modprobe命令全根据 depmod 命令生成的 Linux 模块依赖关系来装载Linux 模块,并不需要像使用 insmod 命令那样挨个装载 Linux 模块。

免责声明:文章转载自《第八章 蜂鸣器驱动》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇spring cloud学习笔记---02各个微服务模块创建oracle中建立函数?如何查看自己都建立了哪些函数?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux静默安装matlab

对linux系统不是很熟,所有装起来有点费劲。来来回回折腾了二三天,查了很多攻略,但按照步骤老是报错,大体上各人设备不同、系统不同、环境设置不同,总是会多多少少略有差异。 一 基本配置 linux系统 matlab2016b 在shell里面进行操作,无图形界面 二 安装步骤 1 下载安装包,这个就不多说。直接将DVD1和DVD2解压缩至一个文件夹XXX,...

LXC(Linux containers)常用命令介绍

lxc-version 用于显示系统LXC的版本号(可以通过此命令判断系统是否安装了lxc) 用法:lxc-version 例如:lxc-version  lxc-checkconfig 用于判断linux内核是否支持LXC 用法:lxc-checkconfig 例如:lxc-checkconfig lxc-create用于创建一个容器 用法:lxc-cr...

linux下搭建lamp环境以及安装swoole扩展

一、CentOS 6.5/CentOS 6.9使用yum快速搭建LAMP环境 准备工作:先更新一下yum源  我安装的环境是:apache2.2.15+mysql5.5.60+php5.6.36 输入下面命令: yum -y update 1、安装Apache [root@localhost ~]# yum -y install httpd # 开机自启动...

Linux命令集合

批量改名文件 for var in `ls *.bak`;do mv -f "$var" `echo "$var"|sed 's/....$//'`;done //将去除文件名字后面的 .bak for var in `ls *.bak`;do mv -f "$var" `echo "$var"|sed 's/...$/xxx/'`;done /...

linux命令详解——ftp

ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令,相信掌握了这些使用Linux 进行ftp操作将会非常容易。 Linux ftp命令的一般格式如下: $ ftp 主机名/IP 其中“主机名/IP”是所要连接的远程机的主机名或IP地址。在命...

增加新硬盘

原来硬盘是80G,现在新增加80G步骤:1.查看当前硬盘分区情况:linux-7q8i:~/Desktop # fdisk -lDisk /dev/sda: 80.0 GB, 80026361856 bytes255 heads, 63 sectors/track, 9729 cylindersUnits = cylinders of 16065 * 51...