作者:Commanderfranz,编译: kenshin

通过前面两篇文章我们不仅创建的自定义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功能逻辑相关)。

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

直接使用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全面的开发模式具有了一个了解,当然更深入的内容还需要各位亲自动手来体会。

zybo的linux开发教程,Zybo全栈开发入门教程——连载三:创建Linux设备驱动和应用程序...相关推荐

  1. (Node+Vue+微信公众号开发)企业级产品全栈开发速成周末班

    (Node+Vue+微信公众号开发)企业级产品全栈开发速成周末班 从零到壹全栈部落 产品:个人独立博客,21点见 Vue + Node + MongoDB支持服务端渲染的博客系统(5天) 开发环境技术 ...

  2. python全栈开发下载_python全栈开发神器 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn...

    将安卓手机打造成你的python全栈开发利器 超神利器- 相信多数安卓用户都使用过Qpython这款移动端的Python编辑器吧?之前我也研究过一阵子这个工具,但因为一次简单的爬虫让我对它失望之极.Q ...

  3. python全栈开发优势_Python全栈开发多少钱?学Python价格贵吗?

    Python全栈开发培训多少钱?学习Python是大家进入编程世界的理想之选,而且Python也是一门非常受欢迎的编程,可以从事的领域有很多. 从目前市场上的行情来说,一般情况下Python培训的费用 ...

  4. 全栈开发和web开发_成为全栈开发人员

    全栈开发和web开发 This popular article has been updated in June 2017 to include modern technologies. 该热门文章已 ...

  5. linux 批处理教程,最全的批处理入门教程,菜鸟必看

    1.这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字就能看懂,就能学到知识.写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看 ...

  6. python全栈开发网络_Python全栈开发:django网络框架(二)

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  7. python全栈开发总结_python全栈开发 * 12 知识点汇总 * 180530

    ⼀. 通⽤装饰器的回顾 1.开闭原则: 对增加功能开放. 对修改代码封闭 2.装饰器的作⽤: 在不改变原有代码的基础上给⼀个函数增加功能 3.通⽤装饰器的写法: def wrapper(fn): de ...

  8. python全栈开发网络_Python 全栈开发:网络编程

    一 socket 1.什么是socket 看一看图中socket的位置 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把 ...

  9. 小米手机 开发app python_python 全栈开发,Day59(小米商城)

    小米商城 | MIUI | loT | 云服务 | 小爱开放平台 | 金融 | 有品 | 政企服务 | Select Region 购物车(1) 登录 | 注册 | 消息通知

  10. python全栈开发中级_python全栈开发中级班全程笔记(第二模块)第一部分:文件处理...

    第二模块 第一部分:文件处理与函数 #插曲之人丑就要多读书:读书能够提高个人素质与内涵,提升个人修养与能力,以及层次的提升. 推荐书籍:追风筝的人.白鹿原 电影:阿甘正传.辛德勒的名单 第一节:三元运 ...

最新文章

  1. mysql 执行cmd,mysql命令行中执行sql的几种方式总结
  2. HDU 2079 选课时间
  3. 翻译:Google大表(BigTable)
  4. boost::function_types::is_member_pointer用法的测试程序
  5. 租赁笔记本电脑哪里有_广东哪里有离心鼓风机优势-长沙鼓风机厂
  6. (转) android UI进阶之用gallery实现可滑动的Tab
  7. unity, 内置shader下载地址
  8. ROS入门-5.认识ROS及ROS的基本概念
  9. Mysql数据备份与mysqldump增量备份
  10. 龙星计划机器学习笔记
  11. 下载anaconda后配置环境变量
  12. python在线编辑菜鸟-python菜鸟工具
  13. windows2008R2新增磁盘处于脱机状态及介质写入受保护解决办法
  14. 笔记本电脑热点手机无法连接解决方案
  15. throw Exception
  16. 解决html图片空隙留白问题
  17. 顺芯ES8374单声道codec音频解码芯片,集成功放IC
  18. 中科创达与高通成立合资公司
  19. 厦门理工学院oj 1107-牲口棚的安全
  20. 计算时区函数gmt2local(time_t t)

热门文章

  1. modbus调试时间超时_Java调试器和超时
  2. Spring-Boot 2.1.x和主要的bean定义
  3. Corda服务的异步流调用
  4. 谁最终需要Java模块?
  5. spring 事件模型_Spring–设计领域模型和服务层
  6. Java 9对可选的补充
  7. 内存映射获取行数_使用内存映射文件获取巨大的矩阵
  8. 如何使用Apache Drill分析高度动态的数据集
  9. Spring项目中的Netflix Archaius属性
  10. Storm Trident拓扑中的错误处理