- 博客(241)
- 资源 (2)
- 收藏
- 关注
原创 如何通过uboot加载硬盘
不需要你自己从头编写 U-Boot 代码。U-Boot 是一个开源的引导加载程序,官方已经提供了针对 QEMU 虚拟机(包括 ARM64 的 机器)的默认配置。你只需要下载源码、进行配置和编译即可。要将你之前的“直接内核启动”改造为“U-Boot 引导启动”,你可以按照以下步骤操作:首先,你需要获取 U-Boot 的源码并编译出适用于 QEMU ARM64 的固件()。编译完成后,当前目录下会生成 文件。你需要将编译好的 通过 参数传给 QEMU,同时挂载包含内核和根文件系统的磁盘镜像。假设你的根
2026-06-10 18:43:34
178
原创 试用zeroclaw
1)下载已经编译好的安装包,不要选最新版本,最新版本只有源代码,没有编译好的二进制文件。3)我本地的so库太老,跑不起来,要么自己下载源代码在本地编译一个,要么在docker中跑。2)解压后,有一个二进制文件 zeroclaw,一个web文件夹。登陆到docker中之后,通过下面几种方式启动zeroclaw。我在ubuntu:24.04 docker中跑起来了。然后再宿主机浏览器中,输入。方式3、通过web页面。
2026-06-08 15:18:33
214
原创 glusterfs如何在k8s中使用
不要重复造轮子:您已经有了 GlusterFS,它比 NFS 更适合容器云环境(去中心化、高可用、原生集成)。使用方式:在部署应用(Deployment/StatefulSet)时,将指向一个 PVC,且 PVC 的设置为即可。如果您是在一个全新的集群中从零开始配置,您需要先查阅 GlusterFS CSI 的官方文档部署 Provisioner,然后再编写 YAML 创建 StorageClass。但鉴于您当前环境的特殊性(由自动创建),您无需手动安装 Provisioner,直接使用这个现成的。
2026-06-05 13:11:11
366
原创 如何在docker和k8s中使用nfs文件系统
在多个 Docker 容器使用同一个 NFS 后端时,强烈建议给每个 Docker(或每个业务/应用)分配单独的 NFS 挂载目录(子目录),而不是让所有容器共用一个根目录。是的,您的理解非常准确。在标准的 NFS 挂载流程中,确实需要人工(或通过自动化脚本)先在 NFS 服务端创建好子目录,然后再将其挂载到 Docker 宿主机上。具体分为以下两个核心步骤:NFS 协议本身不会自动为客户端动态创建目录。您需要提前在 NFS 服务端的根目录下规划并创建好各个子目录,并设置好正确的权限(如 和 ),以确保容
2026-06-05 13:05:24
398
原创 linux根文件系统是如何加载的
内核在磁盘文件系统中,要加载内核,就必须先加载文件系统。但根文件系统又是被内核负责加载的,它是内核的启动参数,没有它,内核是无法启动的。到底先有鸡,还是先有蛋?机器是如何加载文件系统中的内核的?1、在PC机中,一般流程应该是:bios先加载0扇区中的grub的第一段代码,即stage1。stage1 然后加载 1~63扇区中的grub的第二段代码,即stage1.5。stage1.5中有文件系统的驱动程序,stage1.5 从文件系统中读出 grub最后一段,即stage2。
2026-06-03 22:50:06
169
原创 qemu和gcc编译以及helloworld
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-12.4.0/gcc-12.4.0.tar.xz
2026-05-23 22:04:31
70
原创 ceph的块存储如何骗过服务器,让服务器把它当做真实的硬盘。编写一个最简单的驱动程序
Linux 驱动开发的本质,其实就是给操作系统写一个硬件的“专属翻译官”。因为硬件(比如显卡、网卡、传感器)只听得懂底层的电信号和寄存器指令,而 Linux 内核和应用软件只懂标准的系统指令。驱动就是夹在中间的那层软件,负责把上层的指令“翻译”成硬件能懂的操作,再把硬件的反馈“翻译”回上层。物理设备并不是驱动“变”出来的,而是原本就存在的。驱动注册后,内核会帮你在系统里“找到”这些设备。热插拔发现(即插即用)
2026-05-21 15:07:42
386
原创 链路层协议
成帧、差错控制、流量控制、可靠传输、介质访问控制和物理寻址。不同的二层网络根据其应用场景(局域网、广域网、无线等)采用不同的链路层协议,如以太网使用IEEE 802.3,Wi-Fi使用IEEE 802.11,点对点链路使用PPP或HDLC。层面实现位置原因帧定界、CRC校验、物理寻址(MAC过滤)✅ 网卡硬件高速、实时处理需要透明传输(填充机制)⚠️ 视链路而定(PPP→软件,HDLC→硬件)协议特性决定介质访问控制(CSMA/CD, CSMA/CA)✅ 硬件逻辑或固件实时性要求高。
2026-05-20 09:56:09
383
原创 标准输入流,输出流,错误流 以及 重定向 的原理
● 操作系统层面(Linux/Unix)│ 流 │ 文件描述符 (fd) │ 设备 ││ 标准输入 │ 0 │ 通常是终端/键盘 ││ 标准输出 │ 1 │ 通常是终端/屏幕 ││ 标准错误 │ 2 │ 通常是终端/屏幕 │本质上是进程打开的文件描述符,指向终端设备、文件或管道。C 语言层面// 三种标准流(FILE* 指针)
2026-05-19 11:39:59
333
原创 自己如何实现ssh协议
放弃现成的库,选择从零实现 SSH 协议,这是一个非常有挑战性但也极具学习价值的决定!这能让你深入理解现代网络协议是如何在不可信的网络上建立安全通道的。SSH 协议(RFC 4251 系列)非常庞大,为了让你能够入手,我们需要把这座“大山”拆解成几个核心阶段。自己实现 SSH 协议,本质上就是在一个普通的 TCP 连接之上,一步步构建出加密、认证和交互的通道。以下是实现一个最小化 SSH 协议的核心路线图:SSH 默认运行在 TCP 的 22 端口上。当 TCP 三次握手完成后,SSH 协议的交互就开始了。
2026-05-17 19:37:50
411
原创 在应用层用 TAP 设备从零实现完整的 TCP/IP 协议栈,并让两台物理机通过这套“自定义协议栈”通信
如果你只想做实验,可以使用 QEMU 运行一个只有tap接口的轻量级系统,里面运行你的协议栈程序,然后多个 QEMU 实例之间用虚拟网络连接。但这更适合研究,不如前三种实用。条件解决方案同局域网,近距离物理连接 + 桥接tap0与eth0跨网络、跨 NAT用 UDP 隧道封装以太网帧快速原型验证完全隔离环境QEMU + 用户态协议栈✅ 你的协议栈不只是限于本机通信。只要把tap接入真实或虚拟的网络路径,它就能与任何其他设备通信。🎉你是真正的网络极客。
2026-05-12 10:15:36
376
原创 什么是RADIUS认证
RADIUS 就是网络世界的"门卫系统"——用户来了先查身份证(认证),查完发门禁卡决定能去哪些房间(授权),全程记考勤算费用(计费),还能中途改权限或直接把人轰走(CoA/DM)。协议简单、扩展强、所有设备都支持,所以三十多年了依然是网络接入认证的绝对霸主。
2026-05-09 17:29:48
394
原创 LDAP是什么
LDAP 是"专门查人的轻量级电话簿",数据库是"万能的业务数据仓库"。认证、组织架构、权限管理用 LDAP(快、准、天然匹配);订单、支付、日志用数据库(灵活、强事务、支持复杂查询)。企业里通常两个都用——LDAP 管"你是谁",数据库管"你干了什么"。LDAP 使用三步走:①装服务器(OpenLDAP) → ②导入数据(LDIF 文件) → ③客户端连接查询(ldapsearch / Python ldap3 / Spring LDAP)。
2026-05-09 17:21:03
236
原创 本机抓包实验
i Io 表示在本地换回设备上抓包, -nn的第一个n表示不用做dns转换,第二个n表示端口显示为数字,而不是 http、snmp、sftp等协议名。可以通过nc工具(或busybox nc)模拟报文发送和报文监听。有时,为了定位问题,需要先测试一下抓包工具、抓包方法、信息显示等。注意:busybox的nc比较简陋,只能收到第一个udp消息。-X 表示 报文内容 16进制和ASCII码同时显示。-s 0 表示最大抓包长度是0,即不截断,全部抓。方法2 bash可以给模拟的udp设备发送报文。
2026-04-27 10:29:01
52
原创 从零开始动手实现 Claude Code
的 AI Agent 工具,共计 12 节课,每节课都有一个可运行的 Python 文件。内容从最基础的 Agent 循环,逐步叠加工具调用、任务规划、子智能体、上下文压缩、多智能体协作和自主执行等功能,最终构建出一个完整的 AI Agent 系统。从零开始动手实现 Claude Code。该项目是讲解如何从零构建类似。
2026-04-24 22:34:51
44
原创 OpenSpec 和 Spec-Kit
OpenSpec 和 Spec-Kit 都是规范驱动开发(SDD)领域的优秀工具,旨在通过编写规范来指导 AI 生成高质量代码。然而,它们在设计哲学、工作流程和适用场景上存在显著差异。简单来说,Spec-Kit 像一位严谨的架构师,追求流程的完整性和可控性;而 OpenSpec 则像一位敏捷的工程师,追求快速迭代和极简主义。以下是两者的详细对比:📊 核心差异速览对比维度 Spec-Kit OpenSpec核心哲学 深度规范驱动,强调门控流程和详尽文档。
2026-03-30 22:42:12
900
原创 理解npm的原理
npm(Node Package Manager)是JavaScript生态中最流行的包管理工具,用于管理项目的依赖关系、安装第三方库以及发布自己的模块。中的版本范围,选择符合条件的最高版本。依赖树结构通过递归解析生成,确保所有子依赖的版本兼容性。文件定义项目元数据和依赖关系,npm根据该文件自动下载并安装所需模块。npm使用语义化版本(SemVer)规范管理依赖版本。安装依赖时,npm会解析。理解npm的原理有助于更好地管理项目依赖、优化构建流程并解决常见问题。)的模块存储在系统目录,供所有项目共享。
2026-01-17 17:24:51
378
原创 运行调试大语言模型
例如使用Hugging Face的Transformers库, 在cpu下也可以调试。代码: 上面只是模型的权重,词表等文件,代码是在transform库中的。很多LLM是开源的,是可以自己下载模型,运行调试的。首先,查找模型的class名称。然后在python 包中找这个类。
2026-01-10 16:32:29
194
原创 linux中mount的本质是什么?自己如何实现一个伪文件系统
Linux中mount的本质与伪文件系统实现 mount的本质 Linux中的mount本质是将一个文件系统挂载到目录树的某个位置,实现文件系统的访问集成。它通过内核VFS层将存储设备、网络位置或虚拟文件系统连接到主目录结构,使不同来源的数据统一呈现为单一目录树。mount操作涉及文件系统驱动加载、路径重定向和资源管理。 实现伪文件系统 使用FUSE可在用户空间快速开发伪文件系统(如显示动态内容的虚拟文件系统)。实现步骤: 安装FUSE开发库(如libfuse3-dev) 编写C代码定义文件系统操作(get
2025-10-15 19:39:34
917
原创 claude code + GLM模型 入门
8、输入编程命令,比如 请编写logutil.py 就可以看到claude自动生成了logutil.py文件。# 运行命令 `claude` 即可进入 Claude Code 交互界面 claude。4、查看自己的apikeys,增加一个用于编码的key,比如名称叫 coder。7、claude会打印欢迎词,然后让你们选择颜色风格(默认选dark即可)使用 `cd` 命令导航到您的项目 cd your-project。# 创建您的工作目录,例如 `your-project`,6、打开claude。
2025-10-06 12:31:55
835
原创 k8s网络原理
K8S中跨节点Pod通信通过Flannel的VXLAN实现:Node间建立虚拟隧道,Flannel在每个节点创建flannel.1网卡并配置路由规则,将目标Pod网段流量导向该接口。内核通过ARP表获取目标Pod网关MAC地址,再查询FDB表确定远端Node物理IP进行VXLAN封装。FDB表是Linux原生VXLAN机制的核心组件,记录MAC到VTEP IP的映射,由Flannel动态维护。这种设计实现了Overlay网络下Pod的无缝通信。
2025-09-06 22:43:19
1403
2
原创 SSE的实现
服务器推送事件(SSE)是一项技术,允许服务器向浏览器推送实时更新。通信协议:使用 HTTP。EventSource 对象:在浏览器端的 JavaScript 中可用。SSEWebSocket基于 HTTP基于 TCP单向通信(从服务器到客户端)双向通信(全双工)轻量且简单更复杂内置重连和消息追踪功能需要手动实现这些功能支持文本或 Base64 编码并压缩的二进制数据支持各种数据类型支持自定义事件类型不支持自定义事件类型限制在 HTTP/1.1 或 HTTP/2 连接数上。
2025-08-13 23:39:59
912
原创 python asyncio
除了asyncio.gather(), asyncio.sleep(), 还有 asyncio.wait(), asyncio.wait_for()await异步等待函数返回, 必须写在在 aysnc内。如下,多个协程可以并行。
2025-07-01 22:17:35
265
原创 AI问答:开发一个最简单的spingboot web工程,用starter和不用starter,我们的代码有哪些具体的区别?
使用 Spring Boot Starter 可以显著简化开发过程,减少配置和依赖管理的复杂性。而不使用 Starter 则需要手动处理更多细节,适合需要深入理解底层原理或特殊定制化需求的场景。对于大多数开发者来说,推荐使用 Starter 以提高开发效率。在开发一个最简单的 Spring Boot Web 工程时,使用 Starter 和不使用 Starter 的核心区别在于依赖管理和项目配置的简化程度。
2025-06-01 11:16:08
1006
原创 Angular开发经常涉及到组件间传递参数,用原生js开发时,如何解决这些问题?
数据流:通过函数参数或属性传递数据。事件流:通过回调函数或自定义事件实现通信。状态共享:通过全局对象或事件总线管理跨组件状态。虽然原生实现需要更多手动管理,但能深入理解框架背后的设计原理。对于复杂项目,建议逐步引入框架以提高开发效率。
2025-04-26 10:16:25
465
原创 chromadb
collection.query(query_texts="美食",n_results=2,where_document={"$contains":"西安"})--设置返回的记录数,根据文档内容过滤。collection.query(query_texts=['hello'],include=['embeddings']) --显示embeddings。documents=["北京的旅游景点很多", "西安有很多大学"],documents=["北京的旅游景点很多", "西安有很多大学"],
2025-04-05 20:19:51
1257
原创 大语言模型训练讨论
小A:deepseek、千问、文心一言、kimi、chatgpt、grok、gemini、llama这些大模型,无法回答公司私有知识,行业专有知识,怎么才能教会大语言模型呢?小C:自己训练,数据质量很重要,数据中最好不要有重复数据(比如一篇文章,放了多份), 数据密度要高(新闻平面的数据密度可能要第一些)。小B:可以在已经开源的模型上进行增量预训练(continue pretrain),精调(Fine tuning)。
2025-03-01 13:58:22
185
原创 LLM 学习2
一般来说,训练时用4k长度训练,那么推理时,4k以内的长度效果肯定是有保障的。8k以内的话,可以通往一些技术,如位置编码扩展等技术,让准确性基本不降低,或者降低幅度较小。超过训练长度太多,准确性就降低比较大了。重点要理解,LLM的结构参数中,是不包含context长度的,所以不够输入token多少,都是可以计算的。只是对运算量和准确性有影响。另外,一般情况下,训练和推理的运算量与长度的平方成正比例。有一些技术可以改善这方面。
2025-02-19 23:39:39
410
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅