读书笔记(七)

LED灯的闪烁,控制发光二极管:

    在上章我们已经了解了开发 Linux 驱动程序的步骤,并给了个示例来演示如何开发一个完 整的 Linux 驱动。但这个 Linux 驱动只简单演示了实现 Linux 驱动的步骤。而对于大多数 Linux 动来说,需要直接与硬件交互。在本章会完成个真正意义上的 inux 驱动。该 Linux 驱动用来控 制开发版上的 LED 小灯。也就是说通过向 Linux 驱动发送数据可以控制 LED 小灯的开关。

    LED驱动的实现原理:尽管 Linux 驱动直接与硬件打交道,但并不是 Linux 驱动直接向硬件中的内存写数据 而是与 本机的 ν0 内存(νO Memory ,位于内核空间〉进行交互。所谓 1/0 内存是通过各种接口(PCI 、 USB 、蓝牙、以太网口等〉连接到主机( PC 、手机〉的硬件〈网卡、声卡、摄像头等〉在主机内 存中的映射。例如,在 Ubuntu Linux 运行的驱动只需要访问运行 Ubuntu Linux 的主机中的 νo 内存即可,然后 Linux 内核会利用 1/0 内存中的数据硬件交互。每一个连接 Linux 的硬件在 ν0 内存中都会有映射首地址。在使用 ioread32 io ead32 等函数读写 I/0 内存时需要指定这些首地址。 开发板上的 LED 也有其 映射首地址。

   编写LED驱动:驱动与上章给出的 word count 驱动的实现步骤类似。只是某些功能使用了不同的实现方法例如,LED 驱动并朱使用 misc_register 建立设备文件,而是使用了更灵活的方式创建了设备文件。 驱动还提供了两种交互方式 命令和读写设备文件。创建LED驱动的设备文件,:使用cedv_init 函数初始化cedv;指定设备号;使用cdev_add 函数将字符设备添加到内核中的字符设备数组中;使用clascreat 宏创建 struct class;使用 devce_creat 函数创建设备文件;

  卸载 LED 驱动的设备文件:卸载 Linux 驱动的设备文件稍微简单些,需要依次调用 device destroy 、 class destroy 和 unreg ister_chrdev region 方法。

  http://home.cnblogs.com/u/lkm-6398/

原文地址:https://www.cnblogs.com/lkm-6398/p/5559401.html