(笔记)linux增加非标波特率的方法
1.内核修改
涉及到的内核文件包括driver/char/tty_ioctl.c和arch/xx/include/asm/termbits.h
在linux内核中,struct ktermios结构的c_cflags共有5个位用来标注波特率,其中位CBAUDEX表明使用的是POSIX标准波特率还是扩展波特率,
POSIX规定了16个标准波特率,为B0,B50,B75,B110,B134,B150,B200,B300,B600,B1200,B1800,B2400,B4800,B9600,B19200,B38400,不过遗憾的是,现在
的USB to Serial芯片能工作的波特率远远大于B38400(例如PL2303最高波特率可以到12M bps),这些非标的波特率,只能使用CBAUDEX标志来使用了.
毫无疑问,5位的值,最多能支持32种不同的波特率.
例如对于pl2303,驱动支持3M/6M/12M bps,因此可以在内核中增加三个波特率B3000000,B6000000,B12000000.
(1)修改driver/char/tty_ioctl.c中的baud_table[]和baud_bits[]为以下代码:
static const speed_t baud_table[] =
{
0,50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,/*the POSIX std*/
57600,115200,
3000000,6000000,12000000/*pl2303 ext*/
};
static const tcflag_t baud_bits[] =
{
B0,B50,B75,B110,B134,B150,B200,B300,B600,B1200,B1800,B2400,B4800,B9600,B19200,B38400,B57600,B115200,/*the POSIX std*/
B3000000,B6000000,B12000000/*pl2303 ext*/
};
(2)修改arch/xx/include/asm/termbits.h的Bxxxx定义如下:
#define B0 0000000 /* hang up */
#define B50 0000001
#define B75 0000002
#define B110 0000003
#define B134 0000004
#define B150 0000005
#define B200 0000006
#define B300 0000007
#define B600 0000010
#define B1200 0000011
#define B1800 0000012
#define B2400 0000013
#define B4800 0000014
#define B9600 0000015
#define B19200 0000016
#define B38400 0000017
#define BOTHER 0010000
#define B57600 0010001
#define B115200 0010002
#define B3000000 0010003
#define B6000000 0010004
#define B12000000 0010005
/*后面的波特率本人没有使用到,但如果不定义则内核无法编译通过!*/
#define B230400 0010006
#define B460800 0010007
#define B500000 0010010
#define B576000 0010011
#define B921600 0010012
(3)重新编译内核,重启后则新内核将支持B3000000/B6000000/B12000000的波特率
2.应用层修改
libc中的cfsetispeed()和cfsetospeed()因为不支持非标波特率,因此调用这两个函数会返回-1,应用程序需要使用如下方式:
if(baud_rate <= B38400)
{
cfsetispeed(&opt,baud_rate);
cfsetospeed(&opt,baud_rate);
}
else
{
opt.c_cflag |= CBAUDEX;
baud_rate -= 4096;/*baud_rate取值为1 ~ 5,分别对应B57600/B115200/B3000000/B6000000/B12000000*/
cfsetispeed(&opt,baud_rate);
cfsetospeed(&opt,baud_rate);
}
(笔记)linux增加非标波特率的方法的更多相关文章
- 【转】Linux C下非特定波特率的配置和使用
https://blog.csdn.net/jinhongdu/article/details/43413071 对于非标准的任意波特率需要用ioctl(fd, TIOCGSERIAL, p)和i ...
- linux增加,删除用户组,解压缩命令,VIM使用命令
ln -s 建立软连接 ln -s /usr/bin/fdfs_trackerd /usr/local/bin ln -s /usr/bin/stop.sh /usr/ ...
- Linux删除非空目录
Linux下如何删除非空目录 这个问题很basic,不过还是困扰了我一段时间.(这里主要讨论的是命令行模式下)我本来觉得应该使用命令 rmdir但是发现它无法删除非空的目录.后来发现了原来应该使用 ...
- Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...
- 调整Linux磁盘分区的大小的方法
昨天数据入库时,一直报错,说磁盘满了,,df -h 一看,发现/目录下只有50G空间,已使用49G:我的程序和dbss都安装在/目录下,ftp到的数据放在/data下的一个子目录下,分解完的 ...
- MSP430精准配置高速串口波特率的方法
引言 在实际项目大批量生产调试设备时,笔者发现同样版本的程序在不同设备上运行时效果不一致,一部分设备串口通信正常,另外一部分串口通信不正常.通过示波器对多个设备的串口波特率及系统时钟频率测试, ...
- Linux下修改MySQL编码的方法
有时候因为编码需要修改mysql的编码,windows下修改有图文界面简单一些,linux大家就可以参考下面的方法 默认登录mysql之后可以通过SHOW VARIABLES语句查看系统变量及其值 ...
- VMware linux 增加根目录空间 (使用图形分区工具gparted LiveCd)
写这篇文章的原因: 最近要给服务器Centos上的ruby版本升级,由于是第一次升级,不敢直接在服务器上操作. 所以在我的winxp上装了Vmware ,又在Vmware中装了Centos5.2. 用 ...
- linux md5 加密字符串和文件方法
linux md5 加密字符串和文件方法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意 ...
随机推荐
- Mysql数据库If语句的使用
MySQL的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 [sql] view plain copy 如果 expr1 是TRUE (expr1 & ...
- vscode 换行符\n 变成\r\n
VSCode是一个开源的强大代码编写器,但是如果没有好好的配置使用,会适得其反. 这里总结VSCode的一些配置,方便自己查询,也方便网友. 1.编辑器配置 为特定类型文件指定缩进大小.缩进类型(空格 ...
- tensorflow笔记2:TensorBoard
Tensorboard中的参数 Summary:所有需要在TensorBoard上展示的统计结果. tf.name_scope():为Graph中的Tensor添加层级,TensorBoard会按照代 ...
- 设置Chrome忽略网站证书错误
本人在XP下使用Chrome.总是莫名其妙的提示整数错误,一部分https网站无法直接访问.网上找了下,把解决思路记录下来. 解决这个问题很简单,只需要修改你平时用来启动Chrome的快捷方式就可以忽 ...
- TortoiseSVN checkout 之后图标(绿色勾之类的)没有显示出来的问题
http://blog.csdn.net/xigu_233/article/details/44595547 ********************************************* ...
- spring boot映射静态资源.
增加配置文件 package com.wisely.upload.config; import org.springframework.context.annotation.Configuration ...
- java中的数据结构[copy]
转自http://developer.51cto.com/art/201107/273003.htm java版数据结构与算法,希望对你有帮助. 线性表,链表,哈希表是常用的数据结构,在进行Java开 ...
- 怎样把任意exe程序注册成windows系统服务(手动注册服务)
1. 要实现这个功能要用到微软提供的两个小工具“instsrv.exe”和“srvany.exe”(下载地址:http://www.cr173.com/soft/64394.html). 先下载这两个 ...
- Linux: grep多个关键字“与”和“或”
1.或操作 grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行 egrep '123|abc' filename // 用egrep ...
- Python与操作系统有关的模块
Os模块 Python的标准库中的os模块主要涉及普遍的操作系统功能.可以在Linux和Windows下运行,与平台无关.os.sep 可以取代操作系统特定的路径分割符.os.name字符串指示你正在 ...