linux 串口波特率的修改与sdma的设置

2023-10-27

最近这几天准备用串口实现DMA的传输数据,刚开始研究三天DMA,结果是一脸懵逼,无奈之下,只能跑去研究串口,结果发现Linux系统串口和DMA是真的难(小白,而且没人一起研究!),芯片手册对应的页数可以让人放弃,最后还是放弃看芯片手册,从网上百度开始,看看前人的总结,最终写下以下总结笔记(以下仅为笔记,实际上我并没有实现用DMA实现串口传输数据)。
系统:linux3.0.15
cpu:imxdl

一、DMA

首先阅读前人的参考文献:
1、这是有关i.MX51的SDMA内核的简短教程:
乔纳的博客
ELI的博客
要是你基础扎实,按照上面大牛的教程,基本就可以实现SDMA传输了。
2、这是恩智浦上的一个帖子,里面又许多大牛对DMA的见解与资料
通过以上外文博客再加上自己百度的东西,基本就明白DMA的基本操作了。

二、串口波特率设置与SDMA传输

首先阅读前人的参考文献:
1、jkan2001的博客:IMX6增加UART口的操作步骤
2、 恩智浦技术社区 :imx6平台串口通信问题
3、漫不经心博客:
tty初探—uart驱动框架分析(一)
uart驱动框架分析(二)
4、嘉明的博客: IMX6DL 串口驱动分析
主要有以下4篇文章
在这里插入图片描述
5、o777788的博客:imx6 UART 驱动分析
6、明远智睿技术论坛:imx6 uart开启DMA
7、苏西守护者的博客:imx6的uart小结(1)
8、美丽的时光机器的博客:uart&tty驱动
参照以上文献,足以将串口修改为DMA传输。

三、串口DMA及波特率的设置

虽然我没有实现用DMA传输数据,但如果用在应用层实现数据传输的话,我觉得我就差最后一部了(验证是否可以DMA传输),为了以后再进一步研究,把串口的SDMA配置过程记录下来。
与串口相关的函数及头文件如下所示:
在这里插入图片描述
1、首先配置好io口,具体配置参考上面的博客。 其实串口的DMA设置非常简单在board-mx6q_sabresd.c中有

static inline void mx6q_sabresd_init_uart(void)
{
	imx6q_add_imx_uart(2, NULL);
	imx6q_add_imx_uart(0, NULL);
}

上面两句就是配置串口1和串口3.

在board-mx6q_arm2.c有

static const struct imxuart_platform_data mx6_arm2_uart1_data __initconst = {
	.flags      = IMXUART_HAVE_RTSCTS | IMXUART_USE_DCEDTE | IMXUART_SDMA,
	.dma_req_rx = MX6Q_DMA_REQ_UART2_RX,
	.dma_req_tx = MX6Q_DMA_REQ_UART2_TX,
};

static inline void mx6_arm2_init_uart(void)
{
	imx6q_add_imx_uart(3, NULL);
	imx6q_add_imx_uart(1, &mx6_arm2_uart1_data);
}

从上面可以看到串口2通过.flag或上了SDMA,这就是配置SDMA了,也就是说系统自带的串口2是打开了SDMA,要打开其他串口的SDMA的话只需下一个imxuart_platform_data 函数,照葫芦画瓢就行了,最后在应用层调用串口就可以了。(以上是我的个人见解,若那位网友验证了该想法的可行性,麻烦请评论留言,大家相互借鉴)

2、串口波特率的修改,若直接用应用层调用串口的话一句话即可实现,然而,要是不调用函数怎么修改串口控制默认值呢?
首先,我们要清楚串口的驱动虽然写在内核,但它和uboot与跟文件系统都是有关的,具体参考 :linux console驱动详解

打开uboot,找到相关的config,如们708dl.h
在这里插入图片描述
上面定义的就是115200波特率。
在这里插入图片描述
一般而言,串口在哪里初始化的就修改那个.h文件。

修改完成后,发现开机时出现卡死,这是因为rc_mxc.S的设置和uboot的设置不一样,

在这里插入图片描述
打开根文件的rc_mxc.S如下,将自己所要修改的串口默认波特率修改就可以了。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 串口波特率的修改与sdma的设置 的相关文章

  • 在 Linux 上访问 main 之外的主要参数

    是否可以访问参数main在外面main 即在共享库构造函数中 在 Linux 上除了通过解析之外 proc self cmdline 您可以通过将构造函数放入 init array部分 功能在 init array 不像 init 使用相同
  • 推荐用于小型站点的 IRC 服务器 (ircd)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 情况 我想使用 IRC 机器人作为我正在研究的其他代码的通用通信接口 服务器硬件陈旧且内存不足 但运行在相对最新的 Debian GNU
  • Linux“屏幕”的 Windows 等效项还是其他替代方案?

    我正在寻找一种在 Windows 环境中控制程序的方法 我希望它与 Linux 软件有点相似 screen 我搜索的原因是我需要使用标识符启动一个程序 在 Windows 上 这样我以后就能够关闭该特定程序 而无需关闭其他任何程序 即使实际
  • 从 php/linux 获取 pdf 的布局模式(横向或纵向)

    给定一个 PDF 如何使用 PHP lib 或 Linux 命令行工具获取 PDF 的布局模式 或相对宽度 高度 Using http www tecnick com public code cp dpage php aiocp dp tc
  • Fortran 中的共享库,最小示例不起作用

    我试图了解如何在 Linux 下的 Fortran 中动态创建和链接共享库 我有两个文件 第一个 liblol f90 看起来像这样 subroutine func print lol end subroutine func 我用它编译gf
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • 如何确定代码是否在信号处理程序上下文中运行?

    我刚刚发现有人正在从信号处理程序调用我编写的绝对不是异步信号安全的函数 所以 现在我很好奇 如何避免这种情况再次发生 我希望能够轻松确定我的代码是否在信号处理程序上下文中运行 语言是 C 但该解决方案不适用于任何语言吗 int myfunc
  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • C++:Linux平台上的线程同步场景

    我正在为 Linux 平台实现多线程 C 程序 其中我需要类似于 WaitForMultipleObjects 的功能 在搜索解决方案时 我发现有一些文章描述了如何在 Linux 中实现 WaitForMultipleObjects 功能
  • 在 debian wheezy amd64 上安装 ia32-libs

    我正在使用 Debian 7 喘息 amd64 uname a Linux tzwm debian 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 我想安装ia32 libs在我的
  • 使用c在linux上分块读写

    我有一个 ASCII 文件 其中每一行都包含一个可变长度的记录 例如 Record 1 15 characters Record 2 200 characters Record 3 500 characters Record n X cha
  • 裸机交叉编译器输入

    裸机交叉编译器的输入限制是什么 比如它不编译带有指针或 malloc 的程序 或者任何需要比底层硬件更多的东西 以及如何才能找到这些限制 我还想问 我为目标 mips 构建了一个交叉编译器 我需要使用这个交叉编译器创建一个 mips 可执行
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 隐式声明“gets”

    据我所知 隐式声明 通常意味着该函数必须在调用之前放置在程序的顶部 或者我需要声明原型 然而 gets应该在stdio h文件 我已包含 有没有什么办法解决这一问题 include
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na

随机推荐

  • 调参1——随机森林贝叶斯调参

    贝叶斯调参教程请参考 https blog csdn net weixin 35757704 article details 118480135 安装贝叶斯调参 pip install bayesian optimization 算法简介
  • linux tomcat部署mvc,Spring+SpringMVC+MyBatis项目部署到Tomcat服务器

    其中JDK MySQL以及Tomcat可以直接去官网下载对应版本的安装包 本文采用的版本分别为 安装JDK 拷贝JDK安装包到相应目录下 如 sudo cp jdk 8u231 linux x64 tar gz usr local cd u
  • Qt程序报error: undefined reference to `MainWindow::~MainWindow()'

    编译Qt程序时 编译器报error undefined reference to MainWindow MainWindow 这是因为Qt语法较严格 不会自动生成类的析构函数 需要程序员自己编写 即便里面什么内容也没有 所以 手写好Main
  • Qt 智能指针详细介绍

    1 Qt智能指针概述 Qt 提供了一套基于父子对象的内存管理机制 所以我们很少需要去手动 delete 但程序中不一定所有类都是QObject的子类 这种情况下仍然需要使用一些智能指针 注意 在 Qt 中使用智能指针时 一定要避免发生多次析
  • 数据结构与算法——RB树简介

    二叉树 任何节点最多只允许有两个子节点 二叉搜索树 可以提供对数时间的元素插入和访问 任何节点的键值一定大于其左子树中的每一个节点的键值 并不小于其右子树中的每一个节点的键值 平衡二叉搜索树 平衡的意思是 没有任何一个节点过深 深度过大 二
  • R语言-相关

    相关系数是可以用来描述定量变量之间的关系 相关系数的符号 是表明关系的方向 正相关或负相关 其值 绝对值 大小表示关系的强弱程度 完全不相关时为0 完全相关时为1 一 相关的类型 1 Pearson Spearman和Kendall相关 P
  • nasal脚本起源与环境搭建(flightgear开源项目)

    目录 FlightGear FlightGear下载 nasal 脚本 nasal脚本起源 nasal脚本介绍 使用FlightGear内置的环境 使用开源的Nasal脚本解释器 Create VS project 创建 VS 工程 Fir
  • QT中有关QString的各种数据类型转换

    提示 刚接触QT 对类型转换不太熟悉的朋友们不需要再各个去查了 文章持续将更新有关QT中类型转换的内容 文章目录 一 QString QByteArray QJsonObject std string QStringList UTF 8 一
  • R语言broom包整洁化模型

    文章目录 载入包 建模 broom 整洁模型数据 purrr包向量化函数与broom包结合 broom是tidyverse系列包之一 可以帮助人们获得干净整洁的模型数据结果 有效改善了R语言建模的用户体验 载入包 library tidyv
  • SpringBoot自动装配原理

    文章目录 一 简介 二 自动装配源码分析 三 自动装配以mybatis举例 四 总结 一 简介 Spring Boot 的自动装配 Auto configuration 是 Spring Boot 框架中一项强大的功能 它可以根据应用程序的
  • 2021年中职“网络安全“江西省赛题—B-5:应急响应

    B 5 应急响应 1 黑客通过网络攻入本地服务器 在Web服务器的主页上外挂了一个木马连接 请你找到此连接并删除该连接 将对应的标题名称作为flag值提交 直接去连接去查看网站目录 发现有几个php文件 在3 php中发现了一句话木马 我们
  • word 2013 尾注后继续添加正文的方法

    通常 文档的尾注后面是不能再添加 编辑正文性质的内容的 这篇文章介绍一种稍微 曲折 的方法来解决这一问题 当我们利用尾注的方法在论文中添加参考文献时 如果参考文献后面还有正文内容 那么此方法将对你十分有用 1 准备文档的基本内容 我们先准备
  • ES6 数组内对象去重

    去重Set const arr 张三 张三 三张三 let set new Set arr set 自带去重 Set 张三 三张三 console log set console error Array from set 张三 三张三 去重
  • 深度优先搜索(dfs),宽度优先搜索(bfs),深度优先遍历,宽度优先遍历

    图的遍历 我们希望从图中某一顶点出发访遍图中其余顶点 且使每一个顶点仅被访问一次 通常有两条遍历图的路径 对有向图和无向图都适用 深度优先搜索 广度优先搜索 一 DFS 深度优先搜索 深度优先搜索 暴搜 一条路走到黑 1 树 排列数字为例
  • 《python语言程序设计》第5.9题---统计大学四年的总学费,十年后的学费。

    基础学费 base tuition 10000 每年增长幅度 increase rate 5 100 基础学费加每年增幅 incr year increase rate base tuition 需要统计从今年开始到大四的全部学费 此为判断
  • [入门]vscode 选中所有相同

    重命名变量 选中变量名后按F2 转到变量名的定义处 选中变量名后按F12 同时选择多个单词 Alt Click 同时选择上一行 Ctrl Alt Up 或者下一行 Ctrl Alt Down 的相同位置 依次找出文中所有的当前选中的单词 C
  • 使用CDN 大幅减少webpack打包大小,提升前端页面响应速度

    使用CDN 大幅提升页面加载速度 前言 之前做了一个静态网站 做了个关于地图的小工具 使用了element ui和xlsx两个组件 在打包之后静态资源目录下的文件大小达到了1 7m 使用nginx部署在我的云服务器上之后 我的配置很低1m带
  • day17-基础加强(类加载器和反射)

    1 类加载器 1 1类加载器 理解 作用 负责将 class文件 存储的物理文件 加载在到内存中 1 2类加载的过程 理解 类加载时机 创建类的实例 对象 调用类的类方法 访问类或者接口的类变量 或者为该类变量赋值 使用反射方式来强制创建某
  • VScode远程连接服务器

    由于teamviewer 向日葵远程连接十分卡顿 通过ssh远程连接服务器进行开发是程序员必不可少的技能 下面主要介绍如何通过vscode cpolar进行远程连接 此处作者的客户端和服务端都是ubuntu18 04的系统 但是客户端的GP
  • linux 串口波特率的修改与sdma的设置

    最近这几天准备用串口实现DMA的传输数据 刚开始研究三天DMA 结果是一脸懵逼 无奈之下 只能跑去研究串口 结果发现Linux系统串口和DMA是真的难 小白 而且没人一起研究 芯片手册对应的页数可以让人放弃 最后还是放弃看芯片手册 从网上百