摘要 以MPC8313E芯片为平台,介绍了一个基于嵌入式Linux探作系统的双口RAM设备驱动。通过该设备驱动搭建Linux服务器,利用缓存技术实时读取FPGA双口RAM数据,最终实现将海量图像数据高速上传至PC端。

关键词 嵌入式系统;Linux设备驱动;双口RAM

在众多操作系统中,Linux操作系统以其独有开放性和灵活性成为重要的系统之一,因而开发Linux设备驱动具有重要意义。Linux设备驱动是在Linux内核下硬件设备和上层应用程序的纽带,使得应用程序只需调用系统软件的应用程序编程接口(API)就可以完成对硬件设备的操作。作为一个桥梁,其在实现具体功能的过程中发挥着重要的作用,接口丰富的驱动,设备程序对工程的开发有着重要的意义。Linux对所有连接在系统上的设备都会使用一个设备驱动程序,这个基本设备驱动指令成为了内核的一部分。通过使用设备驱动程序文件,设备对系统来说变成了一个可以寻址、重定向并通过管道符导向的普通文件。

1 双口RAM读写设备驱动的开发背景在基于MPC8313E的大容量视频存储系统中,系统需要实现通过千兆以太网接口与上位机进行通信,按上位机发送的命令解析后送给FPGA,进而通过FPGA发出的曝光脉冲控制高速相机MC1362工作。当存储任务完成后,FPGA将存储阵列中的数据读入双口RAM并传至MPC8313E中,Linux端服务器利用千兆以太网接口将数据上传到上位机中,由上位机完成图像还原。

在构造大容量高速上传通道的过程中,系统采用飞思卡尔MPC8313E芯片,该芯片有两个增强型三速(10/100/1 000 Mbit·s-1)以太网控制器,支持IEEES02.3协议,同时该芯片还支持16/32位的DDR SDRAM数据接口,最高支持333 MHz的数据频率,512 MB可寻址空间以及4个直接存储器访问(DMA)通道,可以满足系统设计要求。该驱动设备主要实现从FPGA双口RAM中乒乓读取图像数据信息,利用挂载在MPC8313E总线上的FPGA完成数据上传,同时也需要解析上位机命令后传递给FPGA。

2 Linux驱动模块的程序设计基础在Linux/μClinux的框架结构中,和设备相关的处理可以分为两个层次:文件系统层和设备驱动层。设备驱动层屏蔽具体设备细节,文件系统层则向用户提供一组统一、规范的用户接口。这种设备管理方法可以很好地做到“设备无关性”,使Linux可以根据硬件外设的发展进行扩展。

Linux系统允许内核以模块的方式加载设备,这大幅提高了Linux设备结构的多样性,同时可以通过裁剪内核减少系统不必要的开支,提高工作效率。一般情况下,Linux内核的驱动模块通常只实现一个驱动程序,因此它可以分类,在Linux操作系统中有3类主要的设备文件系统:块设备、字符设备和网络设备。

字符设备:可以像文件一样访问字符设备,这样的驱动程序通常会实现如open、close、read和write系统调用。

块设备:是文件系统的宿主。Linux允许像字符设备一样读取块设备,允许一次传输任意数量的字节。结果块设备与字符设备只在荫核内部的管理上有所区别,即在内核/驱动的软件接口上有所区别。

网络设备:任何网络设备都是通过接口实现的,既可以和其他宿主交换数据设备。通常情况下,接口是一个硬件设备,但也可以像look back(回路)接口一样是软件工具。网络设备面向网络协议而不是文件系统层。

3 双口RAM读写设备驱动设计介于以上第二部分的分析,双口RAM设备选择为块设备,以便传输任意数量的数据。同时该驱动设备基于Linux2.6.23内核开发,以模块的方式加载至内核中,其结构如图2所示。

代码编写好后在正式编译前还要准备好内核头文件和库函数,这需要先编译一遍相应的内核,在2.6. 23内核源代码中将MPC8313RDB的配置文件用作默认配置,编译内核。完成后书写驱动的Makefile,然后连接目标扳,在NFS下调试设备驱动和应用程序。用户可以使用通过交叉编译得到的.ko文件通过insmod动态加载至内核中,也可以通过修改启动脚本文件,加电后自启动将驱动加载到内核中。

4 处理结果经过打包处理的图像数据通过MPC8313E的服务器上传至上位机后,按照图像格式进行拼图,每包数据含有42 240 Byte数据,每帧图像数据总量为1 280×1 024 Byte的图像像素点信息和附加区信息,共接收35包数据后就可还原一幅完整的图像。上位机在拼图时裁剪掉一部分数据,最终合成1 024×1 024 Byte的图像,如图3所示。

5 结束语双口RAM驱动程序是整个存储系统的核心模块,它对存储数据的上传速度和准确提取图像信息有重要的影响,通过对MPC8313E寄存器的配置和读写以及中断函数对硬件的控制来实现对RAM的读写,利用MPC8313E现有的接口和传输算法,最终实现图像信息的高速上传,验证得出上传数据最快可达104 Mbit·s-1,满足设计要求。

linux mpc8313启动流程,基于MPC8313E和FPGA的双口RAM驱动开发相关推荐

  1. 最详细的FPGA的双口RAM乒乓操作与数据处理实例(第一部分)

    首先说明一下 代码都是自己完全手写的,如果有人看了我的代码,欢迎指出不足,写的不好也不要嘲笑,一个字一个字写出来的. - 1.目的 测试双口RAM的乒乓操作的功能,研究RAM输入输出操作,以及乒乓操作 ...

  2. 【verilog】 Vivado-Simple Dual-Port RAM IP的使用(Xilinx FPGA,双口RAM,IP使用)

    简单双口RAM的IP核 配置IP 例化顶层 测试 波形 简单双口RAM的IP核 分A端口和B端口 A为输入端口,负责数据的写入 B端口为输出端口,负责数据的读出 两端的时钟可以不同,还允许在写入A的同 ...

  3. linux内核启动流程(文章最后流程图)

    原文:linux内核启动流程 本文以Linux3.14版本源码为例分析其启动流程.各版本启动代码略有不同,但核心流程与思想万变不离其宗. 内核映像被加载到内存并获得控制权之后,内核启动流程开始.通常, ...

  4. Linux开机启动流程分析

    Linux开机启动十步骤 收藏分享2012-2-6 11:15| 发布者: 红黑魂| 查看数: 1366| 评论数: 0|来自: 比特网 摘要: 开机过程指的是从打开计算机电源直到LINUX显示用户登 ...

  5. Linux内核启动流程(待完善)

    文章目录 一.Linux内核自解压过程 二.Linux内核启动第二阶段stage1 2.1.linux系统启动入口函数(stext) 2.2.内核初始化阶段(start_kernel) 2.3.2 r ...

  6. 【内核】linux内核启动流程详细分析【转】

    转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件 ...

  7. 【内核】linux内核启动流程详细分析

    Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码, 主要作用 ...

  8. Linux的启动流程(CentOS 6)

    前言 Linux启动的过程在实际生产中有着至关重要的作用.试想一下,如果我们在实际生产中服务器因为某一个服务出了问题,而不能启动,这时我们应该怎么办.如果我们了解Linux的详细启动过程,知道是在哪一 ...

  9. I.MX6 Linux Qt 启动流程跟踪

    /*************************************************************************** I.MX6 Linux Qt 启动流程跟踪* ...

最新文章

  1. 30百度人撑起自动驾驶半壁江山
  2. Javascript代码段记录: utils
  3. LeetCode455 分发饼干(二分法)
  4. NETCF平台下利用XmlSerializer对于复杂类型序列化的探索(三)
  5. 2020-12-29 Linux查找某一关键字在哪个文件
  6. vm显示打不开 /dev/vmmon:Broken pipe
  7. python哪个方向工资高_Python薪资最高的是一线城市,竟然平均月薪高达20k!
  8. 40_pytorch Batch Norm
  9. jsonp多次请求报错 not a function的解决方法
  10. 罗技g502 g102游戏驱动ghub详细 教程
  11. 使用QEMU搭建ARM64实验环境
  12. elasticsearch与kibana踩过的坑
  13. safari连接4g网显示未连接服务器,Safari无法打开网页iPhone尚未接入互联网
  14. Nessus最新版8.15安装教程
  15. 狗年出生的宝宝取名都有哪些注意事项呢?起名真不是简单事
  16. Google Earth Engine(GEE)——设置经纬格网(日本东京)
  17. imac 2017升级内存
  18. 程序员最爱用的在线代码编辑器合集,哪款是你的最爱?
  19. 自学计算机编程应该看些什么书
  20. Oracle小数点保留问题

热门文章

  1. html登陆l判断,html作业登陆界面
  2. easyui datagrid java_java_easyui体系之DataGrid(4)[转]
  3. ireport怎么套打_方向盘套你选对了吗?老司机告诉你该这样做|酷斯特玩车
  4. php 检查路劲是否存在,php 检查文件或目录是否存在代码总结
  5. mysql currentuser_MySQL中DATABASE()和CURRENT_USER()函数的示例详解
  6. php切换当前目录,php 改变当前目录函数chdir()的定义与用法实例详解
  7. 什么是pisa测试_PISA测试排名世界第一,中国教育已是世界冠军?
  8. mysql 添加ios表情符号_mysql - 如何用PHP匹配并替换iOS标准的emoji表情符号
  9. python脚本 游戏赚金币_python捡金币游戏(上)
  10. python的opencv库_python环境下安装opencv库的方法