第六章 第一个Linux驱动程序:统计单词个数 心得笔记

一、Linux系统将每个驱动都映射成一个文件。这些文件称为设备文件或驱动文件,都保存在/dev目录中。这使得与Linux驱动进行交互就向与普通文件进行交互一样容易。大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据变成与驱动设备交换数据。

二、编写Linux驱动程序

1.建立Linux驱动骨架

            Linux内核在使用驱动时需要装载与卸载驱动

          装载驱动:建立设备文件、分配内存地址空间等;module_init 函数处理驱动初始化

          卸载驱动:删除设备文件、释放内存地址空间等;module_exit函数处理退出

          包含这两个函数的两个宏的C程序文件也可看做是Linux驱动的骨架

2.注册和注销设备文件

任何一个Linux驱动都需要有一个设备文件,否则应用程序将无法与驱动程序交互。

          建立设备文件:在第一步编写的处理Linux初始化工作的函数中完成。misc_register函数

          删除设备文件:在第一步编写的处理Linux退出工作的函数中完成。misc_deregister函数

3.指定与驱动相关的信息

          驱动程序是自描述的,驱动程序的作者姓名、使用的开源协议、别名、驱动描述等信息。这些信息都需要在驱动源代码中指定。

          MODULE_AUTHOR、MODULE_LICENSE、MODULE_ALLS、MODULE_DESCRIPION等宏可以指定与驱动相关的信息

4.指定回调函数

          一个驱动程序并不一定要指定所有的回调函数,回调函数会通过相关机制进行注册

5.编写业务逻辑

          具体的业务逻辑与驱动的功能有关,业务逻辑可能由多个函数、多个文件甚至是多个Linux驱动模块组成

6.编写Makefile文件

          Linux内核源代码的编译规则是通过Makefile文件定义的。因此编写一个新的Linux驱动程序必须有一个Makefile文件

7.编译Linux驱动程序

          可以直接编译进内核,也可以作为模块单独编译

8.安装和卸载Linux驱动

          若将Linux驱动编译进内核,只要Linux使用该内核,驱动程序就会自动转载

          若Linux驱动程序以模块单独存在,需使用insmod或modprode命令装载Linux驱动模块,rmmod命令卸载Linux驱动模块

三、统计单词个数

利用设备文件作为介质与应用程序进行交互,应用程序通过向设备文件传递一个由空格分隔的字符串,然后从设备文件读出来的是该字符串包含的单词数。

准备工作:

1.建立存放Linux驱动程序的目录:

“mkdir -p /root/drivers/ch06/word_count”

“cd /root/drivers/ch06/word_count”

2.建立驱动源代码文件:“echo ‘ ’ > word_count.c”

3.编写Makefile文件:“echo ‘obj-m := word_count.o’ > Makefile”

obj-m表示将Linux驱动作为模块(.ko文件)编译,obj-y表示将Linux驱动编译进Linux内核。两者都需使用“:=”赋值。使用obj-y,.o文件会被连接进built-in.o文件连         接进内核。built-in.o文件是连接同一类程序的.o文件生成的中间目标文件。“make menuconfig”可配置每一个驱动及其他内核程序是否允许编译进内核。当驱动依赖其他程         序时,依赖文件要使用module-y或module-objs指定(module表示模块名)。

     编写骨架

骨架部分主要是Linux驱动的初始化和退出函数。

printk函数用于输出日志信息。printf 函数运行在用户空间,printk函数运行在内核空间,属于内核程序的Linux驱动不能直接访问printf函数。使用dmesg命令查看由         Linux驱动输出的日志信息。

 指定与驱动相关信息

modinfo命令查看信息,depends表示当前驱动模块的依赖,vermagic表示当前Linux驱动模块在哪个Linux内核版本下编译。

模块作者:MODULE_AUTHOR

模块描述:MODULE_DESCRIPTION

模块别名:MODULE_ALIAS

开源协议:MODULE_LICENSE(GPL协议、LGPL协议、BSD协议、Apache Licence 2.0协议、MIT协议)

      注册和注销设备文件

设备文件需要一个结构体(miscdevice)来描述与其相关的信息,其成员变量fops用于描述设备文件在各种可触发事件的函数指针,其数据类型也是一个结构体                   file_operations。使用misc_register函数只能设置次设备号。主设备号为10的设备是Linux系统中拥有共同特性的简单字符设备,称为misc设备。

“cat /proc/devices”命令可显示当前系统中有哪些主设备以及主设备号。

指定回调函数并实现统计单词数的算法

用户空间的应用程序与内核空间的驱动程序交互最长用的方式是读写设备文件,通过file_operations.read和file_operations.write成员变量可以分别指定读写设备文件         要调用的回调函数指针。

编译、安装、卸载Linux驱动程序

insmod和modprobe的区别是modprobe命令可以检查驱动模块的依赖性。使用modprobe命令装载驱动模块之前需先使用depmod命令检测Linux驱动模块的依赖关           系。depmod命令必须使用Linux驱动模块(.ko文件)的绝对路径,其会将内核模块的依赖信息写入当前正在使用的内核的modules.dep文件。Modprobe命令只需使用驱           动名称,不需要跟.ko。

四 、在eclipse中开发Linux驱动程序

第一步:建立C工程

第二步:建立C源代码文件链接     New>Source Folder   Folder name 输入 src,导入word_count.c文件

第三步:设置include路径   单击菜单项properties,C/C++General > Paths and Symbols ,选中Include的GNU C项,Add添加两个路                                            径:/root/kernel/goldfish/include和/root/kernel/goldfish/arch/arm/include

第四步:编译Linux驱动

五、测试Linux驱动

第一步:导入test_word_count.c文件

第二步:设置include路径

第三步:建立Target      Make Target > Create ,在Target name 文本框中输入word_count_eclipse_test,点击OK

第四步:Build工程    Make Target > Build,选中第三步中建立的文件,然后点击Build

第五步:运行测试程序   Run As > Local C/C++  Application

时间: 2024-12-22 06:05:00

第六章 第一个Linux驱动程序:统计单词个数 心得笔记的相关文章

第6章: 第一个Linux驱动程序统计单词个数

6章: 第一个Linux驱动程序统计单词个数 编写Linux驱动的程序的步骤: 第1步:建立 Linux 驱动骨架(装载和卸载 Linux 驱动) 第2步:注册和注销设备文件 第3步:指定与驱动相关的信息 第4步:指定回调函数 第5步:编写业务逻辑 第6步:编写 Makefile 文件 第7步:编译 Linux 驱动程序 第8步:安装和卸载 Linux 驱动 Linux驱动测试的方法多种多样: 1.使用Ubuntu Linux测试Linux驱动 2.在Android模拟器上通过原(Native)

第一个Linux驱动程序统计单词个数

Linux驱动的工作和访问方式是Linux的亮点之一,Linux系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,这种设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易,当然也比访问LinuxAPI更容易. 编写Linux驱动的程序的步骤: 第1步:建立 Linux 驱动骨架(装载和卸载 Linux 驱动) 第2步:注册和注销设备文件 第3步:指定与驱动相关的信息 第4步:指定回调函数 第5步:编写业务逻辑 第6步:编写 Makefile

Android深度探索(卷1)HAL与驱动开发 第六章 第一个Linux驱动程序:统计单词个数

Android深度探索(卷1)HAL与驱动开发 第六章 第一个Linux驱动程序:统计单词个数 统计单词个数的功能是封装在Linux驱动中的. Linux驱动的工作和访问方式是Linux亮点之一,同时受到了业界大防范好评.Linux系统将每一个驱动都映射成一个文件.这些文件称为设备文件或者驱动文件,都保存在 /dev 目录中.这种设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易.当然,也比访问Linux API 更容易.由于大多数Linux驱动都有与其对应的设备文件,因此与Li

第六章第一个Linux驱动程序:统计单词个数

第六章介绍如何在多种平台,使用多种方法测试Linux驱动. 本章主讲统计单词个数的算法的实现技术:Linux驱动.统计单词个数的功能是封装在Linux驱动中的.驱动不一定是直接和硬件打交道的,还可以喝普通的library一样提供其他程序的调用来实现特定功能的. 第一节Linux驱动到底是个什么东西 Linux驱动和普通的Linux API没有本质上的区别,只是使用Linux驱动的方式和使用Linux API的方法不同. Linux系统将每一个驱动都映射成一个文件,这些文件称为设备文件或驱动文件,

第六章 第一个Linux驱动程序:统计单词个数

在本章将进入了最令人激动的时刻,为了是读者在刚开始学习Linux驱动开发时充满期待,没有只提供Helloworld程序. 首先介绍Linux驱动到底是个什么东西,它和我们以前接触过的windows类型差不多,但是操作和工作方式有很大的区别,Linux系统将每一个驱动都映射成一个文件.这些文件成为设备文件或这驱动文件,都保存在/dev目录中. 接下来给出编写Linux驱动程序的步骤:第一步:建立Linux驱动骨架,Linux驱动程序中需要提供两个函数来分别处理驱动初始化和退出的工作.这两个函数分别

Android深度探索(卷1)HAL与驱动开发 第六章 第一个Linux驱动程序:统计单词个数 读书笔记

本章是一个具体的例子,来详细的介绍开发和测试Linux驱动程序的完整过程.尤其是测试Linux驱动.在这个统计单词个数的实例中,重点是该算法的实现技术:即Linux驱动,而不是如何统计的. 6.1Linux驱到底是什么 Linux驱动的工作方式和访问方式是Linux的特点之一.Linux系统将每一个驱动都映射成一个文件,这些文件被称为驱动文件或设备文件,保存在dev目录中.由于大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据就变成了与设备文件交换数据.事实上,编写Linu

第六章 第一个Linux驱动程序: 统计单词个数

本章作为实战第一章,首先要做的就是了解linux驱动到底是个什么东西,首先了解linux驱动的工作方式,linux系统将每一个驱动都映射成一个文件,保存在/dev中,再使用c语言函数ioctl向驱动的设备文件发送打印命令. 一.编写Linux驱动程序 1.建立Linux驱动骨架 Linux内核在使用驱动时需要装载与卸载驱动 装载驱动:建立设备文件.分配内存地址空间等:module_init 函数处理驱动初始化 卸载驱动:删除设备文件.释放内存地址空间等:module_exit函数处理退出 包含这

六、第一个Linux驱动程序:统计单词个数 ——学习笔记

第6章 第一个Linux驱动程序:统计单词个数 ——学习笔记 一.首先了解一下: 打印机驱动写入数据:对于打印机驱动来说,需要接收这些被写入的数据,并将它们通过PC的并口.USB等端口发送给打印机.要实现这一过程就需要Linux驱动可以响应应用程序传递过来的数据.这就是Linux驱动的事件,虽然在C语言里没有事件的概念,但却有与事件类似的概念,这就是回调(callback)函数.因此,编写Linux驱动最重要的一步就是编写回调函数,否则与设备文件交互的数据将无法得到处理.图6-1是应用软件.设备

第六章、第一个linux驱动程序:统计单词个数 读书笔记

第六章.第一个linux驱动程序:统计单词个数 一.编写Linux驱动程序的步骤 1.建立Linux驱动骨架(装载和卸载Linux驱动) Module_init处理驱动初始化,module_exit处理驱动退出 2.注册和注销设备文件 Misc_register函数创建和misc_deregister移除设备文件 3.指定与驱动相关的信息 modinfo 4.指定回调函数 5.编写业务逻辑 6.编写makefile文件 7.编译Linux驱动程序 8.安装和卸载Linux驱动 二.Linux驱动