摘要:sed, 是stream editor的缩写,顾名思义,就是个非交互式行编辑器,有以下特点: 它能执行与编辑器 vi 和 ex 相同的编辑任务 sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上查看输出 没有破坏性,它不会修改文件,除非使用 shell 重
阅读全文
摘要:最近在调gps模块,要把代码里打印的NMEA的msg给抓出来,单独存在一个文件里,素来听闻awk的强大,这次打算借这个机会学习一波: 也就是说,大概是从下面这样的log中,过滤出$开头的所有行,并删除每一行前面的无关内容: 2019年 02月 28日 星期四 12:02:04 CST 2019年 0
阅读全文
摘要:popen和system都可以执行外部命令。 popen相当于是先创建一个管道,fork,关闭管道的一端,执行exec,返回一个标准的io文件指针。 system相当于是先后调用了fork, exec,waitpid来执行外部命令 popen本身是不阻塞的,要通过标准io的读取使它阻塞 system
阅读全文
摘要:cat /proc/uptime 查看系统运行时间,以及空闲时间,由此可计算平均空闲率 内存相关: 查看系统各服务内存占用procrank: 这里着重关注Pss和Uss, Pss是按比例计算共享库的大小后该service占用的实际内存,Uss是单个进程的全部私有内存,检测是否有内存泄漏就看这个值的增
阅读全文
摘要:这里分享一个小的tip, 以i2c driver为例: 我们可以看到内核里有很多个版本的i2c driver,如何确定哪个driver是我们平台上在用的呢? 看我们内核的配置 .config来确定,比如cat .config | grep I2C | grep y 另外一个方式是直接搜内核的相关符号
阅读全文
摘要:本篇其实只是简单探讨一个小小的问题:linux应用层在打开一个输入设备节点之后会有可能收到之前缓存的事件吗? 比如说,开机之后按按键,但是GUI还没起来,这些按键事件哪去了?会不会在GUI起来后还存在从而导致GUI误动作? 答案是:不会!打开一个输入设备的fd, 会对应成为输入设备的一个client
阅读全文
摘要:内核配置过程说明 export ARCH=arm64 make ARCH=arm64 hw_defconfig 就会根据arch/arm64/configs/hw_defconfig文件为hw开发板选择对应的内核配置,执行完后会在kernel/linux/下生成一个基础的.config文件。生成过程
阅读全文
摘要:关于总线: soc上的控制器和IP, 这些设备是挂在系统NOC总线上的,就是可以直接通过内存寻址,没有真正的总线连接它们。因此这些设备是platform device. 对应的驱动是platform driver. 这个系统总线是platform bus. 关于platform bus是如何匹配pl
阅读全文
摘要:为什么要mknod ? Linux一切皆文件,系统与设备通信之前,要建立一个存放在/dev目录下的设备文件,默认情况下就已经生成了很多设备文件,有时候自己手动新建一些设备文件,这就会用到mknod。mknod 的标准形式为: mknod DEVNAME {b | c} MAJOR MINOR 主次设
阅读全文
摘要:Linux驱动的三个概念:设备,驱动,总线; 什么是设备?如何理解设备? 在设备树(device tree)中的每一个节点都代表一个设备,每个设备都在/dev下面有自己的一席之地(确认一下这句话?) 从物理的角度看,一个要被控制的对象就是一个设备 什么是驱动? 我们写的驱动程序,编译出来的ko是驱动
阅读全文
摘要:mount有两重含义: 代表一种动作,另外一个是 linux中有个命令就叫mount. 下面一起来看一下,从我发现的一个问题出发: 我在系统的启动脚本中想添加一些能让weston正常启动所依赖的资源,比如一个叫做X11/xkb的目录, 然后发现,在启动weston之前总是无法成功的执行 mkdir
阅读全文
摘要:#include <sys/timerfd.h> int timerfd_create() int timerfd_settime() int timerfd_gettime() timerfd的好处在于可以通过epoll来判断定时事件是否ready.
阅读全文
摘要:系统调用是操作系统提供给用户的操作接口 linux的系统调用一般是通过软中断实现从用户态到内核态的切换 linux 系统API一般是一个或者多个系统调用的组合实现,需要include <unistd.h> 某些C库函数不依赖任何系统调用,比如atoi, strcpy等,无需向内核请求任何资源 某些C
阅读全文
摘要:偶然想起之前项目里面遇到的一个操作合成结果翻转导致的画面hung死的问题,一时有点记不清了,后面看了细节之后再补充吧。 反正借着这个点,思考和总结一下线程安全函数和可重入函数的区别和联系,它们已经在我的白板上待了很长时间了。 这里补充一下之前那个bug的具体原因:首先场景是用户点击gui上的屏幕旋转
阅读全文
摘要:本文搬运自: https://izualzhy.cn/mmap https://introspelliam.github.io/2017/09/19/code/Linux%E5%86%85%E5%AD%98%E6%98%A0%E5%B0%84%E5%87%BD%E6%95%B0mmap%E5%87%
阅读全文
摘要:在一些嵌入式设备上,把某些特定的线程绑定在特定的核上,减少核间切换,有可能获得更高的性能 #define _GNU_SOURCE //necessary #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unis
阅读全文
摘要:linux中一切皆文件,文件皆可读写,读写即IO. 因此IO在linux中绝对是一个重要的角色。 针对IO是否是同步/异步,阻塞/非阻塞,以及IO复用等,以下是5种IO模型的总结 1、同步阻塞式IO 这个最好理解: 我们举个读取鼠标事件的例子,如下: 首先先找到这个输入设备,以及它的设备名 ls /
阅读全文
摘要:前面分析wayland的代码时,发现其使用了双向链表这个结构,后来发现和内核中的list基本一模一样,所以这里单开一个文章分析一下内核中的环形双向链表的使用。 先回忆一下我们日常定义的链表,基本上都是结构体A里包含一个指向next的A的指针。这样带来的一个最大的问题就是不通用。也就是明明链表的增,删
阅读全文
摘要:gcc -E -dM - </dev/null | grep "STDC_VERSION" 或者 printf("%ld\n",__STDC_VERSION__); printf("%ld\n",__cplusplus); 对应关系如下 如果没查到,则默认是c89的标准; 如果是#define __
阅读全文
摘要:最近在树莓派上的开发有点多,害怕哪天不小心硬件挂了,我的数据就全没了,所以开始着手考虑备份的事情。 由于这个不是目前工作的重点,所以就采用了最为简单粗暴的办法,把整个/home/pi目录打包,然后拷贝到我的移动硬盘里面。现在先这么做,后面有空再研究更好的办法 压缩的命令: tar -czv -f p
阅读全文