微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Linux字符设备驱动模型之点亮LED灯

Linux字符设备驱动模型之点亮LED灯

时间:04-09 来源:互联网 点击:

emap宏函数来实现物理地址到虚拟地址的映射。

以上操作即为LED设备驱动的初始化函数led_init的实现,源码如下:

4.设备模块卸载

设备模块的卸载主要实现将设备号释放,销毁设备节点文件、销毁设备类,释放所申请的内存空间。

5.操作函数集的实现

如上图可知,一共实现了3个操作函数。分别对应于用户空间的open、close和ioctl系统调用的操作。其中led_open操作函数的实现主要进行硬件寄存器的初始化配置。

如上图即是配置GPC0CON寄存器,将GPC0_3和GPC0_4口配置为输出模式,并初始化GPC0DAT寄存器,保证初始状态为灯灭。

操作函数led_close的实现不实现任何操作。为空函数。

6.led_ioctl操作函数的实现

如上图所示,led_ioctl函数通过接受从用户空间传递而来的命令cmd,来决定LED设备的亮灭。以上这种方式是通过直接操作寄存器的方式来实现。实际上在Linux内核中提供了相应的读写寄存器的函数方法来实现操作,如下图:

除了这种方法之外,要操作GOIO口,更可以使用gpio_get_value和gpio_set_value这样的函数来进行配置GPIO口,对于GPIO口的配置方式,还有更多的实现。

三、Linux用户空间操作硬件设备

应用程序的实现思路是,从外表为用户程序提供命令来进行操作LED灯,main函数从外表接收两个命令:

命令的执行状态为:./app_led LED编号 状态

·编号可取值1,2,3,分别表示LED1,LED2和全部LED。

·状态可取值0和1,分别表示灯亮和灯灭。

首先实现判断外表命令的输入情况,打开设备文件/dev/led,和将命令由字符转化为整数。

然后就是点灯功能的实现了。

四、验证现象

分别编译好内涵驱动模块和应用程序,分别得到led_driver.ko文件和app_led文件,然后将他们都拷贝到开发板根文件系统。

执行命令:insmod led_driver.ko插入内核驱动模块。最后执行应用程序./app_led进行操作LED。如下图:

至此!整个点灯实现完成。




Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top