linux
文章平均质量分 94
我才是鳴海步
新显实验室毕业的机械专业程序猿
展开
-
Web服务无法响应但本地业务正常的故障排查记录
现场反馈我们的设备存在不定时的情况下,会出现Web服务无法正常访问的情况。经过简单的现场排查,发现了呈现以下特点:a. 重启设备后,无法正常访问的情况能够解除。b. 在出现问题的时候,设备本身的与WEB无关的业务是能够正常运行的.c. 在出现问题的时候,有时候只是WEB服务无法访问,有时候所有通过私有协议交互端口均无法访问。d. 在出现问题的时候,即便是有时候所有通过私有协议交互端口均无法访问的场景,过很长时间后,通过配置工具的连接还是能够恢复正常的,但WEB服务只要坏过就无法恢复了。原创 2022-10-21 22:07:13 · 1173 阅读 · 0 评论 -
ARM应用调试打印的耗时分析
1. 问题背景在多个微服务子程序调试的时候,发现一个奇怪的问题。在Shell登陆信号机手动启动各个微服务程序的时候,一切都响应正常。但是打包成固件包,上电启动的时候,在应用配置稍微复杂一些的情况下,就会出现频繁的RPC通信超时获取不到信息的情况。由于每个微服务程序不是直接通过启动脚本启动的,而是通过一个管理微服务的程序间接启动。管理微服务程序(Manager Microservice Program, MMP)通过fork + exec的方式将启动信息传递给子进程,从而作为父进程能够拿到子进程的退出状.原创 2021-04-29 14:25:55 · 445 阅读 · 0 评论 -
fork error 和 create thread failed 的另一种可能需要关注的点
1. 背景问题已经伴随了一阵子,板子在free命令看着还有很多剩余空间的时候,却经常出现:fork: Cannot allocate memory并且发现有时候,还会存在这样的报错:CreateThread() failed! Resource temporarily unavailable2. 问题分析网上大多数的排查方式指向的是pid数量达到了最大值,类似于下面这个连接。pid max导致fork: Cannot allocate memory 的分析及解决办法,但是实际上整个.原创 2021-04-14 17:44:13 · 880 阅读 · 2 评论 -
ARM Linux 驱动入门及手把手教你简单驱动书写
ARM Linux 驱动入门及手把手教你简单驱动书写0. 本文会讲解的内容自己写驱动需要的材料简单的介绍编译驱动的Makefile文件写一个简单的驱动,并告知如何查看是否正确加载介绍驱动常用的几个回调指针写一个驱动,使用ioctl,将应用态和内核态进行交互1. 自己写驱动需要的材料对应平台的交叉工具链,本文中的工具链是(arm-at91-linux-gnueabi-gcc)对应平台的可编译的内核,即进行过menuconfig的内核源码。(与网上下的内核源码包的主要区别是menuco.原创 2021-03-25 17:32:55 · 2224 阅读 · 0 评论 -
嵌入式软件开发调试问题常用方法及案例分析
1. 常用调试工具介绍网络问题调试工具:tcpdump有源码情况下调试:arm-linux-gnueabihf-gdb + arm-linux-gnueabihf-gdbserver系统调用调试:strace类任务管理器工具:mpstat,pidstat2. 逐个工具介绍2.1 网络问题调试工具:tcpdump语法:tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-原创 2021-02-01 11:51:22 · 975 阅读 · 1 评论 -
ARM Linux CAN 异常排查步骤
ARM Linux CAN 异常排查方法1. 背景项目上经常有反馈,说我们的CAN总线相关设备不受控,或者控制板重启也没用。登陆系统后查看,会发现经常出现CAN通信异常或超时的情况,由于我们的控制程序在CAN总线上连续6秒接收不到信息就会异常退出。所以表象上,经常只能看到CAN总线超时退出的程序打印日志。这样显然是不利于问题偏差的,如何更容易定位问题,弄清哪里坏了,是现在需要解决的问题。本文最后会提供一个基于ARM Linux CAN的问题排查方法。2. 进一步探索后续发现我们使用的libsoc.原创 2020-12-25 21:25:56 · 5261 阅读 · 2 评论 -
基于C++11的高精度多级时间轮定时器
定时器通常包括至少两个成员:一个超时时间(通常采用相对时间或者超时时间)和一个超时时间到达后的一个回调函数。有时候还可能包括回调函数被运行时须要传入的参数,以及是否又一次启动定时器,更改定时器的超时时间等。假设使用链表作为容器来串联全部的定时器。则每一个定时器还要包括指向下一个定时器的指针成员。进一步,假设链表是双向的,则每一个定时器还须要包括指向前一个定时器的指针成员。基于排序链表的定时器使用唯一的一条链表来管理所有的定时器,所以插入操作的效率随着定时器的数目增多而降低。而时间轮使用了哈希表处理冲突的思想原创 2020-12-18 16:25:05 · 6058 阅读 · 11 评论 -
函数sync、fsync与fdatasync的总结整理
一、术语解释脏页:linux内核中的概念,因为硬盘的读写速度远赶不上内存的速度,系统就把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存,linux是以页作为高速缓存的单位,当进程修改了高速缓存里的数据时,该页就被内核标记为脏页,内核将会在合适的时间把脏页的数据写到磁盘中去,以保持高速缓存中的数据和磁盘中的数据是一致的。内存映射:内存映射文件,是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函数 (CreateFileMapping)。内存映射文件与转载 2020-10-16 15:32:29 · 680 阅读 · 0 评论 -
通过编写程序修改 linux 登陆密码
背景最近本组有需求需要通过程序能够修改用户的登陆密码。在完整的 linux 系统中,可以通过 passwd 指令实现,但是嵌入式系统中一般为了精简,不会将此命令暴露出来,所以我们只能使用别的方式修改登陆密码。linux passwd 密码构成root:Shheg7V0sDMEk:0:0:root:/root/:/bin/sh/etc/passwd 存放用户信息,由 6 个冒号组成 7 个信息。用户名密码(x 表示加密密码)UID(用户标识)GID(组标识)用户全名或原创 2020-09-11 17:21:25 · 440 阅读 · 0 评论 -
VSCode加速自动补全和跳转语句,实现秒补全和秒跳转
1 你是否有如下问题,如果遇到过如下困难,可以参考一下本文章觉得VSCode的自动补全功能很鸡肋,经常是自己敲了个首字母等了好久才跳出来,还不如自己打完。觉得VSCode的跳转功能在遇到代码很多的情况下,也需要等待很久,体验很差,甚至可以去泡杯咖啡。VSCode用久了后,觉得自己的C盘空间越来越小,空间越来越不够用了。如果以上问题你都感同身受,那么如果你符合以下一个条件,那么就能实现秒跳和秒补全你是否有一个编译服务器或者性能高的服务器/电脑,如果有,那么恭喜你。如果没有,有兴趣的话可以继续原创 2020-09-04 10:47:34 · 22346 阅读 · 9 评论 -
tar.gz包中保证同内容文件hash一致的打包方式
问题背景同样的文件两次tar.gz打包生成的tar包hash值不一致,但是我们的需求是文件二进制内容一致的时候,tar包应该hash一致。文件根因分析tar.gz打包的时候,会把文件的组名,排列顺序,用户归属,修改时间,tar归档包的生成时间信息均打入。解决办法 tar --sort=name --owner=root:0 --group=root:0 --mtime='2020-09-03T08:00:00Z' -cf ../mmmm.tar ./* gzip –n mmm.tar通过强制原创 2020-09-03 11:41:14 · 1169 阅读 · 0 评论