Linux内核中多次出现likely()unlikely()的使用,他们的定义如下:

1
2
#define likely(x)     __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)

cpufreq动态调频

cpufreq概述

Linux Kernel主要通过三类机制来实现SMP(Symmetric Multiprocessing,对称多核)系统CPU core的电源管理:

  • cpu hotplug: 根据应用场景来up/down CPU
  • cpuidle framework: 当cpu上没有可执行任务时,就会进入空闲状态
  • cpufreq framework: 根据使用场景和系统负荷来调整CPU的电压和频率

本文记录git使用过程中用到的一些功能

Linux内核中,对于数据管理,提供了2种类型的双向链表,一种是使用list_head结构体构成的双向环形链表。

宏定义中#的功能

C/C++宏定义#中的功能是将其后面的宏参数进行字符串化操作,简单说就是在对它所引用的宏变量通过替换后在其左右各添加一个双引号。

下载QFtp源码

QFtp源码
gti clone https://github.com/qt/qtftp.git

编译QFtp模块

在QtCreator上编译出了点问题,只能在终端进行编译

  • 进入源码目录cd src/qftp,修改pro文件qftp.pro,修改如下

解压PMON源码pmon-loongson3.tar.gz

1
tar -xvf pmon-loongson3-nd-33j.tar.gz

配置交叉编译环境

  • 解压交叉编译工具gcc-4.4.0-pmon.tgz,配置环境

在嵌入式项目或者工控项目中经常会用到串口通讯,用到串口通讯可能就涉及到串口私有协议(类似 包头 + 帧类型 + 帧长度 + 帧数据 + 校验和 的形式)的解析。在Qt中经常用到QSerialPort类来进行串口数据收发,QSerialPort在串口数据可读时会释放readyRead()信号,接到这个信号再调用readAll()将缓冲区的数据全部读出来(串口数据量比较大,这个过程一般都是在一个独立的接收线程中进行处理)。

Linux Input子系统介绍

按键、鼠标、键盘、触摸屏等都属于输入(input)设备, Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了 input 框架,用户只需要负责上报输入事件,比如按键值、坐标等信息, input 核心层负责处理这些事件。

0%