wsl2配置xv6全解(包括22.04Jammy)
文章目录
- 获取xv6源代码
- Ubuntu
- 20.04 Version
- 安装指令
- 成功测试
- 参考MIT2021年官方文档
- 24.04 Version
- 安装指令
- 成功测试
- 参考MIT2024年官方文档
- Ubuntu 22.04
- 没有官方文档?
- 配置大体流程
- 1. 卸载原本qemu(如果之前安装了)
- 2. clone qemu官方源代码,切换到stable 7.2 version
- 3. configure
- 4. make 并 install
- 5. 删除下载的qemu项目
- 心酸历程
- 能不能用24.04的Qemu?
- 更多
- 三种riscv-gcc的应用场景与区别
- 能不能在wsl下使用?
- riscv64-linux-gnu-gcc
- riscv64-unknown-elf-gcc
- riscv64-unknown-linux-gnu-gcc
- 配置环境项讲解
- 1. git
- 2. build-essential
- 3. gdb-multiarch
- 4. qemu-system-misc
- 5. gcc-riscv64-linux-gnu
- 6. binutils-riscv64-linux-gnu
- 总结
- 自己安装的qemu和apt安装的有什么区别
- 1. 版本差异
- 2. 编译选项
- 3. 安装路径
- 4. 依赖管理
- 5. 更新与维护
- 6. 兼容性
获取xv6源代码
git clone https://github.com/mit-pdos/xv6-riscv.git
cd xv6-riscv #视下载后项目文件而定,可能在更多层中
下载好并正确进入OS源代码所在文件夹后,结构应该为
Ubuntu
20.04 Version
最终环境:QEMU 5.1+, GDB 8.3+, GCC, and Binutils.
安装指令
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu
成功测试
# in the xv6 directory
$ make qemu
# ... lots of output ... 最终显示
init: starting sh
$
如果没有成功,可以检查下面环境
$ qemu-system-riscv64 --version
QEMU emulator version 5.1.0
至少一个以下GCC版本
$ riscv64-linux-gnu-gcc --version
riscv64-linux-gnu-gcc (Debian 10.3.0-8) 10.3.0
...
$ riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (GCC) 10.1.0
...
$ riscv64-unknown-linux-gnu-gcc --version
riscv64-unknown-linux-gnu-gcc (GCC) 10.1.0
...
参考MIT2021年官方文档
6.S081 / Fall 2021
24.04 Version
最终环境:RISC-V versions of QEMU 7.2+, GDB 8.3+, GCC, and Binutils.
安装指令
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu
成功测试
# in the xv6 directory
$ make qemu
# ... lots of output ...
init: starting sh
$
如果没有成功,可以检查下面环境
$ qemu-system-riscv64 --version
QEMU emulator version 7.2.0
至少一个以下GCC版本
$ riscv64-linux-gnu-gcc --version
riscv64-linux-gnu-gcc (Debian 10.3.0-8) 10.3.0
...
$ riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (GCC) 10.1.0
...
$ riscv64-unknown-linux-gnu-gcc --version
riscv64-unknown-linux-gnu-gcc (GCC) 10.1.0
...
参考MIT2024年官方文档
6.1810 / Fall 2024
Ubuntu 22.04
有人又要说了,博主博主这不是CV官方文档吗。这也可以水一篇博客,强烈谴责!
也有人就要问了,主播主播,20.04和24.04版本的配置环境太没有含金量了,有没有什么又没有什么博客指引,也没有官方文档的版本?
有的,兄弟,有的。像这样的牢版本还有2(jiǔ)个……其中一个便是咱们的22.04,高贵的Jammy玩家
没有官方文档?
20年没有wsl版本,21~23年是20.04的天下,24年终于更新了……是24.04(Jammy玩家悬着的心还是死了)
不过以下指令还是要先执行的
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch binutils-riscv64-linux-gnu
配置大体流程
- 卸载原先qemu
- clone qemu官方源代码,切换到stable 7.2 version
- configure
- make 并 install
1. 卸载原本qemu(如果之前安装了)
22.04版本使用 apt install
直接安装的版本是 6.2.0
由于不知名原因,这个qemu并无法直接使用。会出现执行 make qemu
到一半卡住无反馈的情况
我当时还寻思着怎么启动个系统这么久……
此时有两个选择,一是使用老版本qemu(5.1),二是使用新版本qemu(7.2)。由于官方已更新,所以我们选择后者。
使用apt移除qemu
sudo apt remove --purge qemu qemu-system qemu-utils qemu-system-* -y
清理残留文件
sudo apt autoremove -y
sudo apt autoclean
检查是否仍然存在 QEMU
qemu-system-riscv64 --version
如果命令返回 “command not found”,说明 QEMU 已成功卸载。
2. clone qemu官方源代码,切换到stable 7.2 version
git clone https://gitlab.com/qemu-project/qemu.git
cd ./qemu
git checkout stable-7.2
注意:这里没有用到最新版(学都是学最新的,用都是用最老的~~~)
3. configure
cd qemu/
mkdir build
cd build/
../configure --target-list=x86_64-softmmu,riscv64-softmmu --enable-debug
注意这里我们只make了x86_64和riscv-64版本并且之后安装到/usr/local下。此时调用项目中可执行文件configure为make作准备。
出现 ERROR: Cannot find Ninja
执行命令
sudo apt install ninja-build
出现 ERROR: glib-2.56 gthread-2.0 is required to compile QEMU
执行命令
sudo apt install libglib2.0-dev
之后想要将qemu安装到/usr而非/usr/local下(不推荐,可能会和系统自带包管理器相冲突)
将原本configure指令替换为
../configure --target-list=x86_64-softmmu,riscv64-softmmu --enable-debug --prefix=/usr
成功configure之后显示
后面还有很多参数,没有截全
4. make 并 install
make -j$(nproc)
sudo make install
make过程可能会持续几分钟,因机而异
完成后尝试
qemu-system-riscv64 --version
如果正常输出则ok,如果没有找到则需要将 /usr/local
也添加到 PATH
尝试
export PATH=/usr/local/bin:$PATHqemu-system-riscv64 --version
如果正常输出则将该路径添加到配置文件的PATH中
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
如果,不出意外的话。此时回到 xv6-riscv
目录便可以执行 make qemu
了
5. 删除下载的qemu项目
如果之后不打算make
其他架构的硬件模拟,此时便可以把下载的qemu源代码文件夹删除了
sudo rm -rf ./qemu
心酸历程
能不能用24.04的Qemu?
你可真是个小天才,借腹生子是吧!!!
警告:以下命令不要随便执行
sudo add-apt-repository ppa:jacob/virtualisation -y
sudo apt update
sudo apt install qemu-system-riscv64 -y
运行之后再去试试 make qemu
,结果能执行了!!!然后发现你的 gdb
就神奇的不见了……
原因就是你安装高版本的 qemu-system
时安装了覆盖一些依赖,此时便将冲突的gdb给卸载了。仔细检查 sudo apt install qemu-system-riscv64 -y
的输出日志可以发现信息
The following packages will be REMOVED:debhelper debugedit gdb gdb-multiarch ...
sad~~~天地好轮回,苍天饶过谁
这个教训告诉我们,以后在看到有哪篇博客里存在指令 apt *** -y
以 -y
结尾,基本可以拖出去斩了(bushi)
后面就因为这个事情导致22.04版本的一些依赖变成了24.04,这个做法实在是个烂主意!
原以为22.04玩家已经是最牢的,没想到b站上还有更牢的18.04玩家(bushi)
立创泰山派训练营学习笔记–Ubuntu22.04.4 rootfs根文件系统制作-Linux SDK编译(二)
更多
三种riscv-gcc的应用场景与区别
编译器 | 适用场景 | 目标架构 | 典型应用 | 是否支持标准 C 库 |
---|---|---|---|---|
riscv64-linux-gnu-gcc | Linux 用户空间 | riscv64-linux-gnu | 编译 RISC-V Linux 应用程序 | ✅ (glibc ) |
riscv64-unknown-elf-gcc | 裸机 / RTOS / OS 内核 | riscv64-unknown-elf | 编译 xv6、U-Boot、裸机程序 | ❌(无操作系统支持) |
riscv64-unknown-linux-gnu-gcc | Linux 用户空间 | riscv64-unknown-linux-gnu | 交叉编译 Linux 程序(可能使用 musl) | ✅ (glibc 或 musl ) |
- 如果你在开发 Linux 用户空间应用(如普通软件)
→ 用riscv64-linux-gnu-gcc
或riscv64-unknown-linux-gnu-gcc
- 如果你在开发 RISC-V 操作系统或裸机程序(如 Bootloader、xv6)
→ 用riscv64-unknown-elf-gcc
- 如果你不确定,但目标是在 RISC-V Linux 运行
→ 用riscv64-linux-gnu-gcc
能不能在wsl下使用?
riscv64-linux-gnu-gcc
情况:可以编译成功但是无法执行
这个gcc最终编译的二进制文件针对的是RISCV架构,所以无法在一般的x86-64架构上直接执行。而xv6-riscv是通过qemu模拟riscv硬件才能够执行
riscv64-unknown-elf-gcc
情况:连编译都编译不过去了
riscv64-unknown-elf-gcc
针对的是裸机环境,那么包没有 <stdoi.h>
的。所以确实无法编译
riscv64-unknown-linux-gnu-gcc
没下……
配置环境项讲解
MIT的 apt-get install
命令安装了以下几个关键的软件包,主要用于在 WSL2 的 Ubuntu 22.04 上配置 xv6(一个 RISC-V 架构的类 Unix 操作系统)的开发和调试环境。
1. git
- 作用:Git 版本控制系统,用于下载 xv6 源码,并进行代码管理(如克隆、提交和更新)。
- xv6 相关性:从 GitHub 上克隆 xv6 源代码,例如:
git clone https://github.com/mit-pdos/xv6-riscv.git
2. build-essential
- 作用:提供了一组基本的编译工具,包括
gcc
、g++
、make
等。 - xv6 相关性:
- xv6 使用
make
进行编译,依赖gcc
进行 C 语言编译。 build-essential
里包含make
,而 xv6 的 Makefile 需要make
来组织编译流程。
- xv6 使用
3. gdb-multiarch
- 作用:支持多架构的 GNU 调试器(GDB),可用于调试不同 CPU 指令集(如 x86、ARM、RISC-V 等)的程序。
- xv6 相关性:
- xv6 运行在 RISC-V 上,因此需要一个支持 RISC-V 的 GDB 进行调试。
- 可以用它远程调试 QEMU 模拟器运行的 xv6:
gdb-multiarch (gdb) target remote localhost:1234
4. qemu-system-misc
- 作用:QEMU 是一个通用的CPU 模拟器,
qemu-system-misc
包含对多个架构的 QEMU 模拟支持。 - xv6 相关性:
- xv6 需要 QEMU 来模拟 RISC-V 硬件环境。
- 通常用如下命令运行 xv6:
make qemu
5. gcc-riscv64-linux-gnu
- 作用:RISC-V 交叉编译器,可以编译 RISC-V 目标平台的代码。
- xv6 相关性:
- xv6 运行在 RISC-V 上,而你的开发环境是 x86_64,因此需要交叉编译器编译 RISC-V 代码。
- 可以用它手动编译 xv6 代码:
riscv64-linux-gnu-gcc -o hello hello.c
6. binutils-riscv64-linux-gnu
- 作用:RISC-V 目标平台的 GNU binutils 工具集,包括
as
(汇编器)、ld
(链接器)等。 - xv6 相关性:
- xv6 需要
as
来编译汇编代码。 ld
用于链接最终的 xv6 可执行文件。
- xv6 需要
总结
软件包 | 作用 | 在 xv6 中的用途 |
---|---|---|
git | 版本控制 | 克隆 xv6 源码 |
build-essential | C/C++ 编译工具 | 编译 xv6 |
gdb-multiarch | 多架构调试 | 调试 xv6 |
qemu-system-misc | CPU 模拟器 | 运行 xv6 |
gcc-riscv64-linux-gnu | 交叉编译 | 编译 RISC-V 代码 |
binutils-riscv64-linux-gnu | 汇编/链接工具 | 处理 RISC-V 汇编和链接 |
自己安装的qemu和apt安装的有什么区别
1. 版本差异
apt 安装:Ubuntu 官方软件源提供的 QEMU 可能是稳定版,但版本较老/或太新,可能缺少一些新功能或优化。
自己编译:可以选择最新的源码,获取最新功能、修复的 bug 和性能优化。
2. 编译选项
apt 安装:使用的是 Ubuntu 维护者编译的二进制文件,默认开启了一些常见的功能,但可能未启用所有选项。
自己编译:可以根据需求启用或禁用特定功能,例如:
- 仅编译支持特定架构(如
--target-list=riscv64-softmmu
) - 选择特定的加速选项(如
--enable-kvm
、--enable-tcg
) - 进行特定优化(如
--enable-lto
进行链接时优化)
3. 安装路径
apt 安装:QEMU 会被安装到系统路径(如 /usr/bin/qemu-system-*
)
自己编译:
默认安装在 ·/usr/local/bin·,不会影响系统自带的 QEMU
可以自定义安装路径(如 ./configure --prefix=/opt/qemu
)
安装路径在 configure
之后的报告里有,如果保存了源代码build文件夹还可以执行 sudo make uninstall
进行卸载
4. 依赖管理
apt 安装:自动处理依赖关系,安装/卸载时不容易出问题。
自己编译:需要手动安装依赖(如 libglib2.0-dev、libpixman-1-dev),可能会遇到缺少库或不兼容的问题。
5. 更新与维护
apt 安装:系统更新时可以自动升级(sudo apt upgrade
)。
自己编译:需要手动拉取源码并重新编译安装,维护成本更高。
6. 兼容性
apt 安装:官方软件源提供的版本经过测试,与 Ubuntu 其他软件兼容性较好。
自己编译:如果使用了非官方补丁或特定配置,可能会遇到不兼容问题,例如影响 gdb、libvirt、kvm 相关组件的使用。
相关文章:
wsl2配置xv6全解(包括22.04Jammy)
文章目录 获取xv6源代码Ubuntu20.04 Version安装指令成功测试参考MIT2021年官方文档 24.04 Version安装指令成功测试参考MIT2024年官方文档 Ubuntu 22.04没有官方文档? 配置大体流程1. 卸载原本qemu(如果之前安装了)2. clone qemu官方源代码&…...
区块链技术的应用场景和优势
区块链技术是一种分布式数据库技术,它的应用场景和优势包括但不限于以下几点: 金融领域:区块链可以用于数字货币的交易和结算,实现去中心化的金融交易,提供更安全、透明和高效的支付方式;另外,也…...
基于深度学习的相位调制算法步骤
1.构建网络结构 2.制作数据集 3.训练网络 4.引入评价指标 5.迭代优化 总结 通过以上步骤,可以实现基于深度学习的相位调制算法: 使用 U-Net 构建神经网络。 生成数据集并训练网络。 使用训练好的网络预测相位分布。 通过相关系数 γ 评估调制效果&…...
Linux的I2C总线的原理和结构详解
Linux的I2C总线的原理和结构讲解 我前面基本已经吃透了Platform总线,关于Platform总线的原理和结构,详情见下面三篇博文: https://blog.csdn.net/wenhao_ir/article/details/145023181 https://blog.csdn.net/wenhao_ir/article/details/14…...
深入理解Linux中的SCP命令:使用与原理
在Linux系统中,文件传输是一个常见的操作。无论是将文件从本地传输到远程服务器,还是从远程服务器下载文件到本地,SCP(Secure Copy Protocol)都是一个非常实用的工具。本文将详细介绍SCP命令的使用方法,并深…...
【Android】VehiclePropertyAccess引起CarService崩溃
VehiclePropertyAccess引起CarService崩溃 VehiclePropertyAccess VehiclePropertyAccess属性,用于定义车辆属性的访问权限。权限包括 读:READ,只可以读取,不能写入。 VehiclePropertyAccess:READ写:WRITE…...
小米AX6000解锁ssh避坑笔记
经过网上教程不断尝试,终于解锁成功。 环境信息: Win10 笔记本 + AX210 WIFI6E网卡Vmware 16小米AX60000.可以先备份路由器的配置信息 1.首先降级小米AX6000到1.0.55 1.0.55下载路径 升级时注意: 清除当前所有用户配置升级完成后,选择不自动升级2.升级完成后,笔记本重新…...
论华为 Pura X 折叠屏性能检测
在科技浪潮中,折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机,承载前沿科技与精湛工艺,成为行业焦点。它融合先进折叠屏技术与优质材质,致力于打破传统手机使用边界,为用户开启全新体验。但产…...
关于极端场景下,数据库更新与 MQ 消息一致性保障方案的详细总结
目录 一、核心问题场景 二、RocketMQ 事务消息方案 1. 核心机制 2. 执行流程 3. 关键优势 4. 局限性 三、消息表方案 1. 核心机制 2. 执行流程 3. 关键优势 4. 局限性 四、方案对比与选择 五、实施建议 六、总结 一、核心问题场景 当数据库更新后,若 MQ 消息未…...
面试题精选《剑指Offer》:JVM类加载机制与Spring设计哲学深度剖析-大厂必考
一、JVM类加载核心机制 🔥 问题5:类从编译到执行的全链路过程 完整生命周期流程图 关键技术拆解 编译阶段 查看字节码指令:javap -v Robot.class 常量池结构解析(CONSTANT_Class_info等) 类加载阶段 // 手动加载…...
透析主流CSS预处理器的区别
Sass 和 Less 是两种主流的 CSS 预处理器(CSS Preprocessor),它们通过扩展原生 CSS 的语法,提供了变量、嵌套、混合(Mixins)、函数等高级功能,帮助开发者编写更高效、可维护的样式代码。以下是它…...
Redis 本地安装
首先安装: https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-from-source/ 进入root目录 tar -xzvf redis-stable.tar.gz cd redis-stable make然后 install sudo make install最后可以直接启动 redis-server但是此时启…...
Android Launcher3 首屏图标锁定技术方案解析
一、需求背景与技术挑战 在Android 13系统定制开发中,需实现Launcher首屏图标固定功能。该需求需在以下技术维度进行突破: 拖拽事件拦截机制:需精准识别拖拽目标区域 布局层级判定:准确识别第一屏的布局标识 跨屏操作限制&…...
MySQL 处理重复数据:保留一条与两条的实现方案
在数据库管理中,处理重复数据是一项常见的任务。本文将详细介绍如何在 MySQL 数据库里,针对 test 表中 fd 和 fe 字段存在的重复数据进行处理,分别实现保留一条和两条数据的操作。 表结构与需求概述 假设 test 表包含三个字段:id…...
Go红队开发—CLI框架(一)
CLI开发框架 命令行工具开发,主要是介绍开发用到的包,集成了一个框架,只要学会了基本每个人都能开发安全工具了。 该文章先学flags包,是比较经典的一个包,相比后面要学习的集成框架这个比较自由比较细化点࿰…...
deque
deque概念 双端数组,可以对头端进行插入删除操作 deque和vector差别(就像数据结构中的栈和队列) vector对于头部的插入删除效率低,而deque则相对高效 vector和deque都支持随机访问,但是vector的随机访问效率低,而deque则相对高效…...
【Oracle资源损坏类故障】:详细了解坏块
目录 1、物理坏块与逻辑坏块 1.1、物理坏块 1.2、逻辑坏块 2、两个坏块相关的参数 2.1、db_block_checksum 2.2、db_block_checking 3、检测坏块 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、数据字典 3.5、DBVERIFY 4、修复坏块 4.1、RMAN修复 4.2、DBMS_REPA…...
数据分析处理库-Pandas
1.1 Pandas概述 核心概念: Pandas 是基于 NumPy 的数据分析库,核心数据结构:Series(一维)和 DataFrame(二维)。 应用场景:数据清洗、转换、统计分析、时间序列处理。 特点&#x…...
阿里云平台Vue项目打包发布
目录: 1、vue项目打包2、通过ngixn发布vue的打包文件 1、vue项目打包 在你的vue项目下执行npm run build命令进行打包。 2、通过ngixn发布vue的打包文件 直接将打包的dist文件拷贝到nginx目录下即可。 修改nginx.conf的配置文件的相关配置,如端口或者ro…...
2025/03/19 Cursor使用方法(Java方向,适合Java后端把家从idea搬家到cursor)
Cursor介绍 官网:Cursor - The AI Code Editor 中文教程网:学习 Cursor ,拥抱 AI 编程 | Cursor 101 Cursor 是一款专为程序员打造的集成开发环境(IDE),它结合了大语言模型的能力,旨在提高开发效率. 与传统的 IDE&…...
平台与架构:深度解析与开发实践
平台与架构:深度解析与开发实践 1. 什么是平台与架构? 平台(Platform):指操作系统或运行环境,例如 linux、windows、darwin(macOS)、android 等。架构(Architecture&…...
xss-labs第八、九关卡以及XSS GAME的Ok,Boomer关卡
第八关 靶场代码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不错&#…...
electron框架(1.0)认识electron和基础创建
----什么是electron框架 中文网地址(https://electronjs.p2hp.com/docs/latest/tutorial/quick-start) ----electron流程模型 ----项目搭建 --起步(需下载): node -v npm -v--创建初始文件: mkdir my-e…...
考OCP认证要交哪些费用?
考OCP认证要交哪些费用? 考OCP认证,指的是Oracle数据库管理员中级认证 Oracle Certified Professional,这是Oracle非常有名的一个认证,对于个人帮助巨大。 OCP认证要交不少钱,些费用因考试版本、培训机构和地区差异而有所不同&a…...
基于漂浮式海上风电场系统的浮式风力发电机matlab仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于漂浮式海上风电场系统的浮式风力发电机matlab仿真,通过MATLAB数值仿真对浮式风力发电机的性能做模拟与仿真。 2.系统仿真结果 3.核心程序与模型 版本&#x…...
Jupyter Notebook 常用命令(自用)
最近有点忘记了一些常见命令,这里就记录一下,懒得找了。 文章目录 一、文件操作命令1. %cd 工作目录2. %pwd 显示路径3. !ls 列出文件4. !cp 复制文件5. !mv 移动或重命名6. !rm 删除 二、代码调试1. %time 时间2. %timeit 平均时长3. %debug 调试4. %ru…...
RabbitMQ 详细原理解析
RabbitMQ 是一个基于 AMQP(Advanced Message Queuing Protocol) 协议的开源消息代理中间件,广泛用于分布式系统中的异步通信、服务解耦、流量削峰等场景。其核心设计围绕生产者、消费者、队列、交换机和虚拟主机等组件,结合 AMQP …...
HTTP状态码全解析
1. 状态码分类 类别范围含义1xx100-199信息性:请求被接收,需进一步处理(临时响应)2xx200-299成功:请求被正确处理3xx300-399重定向:需后续操作完成请求(如跳转到新URL)4xx400-499客…...
从零实现本地文生图部署(Stable Diffusion)
1. 依赖安装 文件打包下载地址(Stable Diffusion) # git : 用于下载源码 https://git-scm.com/downloads/win # Python 作为基础编译环境 https://www.python.org/downloads/ # Nvidia 驱动,用于编译使用GPU显卡硬件 https://ww…...
手撕算法——链表
算法基础——链表-CSDN博客 一、排队顺序 题⽬来源:洛⾕ 题⽬链接:B3630 排队顺序 - 洛谷 难度系数:★ 1. 题目描述 2. 算法原理 本题相当于告诉了我们每⼀个点的后继,使⽤静态链表的存储⽅式能够很好的还原这个队列。 数组中 [1,…...
css-grid布局
文章目录 1、布局2、网格轨道3、间距Gap4、网格线5、网格别名 当一个 HTML 元素将 display 属性设置为 grid 或 inline-grid 后,它就变成了一个网格容器,这个元素的所有直系子元素将成为网格元素。 1、布局 启用grid布局类似与flex布局,不过g…...
1.企业级AD活动目录核心解析:架构、组件与集成实践
在当今数字化时代,企业级网络环境日益复杂,高效、安全的资源管理和用户认证成为企业 IT 运营的关键。AD(Active Directory)活动目录作为微软 Windows 系列服务器中的重要目录服务,为企业级网络管理提供了强大的解决方案…...
哈尔滨工业大学DeepSeek公开课人工智能:大模型原理 技术与应用-从GPT到DeepSeek|附视频下载方法
导 读INTRODUCTION 今天继续哈尔滨工业大学车万翔教授带来了一场主题为“DeepSeek 技术前沿与应用”的报告。 本报告深入探讨了大语言模型在自然语言处理(NLP)领域的核心地位及其发展历程,从基础概念出发,延伸至语言模型在机器翻…...
ChatGPT vs DeepSeek vs Copilot vs Claude:谁将问鼎AI王座?
李升伟 整理 2025年的人工智能领域创新涌动,ChatGPT、DeepSeek、Copilot和Claude四大模型各领风骚。这些AI系统各具特色,分别专注于编程、创意写作、技术推理和AI伦理等不同领域。本文将深入解析这些AI模型的功能特性及其优势领域。 核心AI模型解析 C…...
【嵌入式Linux】基于ArmLinux的智能垃圾分类系统项目
目录 1. 功能需求2. Python基础2.1 特点2.2 Python基础知识2.3 dict嵌套简单说明 3. C语言调用Python3.1 搭建编译环境3.2 直接调用python语句3.3 调用无参python函数3.4 调用有参python函数 4. 阿里云垃圾识别方案4.1 接入阿里云4.2 C语言调用阿里云Python接口 5. 香橙派使用摄…...
Vue3中router最佳封装落地
文章目录 前言一、拆分路由文件夹?二、main.ts中注册路由总结 前言 router在使用过程中如果我们直接在一个文件的一个数组中配置,最后路由越来越多会导致不易管理,我们可以将一个页面的路由配置在一个数组中最后统一导入,这样就会…...
[Linux] make自动化构建
目录 一.什么是make 二.Makefile结构 2.1 典型结构 2.2 变量 1. 普通变量(User-Defined Variables) 2. 自动变量(Automatic Variables) 3. 预定义变量(Built-in Variables) 4. 函数变量࿰…...
剑指 Offer II 113. 课程顺序
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20113.%20%E8%AF%BE%E7%A8%8B%E9%A1%BA%E5%BA%8F/README.md 剑指 Offer II 113. 课程顺序 题目描述 现在总共有 numCourses 门课需要选,记为 0 到 n…...
蓝桥杯 小球反弹
问题描述 有一个长方形,长为 343720 单位长度,宽为 233333 单位长度。 在其内部左上角顶点有一小球(无视其体积),其初速度方向如图所示,且保持运动速率不变。分解到长宽两个方向上的速率之比为࿱…...
Python 监听模式(Observer Pattern)
1. 监听模式技术方案 监听模式(Observer Pattern)是一种行为设计模式,允许对象(称为“观察者”或“监听者”)在另一个对象(称为“被观察者”或“主题”)的状态发生变化时接收通知。这种模式的核…...
蓝桥备赛(25)算法篇【差分】
一、差分 前缀和和差分的核心思想是预处理 , 可以在暴力枚举的过程中 , 快速给出查询结果 , 从而优化时间复杂度 。 最经典的用空间替换时间的做法。 学完差分之后 , 大家会发现 , 前缀和与差分是一对互逆的运算 二、一…...
Linux|fork命令及其使用的写时拷贝技术
fork复制进程 fork通过以下步骤来复制进程: 分配新的进程控制块:内核为新进程分配一个新的进程控制块(PCB),用于存储进程的相关信息,如进程 ID、状态、寄存器值、内存指针等。复制进程地址空间࿱…...
sgpt 终端使用指南
1. 什么是 sgpt? sgpt 是一个基于 OpenAI API 的命令行工具,允许用户在终端中与 AI 进行交互,支持自然语言对话、代码生成、Shell 命令生成等功能。本文将介绍 sgpt 的安装方法、基本用法、配置文件路径及修改方式,并提供完整的配…...
python如何提取html中所有的图片链接
在Python中,你可以使用BeautifulSoup库来解析HTML内容,并提取其中所有的图片链接(即<img>标签的src属性)。以下是一个示例代码,展示了如何做到这一点: 首先,确保你已经安装了BeautifulSo…...
第十一章 | 智能合约主网部署与验证详解
📚 第十一章 | 智能合约主网部署与验证详解 ——让你的合约真正上线、公开、透明! ✅ 本章导读 前面我们写了各种合约,ERC20、NFT、DAO…… 但只在本地测试或测试网上部署运行,项目还没“上链”! 主网上线部署&#…...
一文读懂Python之json模块(33)
一、json模块介绍 json模块的功能是将序列化的json数据从文件里读取出来或者存入文件。json是一种轻量级的数据交换格式,在大部分语言中,它被理解为数组(array)。 json模块序列化与反序列化的过程分别是 encoding和 decoding。e…...
TextView、AppCompatTextView和MaterialTextView该用哪一个?Android UI 组件发展史与演进对照表
在 Android 开发中,UI 组件一直在不断演进,从最初的原生组件,到 Support Library(AppCompat 兼容库),再到如今的 Material Design 组件。这篇文章将梳理 Android UI 组件的发展历史,并提供详细的…...
三层网络 (服务器1 和 服务器2 在不同网段)
服务器1 和 服务器2 在不同网段,并且通过三层交换机实现通信 1. 网络拓扑 假设网络拓扑如下: 服务器1: mac0:IP 地址 192.168.1.10/24,网关 192.168.1.1 mac1:IP 地址 10.0.1.10/24,网关 10.0…...
23种设计模式-创建型模式-工厂方法
文章目录 简介场景问题1. 直接依赖具体实现2. 违反开闭原则3. 条件分支泛滥4. 代码重复风险 解决根本问题完整类图完整代码说明核心优势代码优化静态配置表动态策略 总结 简介 工厂方法是一种创建型设计模式,它提供了在父类中创建对象的接口,但允许子类…...
el-table单元格编辑,动态增删行,回车/上下左右箭头切换单元格
🤵 作者:coderYYY 🧑 个人简介:前端程序媛,目前主攻web前端,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回!!) 👉 个人专栏推荐:《前端项目教程以及代码》 基于 Element UI 实现表格单元格编辑与键盘导航功能 Element UI …...