由于linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此将内核的参数配置写入这个文件中,是一个比较好的选择。
创新互联公司-专业网站定制、快速模板网站建设、高性价比吕梁网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式吕梁网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖吕梁地区。费用合理售后完善,十余年实体公司更值得信赖。
首先打开/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:表示发送套接字缓冲区大小的最大值(以字节为单位)。
Linux系统支持使用串信差口键盘,但是需要先安装串口驱动,然后才能使用串口键盘。
1、安装串口驱动:
首先,需要安装串口驱动,可以使用以下命令安装:
sudo apt-get install setserial
2、检查串口:
接下来,需要检做坦锋查串口是否正常工作,可以纯晌使用以下命令检查:
sudo setserial -g /dev/ttyS*
3、设置串口:
最后,需要设置串口,可以使用
@ toc
可在控制台输入
也可以用stty设置串口参数
使用后相当于串口回传,发什么回什么
发送数据
可以对串口发送数据比如对com1口
一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS* ,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的;
如果有ttyS设备,再看/dev/有没有ttyS*,如没有就建立一个:
如果板子的设备中没有标准串口设备ttyS0,也没有ttySAC0。/dev下应该有一个USB串口:/dev/ttyUSB0.
当一冲滑个串行卡或数据卡被侦测到时,它会被指定成为第一个可用的串行设备。通常是/dev/ttyS1(cua1)或/dev/ttyS2(cua2),这完成看原已内建的串口数目。ttyS*设备会被报告在/var/run/stab内。
PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC
可能是linux下的串口设备没有打开宴携,需要改变串口设备
的权限,或者根据文章头添加用户到组处理
可以通过以下命令 查看 板子上的硬件端口的内核设备名
该条命令会将 ttyUSB0所对应的硬件端口的kernel设备名 显现出来, 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0
cmd.sh如下:
./getUSB.py 调用当前路径下的getUSB.py这个Python语言,明确此次是哪个,ttyUSB0,或者ttyUSB1挂载在端口3-1.1上
getUSB.py:
完成之后 ,设置开机启动cmd.sh(在/etc/rc.local中设置)则每次开机之后,会从/dev/ttydata获取到固定端口的数据
方式一
写入内容如下:
方式二
我的硬件序列号:ATTRS{serial}=="FTSYWCXZ"这个号是唯一散祥腊的
可以通过/dev/usb_0打开串口设备
常用的匹配类型:
配置串口需要包含头文件
其中最核心的配置结构体为:
如何获取该结构呢?我们操作串口跟操作文件一样,也是调用 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 文件。
参考: