linux 内核 配置串口

linux 内核 配置串口,第1张

由于linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此将内核的参数配置写入这个文件中,是一个比较好的选择。首先打开/etc/sysctl.conf文件,查看如下两行的设置值,这里是:kernel.shmall = 2097152kernel.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:表示发送套接字缓冲区大小的最大值(以字节为单位)。

配置串口需要包含头文件

其中最核心的配置结构体为:

如何获取该结构呢?我们 *** 作串口跟 *** 作文件一样,也是调用 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 文件。

参考:

1、在控制台输入lsmod,先看看能否检测到这个设备,就看有没有pl2303字眼可以了。如果有,则不需要再装驱动。

2、另外如果有的话最好再用dmesg|grepusb查找如果看到:drivers/usb/serial/usb-serial.c:USBSerialsupportregisteredforGeneric。就说明设备已被识别,然后往下看rivers/usb/serial/usb-serial.c:USBSerialsupportregisteredforPL-2303,usb2-2:PL-2303converternowattachedtottyUSB0(orusb/tts/0fordevfs)如果没有则需要驱动程序,一般硬件厂商都会提供,如果真的没有的话就只有到网上下载了,一般2.6内核以上的都支持。

3、安装完毕后再输入这个命令瞧瞧,是否安装成功。lsmod|grepusbserial。如果有usbserial,说明系统支持USB转串口。

4、驱动安装完毕后,就需要安装串口软件,这里推荐cutecom和puttycutecom安装sudoapt-getinstallcutecom。putty安装sudoaptinstallputty或sudopacman-Sputty

5、然后启动cutecom命令sudocutecom,之后你就可以看到哪些串口正在连接状态。

6、当开发板启动后,我们需要传入elf或bin文件,此时需要用到tftp,在控制台输入:sudoapt-getinstallxinetd,sudoapt-getinstalltftptftpd并等待安装完成后,输入:sudovi/etc/xinetd.d/tftp输入i,进入插入模式,随后按esc输入wq。保存。

7、第一次启动时和每次更换目录时都要执行sudo/etc/init.d/xinetdrestart,不然会找不到文件。

8、喜欢用putty的可以在控制台输入sudoputty运行程序。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7461509.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-05
下一篇2023-04-05

发表评论

登录后才能评论

评论列表(0条)

    保存