linuxcan程序write每次只能打一包

linuxcan程序write每次只能打一包,第1张

linux write 数据

linux write 数据,write每次最大能写多少字节的数据

北美黑胡桃

转载

关注

0点赞·576人阅读

背景

最近碰到一个线上的bug,具体情况是进程将24G左右的内存buffer写到磁盘上,但是每次write都写不完24G,然后重试导致磁盘写满,服务不可用。

在修这个bug的时候,对于到底write最大能写多少字节的数据斗模卖产生了浓厚的兴趣,写了一个测试程序基本上每次最多写到2G多一点。

在研究了一段内核代码后一切霍然开朗。

write限制

write函数在以下三种情况下可能写入的字节数小于指定的字节数:

在底层的物理介质上没有足够的空间

RLIMIT_FSIZE的限制

写入被信号打断

从内核代码来看,count在大于MAX_RW_COUNT的情况下,会赋值为MAX_RW_COUNT

而MAX_RW_COUNT是一个宏,展开为:INT_MAX &PAGE_MASK

INT_MAX也是一个宏,展开为((int)(~0U>>1)),也就是无符号数0取反后右移一位转换成int类型,也就是2^31.

PAGE_MASK也是一个空逗宏,展开为(~(PAGE_SIZE-1)),而PAGE_SIZE展开为(_AC(1,UL) <<PAGE_SHIFT),PAGE_SHIFT的值为12,也就是每页的大小是212,也就是说1左移12位,PAGE_SIZE的值为212,码誉然后PAGE_SIZE-1取反

最后MAX_RW_COUNT的值为INT_MAX &PAGE_MASK,也就是说MAX_RW_COUNT的值是int的最大值最后12位屏蔽掉,保持4K地址对齐

所以理论上讲,每次write可写的buff大小是231-212=2147479552,这也是与实际的测试结果相一致

LED 测试

蜂鸣器测试

执行lsinput查看按键所对应的输入事件

从lsinput的输出信息,得知按键KEY0 对应的输入事件是 /dev/input/event2 ,因此使用 od 或者 hexdump 命令读取 /dev/input/event2 文件,按下按键后会打印出事件内容:

接执行下面的指令可退出桌面程序。 psplash.sh 这个脚本会关闭以 Q 开头的 Qt 程序。

执行 ts_test 点击 Draw,就可以开始画图。

注意 : ts_calibrate 一般是针对电阻屏校准的。 使用 ts_calibrate

后会在 /etc 目录下生成一个坐标参考文件 pointercal。 如果你是电容屏,并且 /etc 目录下有 pointercal 这个坐标参考文件,请把它删除。否则可能影响触摸坐标上报的数据值。

进入睡眠/熄屏模式:

退出睡眠/亮屏模式:

这样可以像调试串口一样输入登录用户名 root,即可进入系统。这样能输入指令并返回结

果,表明 RS232 串口正常

Memtester 简单介绍

参数说明:

使用文件系统自带的 Memtester 测试工具申请 8MB 内存数量测试做 1 次 DDR 测顷扮帆试。

执行如下指令。

SD 卡写速度测试

SD 卡读速度测试

网速测试

默认开发板的 can 设备是还没有打开的,使用下面的指令打开 can 设备。

服务端:

同理, 客户端也是这样设置:

服务端使用 candump 指令接收来自 can0 的数据

将 SD 卡的第一个分区模拟成 U 盘

说明:使用含 Qt5 的文件系统,启动时插上 RGB 屏幕。

开发板进入系统后,插上鼠标会打印如下信息

ALSA(高级 Linux 声音架构)在 Linux *** 作系统上提供了音频和 MIDI(Musical Instrument

Digital Interface,音乐设备数字化接口)的支持。

amixer 的使用:

alsamixer 则提供一套

图形界面来控制雀雹音频设备,可以用键盘方向键来控制增减音量,打开或者关闭等

开发板系统音频输出功能默认是打开的,下面两条指令可不执行。

设置播放音量,执行如下命令,音量的单位是 dB,音量最小缺好为 0,最大为 127。

播放音频文件,执行下面指令

1、#ip link set canX down //关闭can设备;

2、#ip link set canX up //开启can设备;

3、#ip -details link show canX //显示can设备详细信息;

4、#candump canX //接收can总线发来的数据;

5、#ifconfig canX down //关闭can设备,以便配置

6、#ip link set canX up type can bitrate 250000 //设置can波特率

7、#conconfig canX bitrate + 波特率;

8、#canconfig canX start //启动can设备;

9、#canconfig canX ctrlmode loopback on //芦好庆回环测试;

10、#canconfig canX restart // 重启can设备;

11、#canconfig canX stop //停止can设备;

12、#canecho canX //查看can设备总陪握线状态;

13、#cansend canX --identifier=ID+数据 //发送数据;

14、#candump canX --filter=ID:mask//使用滤波器接袜信收ID匹配的数据


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存