GL-MT1300这款路由器目前在咸鱼上的价格还可以,有三个千兆口,颜值很高,双频wifi,不过处理器差一点,flash只有32MB。正好办公的网络环境比较复杂,买了一个来改善办公网络环境。

在编译安装ssr plus的过程中,遇到了一些问题,记录一下解决过程。

最近发现在开启了代理后,使用git push, git fetch时还是偶尔会等待很久,有时候急需上传和拉取代码时卡住很是头痛

Linux中的挂起、休眠,一般是指以下四种状态:

  1. STI(suspend to idle):是一种通用的、纯软件、轻量级系统睡眠状态
  2. Standby(power-on suspend):是一种适度的功耗节省状态,同时系统也可以比较快的唤醒
  3. STR(suspend to ram):提供了比较显著的功耗节省,系统中除了内存之外的部件都进入了低功耗状态
  4. STD(suspend to disk):提供最大程度的功耗节省

概述

工作队列(workqueue)是除软中断softirq和tasklet以外最常用的一种中断下半部执行机制,由内核统一管理。工作队列把推迟执行的任务交给内核线程来执行,其运行在进程上下文,允许重新调度,睡眠,这个内核线程被称为worker thread工作队列解决了软中断和tasklet执行时间过长导致系统实时性下降的问题,同时避免了驱动模块自身创建线程导致内核线程过多的问题。

在linux内核中,各个子系统之间有很强的相互关系,某些子系统可能对其他子系统产生的事件比较感兴趣,因此内核引进了notifier机制。内核实现notifier机制的代码位于kernel/notifier.c

背景

为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热插拔处理,电源管理等,Linux内核提出了设备模型(Driver Model)的概念。设备模型将硬件设备归纳、分类,然后抽象出一套标准的数据结构和接口,驱动的开发,就简化为对内核所规定的数据结构的填充和实现

I2C总线驱动

I2C总线驱动重点是I2C适配器(也就是SOC的I2C接口)控制器驱动,这里涉及到两个重要的数据结构:i2c_adapter和i2c_algorithm,Linux内核将SOC的I2C控制器抽象成i2c_adapter,i2c_adapter定义在include/linux/i2c.h中,结构体的内容如下:

相关概念

DMA是Direct Memory Access的缩写,就是绕开CPU进行内存的访问,DMA控制器就是用来协助CPU在memory和memory或者memory和设备之间搬运数据

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的电压和频率
0%