自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux-内核结构体

当进程被调度到CPU 上运行时,内核会将这个pgd的值加载到CPU的页表基址寄存器(如x86的 CR3)中,从而完成地址空间的切换。它不直接处理字节级的分配,而是以页(Page)为单位,为上层(如Slab)提供连续的物理内存块。每个拥有独立地址空间的进程(即用户态进程)都有一个 mm_struct,它被挂载在进程的 task_struct 中。mm_struct的核心作用是管理进程从0到TASK_SIZE(用户空间上限)的整个虚拟内存布局。用户空间程序运行在用户虚拟地址空间,两者是隔离的。

2026-04-09 22:05:03 194

原创 linux操作系统整体启动过程

硬件设备初始化:更全面地初始化外设,如网卡、存储控制器、显示设备等,从存储器或以太网加载启动文件系统bootfs。驱动加载:加载设备驱动程序(如UART、I2C、SPI),设置根文件系统(Root Filesystem)存储器加载:将操作系统镜像(如linux内核)从外部存储(NAND、eMMC、SD)加载到DRAM中;硬件抽象层初始化:初始化中断控制器、设置内存管理(分页、虚拟内存等)、初始化时钟和调度器。基础硬件初始化:初始化DRAM、串口,加载第二阶段引导程序到RAM中。

2026-04-08 15:08:50 17

原创 编译最小linux镜像并用qemu启动

这里的 (1,0) 指的是 RAM Disk (ramdisk) 或 Loop Device,而不是物理硬盘。这说明内核试图从内存中加载根文件系统(即我们之前构建的 initramfs),但没有找到或者找不到对应的驱动。现在,我们可以用 QEMU 来启动这个由 bzImage (内核) 和 initramfs.cpio.gz (根文件系统) 组成的极简系统。虽然你编译了 initramfs.cpio.gz,但你的内核配置中可能没有启用 Initramfs 支持。

2026-04-08 00:18:56 143

原创 编译linux内核

etc/init.d/rcS 中 ,mdev -s 这条命令很重要, 它会扫描/sys目录,查找字符设备和块设备,并在/dev下mknod。busybox 会从 /etc/inittab中读取sysinit并执行, 这里sysinit指向了/etc/init.d/rcS。busybox 作为linuxrc启动后, 会读取/etc/profile, 这里面设置了一些环境变量和shell的属性。根据/etc/fstab提供的挂载信息, 进行文件系统的挂载。既然编译不过,我们直接不编译这个模块。

2026-04-01 23:18:31 267

原创 qemu学习

arm_64下安装debian。

2026-03-27 02:01:19 242

原创 Linux内核学习-汇编笔记

但也要根据CMakeLists.txt中的内容生成,CMakeLists.txt就是写给cmake的规则。boot loader ->setup ->装在os内核 ->实模式 ->保护模式。Makefile是一个文件,make执行时,去读取Makefile文件中的规则。主板在运行os时,默认从MBR读数据,执行权交给MBR区域的代码。7C00~7DFF,512B,MBR被BIOS加载到此处。// 第一个局部变量放在ebp-8的位置,nasm\masm 结果存在左边。

2026-03-22 22:02:17 214

原创 linux-特殊符号

_init利用了 GCC 的特性 __attribute__((__section__(".init.text")))。这意味着编译器在生成二进制文件时,不会把这个函数放在常规的 .text 代码段,而是专门开辟了一个名为 .init.text 的特殊段。执行:调用这些初始化函数(如 module_init 指定的函数)。加载:内核将所有标注为 __init 的函数加载到内存的特定区域。释放:一旦初始化完成,内核会调用 free_initmem()。内核会遍历 .init.text 所在的内存页。

2026-03-09 21:57:59 42

原创 linux-do_signal

它并不负责“发送”信号(那是 send_signal 的事),而是负责**“交付”(Delivery)**——即当一个进程从内核态返回用户态的临界时刻,检查是否有挂起的信号并执行相应的处理动作。逻辑闭环: 内核在从 entry_INT80_32 或 entry_SYSCALL_64 返回前,会检查当前线程的 TIF_SIGPENDING 标志。默认行为处理:如果信号的动作是 SIG_IGN(忽略)或 SIG_DFL(默认且无害,如 SIGCHLD),内核直接在这里处理掉,不打扰用户态。

2026-03-09 21:56:04 135

原创 linux-寄存器

在 x86(32位)架构中,寄存器是 CPU 内部存储数据的“核心阵地”。随着 64 位(x64)的普及,这些寄存器在名字前加了 R(如 RAX),但逻辑功能依然延续。常用于字符串拷贝(把数据从 ESI 指向的地址搬到 EDI 指向的地址)。常用于检查某个位是否为 1(比如 TEST eax, eax 常用来判断 EAX 是否为 0)。ES/FS/GS:附加段,常用于特殊内存寻址(如 Linux 内核用 GS 存储 Per-CPU 变量)。它是很多加减乘除指令的默认寄存器,也是函数返回值的存放地。

2026-03-09 21:33:09 211

原创 linux-内核常用接口“工具箱”

在生产环境中,dmesg 的内容通常也会被同步到文件系统的日志中(如 /var/log/syslog 或 /var/log/messages),但 dmesg 是直接从内存读取,速度最快,也是最“原汁原味”的内核声音。针对每种特定大小或特定类型的对象(如 kmalloc-128 或 task_struct),内核都会维护一个专属的 kmem_cache。kmalloc() / kfree(): 类似于 malloc/free,用于申请连续的物理内存。一个 Slab 通常由一个或多个连续的物理页组成。

2026-03-09 21:24:29 59

原创 linux-内存相关

标志:必须指定 GFP_KERNEL(进程上下文,可休眠)或 GFP_ATOMIC(中断上下文,不可休眠)。然后从伙伴系统(Buddy System)中申请零散的物理页,最后通过修改内核页表将这些零散的物理页映射到这段连续的虚拟地址上。只有当你分配的内存大到 kmalloc 无法满足,或者你明确不需要物理连续性(如纯软件逻辑缓冲区)时,才考虑 vmalloc。kmalloc 分配的是 内核逻辑地址。优势: 由于是线性映射,不需要修改 CPU 的页表,也不会引起 TLB(转换检测缓冲区)的频繁刷新。

2026-03-05 12:23:02 184

原创 linux-内核栈相关

如果你在内核函数里写。

2026-03-05 10:52:32 413

原创 Linux-进程切换时的保护模式切换

理解 Linux 进程切换时的“保护模式切换”,本质上是理解 CPU 权限等级(Ring 0 与 Ring 3) 与 地址空间控制权(CR3 寄存器) 的交接仪式。在 Linux 中,保护模式(Protected Mode)是基础,而进程切换是在这个“保护”大框架下,通过改变 硬件上下文 来实现的。🛡️ 核心:保护模式下的“三道防线”在进程切换时,内核必须确保“保护模式”的核心功能不被破坏:1. 权限隔离(Privilege Level)Ring 3 (用户态):受限模式,不能直接执行 cli、hlt

2026-03-04 23:42:18 86

原创 Linux和vxwork区别

在嵌入式领域,选择还是,本质上是在“通用性与生态”和“极致确定性与实时性”之间做权衡。,而。1. 实时性 (Real-time Capability) —— 最大的分水岭这是两者最本质的区别。Linux (非实时/软实时):Linux 设计初衷是吞吐量最大化。当你运行一个任务时,内核会尽量公平地分配 CPU。这意味着,一个高优先级任务可能因为内核正在处理中断或加锁而被延迟,这个延迟的时间是不确定的。VxWorks (硬实时):它是基于优先级抢占的。

2026-03-04 23:13:21 413 1

原创 linux-自旋锁

是最基础、也是最高效的同步机制。它的特点是:当拿不到锁时,CPU 不会睡眠,而是在原地“空转”(自旋)等待,直到锁被释放。

2026-03-04 22:48:10 157

原创 linux-initcall 机制

内核并不是逐个调用驱动的初始化函数,而是将这些函数的指针存放在一个连续的内存段中,启动时通过一个 for 循环像翻书一样逐个执行。编译时:编译器把这些初始化函数的地址统一扔进内存里一个叫做 .initcall.init 的**特殊段(Section)**中。启动时:内核只需要运行一个简单的循环,从该段的起始地址开始,像拨动多米诺骨牌一样,一个接一个地执行这些函数。这个循环的核心实现在内核源码的 init/main.c 文件中的 do_initcalls() 函数里。链接脚本 (vmlinux.lds)

2026-03-04 22:00:57 60

原创 Linux-寄存器

栈溢出(Stack Overflow):如果你在内核函数里定义了一个巨大的局部变量(例如 char buf[1024 * 10]),或者陷入了无限递归,ESP 就会越过栈的底线,踩到邻居的数据上。EFLAGS (Extended Flags Register) 是一个 32 位的寄存器(在 64 位下叫 RFLAGS),它不对称地存储了一堆“位(Bit)”。每个进程都有自己的页表,当内核进行进程切换时,只需要把新进程的页表地址加载进 CR3,整个内存空间就瞬间“变脸”了。结果是负数时变 1(看最高位)。

2026-03-04 21:59:16 260

原创 Linux-进程切换

它可以强制让某些关键中断(如内存故障、调试中断)使用一块独立的、绝对干净的内存作为栈,而不去挤占进程的内核栈。栈溢出:如果 ESP 尝试减小并写入数据,但地址已经超出了内核分配的那 8KB/16KB 范围,它会踩到 thread_info 结构或者其他进程的数据。当硬件中断(Interrupt)发生时,CPU 会经历一个从“用户态/当前内核态”到“中断处理环境”的闪电式切换。终极毁灭 (Triple Fault):如果连处理“双重异常”的栈都没了,CPU 会直接放弃思考,强制重启电脑。SS (旧用户栈段)

2026-03-04 21:47:03 69

原创 通用协议号

OSPFv3,所有的OSPF Router使用FF02::5,DR路由器使用FF02::6;,version2使用IP协议号89,组播地址是224.0.0.5和224.0.0.6;BGP使用TCP为传输层协议,TCP端口号。VGMP,UDP端口号是18514;

2024-09-25 17:19:36 463

原创 EVPN学习

三、VXLAN BGP EVPN基本原理_vxlan的type2,type3区别-CSDN博客华为数通笔记VXLAN&BGP EVPN_vxlan为什么用bgp协议-CSDN博客

2024-09-04 20:00:26 304

原创 eNSP Pro安装

如不能访问,请关闭代理服务器,或者通过正则表达式排除webUI访问地址192.*在屏蔽代理服务器栏中添加“192.*”。内存处理器可适当提高,提高模拟器性能。通过webUI地址访问模拟器。菜单栏—>控制->新建。使用已有虚拟硬盘文件。配置网卡1和网卡2。

2024-08-23 15:59:29 824

原创 HCIE-学习笔记

而IPsec目前只能对单播数据进行加密保护,因此对于诸如路由协议、语音、视频等组播数据需要在IPsec隧道中传输的情况,可以通过建立GRE隧道,并对组播数据进行GRE封装,然后再对封装后的报文进行IPsec的加密处理,就实现了组播数据在IPsec隧道中的加密传输。GRE(Generic Routing Encapsulation,通用路由封装协议):是对某些网络层协议(如:IP、 IPX、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。

2024-08-07 11:17:42 588

原创 NiceGui---pyechart柱状图颜色配置

set_global_opts(title_opts=opts.TitleOpts(title="各个商品销量比较"))这种方法对于直角坐标系同样适用,可以针对单一数据项进行风格配置,不仅仅只是颜色。颜色分段,譬如我们可以设置当值大于等于100时显示红色,小于100时显示橙色;通过语句print(chart.options['color'])打印出来。is_piecewise=True, # 颜色分段。X = ["商品A", "商品B", "商品C"]# 指定柱子颜色的js代码。

2024-07-15 15:20:19 1391

原创 python构造函数

【代码】python构造函数。

2024-06-03 11:49:06 179

原创 autoHotKey脚本

判断当前鼠标是否悬浮在桌面。双击最大间隔时间,单位毫秒。取消置顶:`t`t SHIFT+WIN+ALT+T。)" , "AutoHotKey 快捷键"置顶:`t`t WIN+ALT+T。

2024-05-22 09:46:32 1143

原创 Python pandas-flask学习网站

详解16个pandas函数,让你的 “数据清洗” 能力提高100倍!-腾讯云开发者社区-腾讯云

2024-04-15 16:10:51 200 1

原创 windows上使用自带netsh工具抓包

(1)用Microsoft Message Analyzer(mma) 打开后,转换成cap,然后通过wireshark分析。netsh trace start capture=YES report=YES persistent=YES //开启。(2)或使用etl2pcapng.exe 进行转换为cap文件。停止生成两个文件,后缀为:cab , etl。netsh trace stop //停止。

2024-03-27 16:11:00 1304

原创 nicegui学习使用

https://www.douyin.com/shipin/7283814177230178363python轻量级高自由度web框架 - NiceGUI (6) - 知乎python做界面,为什么我会强烈推荐nicegui秒杀官方实现,python界面库,去掉90%事件代码的niceguipython web GUI框架-NiceGUI 教程(二)_python nicegui web 模板-CSDN博客NiceGUI: Python 的 UI 框架,撰寫 Python GUI 的好工具 - 大貓咪的新玩

2024-03-07 19:19:29 972 2

原创 pyqt学习网站

PySide 6.PyQt 6快速开发与实战最新章节_孙洋洋著_掌阅小说网PyQt6开发及实例 - 知乎Python开发GUI常用库PyQt6和PySide6介绍之一:简介与安装_pyside6 pyqt-CSDN博客Qt for Python

2024-03-07 11:58:13 321

原创 selenium相关

send_keys(Keys.BACK_SPACE)删除键BackSpace。send_keys(Keys.CONTROL,‘a’)全选Ctrl+A。send_keys(Keys.CONTROL,‘c’)复制CTRL+C。send_keys(Keys.CONTROL,‘x’)剪切CTRL+X。send_keys(Keys.CONTROL,‘v’)粘贴Ctrl+V。send_keys(Keys.F12)键盘F12。send_keys(Keys.F1)键盘F1。

2024-03-05 11:34:05 762

原创 win 11修改通知显示时间

win11toast:python桌面通知工具-CSDN博客

2024-03-04 17:16:12 597

原创 Linux源码学习

Linux source code (0.01) - Bootlin

2024-03-03 13:31:54 175

原创 python学习网站

Python系列干货之——Python与设计模式 - 知乎Python之23种设计模式_23种设计模式 python-CSDN博客用python实现设计模式 — python-golang-web-guide 0.1 文档python设计模式_Python六大原则,23种设计模式 - 掘金Python 常用设计模式Python入门 类class提高篇 - 知乎

2024-02-26 11:59:04 485

原创 群晖app下载地址

下载中心 - download | 群晖科技 Synology Inc.

2024-02-21 14:21:23 400

原创 官方卸载office链接

Uninstall Office automatically - Microsoft Support

2024-02-18 11:30:42 201

原创 OSPF-(LSA+SPF)

Network LSA记录了该网段内所有与DR建立了邻接关系的OSPF路由器,同时携带了该网段的网络掩码。Point-to-Point(P2P):描述一个从本路由器到邻居路由器之间的点到点链路;TransNet:描述一个从本路由器到一个Transit网段的连接;StubNet:描述一个从本路由器到一个Stub网段的链接;Router LSA使用Link来承载路由器直连接口的信息。Network LSA:由DR产生,描述本网段的链路状态;从根节点开始依次添加各节点LSA中的路由信息。

2024-01-24 21:10:13 692

原创 生成树相关

(2)如果路径开销相同,则比较端口所在交换机的桥ID,桥ID最小的端口被选举为指定端口。STP采用了一种状态迁转机制,新选出的根端口和指定端口要经过2倍的Forwarding Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。如果收到的BPDU报文中的桥ID优先级高,则交换机会修改自己的BPDU报文的根桥ID字段,宣告新的根桥。优先级最高(数值越小)被选举为根桥。网络收敛后,只有指定端口和根端口可以转发数据,其他端口为预备端口,被阻塞,不能转发数据。

2024-01-23 15:33:30 565

原创 MAC相关

01-80-C2-00-00-02(Slow Protocol: 802.3ah OAM/ LACP 协议都用这个地址,这个地址很有故事,有多少软件处理这个地址会出问题啊!厂商再用剩下的24位(ip link set eth1 promisc on ------ 开启混杂模式。ifconfig eth1 -promisc ------ 关闭混杂模式。01-00-5E-xx-xx-xx(IP组播地址对应的二层组播地址)。ifconfig eth1 promisc ------ 开启混杂模式。

2024-01-18 17:06:19 1155

原创 ARP相关

无线路由器工作在无线中继模式下,这个中继下面连了一堆设备,每个设备都有IP,这些IP是上级路由器分配的,但是上级路由器却看不到他们的Mac地址,上级路由器只能看到这个中继的Mac,对上级路由器来说,只看到这个中继申请了一堆IP,而不知道中继是为他的下级设备申请的。地址冲突的主机对于免费ARP响应也是需要回复的,回复的也是免费ARP响应,与其说是给地址冲突的主机回复,不如说是告诉整个广播域,我的IP才是xxx,然后源主机收到后又会广播免费ARP响应,两台地址冲突的主机轮流发。发送端IP地址: 32bit。

2024-01-18 15:01:13 1073

原创 配置git服务器

在【系统变量】里面找到名为【Path】的变量,选中【Path】点击【编辑】然后,点击【新建】在Gitblit目录下,找到 installService.cmd 文件。Gitblit目录下的installService.cmd文件。(1)搜索【高级系统设置】,选择【高级】选项卡,点【环境变量】(3)配置gitblit.properties 文件。(4)运行gitblit.cmd 批处理文件。(2)解压缩下载的压缩包即可,无需安装。(2)在【系统变量】里面,点击【新建】关闭正在运行的cmd命令窗口,以。

2024-01-08 16:44:48 999

空空如也

空空如也

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

TA关注的人

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