一.目标
在zynq的randisk操作系统上,通过编写驱动,实现对三色灯的控制。采用的是米尔科技
7z020开发板。
二.分析
1)逻辑分析
三色灯是挂载在PL上,可以通过AXI-GPIO实现ps控制。

由于是三色灯,所以只需要三个位宽即可,同时设置为输出。

通常操作一个I/O口,①需要配置I/O口时钟,②配置I/O口方向(输入还是输出),③I/O口使能,④给I/O口赋值。在vivado上已经将完成I/O的,时钟连接,设置了输出,只需要向I/O口写数据就能操作三色灯了。
查看AXI GPIO 的物理地址:

在驱动中操作I/O口需要先将物理地址映射成虚拟地址。

在物理地址上差4,在虚拟地址上差4。
2)驱动分析
用户想要直接操作硬件是不行的,操作系统不允许,只有间接的操作,通过操作系统提供的接口函数,open,write、read等。
字符驱动框架
①头文件包含
②与read,write,open对应的led_read,led_write,led_open接口函数。
③模块初始化。
三.代码实现
①vivado上约束文件将三色灯引脚确定。

②制作BOOT.bin
Vivado上产生bit文件与SDK产生的FSBL,加u-boot生成。
③驱动代码

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/device.h>
#include <asm/io.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/miscdevice.h>
#include <linux/ioport.h>
#include <linux/of.h>
#include <linux/uaccess.h>
/***三色灯驱动  ***前提:需要在vivado上配置好pl部分,使用AXI操作GPIO,约束好引脚。***在AXI——GPIO上已经配置好了 位宽为3,输出,同时也有时钟;*在驱动中只需要对io地址直接进行赋值即可。**** **///驱动框架
int major;
static volatile unsigned int *led_base;
#define LED_ADDRESS 0X41200000
static struct class *led_class   = NULL;
static struct device *led_device = NULL;
static int led_init(void);
static int led_exit(void);
static int led_open(struct inode *inode,struct file *file);
static int led_write(struct file *file,const char __user *buf, size_t count,loff_t *ppos);
static int led_read(struct file *file,char __user *buf,size_t size,loff_t *ppos);
/**file_operations 结构数据,沟通内核与操作系统桥梁*建立起 read 与led_read  write与led_write 对应关系* */
static struct file_operations led_lops=
{.owner = THIS_MODULE,
.read  = led_read,
.write = led_write,
};
/**LED 初始化,用于module init** */
static int led_init(void)
{major=register_chrdev(0,"leds",&led_lops);led_class  = class_create(THIS_MODULE,"leds");led_device = device_create(led_class,NULL,MKDEV(major,0),NULL,"leds");led_base =  ioremap(LED_ADDRESS,4);printk("LED init");return 0;
}
/**LED 退出 用于 module exit** */
static int led_exit(void)
{unregister_chrdev(major,"leds");device_destroy(led_device,MKDEV(major,0));class_destroy(led_class);iounmap(led_base);printk("LED exit");return 0;
}
/**LED open 接口函数** */
static int led_open(struct inode *inode,struct file *file)
{printk("LED open\r\n");return 0;
}
/**LED write 接口函数** */
static int led_write(struct file *file,const char __user *buf, size_t count,loff_t *ppos)
{int val;int i;i= copy_from_user(&val,buf,count);iowrite32(val,led_base);return 0;
}
/**LED read 接口函数** */
static int led_read(struct file *file,char __user *buf,size_t size,loff_t *ppos)
{printk("LED read\n");return 0;
}module_init(led_init);
module_exit(led_exit);MODULE_AUTHOR("TEST@LED");
MODULE_DESCRIPTION("LED driver");
MODULE_ALIAS("led linux driver");
MODULE_LICENSE("GPL");

测试代码

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>void delay(void){int i,j;for(i=0;i<20000;i++)for(j=0;j<10000;j++);}int main(int argc , char ** argv){int fd;int i;int val=7;fd = open("/dev/led_dev",O_RDWR);if(fd<0) {printf("can not open file\n");while(1);}else printf("open file sucuss\n");while(1){printf(" light off all led!\n");val = 7;write(fd,&val,4);delay();delay();printf("light on frist!\n");val = 6;write(fd,&val,4);delay();delay();delay();printf("light on second!\n");val = 5;write(fd,&val,4);delay();delay();delay();printf("light on third!\n");val = 3;write(fd,&val,4);delay();delay();delay();printf("light on all led!\n");val = 0;write(fd,&val,4);delay();delay();delay();}return 0;}

④产生驱动文件,可执行文件
产生驱动的makefile文件如下,内核源码放在linux-xlnx下面。

 KDIR = /home/python/Hard_disk_21G/04-Linux_Source/Kernel/linux-xlnxPWD := $(shell pwd)CC   = $(CROSS_COMPILE)gccARCH = armMAKE = makeobj-m:=led_driver.omodules:$(MAKE) -C $(KDIR) ARCH=$(ARCH) CROSS_COMPLE=$(CROSS_COMPLE) M=$(PWD) modulesclean:make -C $(KDIR) ARCH=$(ARCH) CROSS_COMPLE=$(CROSS_COMPLE) M=$(PWD) clean

产生可执行文件
采用赛灵斯的交叉编译工具编译即可得到。
⑤将驱动和可执行文件拷贝到randisk的文件中,在拷贝到SD卡上,运行即可观察到三色灯按照预定的方式点亮。

米尔科技zynq三色灯 linux 驱动相关推荐

  1. 米尔科技 Z-turn XC7Z010 Linux驱动源码路径

    米尔科技 Z-turn XC7Z010 Linux驱动源码路径 网址:http://www.myir-tech.com/bbs/thread-6999-1-1.html Z-turn XC7Z010 ...

  2. 米尔科技Zynq pl中断的linux驱动

    一.目标 在米尔科技zynq的开发平台上,通过zynq的按键开关,实现pl中断. 二.分析 原理图 挂在pl端,需要在vivado上进行引脚锁定.配置如下 当然可以通过中断函数操作三色灯,也可以不用管 ...

  3. 米尔科技zynq利用MIO操作LED灯的linux驱动

    一.目标 在米尔科技zynq的z-turn开发板上,通过编写驱动,实现对两盏灯的控制. 二.分析 ①硬件部分 这两盏绿灯位于zynq的MIO0和MIO9上. 有关操作IO口的地址,查找ug585-zy ...

  4. 米尔科技Zynq利用EMIO操作三色灯的linux驱动

    一.目标 在米尔科技的zynq的z-turn开发板上利用EMIO操作三色灯亮灭. 二.分析 三色灯是挂载在PL部分的,PS想要操作它可以通过EMIO接口实现. IP配置关键如下 产生顶层文件中有gpi ...

  5. 米尔科技ZYNQ -Linux下的DMA驱动

    一.目标 在米尔科技的z-turn板上实现linux下的DMA驱动,同时对DMA中断进行测试. 二.分析 ZYNQ的AXIDMA有Direct Register Mode和Scatter/Gather ...

  6. 极具性价比优势的工业控制以及物联网解决方案-米尔科技MYD-C8MMX开发板测评

    要进行测评的板子是来自米尔科技的MYD-C8MMX开发板.MYD-C8MMX开发板是米尔电子基于恩智浦,i.MX 8M Mini系列嵌入式应用处理器设计的开发套件,具有超强性能.工业级应用.10年生命 ...

  7. 基于xilinx Zynq UltraScale MPSoC平台的核心板及开发板介绍-米尔科技

    近日,米尔科技推出国内首款基于xilinx Zynq UltraScale+MPSoC 平台的核心板及开发板.其优势主要有:采用16纳米制程,相比Znyq7000系列每瓦性能提升5倍,且单芯片融合4核 ...

  8. 米尔科技MP153 LTDC驱动分析

    米尔科技MP153 LTDC驱动分析 与STM32MP153-DK2的区别就是米尔可以接的是RGB的屏幕.

  9. 普中科技开发板使用说明书_百度大脑加持,米尔科技FZ3深度学习计算卡评测

    如果你要问我现在电子产业什么最热,那无疑是AI,而基于大数据训练的深度学习技术可以说是目前AI应用的最广,最成功的产品形态了,覆盖我们生活的方方面面,诸如购物.看病.新闻编辑等,在这高深技术的背后少不 ...

最新文章

  1. 分配委托、匿名委托、委托
  2. 为何Spark更高效?
  3. 竖流式沉淀池集水槽设计计算_竖流式沉淀池的设计
  4. 蔡高厅老师 - 高等数学-阅读笔记 - 01 - 前言、函数【视频第01、02、03、】
  5. wx.getBLEDeviceCharacteristics 微信小程序蓝牙 微信小程序热敏打印机
  6. linux如何自动处理文件,linux文件处理
  7. Cissp全过程(简介到考试后)
  8. mysql事务最好别用_理解完这些基本上能解决面试中MySql的事务问题
  9. Django 踩过的坑(二)
  10. 使用arguments对象模拟函数重载
  11. Java中的==符号与equals()的使用(测试两个变量是否相等)
  12. oracle dbms_lob trim,DBMS_LOB包基础应用
  13. 人工智能-统计机器学习-线性回归
  14. 这十个时间千万别受孕
  15. 微信公众号 语音转文字api_原来微信不仅能实现语音转文字,还能实现文字转语音!你还不知吗...
  16. 牛逼!java只能输入数字的正则
  17. 纯java编写的联机五子棋项目(附带开源链接)
  18. 网页作业HTML+CSS+JS大作业——汽车租赁(47页) 加特效 web期末作业设计网页_汽车大学生网页设计作业成品
  19. Date: 7 Dec, Saturday 佳能交流空间
  20. IE与FireFox下扩展开发插件收集zz

热门文章

  1. Phrack安全杂志:详细分析堆栈溢出Smashing The Stack For Fun And Profit(Aleph One) 关于粉碎堆栈的秘密
  2. caffe cmake
  3. html input输入限制小于100的正整数
  4. 除了融资10亿元人民币,华云数据还做了点儿啥?
  5. 【计算机网络】对称加密、非对称加密和Hash加密的介绍和区别
  6. EduSoho框架DAO层缓存机制
  7. shell 脚本实战 一
  8. 哈希表应用——布隆过滤器
  9. 多媒体网络计算机室活载取值,多媒体网络计算机室岗位职责
  10. Vone-摄像头老伴儿 http://www.ivone.tv/