• 深度探索笔记-第六章


    书中提到:Linux驱动和普通的LinuxAPI没有本质的区别,linux将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,这样与驱动交换数据就像和设备文件交换数据一样。而我们使用的windows不同,Windows中我发现很难找到安装后的驱动的文件目录。

    要将数据在硬件设备上实现输出就需要Linui 驱动可以响应应用程序传递过来的数据,这里需要使用回调函数,编写 Linux 驱动最重要的一步就是编写回调函数。

    基本的Linux驱动开发的一般步骤如下:

    1:建立Linux驱动骨架,linux系统对驱动的基本操作是初始化加载和释放退出,之前的章节就出现过,这两个函数分别用 modu te_init 和 moduie_exit 宏指定。因此包含这两 个函数及指定这两个函数的两个宏的 C程序文件也可看作是 Linux 驱动的骨架。

    2: 注册和注销设备文件,分别使用misc_register和misc_deregi ster 函数创建和移除设备文件。

    3:指定与驱动相关的信息。

    4:指定回调函数,例如read,write都是,与设备文件相关的通过misc_register注册。

    5:编写业务逻辑,也就是通过编写代码来实现功能。

    6:编写 Makefile 文件。

    7:编译 Linux 驱动程序;

    8:安装和卸载 Linux 驱动,使用ins mod或modprobe命令装载,使用rmmod命令卸载。

    统计单词数的例子是利用设备文件作为介质与应用程序进行交互,并没有访问硬件。

    要注意驱动文件的创建方式:echo ‘’ > word _count.c。

    在创建makefile文件时,obj-m 表示将 Linux 驱动作为模块(.ko 文件〉编译,obj-y则将 Linux 驱动编译进 Linux 内核。如果驱动依赖其他文件,其中依赖文件要使用 module-y 或 module-objs 指定,module 表示模块名。

    编写骨架文件时出现了printk函数,它和printf类似,printf 函数运行在用户空间,printk 函数运行在内核空间。

    之前多次提到过android也是基于linux内核的因此大多数linux驱动程序可以在其他 Linux 发行版上测试完再重新用交叉编译器编译成基于 ARM架构的目标文件,然后再安装到 Android 上即可正常运行。

    要注意相关信息中的开源协议。

    本书中为每个例子编写了一个Build.h脚本文件来编译和安装源代码,执行这个脚本文件就会要求用户选择将源代码编译到那个平台。使用echo ' hello lining’> /dev/wordcount写入数据和cat /dev/wo  rdcount来读取数据,对驱动进行测试。

    使用 modprobe 命令也可以安装Linux 驱动,insmod和modprobe 的区别是 modprobe 命令可以检查驱动模块的依赖性,使用前需要先使用  depmod 命令检测 Linux驱动模块的依赖关系。

    例子中在linux下测试驱动,为了使测试效果更接近其实环境, 一般需要编写专门用于测试的程序。此外可以利用 Android 模拟器测试 Linux 内核。Android 模拟器的 goldfish 内核默认不允许动态装载 Linux 驱动模块,因此需要在编译Linux 内核之前执行如下命令配置 Linux 内核。:

    cd  -/kernel/goldfish

    make  menucoNfig

             在eclipes中编写测试驱动程序的化更加直观和方便,实际练习时可以多使用eclipes。

  • 相关阅读:
    uva 408 Uniform Generator
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
  • 原文地址:https://www.cnblogs.com/bbly02/p/5653695.html
Copyright © 2020-2023  润新知