简单说几句吧,linux下的设备都是文件,流程也无非是open, read/write, close等当然,串口你得设置各种属性才行对不对,比如在win下的超级终端就设置了波特率啊,停止位啊,奇偶校验啊什么的,这些属性都通过 int tcgetattr(int fd, struct termios *termios_p); int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);函数来设置。完整代码吗自己去google,一把一把的,其实最重要的是设置好属性,剩下的就是read,write的问题咯。希望对你有用对了,了解终端函数的详情请在linux命令行终端获取: man termios
B. Linux普通用户运行串口
将USB串口设备插入USB口后,会在/dev/目录下生成/dev/ttyUSB0文件(也可能为/dev/ttyUSB1,/dev/ttyUSB2...),
查看此文件
输出为:
c说明表明设备为字符设备文件(d表示目录文件,-表示普通文件,l表示链接文件,b表示块文件),
其中rw-rw----表示root用户作为文件所有者可以读和写,dialout用户组内的用户可以读和写,其他用户不允许读、写和执行(r表示可读,w表示可写,x表示可执行)
因此,需要将当前用户增加到dialout用户组中
C. Linux串口读二进制文件读不完整,而.c和.txt文件都可以正常从串口读取
检查串口来的工作模式。
我记得串源行有一种 7bit 的传输模式,这个模式下,只能传输 7bit 的数据,对应的就是 ASCII 文本,二进制传输都会出问题。
其实,你也可以完全不考虑传输模式的问题。发送数据时,用 base64 编码,收到数据后再解码就 OK 了。这样 base64 数据完全都是 7bit 的。
D. Linux 串口传输文件到Window系统去
1如果要是来无线传的话源,需要socket 设置发送端和接收端,然后再用write去写.
2想遍历整个文件夹的话用c的话好复杂,如果您是在linux中想遍历整个目录,不如使用shell,一个`ls`就解决,在linux中shell脚本和程序配合使用是非常好用的
E. Linux串口调试工具--minicom
安装完成后,请不要着急打开软件。需先进行配置。具体步骤如下:
查看串口设备及文件权限
linux下的所有操作面向用户的都是文件操作,在对串口操作之前,我们应该先确认自己对该文件有没有读写权限。
linux下的usb串口命名为ttyUSB*,运行上面命令,可以看到有几个设备挂载。
我们这里是:
只有ttuUSB0.再用lsusb查看:
usb 004正是我们挂上去的usb转串口线缆,使用的芯片是PL2303。
但是正如上面显示,ttyUSB0这个设备是root所有的,所以,我们以普通用户身份打开minicom是没法访问该文件的。
运行sudo minicom -s便进入了minicom的配置界面,使用上下键选择Serial port setup,回车。此时光标在“change which setting”后面停留,它的上面有如下菜单:
我们只需输入上面对应的字母,就可以进如相应的菜单进行设置。设置完成,回车,光标会回到“change which setting”后面,如此重复。完成按回车返回主菜单即可。
返回主菜单后,选择“Save setup as df1”,将其保存为默认设置,然后选择 Exit退出。需退出后重新打开minicom,软件才会使用上述参数进行初始化。
注意:如果没有使用USB转串口,而是直接使用串口,那么Serial Device要配置为/dev/ttyS0。
如果上面设置顺利,打开minicom
重新给设备上电后,此时,窗口里就有信息打印出来了。
1)需使用Ctrl+a 进入设置状态
2)按z进入设置菜单
(1)O键:打开配置选项;
(2)W键:自动卷屏。当显示的内容超过一行之後,自动将後面的内容换行。这个功能在查看内核的启动信息时很有用。
(3)C键:清除屏幕的显示内容;
(4)B键:浏览minicom的历史显示;
(5)X键:退出minicom,会提示确认退出。
Ctrl + A --> O
选择"Filenames and paths"
更多的参数,参见"man minicom"的输出。
如果不加这个项,那么在minicom和pc交互的时候中键入命令超过一行时候会被截断,(这时候可以通过 <C-a> w 来开和关切换截断行功能).
这样,启动之后我们会发现显示的内容不是黑白的了。
这样,启动之后,所在minicom的输出都会在<filename>中保留一份,如果原来文件存在,则追加,不存在则创建一个。
这样,我们可以取代用 <C-a> * 发送命令的方式,将 <C-a> 替换成 [Alt] 或者 [ESC] .
这里,<filename>是你的脚本文件的名字,应该指定绝对路径,否则就会在你启动minicom的路径下寻找。
Minicom是基于窗口的。要弹出所需功能的窗口,可按下 Ctrl-A (以下使用C-A来表示Ctrl-A),然后再按各功能键(a-z或A-Z)。先按C-A,再按'z',将出现一个帮助窗口,提供了所有命令的简述。配置 minicom(-s 选项,或者C-A、O)时,可以改变这个转义键,不过现在我们还是用Ctrl-A吧。
这里,只给出很少的命令,更多的交互命令参见"<C-a> z"的帮助输出。
minicom -s 或启动minicom之后运行 <C-a> o 来进行配置。
C:脚本文件的存放位置: <C-a> g 运行脚本时的路径 。
D:选择脚本程序: 默认 runscript ,也可以选择 bash 脚本格式。
可以参考man手册 man runscript .交互命令中可以运行" <C-a> G "来运行脚本。
参考资料 :
F. linux 内核 配置串口
由于linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此将内核的参数配置写入这个文件中,是一个比较好的选择。
首先打开/etc/sysctl.conf文件,查看如下两行的设置值,这里是:
kernel.shmall = 2097152
kernel.shmmax = 4294967295 如果系统默认的配置比这里给出的值大,就不要修改原有配置。同时在/etc/sysctl.conf文件最后,添加以下内容:
fs.file-max = 6553600
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
这里的“fs.file-max = 6553600”其实是由“fs.file-max = 512 * processes”得到的,我们指定processes的值为12800,即为“fs.file-max =512 *12800”。
sysctl.conf文件修改完毕后,接着执行“sysctl -p”使设置生效。
[root@localhost ~]# sysctl -p 常用的内核参数的含义如下。
kernel.shmmax:表示单个共享内存段的最大值,以字节为单位,此值一般为物理内存的一半,不过大一点也没关系,这里设定的为4gb,即“4294967295/1024/1024/1024=4g”。
kernel.shmmni:表示单个共享内存段的最小值,一般为4kb,即4096bit.
kernel.shmall:表示可用共享内存的总量,单位是页,在32位系统上一页等于4kb,也就是4096字节。
fs.file-max:表示文件句柄的最大数量。文件句柄表示在linux系统中可以打开的文件数量。
ip_local_port_range:表示端口的范围,为指定的内容。
kernel.sem:表示设置的信号量,这4个参数内容大小固定。
net.core.rmem_default:表示接收套接字缓冲区大小的缺省值(以字节为单位)。
net.core.rmem_max :表示接收套接字缓冲区大小的最大值(以字节为单位)
net.core.wmem_default:表示发送套接字缓冲区大小的缺省值(以字节为单位)。
net.core.wmem_max:表示发送套接字缓冲区大小的最大值(以字节为单位)。
G. Linux C 配置串口
配置串口需要包含头文件
其中最核心的配置结构体为:
如何获取该结构呢?我们操作串口跟操作文件一样,也是调用 open() 函数来打开串口,
这样我们就能够得到一个文件描述符 fd ,然后就可以调用 tcgetattr() 函数来获取上述配置结构体了。
Linux 串口默认的配置为:波特率 9600,数据位 8 位,无奇偶校验,停止位 1 位,无 CTS/RTS 。
以下介绍一些常用的配置项:波特率、奇偶校验、数据位、停止位、硬件控制流。
相关接口:
Linux 将串口的波特率分为了输入波特率和输出波特率,不过最常用的场景是将两者设置成一样。
cfgetispeed() 函数获取输入波特率, cfgetospeed() 函数获取输出波特率。 cfsetispeed() 函数设置输入波特率, cfsetospeed() 函数用于设置输出波特率,当然 cfsetspeed() 函数扩展为同时设置输入和输出波特率。
上述接口中的 speed_t 是一系列波特率的标志位,例如常用的 115200 波特率就为 B115200,参考下述选项:
设置奇偶校验位可以通过修改 termios 结构体中的 c_cflag 成员来实现,若无校验,则将 PARENB 位设为 0;若有校验,则 PARENB 为 1。之后再根据 PARODD 来区分奇偶校验, PARODD 为 1 表示奇校验, PARODD 为 0 表示偶校验。例如设置无奇偶校验位:
设置数据位可以通过修改 termios 结构体中的 c_cflag 成员来实现,CS5、CS6、CS7 和 CS8 分别代表数据位 5、6、7 和 8。不过在设置数据位之前,需要先用 CSIZE 来做屏蔽字段,清楚这几个标志位,例如设置数据位为 8 位:
设置停止位可以通过修改 termios 结构体中的 c_cflag 成员来实现, CSTOPB 位为 1 表示 2 位停止位, CSTOPB 位为 0 标志 1 位停止位。例如设置停止位为 1 位:
设置硬件控制流可以通过修改 termios 结构体中的 c_cflag 成员来实现, CRTSCTS 为 1 表示使用硬件控制流,为 0 表示不使用硬件控制流。例如使能硬件控制流:
当然,最后还需要用 tcflush() 抛弃存储在 fd 里的未接收的数据。
再利用接口 tcsetattr() 函数将配置信息写入文件描述符 fd :
这样整个串口最常用的用法就配置完成了。
具体的配置使用可以参考我的项目 HCI-Middleware 里的 hci_transport_uart_linux.c 文件。
参考:
H. 嵌入式linux怎样用串口传送文件
如果直接使用串口线,而没有用到USB转串口设备,就不需要安装驱动。 如果使用了专USB转串口,一般情况下也不属需要安装驱动了,目前linux系统已经包含了该驱动,可以自动识别,亦可通过以下命令查看以便确认是否支持。
I. 如何通过串口把一个程序发给linux
使用串口协议登录Linux终端控制台,通过Zmodem文件传输协议接收一个外部文件。
命令:rz -y会弹出文件浏览窗口,选择要上传的文件即可。
-y
表示若文件已存在,则覆盖。
J. 如何用JAVA通过串口来连接到linux系统,并对系统中的文件进行编辑操作
多用户系统,除了系统资源有争抢以外,2个用户的操作不会互相影响 操作界面,有字符界面,也有图形界面。linux的图形界面和系统关系不大,只是一个应用程序,图形界面有很多种,每个人都可以定制自己的linux 文件系统,和图形界面一样,跟linux....