Linux编译Kernel时的文件zImage、文件dtb(dtbs)、核心模块分别是什么东西?
zImage文件的介绍
在编译Linux内核时,zImage
是一种内核映像文件,它是内核的压缩版本,通常用于引导嵌入式设备或其他资源有限的环境。
zImage
的具体含义
zImage
是 “Compressed Kernel Image” 的缩写。- 它是通过压缩原始的内核映像(
vmlinux
)生成的,使用了如 gzip 的压缩算法。 - 包含了一个解压缩程序,当系统启动时,解压缩程序会在内存中将内核解压缩并加载到正确的位置。
zImage
的生成过程
-
编译内核源码
- 编译内核源码后生成一个未压缩的内核映像文件
vmlinux
。
- 编译内核源码后生成一个未压缩的内核映像文件
-
压缩
vmlinux
- 使用 gzip 等压缩算法对
vmlinux
压缩。
- 使用 gzip 等压缩算法对
-
添加解压缩程序
- 将一个小型解压缩程序与压缩后的内核一起打包,生成
zImage
。
- 将一个小型解压缩程序与压缩后的内核一起打包,生成
为什么需要 zImage
?
-
内存限制
- 压缩后的内核更小,适合那些内存有限的设备(如嵌入式设备或老旧硬件)。
-
快速传输
- 压缩后的文件大小较小,可以更快地从存储设备加载到内存。
-
引导方便
- 包含了解压缩程序,便于系统引导时直接解压缩加载。
zImage
的工作原理
- 在启动时,Bootloader(如 GRUB、U-Boot)加载
zImage
。 zImage
的解压缩程序先运行,将压缩的内核解压缩到内存的高地址。- 解压后的内核开始运行,完成引导过程。
zImage
和 vmlinuz
的区别
-
zImage
- 更适合内存有限或嵌入式环境。
- 解压缩后内核加载在内存的高地址。
-
vmlinuz
- 是另一个压缩内核映像文件,常用于 PC 或服务器。
- 压缩方式可能与
zImage
类似,但解压缩后内核通常加载到较低的内存地址。
如何生成和使用 zImage
-
编译内核时可以通过配置生成
zImage
文件:make zImage
文件通常位于
arch/<architecture>/boot/
目录下。 -
嵌入式环境下,Bootloader(如 U-Boot)可以直接加载
zImage
。
总结
zImage
是一种压缩的 Linux 内核映像,主要用于资源有限的设备。它包含了解压缩程序,能够在引导过程中自动解压缩并加载内核。这种设计确保了内核映像的尺寸小巧,同时保持引导的灵活性和效率。
dtbs文件的介绍
在编译Linux内核时,dtbs
文件是 Device Tree Blob(s) 的缩写。它们是设备树(Device Tree)数据的二进制形式,用于描述嵌入式系统中的硬件配置和资源信息。
什么是设备树(Device Tree)?
设备树是一个数据结构,用于向操作系统内核描述硬件的配置,而无需直接在内核代码中进行硬编码。这种机制主要用于嵌入式设备,例如单板计算机(Raspberry Pi、BeagleBone)、ARM架构系统等。
- 设备树的作用:
- 描述硬件资源和拓扑,例如 CPU、内存、GPIO、I2C、SPI 总线等。
- 告诉内核如何与这些硬件交互。
- 提供一种灵活的方式支持多种硬件平台,而无需为每种平台单独修改内核代码。
设备树的组成
设备树通常包含以下几部分:
- 根节点(root node)
- 描述整个硬件系统的信息,例如系统名称、架构等。
- 子节点
- 每个子节点描述一个硬件设备(如内存、串口、总线控制器等)。
- 属性
- 每个节点包含的键值对,用来具体描述设备特性(如地址范围、中断号等)。
dtbs 文件的生成过程
-
源码文件(
.dts
和.dtsi
).dts
(Device Tree Source) 是设备树的原始文本描述。.dtsi
(Device Tree Source Include) 是可被包含的共享设备树文件,通常用于描述通用硬件配置。
-
编译设备树
- 使用设备树编译器(
dtc
)将.dts
文件编译为二进制格式.dtb
(Device Tree Blob)。 - 在编译内核时,运行
make dtbs
会自动生成所需的.dtb
文件。
- 使用设备树编译器(
dtbs 文件的作用
- 独立硬件描述:通过
dtbs
文件,内核可以在启动时获取设备的硬件信息,而无需为每个设备定制一个内核版本。 - 引导过程中加载:Bootloader(如 U-Boot)会在启动时将
dtbs
文件与内核一起加载,内核据此初始化硬件资源。 - 动态支持多个平台:同一个内核可以搭配不同的设备树文件,支持多种硬件平台。
dtbs 文件的位置
- 编译完成后,设备树二进制文件通常位于:
例如:arch/<architecture>/boot/dts/
arch/arm/boot/dts/
如何使用 dtbs 文件
-
与内核一起加载:
在嵌入式设备中,Bootloader(如 U-Boot)负责加载zImage
或uImage
内核,同时加载对应的dtb
文件。例如:bootz 0x80000 - 0x40000
这里
0x80000
是内核地址,0x40000
是设备树地址。 -
测试设备树文件:
使用dtc
工具将.dtb
文件反编译为可读的.dts
文件,检查内容:dtc -I dtb -O dts -o output.dts input.dtb
总结
dtbs
文件 是设备树的二进制形式,描述了硬件配置,为内核提供启动所需的硬件信息。- 它的存在简化了硬件支持,尤其是在嵌入式系统中,通过更改
dtbs
文件而非修改内核代码,就可以支持不同的硬件平台。 - 编译生成这些文件的命令是:
make dtbs
内核模块的介绍
在编译Linux内核时,内核模块(Kernel Module) 是一种可加载的程序,可以动态地添加到运行中的内核中,扩展其功能。内核模块是Linux内核模块化设计的重要特性。
内核模块的特点
-
动态加载
- 内核模块可以在内核运行时按需加载,无需重启系统。
-
动态卸载
- 不需要时可以将模块从内核中移除,释放系统资源。
-
功能扩展
- 通过模块化设计,内核可以根据需要加载驱动程序、文件系统、网络协议等,而不必将所有功能都直接编译进内核。
内核模块的用途
内核模块被广泛应用于以下场景:
-
设备驱动程序
- 支持各种硬件设备(如网卡、显卡、存储设备等)。
-
文件系统支持
- 加载和支持不同的文件系统(如 ext4、xfs、nfs)。
-
网络协议
- 增加对特定网络协议的支持(如 VPN 协议、无线协议等)。
-
安全模块
- 提供额外的安全功能(如 SELinux 模块)。
-
调试和实验
- 开发和测试新的内核功能,方便在运行时进行实验。
内核模块的生成和加载
-
编译内核模块
- 配置内核时,某些功能可以选择作为模块(
M
)编译。例如:
在菜单中选择某些功能作为模块,保存配置后运行:make menuconfig
生成的模块会被保存为make modules
.ko
文件(Kernel Object 文件),通常位于drivers/
或fs/
等目录中。
- 配置内核时,某些功能可以选择作为模块(
-
安装模块
- 使用以下命令将模块安装到系统的模块目录(通常是
/lib/modules/<kernel_version>/
):make modules_install
- 使用以下命令将模块安装到系统的模块目录(通常是
-
加载模块
- 使用
insmod
或modprobe
命令加载模块:
或:sudo insmod my_module.ko
sudo modprobe my_module
- 使用
-
卸载模块
- 使用
rmmod
命令卸载模块:sudo rmmod my_module
- 使用
-
查看加载的模块
- 使用
lsmod
命令查看当前加载的模块:lsmod
- 使用
内核模块的优点
-
灵活性
- 可以根据需要动态加载和卸载功能,而不必重新编译或重启内核。
-
降低内核体积
- 将不常用的功能编译为模块,而不是直接嵌入内核,减小内核体积。
-
便于调试
- 在模块中调试功能时,不需要重新构建整个内核,只需重新编译模块并加载。
内核模块的文件格式
- 内核模块以
.ko
(Kernel Object) 文件形式存在。 - 它是一个二进制文件,包含了目标代码以及相关的符号信息,用于内核加载。
模块的依赖管理
- 模块之间可能存在依赖关系,例如一个模块需要另一个模块的功能。
- 使用
modprobe
可以自动解决依赖关系,而insmod
需要手动管理依赖。 - 模块的依赖信息存储在
/lib/modules/<kernel_version>/modules.dep
文件中,使用depmod
命令生成。
示例:编写和加载简单模块
以下是一个简单的内核模块示例:
#include <linux/module.h>
#include <linux/kernel.h>int init_module(void)
{printk(KERN_INFO "Hello, Kernel Module Loaded!\n");return 0;
}void cleanup_module(void)
{printk(KERN_INFO "Goodbye, Kernel Module Unloaded!\n");
}MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A Simple Kernel Module");
编译模块:
make
加载模块:
sudo insmod hello.ko
卸载模块:
sudo rmmod hello
查看日志输出:
dmesg
总结
- 内核模块是 Linux 内核的一种扩展机制,允许动态加载和卸载功能模块。
- 它的使用极大地增强了内核的灵活性,同时减小了核心内核的体积。
- 通过编译模块(
.ko
文件),用户可以根据需要添加或移除特定的内核功能,无需重新编译整个内核。
相关文章:
Linux编译Kernel时的文件zImage、文件dtb(dtbs)、核心模块分别是什么东西?
zImage文件的介绍 在编译Linux内核时,zImage 是一种内核映像文件,它是内核的压缩版本,通常用于引导嵌入式设备或其他资源有限的环境。 zImage 的具体含义 zImage 是 “Compressed Kernel Image” 的缩写。它是通过压缩原始的内核映像&…...
《计算机视觉证书:开启职业发展新航道》
一、引言 在当今科技飞速发展的时代,计算机视觉技术正以惊人的速度改变着我们的生活和工作方式。从智能手机的人脸识别解锁到自动驾驶汽车的环境感知,计算机视觉技术的应用无处不在。而计算机视觉证书作为这一领域的专业认证,其作用愈发凸显…...
4.Python 数字类型
Python 数字类型总结 文章目录 Python 数字类型总结1. 数字类型概述特点 2. 数字类型的创建与赋值3. 数字类型转换4. 数学运算与函数math 模块cmath 模块 5. 随机数生成6. 三角函数7. 数学常量 总结 Python 提供了多种数字类型来存储和操作数值数据。这些类型包括整数、浮点数、…...
火焰传感器与C++编程:精准检测火灾的技术实现
火灾是我们日常生活中一个不可忽视的安全隐患,而火灾报警系统的实现可以大大提高我们的安全保障。通过嵌入式技术和传感器,我们能够在第一时间识别火灾隐患并发出警报。火焰传感器作为一种专门用于火灾监测的传感器,能高效地通过红外线&#…...
纯前端实现一个精致的中英文挖空提示功能
前言 这两天给我的学习卡盒小程序新增了一个提示功能,在卡片正面的时候,点击左下角的小灯泡,就会弹出背面内容的提示,这个提示是挖了空的,这种方式可以帮助我们循序渐进的回忆内容,而不是直接看答案。 实现…...
秘塔搜索AI多线程批量生成TXT原创文章软件
秘塔AI搜索是秘塔科技旗下的搜索产品,其产品是简单、无广告、直接的搜索答案。 秘塔AI搜索写出来的文章无AI味及无AI痕迹,在如今AI文章泛滥时代,搜索引擎喜欢抓取收录这样无AI味原创文章。 秘塔搜索AI多线程批量生成TXT原创文章软件介绍&am…...
鸿蒙生态的崛起:开发实践、认证路径与激励策略
目录 前言 鸿蒙生态能力和行业解决方案 1、鸿蒙创新能力 2、鸿蒙行业解决方案 中软鸿蒙生态业务布局 1、深度参与鸿蒙生态建设 2、提供一站式鸿蒙生态服务 (1)服务目录 (2)改造过程的关键点 (3)鸿…...
python调用matlab函数(内置 + 自定义) —— 安装matlab.engine
文章目录 一、简介二、安装matlab.engine2.1、基于 CMD 安装2.2、基于 MATLAB 安装(不建议) 三、python调用matlab函数(内置 自定义) 一、简介 matlab.engine(MATLAB Engine API for Python):…...
【数据分享】2014-2024年我国POI兴趣点数据(免费获取/来源于OSM地图)
POI是Point of Interest的简称,意为“兴趣点”,是互联网电子地图中用于表示特定位置的地理实体的核心数据类型。POI通常用于标注具体地点,例如餐厅、商场、学校、医院、景点等。这些数据以点的形式呈现,并附带详细属性信息&#x…...
【设计模式】如何用C++实现观察者模式【发布订阅机制】
【设计模式】如何用C实现观察者模式【发布订阅机制】 一、问题背景 代码质量影响生活质量。最近工作中频繁接触各种设计模式,深刻体会到优秀的设计模式不仅能显著降低后续维护的压力,还能提升开发效率。观察者模式作为一种降低耦合度、提高扩展性的利器…...
Qt编写RK3588视频播放器/支持RKMPP硬解/支持各种视音频文件和视频流/海康大华视频监控
一、前言 用ffmpeg做硬解码开发,参考自带的示例hw_decode.c即可,里面提供了通用的dxva2/d3d11va/vaapi这种系统层面封装的硬解码,也就是无需区分用的何种显卡,操作系统自动调度,基本上满足了各种场景的需要࿰…...
深入了解IPv6——光猫相关设定:DNS来源、DHCPv6服务、前缀来源等
光猫IPv6设置后的效果对比图: 修改前: 修改后: 一、DNS来源 1. 网络连接 来源: 从上游网络(如运营商)获取 IPv6 DNS 信息,通过 PPPoE 或 DHCPv6 下发。 特点: DNS 服务器地址直…...
Deepmotion技术浅析(五):运动追踪
运动追踪是 DeepMotion 动作捕捉和 3D 重建流程中的核心模块之一。该模块的主要任务是在视频序列中跟踪人体的运动轨迹,捕捉人体各部分随时间的变化,并生成连续的 3D 运动数据。DeepMotion 的运动追踪技术结合了计算机视觉、深度学习和物理模拟等方法&am…...
【html网页页面012】html+css制作品牌主题宏宝莱网页含视频、留言表单(7页面附效果及源码)
品牌主题宏宝莱网页制作 🥤1、写在前面🍧2、涉及知识🌳3、网页效果完整效果(7页):代码目录结构:page1、首页page2、衍生品page3、包装设计page4、视频介绍page5、留言板page6、联系我们page7、详情页(三层页…...
Java的栈与队列以及代码实现
Java栈和队列 栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组实现)用队列实现栈用栈来实现队列总结 栈的概念(Stack) 栈是常见的线性数据结构&…...
华为HarmonyOS NEXT 原生应用开发:鸿蒙中组件的组件状态管理、组件通信 组件状态管理小案例(好友录)!
文章目录 组件状态管理一、State装饰器1. State装饰器的特点2. State装饰器的使用 二、Prop装饰器(父子单向通信)1. Prop装饰器的特点2. Prop装饰器的使用示例 三、Link装饰器(父子双向通信)1. Link装饰器的特点3. Link使用示例 四…...
LeetCode:150. 逆波兰表达式求值
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:150. 逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表…...
LLM模型的generate和chat函数区别
在 Hugging Face 的 transformers 库中,GPT(Generative Pre-trained Transformer)类的模型有两个常用的生成文本的方法:generate 和 chat。这两个方法在使用上有一些区别。通常公司发布的 LLM 模型会有一个基础版本,还…...
Vulhub:Fastjson[漏洞复现]
1.2.24-rce(CVE-2017-18349-Fastjson反序列化) 对于 Fastjson 来说,该漏洞的主要问题在于其1.2.24版本中autotype特性允许任意类的反序列化,因此攻击者通过type指定自定义类并实例化,在特定条件下调用这些类的公共方法。如果一个不受信任的 J…...
C++学习日记---第19天
笔记复习 1.继承 在C中,我们通过函数来实现代码的复用,防止重复造轮子,但是使用函数也有一个缺点1,就是当函数被定义完成之后,它的功能也就确定了,无法被修改,这时候我们引入继承。 C中的继承…...
opencv-python的简单练习
题目1.读取一张彩色图像并将其转换为灰度图。 import cv2 # 读取图片文件 img cv2.imread(./1.png)# 将原图灰度化 img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 输出图片 cv2.imshow(img,img) cv2.imshow(img_g,img_gray) # 进行阻塞 cv2.waitKey(0) 题目2:…...
生活小妙招之UE CaptureRT改
需求,四个不同的相机拍摄结果同屏分屏显示 一般的想法是四个Capture拍四张RT,然后最后在面片/UI上组合。这样的开销是创建4张RT,材质中采样4次RT。 以更省的角度,想要对以上流程做优化,4个相机拍摄是必须的ÿ…...
源码编译jdk11 超详细教程 openjdk11
关于源代码 当前的openJDK的源代码已经被发布到了github上了,所以我们可以直接从github上下载到。 OpenJDK11u源码托管地址:https://github.com/openjdk/jdk11u 带后缀U的地址,或者发行的jdk包,表示当前版本下的持续跟新版。而…...
lightRAG 论文阅读笔记
论文原文 https://arxiv.org/pdf/2410.05779v1 这里我先说一下自己的感受,这篇论文整体看下来,没有太多惊艳的地方。核心就是利用知识图谱,通过模型对文档抽取实体和关系。 然后基于此来构建查询。核心问题还是在解决知识之间的连接问题。 论…...
计算机网络-数据链路层
以太⽹的帧格式 源地址和⽬的地址是指⽹卡的硬件地址(也叫MAC地址), ⻓度是48位,是在⽹卡出⼚时固化的; • IP地址描述的是路途总体的 起点 和 终点; • MAC地址描述的是路途上的每⼀个区间的起点和终点;、 举个例子: 帧协议类型字段有三种值,分别对应IP、ARP、RARP...
ES6 混合 ES5学习记录
基础 数组 let arr [数据1,数据2,...数组n] 使用数组 数组名[索引] 数组长度 arr.length 操作数组 arr.push() 尾部添加一个,返回新长度 arr.unshift() 头部添加一个,返回新长度 arr.pop() 删除最后一个,并返回该元素的值 shift 删除第一个单元…...
Electron electron-builder.yml 配置 (自定义包名,用户自定义安装目录...)
electron-builder.yml 配置 # 唯一的应用程序标识符,用于操作系统级别的识别 appId: com.electron.app# 应用程序的名称,显示在用户界面上 productName: 我的应用# 定义构建资源目录,放置图标、证书等资源文件 directories:buildResources: …...
Python运维自动化之字典Dict
字典Dict(哈希表) Dict即Dictionary,也称为mapping。 Python中,字典由任意个元素构成的集合,每一个元素称为Item,也称为Entry。这个Item是由(key, value)组成的二元组。 字典是可变的、无序的、key不重复的key-value键值对集合。…...
开展新闻营销分为策划期、实施期、优化期三个重要阶段
也许有人会问:什么是新闻营销呢?这是一个在当今商业营销领域备受关注的概念。在信息爆炸的时代,企业都在绞尽脑汁寻找各种有效的营销方式来提升自己的品牌知名度、产品销量等,新闻营销便是其中一种重要的手段。 我们可以将“新闻营…...
解决 Git 默认不区分文件名大小写的问题
不得不说 Git 默认不区分文件名大小写真是一个大坑,由于之前的项目目录比较乱,项目下的文件夹命名都不规范,这两天一直在整理,然后今天从服务器将项目重新 clone 下来后发现,之前将所有文件名首字母改成大写的改动全部…...
Qt网络通信、线程之间通信详解
一、 网络通信协议主要包括TCP和UDP,但更常用和可靠的是TCP协议。TCP是一种面向连接的、可靠的、面向流的传输协议,特别适合用于连续数据传输。在Qt中,网络通信主要通过QTcpSocket类和QTcpServer类来实现。 QTcpSocket类用于建立TCP客户端和…...
java泛型
定义类、接口、方法时,同时声明了一个或者多个类型变量(如:<E>) 称为泛型类、泛型接口,泛型方法、它们统称为泛型。 作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检…...
C++入门(1)
一、第一个C程序 #include <iostream> using namespace std; int main() {cout << "hello world" << endl; return 0; } 1. main函数 main 函数是程序的入口,C 的程序不管有多少行代码,都是从 main 函数开始执行的&am…...
在Linux的嵌入式开发中,如何确定要操作的帧缓冲设备是第几个实例?即是fb0还是fb1还是fb2...
方法汇总 在实际编写程序时,要确定操作的帧缓冲设备(如 /dev/fb0、/dev/fb1 等),通常需要结合系统环境和硬件配置。以下是一些常见的方法,帮助你确定需要打开的帧缓冲设备实例: 1. 检查系统设备文件 查看…...
JS 中请求队列与锁的巧妙结合
一、引言 在 JavaScript 开发中,尤其是在涉及到异步操作和对共享资源的并发访问时,有效地控制请求顺序和资源访问权限至关重要。例如,在多个网络请求同时针对一个有限制访问频率的 API 或者多个异步任务竞争同一个文件写入权限的场景下&#…...
注意力机制+时空特征融合!组合模型集成学习预测!LSTM-Attention-Adaboost多变量时序预测
注意力机制时空特征融合!组合模型集成学习预测!LSTM-Attention-Adaboost多变量时序预测 目录 注意力机制时空特征融合!组合模型集成学习预测!LSTM-Attention-Adaboost多变量时序预测效果一览基本介绍程序设计参考资料 效果一览 基…...
Prefix Decoder /Causal Decoder/Encoder-Decoder的区别
Prefix Decoder 定义:Prefix Decoder,也称为非因果解码器,属于Decoder only结构。输入部分使用双向注意力,输出部分使用单向注意力。在生成新的输出时,会考虑到所有之前生成的输出。 特点:Prefix Decoder在…...
《智能体开发实战(高阶)》四、系统化的日志周报智能体开发计划
智能体扩展与完善规划 为了将前几个章节的智能体逐步扩展为支持整个公司团队使用的高效工具,以下是分阶段的完善与扩写规划。每个阶段旨在提升功能覆盖范围、处理能力和用户体验,并为企业提供实际价值。 阶段一:基础功能完善 目标:巩固现有功能,提升健壮性和适用性。 支…...
多线程编程杂谈(上)
问题 线程执行的过程中可以强制退出吗? 主动退出?被动退出? 问题抽象示例 需要解决的问题 g_run 全局变量需要保护吗? 如何编码使得线程中每行代码的执行可被 g_run 控制? 线程代码在被 g_run 控制并 "强制退…...
二五(Vue2-01)、创建实例、插值表达式、响应式、Vue指令、
1. Vue 概念及创建实例 <body><!-- 创建Vue实例,初始化渲染1. 准备容器 (Vue所管理的范围)2. 引包 (开发版本包 / 生产版本包) 官网3. 创建实例4. 添加配置项 > 完成渲染 --><div id"app"><h1>{{msg}}</h1><a href&…...
P8772 求和 P8716 回文日期
文章目录 [蓝桥杯 2022 省 A] 求和[蓝桥杯 2020 省 AB2] 回文日期 [蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1,a2,⋯,an, 求它们两两相乘再相加的和,即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a…...
Burp Suite(2)2024.1.1Burp Suite专业版激活(保姆级教程)
声明: 本文所使用的专业版BP在我的博客资源里面,需要的师傅可以自行下载。 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内…...
基于注意力的几何感知的深度学习对接模型 GAABind - 评测
GAABind 作者是苏州大学的生物基础与医学院, 期刊是 Briefings in Bioinformatics, 2024, 25(1), 1–14。GAABind 是一个基于注意力的几何感知蛋白-小分子结合模式与亲和力预测模型,可以捕捉小分子和蛋白的几何、拓扑结构特征以及相互作用。使用 PDBBind2020 和 CASF2016 作…...
Python中的优化函数2:cvxpy包
文章目录 介绍使用步骤示例1示例2官方文档 介绍 它是一个基于 Python 的凸优化建模工具,专门用于定义和求解 凸优化问题(Convex Optimization Problems)。CVXPY 提供了一种直观的方式来表达优化问题,并通过高效的求解器来解决这些…...
【Linux】结构化命令
结构化命令structured command:允许脚本根据条件跳过部分命令,改变执行流程。 1、if-then语句 格式1: if command then commands fi 格式2: if command; then commands fi 运行if之后的command命令,如果它的退出状态码…...
3-机器人视觉-机器人抓取与操作
文章目录 3机器人视觉目录 1. 传感器和标定摄像头模型Intrinsic MatrixExtrinsic Matrix 标定内参标定手眼标定和外参标定 力传感器&其它传感器其它传感器 2. 神经网络和图像处理2D特征处理常见架构 训练流程推理流程部署流程2D 图像任务3D Point Cloud FeaturePointNet Ap…...
LINUX——shell编程
Shell 简介 Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理, Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。 下面是流程示意图ÿ…...
12.11函数 结构体 多文件编译
1.脑图 定义一个数组,用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息,删除后调用显示学生信息函数 显示 4> 封…...
【go语言】reflect包与类型推断
reflect 包的核心概念 Go 中的反射涉及两个核心概念: Type:表示一个类型的结构体,reflect.Type 是类型的描述。Value:表示一个值的结构体,reflect.Value 是一个具体值的包装。 反射让我们能够动态地访问对象的类型和…...
docker启动一个helloworld(公司内网服务器)
这里写目录标题 容易遇到的问题:1、docker连接问题 我来介绍几种启动 Docker Hello World 的方法: 最简单的方式: docker run hello-world这会自动下载并运行官方的 hello-world 镜像。 使用 Nginx 作为 Hello World: docker…...