×
FPGA/DSP > 可编程逻辑 > 详情

手把手教你创建Linux设备驱动和应用程序

发布时间:2020-05-15 发布时间:
|

通过前面两篇文章我们不仅创建的自定义IP模块还移植了Linux操作系统,今天这篇文章的内容是将这两部分联系起来,其实我们创建的myLed IP相对于Linux操作系统可以是它的一个底层设备,因为PS总线为myLed IP分配了寻址地址,这样我们就可以创建myLed IP模块的硬件驱动,然后搭建应用程序,实现软硬件协同设计。

当然开始之前还需要大家了解一下Linux驱动的基础知识,以及Makefile的用法。

步骤一:设置工作目录,创建Makefile


 

我们先建立drivers的工作目录,并在此目录下编写好Makefile文件(如上图)。Makefile文件定义了编译规则,只需要使用make命令就可以实现整个工程的自动化编译。

步骤二:编写myLed模块驱动源文件

我们的要求是当这个模块加载后会在linux的/proc/目录创建一个可操作的文件myled,通过向这个文件写入数据可以控制zybo板卡上led灯的亮灭状态(根据myLed IP功能逻辑相关)。

编写好的驱动程序myled.c链接:

步骤三:编译驱动程序,生成驱动模块

 

直接使用make命令即可,但是注意make命令之前确保已经配置了交叉编译环境。生成的myLed.ko文件就是我们需要的驱动模块。

步骤四:修改设备树文件

 

从上图我们可以看到myLed模块的寻址空间为0x43c30000—0x43c3FFFF,因此我们要在设备数源码文件中加入这个设备节点。
 

 

源码修改完成后我们要重新编译生成devicetree.dtb文件

步骤五:测试驱动模块

我们将驱动模块myLed.ko文件和修改后的devicetree.dtb文件拷贝到SD卡,重新让zybo以SD卡模式启动。

 

通过insmod和rmmod命令我们可以加载和卸载驱动模块,加载myled.ko模块后我们可以看到在/proc/目录下可以看到myled文件,并且支持数据的读写操作,说明驱动程序一切正常。

步骤六:创建应用程序led_blink.c

 

在目录内创建user_app文件夹,然后创建led_blink.c程序。这个应用程序通过向/proc/myled文件分别写入0x0F和0x00数据实现四个Led灯的亮灭,达到闪烁的效果。

步骤七:编译应用程序

 

编译方式我们同样采用Makefile方式,编译规则如上图所示,修改makefile。

通过make命令生成了可执行应用程序led_blink。

步骤八:功能测试

我们需要将上一步中生成的led_blink拷贝到SD卡,然后zybo重新上电以SD卡模式启动
 

 

启动完毕后我们手动挂载SD卡到/mnt/目录下,然后通过insmod myled.ko命令安装驱动模块,最后执行我们的应用程序(./led_blink),我们会看到zybo板卡上的四个led灯的闪烁状态。

至此zybo全栈开发入门教程也告一段落,Zynq开发方式不同于传统的FPGA或者ARM开发,它将两者友好的进行了结合,实现了软硬件协同设计。当然在实际的项目中工程量比较大也是需要进行任务分工的,本系列入门教程只是让大家对zynq全面的开发模式具有了一个了解,当然更深入的内容还需要各位亲自动手来体会。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
可编程逻辑器件实现数字化水费计量芯片的设计