Ubuntu20.04+Intel SGX(一):环境安装与测试

news2024/11/13 9:50:23

文章目录

  • 测试环境
  • 一、检查服务器是否支持SGX
    • 方法1:cpuid查看是否支持SGX
    • 方法2:`test-sgx.c`测试是否支持SGX
    • 验证是否支持SPS
  • 二、启动 SGX 服务
    • 参考文档
    • 启动 SGX
      • 方法1:BIOS 启动SGX
      • 方法2:软启动 SGX
      • 检查SGX是否开启成功
  • 三、安装 SGX 驱动
    • SGX驱动介绍
    • 使用`SGXDataCenterAttestationPrimitives`编译安装SGX驱动
      • 操作系统及CPU要求
      • 驱动编译安装步骤
  • 四、构建Intel(R) SGX SDK 和 SGX PSW包
    • 构建前准备
    • 编译和安装SGX SDK
    • 编译和安装PSW
  • 参考文献

测试环境

  • Ubuntu 20.04
  • Intel® Xeon® Gold 5318Y

一、检查服务器是否支持SGX

测试方法参考官方文档

方法1:cpuid查看是否支持SGX

cpuid --one-cpu | grep -i sgx
      SGX: Software Guard Extensions supported = true
      SGX_LC: SGX launch config supported      = true
      SGX-KEYS: SGX attestation services       = true
   Software Guard Extensions (SGX) capability (0x12/0):
      SGX1 supported                           = false
      SGX2 supported                           = false
      SGX ENCLV E*VIRTCHILD, ESETCONTEXT       = false
      SGX ENCLS ETRACKC, ERDINFO, ELDBC, ELDUC = false
      SGX ENCLU EVERIFYREPORT2                 = false
      SGX ENCLU EDECCSSA                       = false
   SGX attributes: ECREATE SECS.ATTRIBUTES (0x12/1):
   SGX Enclave Page Cache (EPC) enumeration (0x12/0x2):
  • 如果输出为空,则表示不支持,可以使用simulation mode,但该模式不能用于发布版环境。
  • 如果输出中包含SGX_LC: SGX launch config supported = true,则支持DCAP(数据中心标记基元,即远程认证服务)功能。FLC 即 Flexible Launch Control。
  • 上述输出中SGX1 supported = false表示SGX还未开启,或者未开启成功。

方法2:test-sgx.c测试是否支持SGX

  1. 安装 gcc
sudo dnf -y install clang
  1. 转到 SGX 硬件 Github 并下载文件 test-sgx.c 或克隆存储库
  2. 根据以下说明编译并运行 test-sgx.c
$ gcc test-sgx.c -o test-sgx
$ ./test-sgx
eax: 606a6 ebx: 4400800 ecx: 7ffefbf7 edx: bfebfbff
stepping 6
model 10
family 6
processor type 0
extended model 6
extended family 0
smx: 1

Extended feature bits (EAX=07H, ECX=0H)
eax: 2 ebx: f3bfb7ef ecx: 40417f5e edx: bc040412
sgx available: 1
sgx launch control: 1

CPUID Leaf 12H, Sub-Leaf 0 of Intel SGX Capabilities (EAX=12H,ECX=0)
eax: 0 ebx: 0 ecx: 0 edx: 0
sgx 1 supported: 0
sgx 2 supported: 0
MaxEnclaveSize_Not64: 0
MaxEnclaveSize_64: 0

CPUID Leaf 12H, Sub-Leaf 1 of Intel SGX Capabilities (EAX=12H,ECX=1)
eax: 0 ebx: 0 ecx: 0 edx: 0

CPUID Leaf 12H, Sub-Leaf 2 of Intel SGX Capabilities (EAX=12H,ECX=2)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 3 of Intel SGX Capabilities (EAX=12H,ECX=3)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 4 of Intel SGX Capabilities (EAX=12H,ECX=4)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 5 of Intel SGX Capabilities (EAX=12H,ECX=5)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 6 of Intel SGX Capabilities (EAX=12H,ECX=6)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 7 of Intel SGX Capabilities (EAX=12H,ECX=7)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 8 of Intel SGX Capabilities (EAX=12H,ECX=8)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 9 of Intel SGX Capabilities (EAX=12H,ECX=9)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M
  1. 查找 输出: sgx launch control: 1

验证是否支持SPS

由于实验中使用的型号是TH-D2113 Gold 5318Y ,实现SGX需要支持SPS(Server Platform Services,英特尔® SPS)才行。

Intel® Software Guard Extensions (Intel® SGX) Yes with Intel® SPS

不知道如何验证,应该是需要装相关的SPS驱动。

二、启动 SGX 服务

参考文档

  • 安装文档参考《Intel® SGX Software Installation Guide For Linux* OS》
  • 更多的参考文档见这儿

启动 SGX

首先检查BIOS是以UEFI模式启动的,不能以legacy模式启动,因为:

  • 在 Legacy 模式下启动的系统无法执行软件启用,因为该过程取决于 EFI 变量。
  • 可以通过在 UEFI 模式下启动 Linux Live CD,然后执行软件启用来启用 Legacy 模式系统。 英特尔 SGX 启用发生在平台级别,而不是操作系统级别
  • EFI 文件系统,如果您的 Linux 系统以 UEFI 模式启动,则默认情况下应安装该文件系统。

方法1:BIOS 启动SGX

不同的BIOS操作不同,示例如下:
BIOS下enable SGX【System Configuration】 → BIOS/Platform Configuration (RBSU) → System Options → Processor Options → Intel Software Guard Extensions (SGX)】→ 启动。

如果在BIOS中没有设置SGX的地方,且芯片是支持SGX的,可以升级BIOS版本或者找服务器售后了解情况。

方法2:软启动 SGX

如果SGX在BIOS中提示“软件控制”,则可以使用下面的软起动方法启动SGX。具体说明可以参考这儿
软启动代码参考:github.com/intel/sgx-software-enable

由于本服务器不支持软件启动,所以无法展示启动情况。

  1. 安装gcc环境
sudo apt install -y clang
  1. 编译,启动
$ make
$ sudo ./sgx_enable 
Intel SGX is explicitly disabled, and your BIOS does not
support the "software enable" option. Check your BIOS for an
explicit option to enable Intel SGX.

检查SGX是否开启成功

git clone https://github.com/ethernity-cloud/mvp-pox-node.git
cd mvp-pox-node
cd mvp-pox-node
./utils/linux/test-sgx

如果输出下面类似的结果表示已经开启成功:

...
Extended feature bits (EAX=07H, ECX=0H)
eax: 2 ebx: f3bfb7ef ecx: 40417f5e edx: bc040412
sgx available: 1
sgx launch control: 1

CPUID Leaf 12H, Sub-Leaf 0 of Intel SGX Capabilities (EAX=12H,ECX=0)
eax: 403 ebx: 1 ecx: 0 edx: 381f
sgx 1 supported: 1
sgx 2 supported: 1
MaxEnclaveSize_Not64: 1f
MaxEnclaveSize_64: 38
MaxEnclaveSize_64 (MB): 0
...

如果sgx 1 supported不为1,至少MaxEnclaveSize_64是大于0的。

三、安装 SGX 驱动

下面的方法是在FLC + Intel® AES New Instructions 平台上进行安装的步骤。如果是老版本的机器,请参考老版本的安装步骤。

SGX驱动介绍

参考:

  • Linux kernel drivers介绍
  • Intel_SGX_SW_Installation_Guide_for_Linux
    在这里插入图片描述
  • linux-sgx-driver, 旧版本,不支持 DCAP。如果CPU不支持灵活的启动控制和英特尔® AES新指令,只支持SGX1,则使用该驱动进行安装。

  • SGXDataCenterAttestationPrimitives, out-of-tree(OOT) 模式驱动,同时支持 非 DCAP 软件基础设施(使用旧的 EPID 远程证明技术)和新的 DCAP(使用新的 ECDSA 和更“正常”的 PKI 基础设施)。 该驱动需要选择<5.11的Linux kernel。

  • kernel 5.11 开始,SGX 支持被上游到 Linux 主线(SGX驱动集成到了Linux内核中,In-kernel Driver) 目前仅支持 DCAP 认证。 该驱动程序可通过 /dev/sgx_enclave/dev/sgx_provision 访问。需要注意的是安装5.11以上kernel需要SGX 支持FLC。

使用SGXDataCenterAttestationPrimitives编译安装SGX驱动

如果使用 kernel 版本≥5.11,则跳过驱动安装,直接进行SDK和PSW安装。

操作系统及CPU要求

  • 操作系统要求
Ubuntu* 16.04 LTS Desktop 64bits - minimal kernel 4.15
Ubuntu* 16.04 LTS Server 64bits - minimal kernel 4.15
Ubuntu* 18.04 LTS Desktop 64bits
Ubuntu* 18.04 LTS Server 64bits
Ubuntu* 20.04 LTS Server 64bits
Red Hat Enterprise Linux Server 8 (RHEL 8) 64bits
CentOS 8 64bits
  • FLC功能对CPU版本要求

第八代Intel® Core™处理器或更新版本,具有灵活启动控制和Intel® AES新指令支持。

cpuid -1 | grep -i sgx

// 如果输出中包含下面信息表示CPU支持FLC
SGX_LC: SGX launch config supported = true
....
SGX1 Supported = true // SGX1必须为true表示SGX开启成功
SGX2 Supported = true 

或者使用测试程序:SGX Hardware Github

git clone https://github.com/ayeks/SGX-hardware.git
gcc test-sgx.c -o test-sgx
./test-sgx

// 如果输出如下信息表示CPU支持FLC
sgx launch control: 1

更多的FLC测试信息见官方文档《Which Platforms Support Intel® Software Guard Extensions (Intel® SGX) SGX2?》

  • 硬件已经启动SGX,见前述。

驱动编译安装步骤

  1. 环境检查
// 头文件检查:执行下面文件,如果有输出表示已经安装
dpkg-query -s linux-headers-$(uname -r)

// 如果没有安装头文件,则使用下面命令进行安装
sudo apt-get install linux-headers-$(uname -r)
  1. 下载源码
    SGXDataCenterAttestationPrimitives支持Windows和Linux驱动编译安装。
git clone https://github.com/intel/SGXDataCenterAttestationPrimitives.git
cd SGXDataCenterAttestationPrimitives/driver/linux/
  1. 安装DKMS
    DKMS动态内核模块支持 (Dynamic Kernel Module Support,DKMS)是用来生成Linux的内核模块的一个框架,其源代码一般不在Linux内核源代码树。
sudo apt-get install -y dkms
  1. 查看SGX版本
cat dkms.conf
// 输出以下信息
PACKAGE_NAME="sgx"
PACKAGE_VERSION="1.41"
BUILT_MODULE_NAME[0]="intel_sgx"
DEST_MODULE_LOCATION[0]="/kernel/drivers/intel/sgx"
AUTOINSTALL="yes"
MAKE[0]="'make'  KDIR=/lib/modules/${kernelver}/build"

其中PACKAGE_VERSION为第5-6步中的<version>值,比如1.41

  1. 安装驱动到DKMS中
export version=<your version>
sudo mkdir /usr/src/sgx-$version/
make clean
sudo cp ./* /usr/src/sgx-$version/ -r
sudo dkms add -m sgx -v $version
sudo dkms build -m sgx -v $version
sudo dkms install -m sgx -v $version
sudo /sbin/modprobe intel_sgx

如果此步骤出现如下问题

  • install 错误:modprobe: ERROR: could not insert ‘intel_sgx’: Bad address
// 查看安装情况
$ dkms status
sgx, 1.41, 5.4.0-150-generic, x86_64: installed

问题原因是SGX虽然在BIOS开启了,但是并未启动成功

SGX1 Supported = false
SGX1 Supported = false

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYOtPW8m-1687240284270)(https://note.youdao.com/yws/res/80448/WEBRESOURCEe35d46a560328736926178b221e3499e)]

解决方法:使用BIOS中SGX选项【SGX Factory Reset】选项将SGX空间清空(不同BIOS操作不相同),然后即可正常打开SGX。

  1. 添加 udev 规则和 sgx_prv 组以正确设置 /dev/sgx/enclave/dev/sgx/provision 节点的权限,更多背景信息见启动带有配置位设置的 enclave一文。
sudo cp  10-sgx.rules /etc/udev/rules.d
sudo groupadd sgx_prv
sudo udevadm trigger
  1. 卸载SGX 驱动的方法
sudo /sbin/modprobe -r intel_sgx
sudo dkms remove -m sgx -v $version --all
sudo rm -rf /usr/src/sgx-$version
sudo dracut --force   # only needed on RHEL/CentOS 8

四、构建Intel® SGX SDK 和 SGX PSW包

构建前准备

  1. 支持的操作系统
Ubuntu* 18.04 LTS Desktop 64bits
Ubuntu* 18.04 LTS Server 64bits
Ubuntu* 20.04 LTS Desktop 64bits
Ubuntu* 20.04 LTS Server 64bits
Ubuntu* 22.04 LTS Server 64bits
Red Hat Enterprise Linux Server release 8.6 64bits
CentOS Stream 8 64bits
CentOS 8.3 64bits
SUSE Linux Enterprise Server 15.4 64bits
Anolis OS 8.6 64bits
Debian 10 64bits

其他操作系统安装步骤参考:安装sgx驱动以及相关服务

  1. 安装环境
    构建Intel® SGX SDK要求gcc版本为7.3及以上,glibc版本为2.27及以上
// 驱动环境
sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python-is-python3 libssl-dev git cmake perl -y

// PSW 环境
sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper cmake reprepro unzip pkgconf libboost-dev libboost-system-dev libboost-thread-dev lsb-release libsystemd0 -y
  1. 下载源码并进行预编译
git clone https://github.com/intel/linux-sgx.git
cd linux-sgx
sudo sed -i '$a\export SGX_LINUX_PATH=<your linux_sgx path>' /etc/profile
source /etc/profile
make preparation

提示:

  • make preparation将执行脚本download_prebuilt.sh来下载预构建的二进制文件。 可能需要为脚本使用的wget工具设置https代理(比如export https_proxy=http://test-proxy:test-port)或者将https://github.com替换为https://gitclone.com/github.com
  • 该步骤由于网络原因可能时间比较长,耐心等待。
  • 如果提示某个sh文件没有权限,执行find ./ -type f | grep \\.sh$ | xargs chmod +x将所有sh文件增加操作权限。
  1. 将当前操作系统分布对应的缓解工具从external/toolset/{current_distr}复制到/usr/local/bin,并确保它们有执行权限:
// 由于我的操作系统是ubuntu20.04,所以current_distr值为ubuntu20.04
sudo cp external/toolset/{current_distr}/* /usr/local/bin
which ar as ld objcopy objdump ranlib

编译和安装SGX SDK

具体的编译方法见Build the Intel® SGX SDK and Intel® SGX SDK Installer

  1. 编译SDK
find ./ -type f | grep \\.sh$ | xargs chmod +x
find ./ -type f | grep configure$ | xargs chmod +x

// do not use `make sdk`,如果执行`make sdk`后面的安装会失败
make sdk_install_pkg 

// 提示如下信息表是编译成功
...
scripts/
scripts/install.sh
scripts/installConfig
Generated sdk installer: ./linux/installer/bin/sgx_linux_x64_sdk_2.19.100.3.bin
  1. 安装SDK
sudo apt-get install build-essential python-is-python3
cd linux/installer/bin
./sgx_linux_x64_sdk_${version}.bin

安装成功之后提示【Please set the environment variables with below command:】,执行提示的命令,且每次编译的时候都需要执行下面的source命令

source SGX_LINUX_PATH/linux/installer/bin/sgxsdk/environment

如果不想每次都执行source命令,则可以将environment文件中内容复制到/etc/profile文件中。

$ cat /etc/profile
...
export SGX_SDK=/home/private/codes/tee/linux-sgx/linux/installer/bin/sgxsdk
export PATH=$PATH:$SGX_SDK/bin:$SGX_SDK/bin/x64
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$SGX_SDK/pkgconfig
if [ -z "$LD_LIBRARY_PATH" ]; then
        export LD_LIBRARY_PATH=$SGX_SDK/sdk_libs
else
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SGX_SDK/sdk_libs
fi
  1. 测试SDK

暂未安装 PSW,所以只能先测试Simulation 模式,参考:Requires libsgx_urts.so to run in SGX hardware mode

cd SGX_LINUX_PATH/SampleCode/LocalAttestation
make SGX_MODE=SIM
cd bin
./app

// 输出结果表示安装成功
succeed to load enclaves.
succeed to establish secure channel.
Succeed to exchange secure message...
Succeed to close Session...

注意:在 Ubuntu 22.04 或任何带有 systemd v248 或更高版本的发行版上,/dev/sgx_enclave 只能由组“sgx”中的用户访问。

sudo groupadd sgx
sudo usermod -a -G sgx <user name>
// 查看是否添加成功
groups <user name>

编译和安装PSW

  1. 编译PSW

编译详情参考:Build the Intel® SGX PSW and Intel® SGX PSW Installer

cd $SGX_LINUX_PATH
make psw_install_pkg  

// 出现如下信息代表安装成功
scripts/
scripts/install.sh
scripts/installConfig
Generated psw installer: ./linux/installer/bin/sgx_linux_x64_psw_2.19.100.3.bin
  1. 安装PSW
sudo apt-get install libssl-dev libcurl4-openssl-dev libprotobuf-dev
sudo ./linux/installer/bin/sgx_linux_x64_psw_2.19.100.3.bin
  1. 测试 LocalAttestation
cd $SGX_LINUX_PATH
source linux/installer/bin/sgxsdk/environment
cd SampleCode/LocalAttestation/

// 安装PSW之后就可以直接使用硬件环境进行编译了
$ make
....
CC   <=  EnclaveInitiator_u.c
CC   <=  EnclaveResponder_u.c
CXX   <=  App.cpp
CC   <=  UntrustedEnclaveMessageExchange.cpp
GEN  =>  app
make[1]: Leaving directory '/home/private/codes/tee/linux-sgx/SampleCode/LocalAttestation/App'
The project has been built in hardware debug mode.

$ cd bin/
$ ./app
succeed to load enclaves.
succeed to establish secure channel.
Succeed to exchange secure message...
Succeed to close Session...

参考文献

  • 哪些平台支持英特尔® Software Guard Extensions (英特尔® SGX) 数据中心标记基元 (DCAP
  • Intel® SGX Software Components源码:
    • github.com/intel/linux-sgx
    • github.com/intel/SGXDataCenterAttestationPrimitives
  • 安装sgx驱动以及相关服务
  • SGXDataCenterAttestationPrimitives源码
  • Linux kernel drivers介绍
  • Intel SGX学习笔记(1):虚拟机Ubuntu20.04配置Intel SGX环境

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/674530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++在线五子棋对战(网页版)项目:环境搭建

Centos-7.6环境搭建 安装wget工具 wget工具是Linux中的一个下载文件的工具&#xff0c;支持通过 HTTP、HTTPS、FTP 三个最常见的TCP/IP协议 下载&#xff0c;并可以使用 HTTP 代理。可以使用以下命令进行下载&#xff1a; sudo yum install wget 下载后&#xff0c;可以使用以…

【Linux】CentOS7 设定本机当前地区时间为虚拟机时间的简单操作

目录 情景系统环境操作 情景 新安装的虚拟机时间和当前本地系统时间不一致&#xff0c;现在想要将虚拟机和本机地区的时间调节为一致。 系统环境 CentOS Linux 7 系统界面大致如此。 操作 点击虚拟机界面左上角的 Applications 选项&#xff0c; 选择System-Tools-- Sett…

【C++】C++关于异常的学习

文章目录 C语言传统的处理错误的方式一、异常的概念及用法二、自定义异常体系总结 C语言传统的处理错误的方式 传统的错误处理机制&#xff1a; 1. 终止程序&#xff0c;如 assert &#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&#xff0c;除 0 错误时就会终止…

【Python】元组 创建 访问 切片 拼接 解包

2.3 元组 元组在输出时总是有括号的。 元组在输入时可以没有。 像字符串一样&#xff0c;元组是不可变的。 索引、切片以及一些方法很多与列表相似。 1&#xff09;定义 元组是一种不可变序列&#xff0c;它与列表类似&#xff0c;但元组的元素不能修改。元组中的元素可以是任意…

【Vuejs】1720- 详细聊一聊 Vue3 动态组件

&#x1f449; 「相关文章」 深入浅出 Vue3 自定义指令6 个你必须明白 Vue3 的 ref 和 reactive 问题初中级前端必须掌握的 10 个 Vue 优化技巧分享 15 个 Vue3 全家桶开发的避坑经验 动态组件[1]是 Vue3 中非常重要的一个组件类型&#xff0c;它可以让我们在不同的场景下灵活地…

Git远程仓库使用

说明&#xff1a;使用Git&#xff0c;可以实现版本控制和协作开发。需要协作开发&#xff0c;当然需要建立一个Git代码托管的平台。目前可以使用GitHub、码云、GitLab等&#xff0c;码云相当于国内的GitHub&#xff0c;在国内访问速度高于GitHub&#xff1b;而GitLab是搭建私服…

阿里云服务器的可靠性和稳定性如何?是否有SLA保障?

阿里云服务器的可靠性和稳定性如何&#xff1f;是否有SLA保障&#xff1f;   一、阿里云服务器的可靠性   阿里云服务器作为全球领先的云计算服务平台&#xff0c;以其高性能、高可靠性和高安全性获得了广泛好评。为满足企业客户对稳定、可靠云服务的需求&#xff0c;阿里云…

「译文」用ChatGPT助力SEO工作

大家好&#xff0c;我是可夫小子&#xff0c;《小白玩转ChatGPT》专栏作者&#xff0c;关注AIGC、读书和自媒体。 那些使用ChatGPT的先进人士&#xff0c;也没还能完全掌握它内容生成的能力&#xff0c;特别是像博客那样的长文写作能力。 现在&#xff0c;跟大家介绍 一下SEO优…

GeoServer中使用Qgis发布的SLD样式进行图层美化

目录 知识地图 一、前言 二、Qgis符号化转变成SLD 1、Qis中符号化生成 2、SLD样式导出 三、GeoServer数据发布 1、矢量图层发布 2、在GeoServer中发布样式 总结 知识地图 序号博文链接1使用LeafLet叠加Geoserver wms图层到已有底图的方法2关于GeoServer发布服务时数据源…

windows -- 自动安装python包,并启动服务

文章目录 定制python的包编写批处理文件遇到的问题 自动安装python的包&#xff0c;并启动后台服务进程。 定制python的包 基于python的Flask框架&#xff0c;简单开发一个服务器&#xff1b;编写发布python包的setup.py 在my_ff包的同级目录下创建一个setup.py&#xff0c…

【跟小嘉学 Rust 编程】三、Rust 的基本程序概念

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 文章目录 系列文章目录前言一、变量以及可变性1.1、变量声明语法1.2、不可变变量1.3、未使用变量警告1.4、使用 let mu…

【雕爷学编程】Arduino动手做(119)---JQ6500语音模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

计算机网络——网络层

序言 计算机网络中的网络层在当今的社会起到了什么作用&#xff1f; 现在的互联网通信&#xff0c;远程办公和远程教育&#xff0c;电子商务和在线服务&#xff0c;信息共享和社交媒体&#xff0c;物联网和智能家居都是通过网络层才能使用的。它连接了人们、设备和信息&#xf…

学习笔记:CMOS、MOS、NMOS、PMOS、MOSFET等的区别

复习时 发现连基础概念都不知道&#xff0c;连忙来找补 FET 把P型半导体放入电场中&#xff0c;根据同电荷排斥、异电荷吸引&#xff0c;电荷情况如下&#xff1a; 这种效应称为电场效应&#xff08;Field Effect&#xff09;&#xff0c;依据这种现场所发明的半导体器件称为…

回归、多项式回归、多重回归

1.回归、多项式回归、多重回归 1.1 回归&#xff08;单变量&#xff09; 预测一个变量 x x x与一个变量 y y y的关系 例如&#xff1a;广告费 x x x与点击量 y y y 用直线拟合数据 1.2 多项式回归&#xff08;单变量&#xff09; 预测一个变量 x x x与一个变量 y y y的关系…

mtk preloader简介

前言 preloader按照mtk的说法是MTK in-house developed loader&#xff0c;也就说是mtk内部开发的一个loader&#xff0c;那么单独编译preloader也是可以的&#xff0c;使用命令./mk project_name n pl。 文章目录 前言计算机系统中常用的存储器类型1、启动流程2、下载流程3、代…

React学习[三]

React学习[三] 组件的propsprops的基本使用props的特点 组件通讯的三种方式父组件传递数据给子组件子组件传递数据给父组件兄弟组件传递 Contextprops进阶children属性props校验约束规则 props的默认值 组件的生命周期生命周期三个阶段创建时&#xff08;挂载阶段&#xff09;更…

代理Windows台式机支持Remote Desktop外网远程桌面连接, 随时玩转Stable Diffusion WebUI

title: 《树莓派4B家庭服务器搭建指南》第十八期&#xff1a;代理Windows台式机支持Remote Desktop外网远程桌面连接, 随时玩转Stable Diffusion WebUI zhaoolee在家中Windows台式机折腾Stable Diffusion WebUI , 为了出门在外也能访问Windows台式机的Stable Diffusion WebUI&…

dom4j解析 mybatis config XML文件

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

软件工程——第4章形式化说明技术(非重点)

本专栏是博主个人笔记&#xff0c;主要目的是利用碎片化的时间来记忆软工知识点&#xff0c;特此声明&#xff01; 文章目录 1.软件工程方法划分成哪三类&#xff1f;并各自举例 2.形式化方法的定义&#xff1f; 3.非形式化的方法的缺点&#xff1f; 4.形式化方法的优点&am…