本文讲述通过netfilter和get/setsockopt实现用户态与内核态之间的通信。首先介绍相关背景,然后给出代码示例。重点在于介绍通过netfilter的钩子机制实现用户态设置和获取socket选项,从而完成用户态与内核态之间的通信。
多线程调试的主要任务是准确及时地捕捉被调试程序线程状态的变化的事件,并且GDB针对根据捕捉到的事件做出相应的操作,其实最终的结果就是维护一根叫thread list的链表。上面的调试命令都是基于thread list链表来实现的,后面会有讲到。
centos7.2,4核cpu, 8G内存 100G硬盘 版本:3.4.7社区版本 mongo1:1.1.1.1 mongo2:1.1.1.2 mongo3:1.1.1.3
在之前创建的object的时候,使用的是kobject_create_and_add函数。而此函数中创建的object使用的是默认的ktype(dynamic_kobj_ktype), 如果想指定ktype的话就需要使用kobject_init_and_add函数来创建object。那ktype是具体的作用是什么? ktype其实就是kobject的属性的操作集合,因为某些模块的操作集合相同,所以就将ktype单独抽象出来,这样就实现了代码复用。
之前没有用过addr2line和gdb等内核调试工具定位问题代码,这里记录一下在将某个网络驱动从4.9内核移植到5.7内核时出现内核崩溃起不来的问题。
当我们休眠时,如果想唤醒,则需要添加中断唤醒源,使得在休眠时,这些中断是设为开启的,当有中断来,则会退出唤醒,常见的中断源有按键,USB等。
接上文:Kubernetes中gitlab的一次迁移。nexus也要迁移一下。这里更想体验一些velero。很多文章上面看到过:https://mp.weixin.qq.com/s/VC6kVfcBCUQfG6RwM6F1QA 。腾讯云TKE文档中也有类似的例子:https://cloud.tencent.com/document/product/457/50122。不想使用传统方式了想体验一下velero!
本文翻译自 2020 年的一篇英文博客 How to use eBPF for accelerating Cloud Native applications[1]。
面向对象的思想的确在应用软件的开发中颇具优势,它让一个个纯逻辑的函数和数据变成了一个个有生命的个体。鉴于性能的考虑,系统软件的实现(例如linux kernel)并没有采用面向对象的语言(如C++、Java)。但这丝毫没有影响到用小c找对象。 简单来说,一个对象包含数据以及对这些数据的操作。如果把银行比作一个对象的话,银行里的RMB就是数据、而银行的工作人员就相当于对象中方法(即操作数据的结构)。如果,我们想打劫银行的话,我们只需要拿着枪指着工作人员说,“亲,给我拿500万出来”。当然,如果你是一个比较牛逼
简要 接下来做一个专辑《rt-thread驱动框架分析》,我会按照自己的理解来描述每一个驱动。有不对的欢迎随时来怼我。 rt-thread的版本分为两大类,一个是完整版本,一个是nano版本。而驱动框架是相对于完整版本的。所以要了解驱动框架,只能在完整版上了解。 rt-thread提供了很多驱动框架,比如常见的外设驱动:I2C, SPI等。还有网络相关的WLAN驱动等。 驱动框架分析,主要以STM32来分析。 驱动分析 API简要说明 rt-thread的pin驱动为上层应用提供两套不同的API,一套是对接
在linux系统下,普通用户无法直接执行root用户权限下的命令,如果想让普通用户执行只有root用户才能执行的操作命令。 下面罗列下经常使用sudo命令的几个场景: 1.用户无权限执行root命令 普通用户登录 shell 之后,如果自身没有权限访问某个文件或执行某个命令时,若该用户获得root授权,那么就可以在需要执行的命令之前加上 sudo,临时切换到root用户的权限,完成相关的操作。在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须
在管理 Linux 内核时,开发者常常面临着很多问题,比如定位 TCP 协议栈中导致数据包丢失的环节,这些问题可能需要专业的知识和经验才能解决。还有些场景缺乏必要的工具来解决问题,甚至有时即使有相应的工具,也很难使用。
2 在probe里 申请网络结构体net_device、对相关变量函数赋值,注册网络结构体net_device
在我们运维工作中,会经常要求一些用户不允许登陆系统,以加固系统安全。今天这里介绍下锁定账号登陆的几种方法: 一、最常用方式,修改用户的shell类型为/sbin/nologin (推荐使用) 这种方式会更加人性化一点,因为不仅可以禁止用户登录,还可以在禁用登陆时给提示告诉它这么做的原因。 修改/etc/nologin.txt,没有的话就手动新建一个,在里面添加给被禁止用户的提示(这种方式的所有用户的锁定信息都在这个文件中,在登陆时给与提示)。 如下,禁用wangshibo账号登陆系统: [root@hos
前两周有人询问DMA下的cache操作和dma-coherent。以前零碎看过代码。临时找,还没有找到。
要使用pinA来控制LED,首先要通过Pinctrl子系统把它设置为GPIO功能,然后才能设置它为输出引脚、设置它的输出值。
" 文件映射 " 的 " 虚拟内存区域 " vm_area_struct 结构体 的 数据结构表示形式如下 ;
Linux 内核是如何实现无线网络接口呢?数据包是通过怎样的方式被发送和接收呢? 刚开始工作接触 Linux 无线网络时,我曾迷失在浩瀚的基础代码中,寻找具有介绍性的材料来回答如上面提到的那些高层次的问题。 跟踪探索了一段时间的源代码后,我写下了这篇总结,希望在 Linux 无线网络的工作原理上,读者能从这篇文章获得一个具有帮助性的概览。
在 Linux 上通过 veth 我们可以创建出许多的虚拟设备。通过 Bridge 模拟以太网交换机的方式可以让这些网络设备之间进行通信。不过虚拟化中还有很重要的一步,那就是隔离。借用 Docker 的概念来说,那就是不能让 A 容器用到 B 容器的设备,甚至连看一眼都不可以。只有这样才能保证不同的容器之间复用硬件资源的同时,还不会影响其它容器的正常运行。
互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云,对这些概念形成了很多错误的理解。本文的目的在于彻底澄清这些误解。
今天周五,又是一个周中最美好的时候,因为明天不用上班啊,可以干自己想干的事情,想想就激动的不行。
2022 年,我们很可能会看到 Linux 内核中的实验性 Rust 编程语言支持成为主流。2021.12.6 早上发出了更新的补丁,介绍了在内核中处理 Rust 的初始支持和基础设施。
Linux下的tcp编程中,第一步就是要创建socket,本文将从源码角度看下socket是如何被创建的。
打算部署kvm虚拟机环境,下面是虚拟化部署前的一些准备工作: 操作系统环境安装 1)修改内核模式为兼容内核启动 [root@ops ~]# uname -a Linux openstack 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [root@ops ~]#vim /boot/grub/grub.conf ...... default=1 #由默认的0改为1,
ftrace(FunctionTracer)是Linux内核的一个跟踪框架,它从2008年10月9日发布的内核版本2.6.27开始并入Linux内核主线[1]。官方文档[2]中的描述大致翻译如下:
在Linux设备驱动之字符设备(一)中学习了设备号的构成,设备号的申请与释放。在Linux设备驱动之字符设备(二)中学习了如何创建一个字符设备,初始化,已经注册到系统中和最后释放该字符设备。
正如我在朋友圈里所说的,最近我又对网络虚拟化技术产生了浓厚的兴趣。迫切想搞明白在 Docker 等虚拟技术下,网络底层是如何运行的。
pincontroller虽然是一个软件的概念,但是它背后是有硬件支持的,所以可以使用一个结构体来表示它:pinctrl_dev。
本文作者:sivenzhang,腾讯 IEG 测试开发工程师 1. 前言 本文主要对 Linux 系统内核协议栈中网络层接收,发送以及转发数据包的流程进行简要介绍,同时对 Netfilter 数据包过滤框架的基本原理以及使用方式进行简单阐述。 内容如有理解错误而导致说明错误的地方,还请指正。如存在引用而没有添加说明的,也请及时告知,非常感谢! 2. 基础网络知识 2.1 网络分层模型 OSI 模型中将网络划分为七层,但在目前实际广泛使用的 TCP/IP 协议框架体系内,我们一般将网络划分为五层,从
注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概
在容器化大行其道的今天,Docker 可谓是容器界的宠儿。比起笨重的虚拟机,Docker 可谓是身轻如燕。当然,本文不是介绍虚拟机与 Docker 之间的优缺点,而是介绍 Docker 网络中重要的组成部分之一:
mprotect系统调用是修改内存页属性的,他修改的内容包括vma的内容和页表项内容。linux用vma链表管理一个进程使用的虚拟地址空间。下面是实现代码。
瞄了一眼感觉略贵。个人也就50个之内的image。就想用一下镜像安全,漏洞扫描。也没有那么强硬的需求。600多块一个月还是感觉略贵!还是老老实实搭建一下harbor吧!
前面两篇clock framework的分析文章,分别从clock consumer和clock provider的角度,介绍了Linux kernel怎么管理系统的clock资源,以及device driver怎么使用clock资源。本文将深入到clock framework的内部,分析相关的实现逻辑。
Netfilter/iptables是Linux内核内置的报文过滤框架,程序可以通过该框架完成报文过滤、地址转换(NAT)以及连接跟踪等功能。
笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 大部分高性能网络框架采用的是非阻塞模式。笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。
首先 Python 是一种面向对象的解释型程序语言,运行 Python 程序时是将 *.py 编译为独有的二进制编码 pyc 文件,然后对 pyc 中的指令进行解释执行,但是对 pyc 文件进行反编译也是比较简单的,可直接反编译为源码。
今天介绍两个重要的工具:stress和stress-ng,用于Linux系统下进行压力测试:
本文首先从宏观上概述了数据包发送的流程,接着分析了协议层注册进内核以及被socket的过程,最后介绍了通过 socket 发送网络数据的过程。
线上有个数据库主从环境的MySQL版本是5.5.19版本的,由于5.5.19环境的MySQL在运维侧的支持不太好,例如:不能动态修改buffer_pool的值,alter table增加列的操作会长时间锁表等等。所以经过商量,需要对它进行升级,这次我采用的是在线升级的办法。我总结了一下在线升级过程中的总体步骤:
某组引脚中,有哪些引脚?这要分析设备树:imx_pinctrl_probe_dt。
由于网络协议非常复杂,内核里面用到了大量的面向对象的技巧,所以我们从创建连接开始,一步一步追述到最后代码的调用点。
SDIO接口的WIFI: 1、WIFI是一个sdio卡设备 2、具备wifi功能 SDIO接口的WIFI驱动就是在WIFI外面套上一个SDIO驱动的外壳
前面已经介绍了Jumpserver V3.0的安装,基于这篇安装文档,下面说下Jumpserver安装后的的功能使用: 一、jumpserver的启动 Jumpserver的启动和重启 [root@t
已经多久没有编程了?很久了吧…其实我本来就不怎么会写代码,时不时的也就是为了验证一个系统特性,写点玩具而已,工程化的代码,对于我而言,实在是吃力。
This blog post explains how computers running the Linux kernel send packets, as well as how to monitor and tune each component of the networking stack as packets flow from user programs to network hardware.
作者:ghost461@知道创宇404实验室 时间:2022年3月11日 简介 2022年2月23日, Linux内核发布漏洞补丁, 修复了内核5.8及之后版本存在的任意文件覆盖的漏洞(CVE-2022-0847), 该漏洞可导致普通用户本地提权至root特权, 因为与之前出现的DirtyCow(CVE-2016-5195)漏洞原理类似, 该漏洞被命名为DirtyPipe。 在3月7日, 漏洞发现者Max Kellermann详细披露了该漏洞细节以及完整POC。Paper中不光解释了该漏洞的触发原因, 还说
在消费类电子中,功耗是很重要的,甚至项目后期一直在调功耗,看看哪里还可以再省电。由此就有了 Linux 电源管理子系统,该子系统包含很多方面:什么时候可以降帧、什么时候可以关掉其他 CPU core、系统运行时如果某外设很少用需要让它运行时休眠、系统休眠时要保证哪些外设可以唤醒系统。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115460.html原文链接:https://javaforall.cn
领取专属 10元无门槛券
手把手带您无忧上云