通过上面两篇文章我们除了创建的自定义IP模块还移植了Linux操作系统,明天这篇文章的内容是将这两部份联系上去linux设备驱动程序 电子书,虽然我们创建的myLedIP相对于Linux操作系统可以是它的一个底层设备,由于PS总线为myLedIP分配了主存地址,这样我们就可以创建myLedIP模块的硬件驱动,之后搭建应用程序,实现软硬件协同设计。
其实开始之前还须要你们了解一下Linux驱动的基础知识,以及Makefile的用法。
步骤一:设置工作目录,创建Makefile
我们先构建drivers的工作目录,并在此目录下编撰好Makefile文件(如上图)。Makefile文件定义了编译规则,只须要使用make命令就可以实现整个工程的手动化编译。
步骤二:编撰myLed模块驱动源文件
我们的要求是当这个模块加载后会在linux的/proc/目录创建一个可操作的文件myled,通过向这个文件写入数据可以控制zybo板卡上led灯的亮灭状态(按照myLedIP功能逻辑相关)。
编撰好的驱动程序myled.c链接:
步骤三:编译驱动程序北京linux培训,生成驱动模块
直接使用make命令即可linux设备驱动程序 电子书,而且注意make命令之前确保早已配置了交叉编译环境。生成的myLed.ko文件就是我们须要的驱动模块。
步骤四:更改设备树文件
从上图我们可以看见myLed模块的轮询空间为0x43c30000—0xx434343cc33FFFFFFFF,因而我们要在设备数源码文件中加入这个设备节点。
源码更改完成后我们要重新编译生成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灯的亮灭硬盘安装linux,达到闪动的疗效。
步骤七:编译应用程序
编译方法我们同样采用Makefile形式,编译规则如上图所示,更改makefile。
通过make命令生成了可执行应用程序led_blink。
步骤八:功能测试
我们须要将上一步中生成的led_blink拷贝到SD卡,之后zybo重新上电以SD卡模式启动
启动完毕后我们自动挂载SD卡到/mnt/目录下,之后通过insmodmyled.ko命令安装驱动模块,最后执行我们的应用程序(./led_blink),我们会听到zybo板卡上的四个led灯的闪动状态。
至此zybo全栈开发入门教程也告一段落,Zynq开发方法不同于传统的FPGA或则ARM开发,它将二者友好的进行了结合,实现了软硬件协同设计。其实在实际的项目中工程量比较大也是须要进行任务分工的,本系纳入门教程只是让你们对zynq全面的开发模式具有了一个了解,其实更深入的内容还须要诸位亲自动手来感受。