自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 一文掌握InfiniBand技术和架构

InfiniBand也是一种分层协议(类似TCP/IP协议),每层负责不同的功能,下层为上层服务,不同层次相互独立。IB采用IPv6的报头格式。其数据包报头包括本地路由标识符LRH,全局路由标示符GRH,基本传输标识符BTH等。...

2022-08-30 14:24:15 875 1

转载 如何合并 multi-generational LRU

Merging the multi-generational LRU很多类型的内核改动都可以在邮件列表中讨论决定下来。然而,有些类型的 patch 就很难通过这种方式完成实现。它们非常大,而且具有侵入性,需要相关开发者的实际聚在一起讨论。multi-generational LRU 工作(MGLRU)就属于这种类型,这就是为什么它是 2022 年 Linux 存储、文件系统、内存管理和 BPF 峰会(LSFMM)上一整个小时会议的主题。...

2022-08-30 14:20:10 402

原创 在运行的进程中添加执行系统调用

这里先简单提一嘴,我们可以选地址范围为7fc0530b2000-7fc0530de000的libc的vma作为在目标进程执行系统调用的“中转”,也就是说,每次我们想要在目标进程中执行一个系统调用时,先将这个libc的vma对应的大小的内存保存起来,然后将程序写入这个vma起始位置,然后跳转到那个位置执行,最后,将第一步保存的代码写回到这个vma对应位置。为了简化注入的代码,我以注入最小的代码为例,注入一个系统调用,并让目标进程执行这个系统调用,如:打开一个文件、进程文件映射等。...

2022-08-30 13:36:52 390

转载 解析Linux内核内存管理与漏洞利用

网上已经有很多关于Linux内核内存管理的分析和介绍了,但是不影响我再写一篇:) 一方面是作为其他文章的补充,另一方面则自己学习的记录、总结和沉淀。所谓条条大路通罗马,本文只作为其中一条路,强烈建议想去罗马的朋友看完文末所列举的参考文章。在我们平时学习相对复杂的系统时,仅仅了解实现文档只能算是走出第一步;阅读代码并且上机调试可以将理解加深一个层次,知道“what's inside“;不过,如果能从攻击者的角度去分析和利用(滥用),那理解又会加深一个层次,真正做到”inside out“。...

2022-08-29 21:42:50 487

转载 2022年嵌入式Linux的进展

Embedded Linux Conference(ELC)的一个常规内容是会议组织者 Tim Bird 对嵌入式 Linux 状况的更新。我已经有好几年没有机会参加了,所以这次德克萨斯州奥斯汀举行的 2022 年北美开源峰会(OSSNA)我就去参加了一下。OSSNA 是一个总括性的会议(umbrella conference),现在包含了 ELC 以及其他很多内容。...

2022-08-29 21:40:47 218

转载 常用到的Linux防火墙——iptables/firewalld

firewalld和iptables都是用来管理防火墙的工具(属于用户态)来定义防火墙的各种规则功能,内部结构都指向netfilter网络过滤子系统(属于内核态)来实现包过滤防火墙功能。firewalld对于进入系统的数据包,会根据数据包的源IP地址或传入的网络接口等条件,将数据流量转入相应区域的防火墙规则。对于进入系统的数据包,首先检查的就是其源地址。firewalld防火墙是Centos7系统默认的防火墙管理工具,取代了之前的iptables防火墙,也是工作在网络层,属于包过滤防火墙。...

2022-08-29 21:38:35 1583

转载 Linux设备树框架及驱动移植实例

当然,通常我们关心的只是内核中的中断号,具体这个中断号是怎么找到相应的中断源的,我们作为程序员往往不需要关心,除了在写设备树的时候,设备树就是要描述嵌入式软件开发中涉及的所有硬件信息,所以,设备树就需要准确的描述硬件上处理中断的这种树状结构,如此,就有了我们的。此外,还有一些Linux内核定义好的,一类设备通用的有默认意义的属性,这些属性一般不能被内核自动解析生成相应的设备信息,但是内核已经编写的相应的解析提取函数,常见的有 "我们可以找到它用来描述设备信息的结构体,可以看出,驱动中用于匹配的结构使用的。.

2022-08-29 20:17:42 505

转载 详细解读Linux存储性能观测中的iostat命令

报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息。特点。

2022-08-29 20:00:54 533

转载 深入Linux内核架构——数据结构(vm_area_struct,优先树)

总结:每一个inode都有一个唯一的address_space,每一个address_space都有唯一一个专属prio_tree_root,其上的结点类型为prio_tree_node,vm_area_struct中share中的raw_prio_tree_node类型成员在插入时会转化为prio_tree_node,插入方法如上文讨论,类似于基准树,并且上文中的区间的左区间保存在vma->vm_pgoff,右区间可以通过vma计算出来,这些在插入时都是必要信息。图4-9说明了内存中这种关联的具体情况。.

2022-08-29 19:51:50 729

转载 NUMA模型及其基本数据结构

如果将mapping置为1,则该指针并不指向address_space的实例,而是指向另一个数据结构(anon_vma),该结构对实现匿名页的逆向映射很重要,该结构在。系统中所有结点的页帧是依次编号的,每个页帧的号码都是全局唯一的(不只是结点内唯一)。node_present_pages指定了结点中页帧的数目,而node_spanned_pages则给出了该结点以页帧为单位计算的长度。首先,内存划分为结点。内核说页是热的,意味着页已经加载到CPU高速缓存,与在内存中的页相比,其数据能够更快地访问。...

2022-08-29 19:49:21 295

转载 Swap机制以及如何手动释放swap和内存

网上对HugePage的解释有很多,大家可以检索阅读。简单来说,计算机内存是通过表映射(内存索引表)的方式进行内存寻址,目前系统内存以4KB为一个页,作为内存寻址的最小单元。随着内存不断增大,内存索引表的大小将会不断增大。一台256G内存的机器,如果使用4KB小页, 仅索引表大小就要4G左右。要知道这个索引表是必须装在内存的,而且是在CPU内存,太大就会发生大量miss,内存寻址性能就会下降。...

2022-08-29 16:47:00 6089

转载 内存错误检测工具——kfence工作原理分析

Linux 5.13引入一个新的内存错误检测工具:KFENCE(Kernel Electric-Fence,内核电子栅栏)。KFENCE是一个低开销的、基于采样的内存错误检测工具。KFENCE检测越界访问、释放后使用和非法释放(包括重复释放和释放的起始地址不是分配的起始地址)这3种错误。KFENCE和KASAN是互补的。KASAN可以检测KFENCE支持的所有缺陷种类。KASAN依靠编译器插桩,对每个内存访问都检查地址的合法性,更精确,但是导致内核的性能下降,所以KASAN只适合测试环境。...

2022-08-29 16:39:47 817

转载 内核大佬讲述,Linux内核源码分析方法(建议收藏)

Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内。如果要扩展自己知识的广度,我们需要多接触其他人编写的代码,尤其是水平比我们更高的人编写的代码。通过这种途径,我们可以跳出自己知识圈的束缚,进入他人的知识圈,了解更多甚至我们一般短期内无法了解到的信息。Linux

2022-08-29 15:35:29 4494

转载 学了三个月Linux内核,面试薪资直接翻番,我才明白TA的重要性

目录为什么要学习Linux内核,这个问题我相信很多人都不一定答得上来。只是从技术层上讲,对内核的研究会加深我们的技术的理解,更多的理解源码,是从思想和思考方式上的优化。而在一般的敲代码过程中对于它的实际使用场景并不多。用一句很吊的话说,不懂内核你可以成为一名优秀的码农,但是成不了一名优秀的程序员。那回到为什么要学的问题上来。现阶段国内大学的计算机教学情况是不容乐观的,教材过时或者实战性不够成为通病,而且大多是理论的灌输,并没有对计算机的原理和机制进行深入的解析,我们并没有真正理解操作系统的工作原理。...

2022-08-27 22:28:27 550

转载 一文弄懂Linux Framebuffer应用编程

BPP,像素深度,指存储每个像素所用的位数,通常值为16,24,或32。ioctl功能非常强大、灵活,不同驱动程序内部会实现不同ioctrl,APP可以使用各种ioctl跟驱动程序交互,如传数据给驱动程序,也可以从驱动程序中读取数据。LCD驱动程序给APP提供2类参数:可变的参数fb_var_screeninfo,固定的参数fb_fix_screeninfo。LCD驱动程序给APP提供2类参数:可变的参数fb_var_screeninfo,固定的参数fb_fix_screeninfo。...

2022-08-27 20:01:13 1749

转载 【超细节】十年码农讲述Linux网络新技术基石——eBPF and XDP

eBPF/XDP 作为Linux网络革新技术正在悄悄改变着Linux网络发展模式。eBPF正在将Linux内核转变为微内核,越来越多的新内核功能采用eBPF实现,让新增内核功能更加快捷高效。总体而言,基于业界基准测试结果,eBPF 显然是解决具有挑战性的云原生需求的最佳技术。...

2022-08-27 19:41:41 964

转载 剖析ARM中断控制器与GIC中断控制器

目录。

2022-08-27 16:38:55 649

转载 Linux中断后半部分执行的工作机制

通过重复执行这样的操作,重新触发的软中断也会被执行。如果软中断本身出现的频率高,再加上又有将自己重新设为可执行状态的能力,那么可能会导致用户空间进程无法得到足够的处理器时间,因而处于饥饿状态。已调度的tasklet(等同于被触发的软中断)存放在两个单处理器数据结构:tasklet_vec(普通tasklet)和tasklet_hi_vec(高优先级的tasklet)中。如果正在运行,那么现在就不要执行,跳到下一个待处理的tasklet去,因为同一时间里,相同类型的tasklet只能有一个执行。......

2022-08-27 14:35:53 788

转载 Linux内核中断上半部处理程序

上面的例程存在问题,因为其实现往往是简单禁止、允许中断(x86下,local_irq_disable cli指令,local_irq_enable sti指令),如果在这之前已经禁止中断,调用该例程后,将无条件恢复中断。上面3个函数调用可以嵌套,但在一条指定的中断线上,对disable_irq()和disable_irq_nosync()的每次调用,都需要相应地调用一次enable_irq()。此外,因为进程是以进程上下文的形式连接到内核中,因此,在进程上下文可以睡眠,也可以调用调度程序。...

2022-08-27 14:33:01 375

转载 Linux虚拟字符设备globalmem实例分析

这里"/dev/glbalmem" 是要创建的逻辑设备名称,c表示char device(字符设备),230是主设备号,0是次设备号(如果只有1个设备,次设备号通常为0)。globalmem的读写操作,主要是让设备结构体中的mem[] 与用户空间交互,随着访问的字节数变更,更新文件读写偏移位置。globalmem的读写操作,主要是让设备结构体中的mem[] 与用户空间交互,随着访问的字节数变更,更新文件读写偏移位置。globalmem的主设备号为230,这个正是我们在驱动程序中指定的主设备号。...

2022-08-26 20:42:34 250

原创 Linux内核抢占实现机制分析

2.6新的可抢占式内核是指内核抢占,即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。在2.5.4版本之前,Linux内核是不可抢占的,高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核。与此相反,一个可抢占的Linux内核可以让Linux内核如同用户空间一样允许被抢占。...

2022-08-26 20:35:36 531

转载 详解Linux下的串口

异步串行是指UART(UniversalAsynchronous Receiver/Transmitter)通用异步收发传输器,通信双方接三根线,RX、TX和GND,TX用于发送数据,RX用于接受数据,双方收发交叉对接,支持全双工方式,包含TTL电平的串口和RS232电平的串口。RS-485与RS-422的不同还在于其共模输出电压是不同的,RS-485是-7V至+12V之间,而RS-422在-7V至+7V之间,RS-485接收器最小输入阻抗为12kΩ、RS-422是4kΩ;Linux的串口表现为设备文件。.

2022-08-26 14:03:21 8430

转载 Linux内核高危提权漏洞,这些版本快升级

据介绍,本地用户可以将自己的数据注入敏感的只读文件,消除限制或修改配置以获得更高的权限。有研究人员通过利用该漏洞修改 /etc/passwd 文件进行了举例,修改后可直接取消 root 用户的密码,然后普通用户使用 su root 命令即可获得 root 账户的访问权限。Max 表示,“脏管道”漏洞与几年前的“脏牛”类似,所以采用了相似的名字,不过前者更容易被利用。因为非特权进程可以将代码注入 root 进程。最后,建议各位检查所使用的 Linux 服务器的内核版本,若是 5.8 以上的版本请尽快升级。..

2022-08-26 13:58:53 242

转载 如何在运行的进程中添加执行系统调用

这里先简单提一嘴,我们可以选地址范围为7fc0530b2000-7fc0530de000的libc的vma作为在目标进程执行系统调用的“中转”,也就是说,每次我们想要在目标进程中执行一个系统调用时,先将这个libc的vma对应的大小的内存保存起来,然后将程序写入这个vma起始位置,然后跳转到那个位置执行,最后,将第一步保存的代码写回到这个vma对应位置。为了简化注入的代码,我以注入最小的代码为例,注入一个系统调用,并让目标进程执行这个系统调用,如:打开一个文件、进程文件映射等。...

2022-08-26 13:50:09 221

转载 Linux内核黑科技——mmap实现详解

从上图可以看出,mmap 的原理就是将虚拟内存空间映射到文件的页缓存,我们可以知道:对文件进行读写时需要经过页缓存进行中转的。所以,为了降低分析的难度和让读者能够更容易看懂,在分析源码时更注重知识点的实现,而在不影响理解的情况下,我会忽略一些细节问题。其用途是将文件映射到内存中,然后可以通过对映射区的内存进行读写操作,其效果等同于对文件进行读写操作。系统调用并没有直接将文件的页缓存映射到虚拟内存中,所以当访问到没有映射的虚拟内存地址时,将会触发。可以通过将文件的页缓存映射到虚拟内存空间来实现对文件的映射。.

2022-08-26 13:46:20 3044

原创 Linux内核性能优化实战演练

整理了一些个人觉得比较好的Linux相关学习书籍、Linux内核视频资料共享在群里面,有需要的可以自行添加哦!】小编推荐自己的Linux内核源码交流群:【套路篇:磁盘 I/O 性能优化的几个思路。

2022-08-25 16:46:30 697

转载 一文了解网络数据在内核中流转过程

完成相关处理后,调用 ip4_input 函数,数据在 lwIP 组件的 IP 层对数据解包,进行相应处理之后,还会调用 tcp_input 函数,进入 lwIP 组件的 TCP 层对数据解包。lwIP 的 api 层是 netconn 的功能代码所在的层,负责为上层代码提供 netconn 的 api。此外还有一些函数也是协议栈需要的函数,特别是 sys_thread_new 函数,不但协议栈在初始化时需要用到,在后续我们实现各类基于 lwIP 的应用时也会用得到,它的具体实现如下。

2022-08-25 15:50:26 926

原创 Linux添加新硬盘和扩容已有硬盘

(格式说明:/dev/sdb1 代表哪个分区, ext3是该分区的格式, defaults 是挂载时所要设定的参数(只读,读写,启用quota等),输入defaults包括的参数有(rw、dev、exec、auto、nouser、async) , 1是使用dump是否要记录,0是不要。然后左边菜单栏点击硬盘,在弹出的对话框选中硬盘,并点击扩展按钮,然后在弹出框中的最大磁盘大小修改未所需要的磁盘大小,比如我现在需要扩容30G,原本的磁盘大小是20G,所以我这里将原本的20G修改成50G,然后点击扩展。

2022-08-25 15:45:06 1338

原创 如何看待2022届秋招嵌入式开发岗位薪资大涨?

目录最近在网上看到了关于2022届嵌入式开发岗位薪资大涨的帖子,比如说像海康、大华、汇顶、联发科等公司的招聘。虽然不知道是不是网友吹牛逼的,不过这个并没出乎我的意料,我以前文章经常都在说这个行业的工资一直处于涨幅水平。事实证明我不是瞎说的,就拿单片机开发这个方向来说,这几年的工资都是一直在涨。我从事单片机开发10年的真实案例,或许比你在任何地方看到的都靠谱。5年前,物联网火了一段时间,对app开发工程师的需求也猛涨,当初我有一个同学转去了做app。

2022-08-25 14:46:39 644

转载 一文讲解Linux内核——性能调优攻略

让我们先来说说如何什么是系统性能。这个定义非常关键,如果我们不清楚什么是系统性能,那么我们将无法定位之。我见过很多朋友会觉得这很容易,但是仔细一问,其实他们并没有一个比较系统的方法,所以,在这里我想告诉大家如何系统地来定位性能。Throughput,吞吐量。也就是每秒钟可以处理的请求数,任务数。Latency, 系统延迟。也就是系统在处理一个请求或一个任务时的延迟。一般来说,一个系统的性能受到这两个条件的约束,缺一不可。

2022-08-25 14:44:59 1949

转载 Linux文件系统的格式化操作

同时,我们还可以看到储存设备上共有 1024 个逻辑储存块,根目录文件的逻辑储存块为第 2 块,名称为“/”,这些正确的数据证明了建立超级块的代码是没有问题的。获取 / 释放位图块非常简单,就是根据超级块中的位图块号,把储存设备中的位图数据块读取到缓冲区中,而释放位图块则需要把缓冲区的数据写入到储存设备对应的逻辑块中。这是因为,位图块的块号和储存介质的逻辑储存块总数,都保存在超级块中,所以要实现获取、释放超级块的函数,还需要一个读取逻辑储存块的函数,写入逻辑储存块的函数前面已经写过了。下面我们来写好代码。

2022-08-24 22:17:34 1539

原创 【案例分析】服务器数据恢复

意外断电导致某台虚拟机不能正常启动,经过检查发现此虚拟机除了磁盘文件以外其他配置文件全部丢失,xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件还在。管理员咨询VMware工程师后尝试新建一个虚拟机,但发现ESXi存储空间不足,于是将故障虚拟机下的xxx-flat.vmdk磁盘文件删除释放空间,重新建了一个虚拟机并分配了固定大小的虚拟磁盘。但是问题依旧没有解决,数据丢失。管理员联系我们数据恢复中心进行数据恢复。备份数据。

2022-08-24 22:07:50 898

转载 图文解析设备在内核中的注册流程

一个设备要想被内核感知,最终供用户使用,就要先向内核注册,这个注册过程应该由内核来实现并提供接口,在这个注册设备的过程中,内核会通过设备的类型和 ID,把用来表示设备的 device_t 结构挂载到设备表中。为了简化问题,便于你理解,我们把驱动程序和内核链接到一起,省略了加载驱动程序的过程,因为加载程序不仅仅是把驱动程序放在内存中就可以了,还要进行程序链接相关的操作,这个操作极其复杂,我们先不在这里研究,感兴趣的话你可以自行拓展。然后就是调用传递进来的函数指针,并且把 drvp 作为参数传送进去。

2022-08-24 19:59:05 385

转载 内核定时器与延迟工作原理以及DMA编程

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2022-08-24 17:52:03 409

原创 Linux下共享内存同步方法

posix有名信号量、 posix基于内存的信号量(无名信号量) 和 System V信号量(IPC对象)。而写程序,由于刚开始的写信号量初始化为1,此时写信号量“semw”POSIX无名信号量是基于内存的信号量,可以用于线程间同步也可以用于进程间同步。一个进程写,另一个进程读,信号灯集中有两个信号灯,下标0代表能否读,初始化为0。这种方法与方法二差不多,需要在访问共享内存中数据的时候,查询互斥锁的状态来进行同步。一个进程写,另一个进。有名信号量既可用于线程间的同步,又可用于进程间的同步。

2022-08-24 17:38:22 955

原创 Linux内核进阶之路推荐

虚拟文件系统磁盘文件系统数据同步内核补给站

2022-08-24 15:02:32 382

转载 Linux内核移植小知识——网络驱动修改

修改好设备树和 Linux 内核以后重新编译一下,得到新的 zImage 镜像文件和 imx6ull-mybsp-emmc.dtb 设备树文件, 使用网线将 I.MX6U-ALPHA 开发板的两个网口与路由器或者电脑连接起来,最后使用新的文件启动 Linux 内核。所以我们要删除SPI4的IO口掉重新定义。首先需要找到 LAN8720A 的驱动文件,LAN8720A 的驱动文件是 drivers/net/phy/smsc.c,在此文件中有个叫做 smsc_phy_reset 的函数。

2022-08-24 14:57:47 1133

转载 内存管理之页分配器机制

Linux内存管理是操作系统的核心功能,目的是为了实现对物理内存的有效利用,包括:内存分配、内存回收。基于物理内存在内核空间中的映射原理,物理内存的管理方式也不完全相同。下面主要讲述大块连续物理内存的管理,其使用伙伴算法逻辑、页表实现管理,以页框为基本单位,使用页管理器(Page Allocator)实现。

2022-08-23 22:26:26 277

转载 Linux内存下/proc/meminfo的自由输出

proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的 ,/proc/meminfo所包含的信息比”free”等命令要丰富得多,然而真正理解它并不容易,比如我们知道”Cached”统计的是文件缓存页,manpage上说是“In-memory cache for files read from the disk (the page cache)”,那为什么它不等于[Active(file)+Inactive(file)]?

2022-08-23 22:21:02 256

原创 使用eBPF LSM热修复Linux内核漏洞

跟踪准确的钩子不是一件容易的事,需要有丰富的经验,以及丰富的内核代码经验。这些一个策略代码是用C语言编写的,所以我们可以根据因地制宜,不同的问题做不同的策略,代码经过轻微调整,就可以快速扩展,增加其他钩子点等。最后,我们对比了这个LSM程序的性能影响,性能与安全的权衡,是你需要考虑的问题。(不过,国内外大部分五至十年的互联网公司,都有着大量低于5.0的内核版本)。这些数字是针对单个系统调用的,代码调用的频率越高,这些数字就越多。Linux不一样,提供了一组看似独立的工具,每个进程都允许隔离特定的资源。

2022-08-23 22:11:25 521

空空如也

空空如也

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

TA关注的人

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