自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

转载 Linux下Makefile的简单编写与使用

一个工程文件中的源文件可能有很多,并且不同的功能、模块等都放在不同的目录中,常规的编译已经不能高效化的处理这样的问题,而Makefile就是为解决这一问题而来。

2022-08-30 14:14:46 943 1

转载 Linux内核下gitee的使用

git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。...

2022-08-30 14:12:43 831

转载 Linux 内核安全增强—— stack canary

per-cpu 变量的引入是为了实现per-task的stack canary, 每个cpu上同时只能运行一个进程/线程, per cpu变量可以随进程的切换而切换,故通过一个per-cpu变量完全可以为每个进程/线程解引用到不同的canary地址(后续称为per-cpu canary),以实现per-task的canary.默认stack canary使用全局符号(变量) __stack_chk_guard 作为原始的canary(后续称为全局canary), 在gcc/clang中均使用相同的名字...

2022-08-30 14:00:37 1599

转载 名词解释:剖析Linux进程调度器

结构来抽象,该结构包含了进程的各类信息及所拥有的资源,比如进程的状态、打开的文件、地址空间信息、信号资源等等。上述讲到的几个函数都是常用于调度时调用。此外,在创建新进程时,或是在内核抢占时,也会出现一些调度点。调度程序依靠几个函数来完成调度工作的,下边将介绍几个关键的函数。Linux内核提供了一些调度策略供用户程序来选择调度器,其中。结构很复杂,下边只针对与调度相关的某些字段进行介绍。内核默认提供了5个调度器,Linux内核使用。内核中主要的状态字段定义如下。...

2022-08-30 13:57:21 271

转载 利用OpenVSwitch在多台主机上部署Docker的教程

重启服务或重启主机后,你将获得一个具备连接冗余(link redundancy)的全网状网络,Docker服务可以在专用的IP范围(不会重叠)上运行容器,并且不需要在公网或内网网卡上暴露所有端口就能互联。糟糕的是,默认仓库里OpenVSwitch安装包不可用(或过期了),我们需要自己构建.deb文件(一次),然后分发给不同主机。我们将假定主机运行的是Ubuntu Server 14.04.02 LTS x64,对于其它系统,你可能需要修改下面提供的各项配置。无需多言,遵循官网提供的指南就行。...

2022-08-30 13:55:16 391

转载 最大传输单元MTU以及MTU优化

不同的 数据链路层,有不同的 MTU。如:以太网路 (Ethernet) 的 1500 个位元组,IEEE 802.3/802.2 的 1492 个位元组,光纤分散式数据介面 (FDDI) 的 4352 个位元组…。以 以太网路 (Etherner) 为例:一个 以太网路 帧(Frame),最大的长度为 1518 位元组 (octet),去掉表头与尾端数据后,载荷的最大资料长度则为 1500 octet,且资料最小长度需为 46 octet....

2022-08-30 13:51:34 1051

转载 Linux内核下tracers的实现原理与应用

本文以blk_update_request函数为例进行说明。kernel版本:5.10平台:arm64编译阶段。通过编译选项 -pg -mrecord-mcount 在每个支持ftrace的函数中插入bl 0 指令链接阶段。会根据重定位段将bl 0 指令地址重定位为_mcount函数地址。...

2022-08-29 20:08:24 654

转载 浅析Linux下IIC总线的使用

IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,一条时钟线SCL和一条数据线SDA,极大地简化对硬件资源和 PCB 板布线空间的占用,半双工通信,主从模式,支持一对多,被非常广泛地应用在 EEPROM 、实时钟、小型 LCD 等设备与 CPU 的接口中。整体时序I2C总线上的每个设备都有唯一地址,数据包传输时先发送地址位,接着是数据。一个地址字节由7个地址位(可以挂128个设备)和1个指示位组成(7位寻址模式),0表示写,1表示读。...

2022-08-29 20:06:15 1958

转载 面试常用:Linux内核级同步机制--futex

上述代码的问题是trylock和wait两个调用之间存在一个窗口:如果一个线程trylock失败,在调用wait时持有锁的线程释放了锁,当前线程还是会调用wait进行等待,但之后就没有人再唤醒该线程了。为了解决上述问题,linux内核引入了futex机制,futex主要包括等待和唤醒两个方法:futex_wait和futex_wake,其定义如下下文中的进程一词包括常规进程与线程。...

2022-08-29 20:04:54 3201

转载 手把手带你部署Ceph集群

Ceph作为开源的分布式文件系统,可以轻松地将存储容量扩展到PB以上并拥有不错的性能。Ceph提供对象存储、块存储和文件系统三种存储方式,如果不想花时间安装ceph,可以通过ceph-docker来部署Ceph集群,使用容器部署Ceph集群的一大好处就是不用为升级而烦恼,本篇文章将手把手带你快速在单节点上部署Ceph集群。本教程采用的Linux及相关软件版本如下:CentOS Linux release 7.8.2003版本Docker的版本是20.10.10。...

2022-08-29 19:45:06 6644

转载 Linux内核中ns级别的高精度计时方法

假设CPU的主频是2GHz,则经过换算后CPU执行一条指令的时间就是0.5ns,因为它依赖底层寄存器不受上层系统软件的干扰,因此只要读取这个寄存器就可以知道当前CPU总共执行了多少条指令,而将该指令总数累积起来换算成时间,就可以得到代码的执行耗时。接触过STM32等单片机的同学可能会知道,在STM32当中会提供多个定时器,比如普通定时器、高级定时器等,这些都是硬件定时器,可以提供计数、计数比较功能,计数频率由系统时钟经过分频后决定,而且计数过程中不受系统软件的影响,可以实现较高精度的计时。...

2022-08-29 19:42:52 1337

转载 Linux环境监控工具有哪些?

CPU内存磁盘IO网络系统负载其他工具。

2022-08-29 19:41:08 216

转载 Linux内核网络协议栈之ICMP协议

从技术角度来说,ICMP就是一个差错报告机制,其工作机理也比较简单,即当数据包处理过程出现差错时,ICMP向数据包的源端设备报告这个差错,它既不会纠正这个差错,也不会通知中间的网络设备。当产生畸形的,声称自己的尺寸超过ICMP上限的包也就是加载的尺寸超过64K上限时,就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使接受方宕机。不同的Type和Code值表示不同的ICMP报文类型,对应了数据包处理过程中可能出现的不同错误情况,不同类型的ICMP报文又分为差错报文和查询报文两种,如ICMP报文分类表所示。.

2022-08-29 17:37:41 703

转载 详谈静态库和动态库的区别

StaticLibrary.lib的大小为190KB,DynamicLibrary.lib的大小为3KB,静态库对应的lib文件叫静态库,动态库对应的lib文件叫【导入库】。动态库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。Linux下使用静态库,只需要在编译的时候,指定静态库的搜索路径(-L选项)、指定静态库名(不需要lib前缀和.a后缀,-l选项)。如果引用的静态库不是在同一解决方案下的子工程,而是使用第三方提供的静态库lib和头文件,上面的方法设置不了。...

2022-08-29 16:53:39 11744 1

原创 怎样搞懂Linux内核内存管理中的KASAN实现原理

KernelAddressSANitizer(KASAN)是一个动态检测内存错误的工具。它为找到use-after-free和out-of-bounds问题提供了一个快速和全面的解决方案。KASAN使用编译时检测每个内存访问,因此您需要GCC 4.9.2或更高版本。检测堆栈或全局变量的越界访问需要GCC 5.0或更高版本。目前KASAN仅支持x86_64和arm64架构(linux 4.4版本合入)。你使用ARM64架构,那么就需要保证linux版本在4.4以上。...

2022-08-29 16:43:09 745 1

转载 通用的Makefile源码解析

A. 在Makefile文件中确定要编译的文件、目录,比如obj-y += main.oobj-y += a/"Makefile"文件总是被"Makefile.build"包含的。解释:寻找"text"中符合格式"pattern"的字,用"replacement"替换它们。此时,我们需要把"clean"这个目标,设置为"假想目标",这样可以确保执行"make clean"时执行删除命令。如果当前目录下,恰好有名为"clean"的文件,那么执行"make clean"时就不会执行那些删除命令。...

2022-08-29 15:34:02 983

转载 深度探究Linux内核进程调度器

对此Con Kolivas感到很愤怒,离开了Linux内核开发社区,但是事实上从后面CFS调度器几个版本的修订来看,Con Kolivas的大方向是正确的,离开之后的Con Kolivas又开发了BFS(Brain Fuck Scheduler)来对抗CFS调度器。Linux之父选择了CFS调度器,它借鉴了Con Kolivas的楼梯调度算法和RSDL调度器的经验,由匈牙利人Ingo Molnar所提出和实现,并在Linux kernel 2.6.23之后取代O(1)调度器,名震江湖。...

2022-08-27 20:50:42 557

原创 Linux内核中断下半部工作队列(work queue)

queue_delayed_work 跟schedule_delayed_work 类似,区别在于schedule_delayed_work 是在系统默认的工作队列上执行一个work,queue_delayed_work需要自行指定工作队列。flush_delayed_work 等待一个delayed_work执行完毕。queue_work 跟schedule_work类似,区别在于schedule_work是在系统默认的工作队列上执行一个work,而queue_work 需要自行指定工作队列。...

2022-08-27 20:40:52 1752

原创 看完秒懂:Linux DMA mapping机制分析

Linux内核中提供了两种dma mapping的接口:Consistent mapping和Stream mapping。通常在使用consistent dma mapping时,首先需要通过。

2022-08-27 16:34:50 5326

转载 如何学好Linux内核?

很多为Linux内核“吐血而亡”的程序员都犯了一个通病,那就是一开始就陷入无穷无尽的细节,比如一开始就陷入源代码情景分析。情景分析这样的书,无疑是好书,但是你把《新华字典》从第一个字,背到最后一个字,你仍然写不出一篇作文。那么先来点真实的:学习Linux内核能上哪些岗位?有哪些阶段?怎么去学、该看哪些书呢?下面我们来论述学习Linux内核的各个阶段。...

2022-08-27 16:30:07 2061

原创 前端&后端程序员必备的Linux基础知识

操作系统(Operation System,简称OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石;操作系统本质上是运行在计算机上的软件程序;为用户提供一个与系统交互的操作界面;操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应用程序,而内核就是能操作硬件的程序)。我们上面已经介绍到了Linux,我们这里只强调三点。Linux是一种自由、开放源码的类似Unix的操作系统严格来说,Linux这个词本身只表示Linux内核一个编程领域的传奇式人物。......

2022-08-27 14:29:10 547

转载 一文搞懂内核块设备操作之ioctl系统调用过程

其实,总的来说,因为内核操作的敏感性,才会有系统调用这么一个概念,系统调用总结为下列几个步骤1. 应用程序调用系统调用接口;2. 程序由用户态通过中断陷入内核态,同时传递系统调用号;3. 查找系统调用表对应的操作4. 一系列封装找到底层的已设计好的接口函数。...

2022-08-26 22:19:56 1745

转载 Linux简单应用:消息队列源码分析

创建一个权限为0666(所有用户可读可写,具体查询linux权限相关内容)的消息队列,并返回一个整形消息队列ID,如果key值已经存在有消息队列了,则出错返回-1。创建一个权限为0666(所有用户可读可写,具体查询linux权限相关内容)的消息队列,并返回一个消息队列ID,如果key值已经存在有消息队列了,则直接返回一个消息队列ID。flag的值为 IPC_CREAT | IPC_EXCL:如果不存在key值的消息队列,且权限不为0,则创建消息队列,并返回一个消息队列ID。如果存在,则产生错误。...

2022-08-26 22:15:10 365

转载 内存管理:巨页HugePage

如果启动"always",那就是系统默认进行在分配巨页的时候,所需要的内存大于2MiB,将会默认分配巨页,请注意,分配的内存并一定都是巨页,巨页是按照某个配置项设置的"伪对齐",比如我自己实践的虚拟机,默认2MiB对齐(pmd中间页表项)。传统巨页的实现核心是提前预留巨页内存,但是在通过hugetlbfs分配传统巨页无法满足的时候,系统会从buddy分配物理内存,生成临时巨页,这些巨页因为也是通过hugetlbfs的方式使用,也属于传统巨页。内核完成了这套流程的代码,用户是不可能见的。...

2022-08-26 19:54:03 1677

转载 嵌入式工程师为什么要学习Qt?它有几种开发方式?

相对于以前的Qt版本,Qt4 的进步是巨大的,他不仅彻底的对高效易用的模板容器、高级的模型/视图功能、快速而灵活的二维绘图框架和强大的统一字符编码标准的文本查看和编辑类进行了大量的改进,更不必说对那些贯穿整个Qt类中的成千上万个小的改良。Matthias Ettrich在1998年加入公司,并且在当年9月,发布了Qt 1系列的最后一个版本——V1.40.199年6月,Qt 2.0发布,该版本有有一个新的开源许可协议——Q公共许可协议(QPL,Q Public License),他与开源的定义一直。.....

2022-08-26 19:51:35 2728

转载 Docker/Linux底层网络基础

运行着Linux内核的机器本身就是一台主机,有可能是网络报文的目的地,其收到的报文除了转发和丢弃,还可能被送到网络协议栈的上层(网络层),从而被自己(这台主机本身的协议栈)消化,所以我们既可以把它看做一个二层设备,也可以看做是一个三层设备。在简历了新的网络命名空间,并将某个进程关联到这个网络命名空间后,就出现了下图所示的内核数据结构, 所有网络栈变量都放入了网络命名空间的数据结构中。的一个重要作用就是打通互相看不到的协议栈之间的壁垒,它就像一条管子,两端分别连着不同的网络命名空间的协议栈。...

2022-08-25 17:58:05 302

转载 如何检查Linux系统下的Virtio 驱动

7.按 “↓” 键将光标调到 “Paravirtualized guest support”,并按 “Enter”,进入 Paravirtualized guest support 详情界面。14.按 “↓” 键将光标调到 “Network device support”,并按 “Enter”,进入 Network device support 详情界面。11.按 “↓” 键将光标调到 “Block devices”,并按 “Enter”,进入 Block devices 详情界面。

2022-08-25 15:36:51 1715

转载 全面总结Linux内核下的IIC子系统架构

Linux下的I2C体系结构分为3个组成部分:I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法(algorithm)上层的,与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等。I2C总线驱动:I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。

2022-08-25 15:32:31 959

转载 前端&后端程序员必备的Linux基础知识

操作系统(Operation System,简称OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石;操作系统本质上是运行在计算机上的软件程序;为用户提供一个与系统交互的操作界面;操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应用程序,而内核就是能操作硬件的程序)。我们上面已经介绍到了Linux,我们这里只强调三点。Linux是一种自由、开放源码的类似Unix的操作系统严格来说,Linux这个词本身只表示Linux内核一个编程领域的传奇式人物。

2022-08-25 13:52:04 345

转载 大厂程序员推荐的linux内核学习路线

什么是开源软件?什么是闭源软件?什么是自由软件?什么是 GPL 协议?什么是一切皆文件的设计?什么是内核?什么是发行版?各个发行版的区别特色?什么是 POSIX 标准?什么是 GNU 计划?哪些你喜欢的软件可以运行在 linux 吗?为什么国内很多厂商不愿意为 linux 开发软件?为什么玩 linux 需要各种改配置文件?什么是软件包?什么是包管理器?什么是 github?为什么会有这么多种桌面环境?如果你有一定的C语言编程基础,那么更好了,你还可以以 C语言为基础去进一步了解:什么是编译?

2022-08-25 13:47:37 1147

转载 何为音视频流媒体,音视频基础概念(建议收藏)

立体声有L,R两个声道组成,我们可以在L,R中分别填充相同的数据或者不同的数据,以达到更强的音质和可以同时在L,R听到不同的声音,排列顺序:L,R,L,R,L,R…垂直刷新率指的是屏幕上的图像每秒重绘的次数,刷新率越高,图像越稳定,越好点,对眼睛越好,不容易疲劳。75Hz以上不易觉察闪烁和抖动。是一种颜色编码方法,对于视频帧的裸数据的表示方式,其主要应用于优化彩色视频信号的传输,向后兼容老式黑白电视机。通过特定的压缩技术,将某个视频的视频流格式转换成另一种视频格式的视频流方式,一种减少字节的算法。

2022-08-25 13:45:24 706

转载 浅谈sysfs系统--文件和目录的创建

sysfs_get_sb函数的实现和aufs文件系统一样,通过调用内核提供的get_sb_single创建超级块对象。sysfs调用get_sb_single时,提供sysfs_fill_super 函数作为sysfs文件系统超级块的赋值函数。从第2章分析的知识点我们了解到,dentry代表着文件系统内部的层次关系,而包含dentry指针的结构kobject可以对应到sysfs文件系统的一个目录,这个dentry指针就是目录文件的dentry。1)调用sysfs_create_dir 函数创建目录文件。

2022-08-24 22:23:59 492

转载 LINUX驱动开发中的红外(IRDA)程序

红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在设计红外线遥控器时,不必要像无线电遥控器那样,每套(发射器和接收器)要有不同的遥控频率或编码(否则,就会隔墙控制或干扰邻居的家用电器),所以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。

2022-08-24 19:55:01 1271

转载 PCI设备驱动与虚拟网卡驱动源码分析

在使用sudo ifconfig xxx up/down和sudo insmod xxx,sudo rmmod xxx命令时,输出的结果可以通过开启另外一个终端观察,tail -f /var/log/kern.log,查看内核日志的输出,从而观察到各个命令的执行时,他们会去执行哪一个函数。执行前先把e1000卸载了。

2022-08-24 19:53:11 1302

转载 Linux磁盘小知识分享

Linux 无论划分多少分区,分别分给哪个目录使用,最终都属于一个根目录,这保证逻辑上 Linux 具有一个独立且唯一的文件结构,操作系统中任意分区都是文件系统的一部分。提示 device is busy,多为被挂载目录正在被使用,检查是否工作目录就是此目录,退出即可。指令:mount -a 是自动挂载生效,每次重启从 /etc/fstab 中自动挂载。文件数:ls -l 目标目录 | grep "^-" | wc -l。执行后分区具有挂载点,但重启后挂载点断开,尚未自动(永久)挂载。

2022-08-24 17:32:59 2448

转载 常见大厂面试题:进程的切换与进程控制(纯干货)

系统中处于就绪状态的进程可能有多个,通常把它们排成一个队列。

2022-08-24 15:25:50 1368

转载 Linux内核系统中进程如何管理控制

当然,许多系统服务将以守护(daemon)程序的形式出现,守护程序仅在后台运行,即使linux系统没有登录,linux系统也会在后台运行一些例行事务。ps 命令能够列举许多运行状态的详细信息,弊端是它只能提供ps 命令执行时刻的机器状态快照,也就是相对静态的,不能实时滚动最新数据。在某种情况下,我们只是想要停止一个进程,而不是终止它,那么可以使用Ctrl-z,即可停止前台进程,并转为后台。//表示有两个进程,分别为进程5198 和进程10129,各自对应的命令是bash命令和ps命令。

2022-08-24 15:22:58 245

转载 Linux内核逆向映射的演变与源码分析

在聊逆向映射之前,我们先聊聊正向映射好了,当你明白了正向映射,逆向映射的概念也就易如反掌了。所谓正向映射,就是在已知虚拟地址和物理地址(或者page number、page struct)的情况下,为地址映射建立起完整的页表的过程。例如,进程分配了一段VMA之后,并无对应的page frame(即没有分配物理地址),直到程序访问了这段VMA之后,产生异常,由内核为其分配物理页面并建立起所有的各级的translation table。

2022-08-24 15:20:32 185

转载 一文搞懂socket读写数据接口API

注意: 再启动一个客户端,尝试连接服务器,发现第二个客户端,不能正确的和服务器进行通信。分析原因,是因为我们accept了一个请求之后,就在一直while循环尝试read,没有继续调用到accept,导致不能接受新的请求 所以这是不科学的,需要采用下面的多进程和多线程版本的TCP网络通信。注意:recvfrom函数和sendto函数还可以用于面向连接的socket读写,只需要把最后两个参数都设置为NULL就可以了,因为我们已经知道对端的socket地址了,这就有点像下面要将的recv和send了。

2022-08-24 15:12:56 1973

转载 Linux操作系统面试总结

该注册函数是早期的注册函数,major是设备的主设备号,name是驱动程序的名称,而fops是默认的file_operations结构(这 是只限于file_operations结构)。cpu_init(CPU内部的初始化),board_init(x210开发板相关的初始化),interrupt_init(初始化定时器),env_init(环境变量有关的初始化),而线程不一样,线程拥有独立的堆栈空间,但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进。

2022-08-23 21:27:01 454

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除