linux mpc8313启动流程,基于MPC8313E和FPGA的双口RAM驱动开发
摘要 以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驱动开发相关推荐
- 最详细的FPGA的双口RAM乒乓操作与数据处理实例(第一部分)
首先说明一下 代码都是自己完全手写的,如果有人看了我的代码,欢迎指出不足,写的不好也不要嘲笑,一个字一个字写出来的. - 1.目的 测试双口RAM的乒乓操作的功能,研究RAM输入输出操作,以及乒乓操作 ...
- 【verilog】 Vivado-Simple Dual-Port RAM IP的使用(Xilinx FPGA,双口RAM,IP使用)
简单双口RAM的IP核 配置IP 例化顶层 测试 波形 简单双口RAM的IP核 分A端口和B端口 A为输入端口,负责数据的写入 B端口为输出端口,负责数据的读出 两端的时钟可以不同,还允许在写入A的同 ...
- linux内核启动流程(文章最后流程图)
原文:linux内核启动流程 本文以Linux3.14版本源码为例分析其启动流程.各版本启动代码略有不同,但核心流程与思想万变不离其宗. 内核映像被加载到内存并获得控制权之后,内核启动流程开始.通常, ...
- Linux开机启动流程分析
Linux开机启动十步骤 收藏分享2012-2-6 11:15| 发布者: 红黑魂| 查看数: 1366| 评论数: 0|来自: 比特网 摘要: 开机过程指的是从打开计算机电源直到LINUX显示用户登 ...
- Linux内核启动流程(待完善)
文章目录 一.Linux内核自解压过程 二.Linux内核启动第二阶段stage1 2.1.linux系统启动入口函数(stext) 2.2.内核初始化阶段(start_kernel) 2.3.2 r ...
- 【内核】linux内核启动流程详细分析【转】
转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件 ...
- 【内核】linux内核启动流程详细分析
Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码, 主要作用 ...
- Linux的启动流程(CentOS 6)
前言 Linux启动的过程在实际生产中有着至关重要的作用.试想一下,如果我们在实际生产中服务器因为某一个服务出了问题,而不能启动,这时我们应该怎么办.如果我们了解Linux的详细启动过程,知道是在哪一 ...
- I.MX6 Linux Qt 启动流程跟踪
/*************************************************************************** I.MX6 Linux Qt 启动流程跟踪* ...
最新文章
- 30百度人撑起自动驾驶半壁江山
- Javascript代码段记录: utils
- LeetCode455 分发饼干(二分法)
- NETCF平台下利用XmlSerializer对于复杂类型序列化的探索(三)
- 2020-12-29 Linux查找某一关键字在哪个文件
- vm显示打不开 /dev/vmmon:Broken pipe
- python哪个方向工资高_Python薪资最高的是一线城市,竟然平均月薪高达20k!
- 40_pytorch Batch Norm
- jsonp多次请求报错 not a function的解决方法
- 罗技g502 g102游戏驱动ghub详细 教程
- 使用QEMU搭建ARM64实验环境
- elasticsearch与kibana踩过的坑
- safari连接4g网显示未连接服务器,Safari无法打开网页iPhone尚未接入互联网
- Nessus最新版8.15安装教程
- 狗年出生的宝宝取名都有哪些注意事项呢?起名真不是简单事
- Google Earth Engine(GEE)——设置经纬格网(日本东京)
- imac 2017升级内存
- 程序员最爱用的在线代码编辑器合集,哪款是你的最爱?
- 自学计算机编程应该看些什么书
- Oracle小数点保留问题
热门文章
- html登陆l判断,html作业登陆界面
- easyui datagrid java_java_easyui体系之DataGrid(4)[转]
- ireport怎么套打_方向盘套你选对了吗?老司机告诉你该这样做|酷斯特玩车
- php 检查路劲是否存在,php 检查文件或目录是否存在代码总结
- mysql currentuser_MySQL中DATABASE()和CURRENT_USER()函数的示例详解
- php切换当前目录,php 改变当前目录函数chdir()的定义与用法实例详解
- 什么是pisa测试_PISA测试排名世界第一,中国教育已是世界冠军?
- mysql 添加ios表情符号_mysql - 如何用PHP匹配并替换iOS标准的emoji表情符号
- python脚本 游戏赚金币_python捡金币游戏(上)
- python的opencv库_python环境下安装opencv库的方法