![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux系统开发
文章平均质量分 58
主要为基于Linux操作系统的开发内容记录
龙赤子
15年开发猿,linuxer,分享经验,获得快乐. LCCZ_QRS
展开
-
一个C++ string使用问题的分析及解决
想的很简单,不断接收串口的字符,每收到一个就append到一个string中,遇到\n,就将当前string放到queue中,对string执行clear,然后继续接收下一个字符。因为当前这个使用方式,之前在其他模块代码中也是有类似的应用的,从来没出问题,因此就感觉更加奇怪了,也开始各种怀疑,甚至怀疑是不是编译时没有clean,怀疑\n是不是会截断,怀疑string对象是不是过早释放了,为此还加入了多个临时对象来验证。按说很简单,但是实现中,发现日志总是不全,更加奇怪的是本地打印是好的。原创 2023-11-27 19:18:13 · 533 阅读 · 0 评论 -
一个QT程序无法启动问题的分析与解决
一个QT锁创建失败带着程序无法重启的问题的分析与解决原创 2023-11-04 18:33:47 · 2115 阅读 · 0 评论 -
文件小注意
文件操作在软件开发中是很常见的一件事。虽然与它相关的工作看起来不怎么起眼,无非就是通过通过open、read、write、close几个调用搞定的事情,但也正是这种看似简单的工作,在稍加变化需求的场景中,会给你带来意想不到的麻烦。这里就记录本人最近关注到的几个点,做为小例子,分享给大家。多说一句,往往简单的事情会给人带来大麻烦,就是因为人的大脑会对简单或者认为简单的事情过于麻痹大意,先入为主,不加重视,导致往往只看到冰山一角。该怎么做,不用多说了,直接看实例。(本文都是基于Ubuntu系统)原创 2023-04-09 11:08:08 · 790 阅读 · 0 评论 -
应用调试之程序启动失败分析
一个应用无法启动问题的分析原创 2023-02-23 21:54:47 · 560 阅读 · 0 评论 -
关于软件测试的一些思考
1 第一个问题,以系统化的视角看待 类似项目管理和系统架构主题,将理论与经验结合,系统化、全方位、立体、整体、全面、由表入里、由浅入深考虑软件测试时, 应该如何构建测试系统以支撑最初的需求和要求?此时,该如何把握测试构建的方向?如何站在全局性的高度看待测试问题。 其实,这里所谓的角度问题还是重点在于如何做这个点上,用于指导如何做这件事。2 全局视图4W+H。What? Why? Where? Who? How? Why 为什么要进行软件测试? 构建测试系统的目的是什么?促成软件...原创 2021-02-01 20:14:34 · 387 阅读 · 0 评论 -
Illegal instruction 问题处理
Illegal instruction 直观解释----非法指令。表面看是CPU在执行指令过程中,发现指令非法,也就是不认识的指令或者无权限的指令。如果只是沿着这个思路,很容易陷入对编译器的信任上。其实,这个问题,也很可能是程序自己造成的。比如使用了嵌入汇编,那么编写者要对使用的指令负责。还比如堆栈、内存出错,此时,访问的指令可能是内存随机的数据或者非指令数据,这同样会导致CPU无法识别。网上看到一篇比较全的分析文章,放在这里供参考:https://www.cnblogs.com/arnoldlu/p/原创 2021-09-03 20:29:04 · 22490 阅读 · 0 评论 -
USB驱动需要了解的内容
仅为个人理解,错误之处,欢迎指正。硬件方面:USB接口,四根线,电源、地加差分D+ D-采用差分线可以提高数据可靠性和速率其实,对于驱动开发来讲,硬件方面了解这么多就可以了。但是,接触USB的人,大多还是认为USB是比较复杂的。这种复杂性来自于逻辑层面。为了进一步展开,再补充硬件方面的一些内容:其一,USB是串行总线,但计算机处理的数据都是以字节为基本单位的,虽然不一定算严格的并行吧,但是在物理层面,也就是接近硬件最底层,数据还是通过串并转换后,再在前面所述的差分线上传输原创 2021-08-21 00:05:59 · 513 阅读 · 0 评论 -
Linux 系统 errno 值及对应含义
终端设备上遇到一个FFMpeg错误,avformat_open_input返回-24。我们写应用,较小或者较大(负数)的错误码都预留给操作系统,这是一个好习惯。FFMpeg虽然有自己定义的错误码,但是部分错误使用了操作系统预定义的,个人感觉这样弄不太好。看到这个错误码,可以直接去查看操作系统的错误码定义。这里从errno_base (包含前34个)和errno头文件中拷贝了错误码定义,方便以后查看。可以看到,24是打开了太多文件。如果进程因为打开了太多文件或者是socket(尤其是socket,也原创 2021-09-12 08:28:05 · 493 阅读 · 0 评论 -
关于linux的两个奇特地方
一 我们再用linux系统时,很多时候是借助命令来完成工作的。有些命令的使用频率很高,比如cd和ls,一个是进入目录,一个是列出目录内容。我们也知道,命令其实都是一个一个的程序。执行命令,实际上很多情况下是shell替我们执行了命令对应的程序。但是,有一个命令例外,看到这里,不知大家猜出我说的是那个命令没?。。。。。。答案是cd命令。这个命令是内置命令,在应用程序中不存在单独对应的可执行程序。因为这一点,某些地方对它的使用比较特别。二 我们知道,为了能够减少可执行程序的空原创 2022-02-20 22:51:24 · 537 阅读 · 0 评论 -
掌控程序运行,你需要一台超级变速箱
计算机原理告诉我们,程序要运行,得转变成机器码,并存储到内存中,由CPU一条条提取,解释,并执行。编译原理告诉我们,程序可以通过编译器,转变为机器码。操作系统原理告诉我们,程序的加载、调度、退出等,由操作系统统一管理,并在其控制下进行。操作系统为啥可以做到这些,那是因为操作系统先运行,拥有配置CPU的权利,也就是掌握了先机,从而将自身变为超级核心,后来者则失去了进入核心的机会。你以为你的程序是完全按照你设定的逻辑执行的吗?也许在计算机的原始社会(没有操作系统时)是这样吧。在现代计算机世界,因原创 2022-05-01 20:13:49 · 199 阅读 · 0 评论 -
盗梦空间:在X86平台上构建ARM模拟器
需求来源于如何构建arm平台的Ubuntu文件系统。我们希望在ARM开发板上使用Ubuntu系统,那么就需要构建一个Ubuntu的根文件系统,基于该基础文件系统,进一步扩展开发。当然,也可能大部分的需求更多是来源于如何在host系统上构建arm环境,编译arm程序。殊途同归,问题都归结为一点,即如何在host系统上构建arm模拟环境。从上述构建文件系统需求出发,搜索到的资料无一例外的提到了chroot命令和qemu-arm-static安装包。具体思路是,安装qemu-arm-static安原创 2022-04-05 21:23:23 · 4212 阅读 · 3 评论 -
Linux的隔离技术
隔离基于内核提供的一些机制和策略虚拟化中,我们最终虚拟的是资源。在计算机中,典型的资源包括:CPU,内存,磁盘,网络,安全等。现代操作系统中,CPU资源基本都是被进程使用,内存为虚拟映射,磁盘一般表现为文件系统,所以上述资源可以进一步的表述为:进程、文件系统、网络、安全等。在Linux中,通过命名空间可以做到上述资源的隔离。首先,对于进程,作为系统内的执行实体,内核是以树形结构管理的。用户进程都是从祖先init进程继承而来。通过这棵树,形成了父进程、子进程、进程组、线程组、会话组等概念。通原创 2021-08-07 19:03:54 · 2342 阅读 · 0 评论 -
最全USB ID‘s 收录
实际开发中,常常需要与USB设备打交道,而USB设备类型多样,有:声卡、网卡、摄像头、蓝牙、鼠标、键盘、存储卡、WIFI、打印机、Modem.....等等等等一个系统中可能同时存在上述几个设备,如果区分各个设备呢?这就需要USB ID。每一个USB设备,在系统中无一例外都有一个标识,这个标识由productID+vendorID构成设备识别或是配置、调试,往往都需要通过上述标识明确是那个具体的USB设备。我们通过 lsusb命令可以列出系统中的USB设备,然后通过下面的列表,查找各个I.原创 2021-02-07 19:20:08 · 1247 阅读 · 1 评论 -
QT屏幕界面整体旋转效果图
QT可以通过Transformed方式整体旋转屏幕显示画面,比如通过环境变量方式如下配置:export QWS_DISPLAY="Transformed:Rot90..."其中90表示90度旋转。通过dump底层framebuffer中数据并编码为图片,可以直观看到QT整体旋转的效果。注意,该效果与实际屏幕最终显示可能不一致,比如横屏竖屏的差异。正常渲染到framebuffer中效果:90度旋转后效果图:180度旋转后效果图:270度旋转后效果图:可以看到,取的是原创 2021-01-26 19:59:14 · 1743 阅读 · 0 评论 -
拨号之 PPP NDIS RNDIS CDC ECM NCM QMI-WWAN GOBINET RMNET MBIM 区别
如果做3、4、5G的上网,常常会遇到上述几个名词,他们都跟拨号联网相关,总是弄得人云里雾里,这些概念到底是什么意思,或者有啥区别呢?这里结合网上资料,基于个人理解,再次整理,如有错误之处,欢迎指正。PPP 用于建立点对点链路。最初是用于慢速设备的,比如早期通过串行线上网。通过一套协议,维护硬件链路上的数据连接,并具备安全和认证特性,可建立计费模式。我们在PPP拨号脚本中也常常可以看到波特率、用户名、密码、认证方式等参数。现在的猫或者家用路由拨号上网,多用PPPoE,也用到了PPP,因为PPPoE就原创 2021-01-21 20:11:39 · 7102 阅读 · 1 评论