Raspbian镜像无头烧录

news2024/11/15 16:38:25

Raspbian镜像无头烧录

  • 1. 源由
  • 2. 需求
  • 3. 分析
  • 4. 步骤
    • 4.1 删除tf卡分区内容
    • 4.2 balena烧录镜像
    • 4.3 配置USB直接登录
    • 4.4 配置WiFi 2.4G网络登录
    • 4.5 修改登录账号密码
    • 4.6 数据同步和弹出tf卡
  • 5. 登录
    • 5.1 登录异常处理
    • 5.2 WiFi 2.4G网络登录
    • 5.3 USB直接登录
  • 6. 参考资料
  • 7. 补充资料

这里记录下关于Raspberry Pi Zero W采用Raspbian无头镜像烧录的过程,以及一些注意事项。

1. 源由

在实际嵌入式系统应用中,大部分情况没有显示器,甚至没有交互设备(鼠标/键盘等)。因此,需要尽快安装最简系统,并处于可用状态。

2. 需求

从源由的角度,我们这里如下技术需求:

  1. 最简系统安装
  2. 可用状态运行
  3. 无交互设备支持(显示器/鼠标/键盘等)

3. 分析

树莓派是一款开源软硬件支持的嵌入式系统。其性能也推陈出新,适用于非常多的场景。为了满足上面提及的技术需求,采取如下方式完成任务:

  • 刷写最新无桌面的raspbian镜像Raspberry Pi OS Lite, 2023-02-21-raspios-bullseye
  • 支持Remote NDIS (RNDIS),通过USB直接登录系统
  • 支持无线网络,通过WiFi 2.4G无线网络登录系统

4. 步骤

4.1 删除tf卡分区内容

daniel@daniel-ThinkPad-SL410:~$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
udev             1950876        0   1950876   0% /dev
tmpfs             398272     3608    394664   1% /run
/dev/sda5      479078088 99783880 354884864  22% /
tmpfs            1991352        0   1991352   0% /dev/shm
tmpfs               5120        4      5116   1% /run/lock
tmpfs            1991352        0   1991352   0% /sys/fs/cgroup
/dev/loop1        224256   224256         0 100% /snap/gnome-3-34-1804/72
/dev/loop5        224256   224256         0 100% /snap/gnome-3-34-1804/77
/dev/loop7           128      128         0 100% /snap/bare/5
/dev/loop8        354688   354688         0 100% /snap/gnome-3-38-2004/119
/dev/loop0         56960    56960         0 100% /snap/core18/2679
/dev/loop2         56960    56960         0 100% /snap/core18/2697
/dev/loop9         83328    83328         0 100% /snap/gtk-common-themes/1534
/dev/loop3         64896    64896         0 100% /snap/core20/1822
/dev/loop6         64896    64896         0 100% /snap/core20/1778
/dev/loop11        47104    47104         0 100% /snap/snap-store/599
/dev/loop4        354688   354688         0 100% /snap/gnome-3-38-2004/115
/dev/loop10        93952    93952         0 100% /snap/gtk-common-themes/1535
/dev/loop12        47104    47104         0 100% /snap/snap-store/638
/dev/loop13        51072    51072         0 100% /snap/snapd/17950
/dev/loop14        51072    51072         0 100% /snap/snapd/18357
/dev/sda1         523248        4    523244   1% /boot/efi
tmpfs             398268       88    398180   1% /run/user/1000
/dev/sdb1         261108    51018    210090  20% /media/daniel/bootfs
/dev/sdb2        7343704  1329408   5683716  19% /media/daniel/rootfs
daniel@daniel-ThinkPad-SL410:~$ sudo umount /dev/sdb1
daniel@daniel-ThinkPad-SL410:~$ sudo umount /dev/sdb2
daniel@daniel-ThinkPad-SL410:~$ sudo fdisk /dev/sdb

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/sdb: 7.41 GiB, 7948206080 bytes, 15523840 sectors
Disk model: Storage Device
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9bd51a97

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sdb1         8192   532479   524288  256M  c W95 FAT32 (LBA)
/dev/sdb2       532480 15523839 14991360  7.2G 83 Linux

Command (m for help): d
Partition number (1,2, default 2): 2

Partition 2 has been deleted.

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): 1
1: unknown command

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

4.2 balena烧录镜像

关于烧录软件其实挺多的,其中Raspberry Pi Imager是官方推荐的工具,确实有些配置选项可以在烧录工具中进行配置,但是有的时候也并不好使。因此这里采用了一款UI比较友好的工具balena。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.3 配置USB直接登录

进入boot分区

daniel@daniel-ThinkPad-SL410:~$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
udev             1950876        0   1950876   0% /dev
tmpfs             398272     3600    394672   1% /run
/dev/sda5      479078088 99785604 354883140  22% /
tmpfs            1991352    12720   1978632   1% /dev/shm
tmpfs               5120        4      5116   1% /run/lock
tmpfs            1991352        0   1991352   0% /sys/fs/cgroup
/dev/loop1        224256   224256         0 100% /snap/gnome-3-34-1804/72
/dev/loop5        224256   224256         0 100% /snap/gnome-3-34-1804/77
/dev/loop7           128      128         0 100% /snap/bare/5
/dev/loop8        354688   354688         0 100% /snap/gnome-3-38-2004/119
/dev/loop0         56960    56960         0 100% /snap/core18/2679
/dev/loop2         56960    56960         0 100% /snap/core18/2697
/dev/loop9         83328    83328         0 100% /snap/gtk-common-themes/1534
/dev/loop3         64896    64896         0 100% /snap/core20/1822
/dev/loop6         64896    64896         0 100% /snap/core20/1778
/dev/loop11        47104    47104         0 100% /snap/snap-store/599
/dev/loop4        354688   354688         0 100% /snap/gnome-3-38-2004/115
/dev/loop10        93952    93952         0 100% /snap/gtk-common-themes/1535
/dev/loop12        47104    47104         0 100% /snap/snap-store/638
/dev/loop13        51072    51072         0 100% /snap/snapd/17950
/dev/loop14        51072    51072         0 100% /snap/snapd/18357
/dev/sda1         523248        4    523244   1% /boot/efi
tmpfs             398268       88    398180   1% /run/user/1000
/dev/sdb1         261108    51018    210090  20% /media/daniel/bootfs
/dev/sdb2        1589576  1196192    294468  81% /media/daniel/rootfs
daniel@daniel-ThinkPad-SL410:~$ cd /media/daniel/bootfs

默认开启ssh远程登录

daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ touch ssh

添加dtoverlay=dwc2config.txt文件

daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ nano config.txt
daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ tail config.txt
otg_mode=1

[all]

[pi4]
# Run as fast as firmware / board allows
arm_boost=1

[all]
dtoverlay=dwc2

添加modules-load=dwc2,g_etherrootwait

注意:添加内容前后均保持一个空格。

daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ nano cmdline.txt
daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ cat cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=34f4435e-02 rootfstype=ext4 fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspberrypi-sys-mods/firstboot

4.4 配置WiFi 2.4G网络登录

daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ nano wpa_supplicant.conf
daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ cat wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

update_config=1

country=CN

network={

 ssid="AutoLab"

 psk="68686868"

}

4.5 修改登录账号密码

鉴于安全性考虑,树莓派增加了账户密码的配置过程。有交互界面的会很方便,但是作为无头烧录的情况,那么就需要在配置文件里面修改。

daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ echo 'mypassword' | openssl passwd -6 -stdin
$6$2S.7faFHMW1PFgOo$NoxP.CYxGLT1iWskjCSWxlJ5LiNy2pD4bSY.TaUUPoPk5cJS4hOLlkrlBq0IAtoKDR0moyTVwwGy8WrcgaDFJ1
daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ nano userconf
daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ cat userconf
daniel:$6$2S.7faFHMW1PFgOo$NoxP.CYxGLT1iWskjCSWxlJ5LiNy2pD4bSY.TaUUPoPk5cJS4hOLlkrlBq0IAtoKDR0moyTVwwGy8WrcgaDFJ1
$6$2S.7faFHMW1PFgOo$NoxP.CYxGLT1iWskjCSWxlJ5LiNy2pD4bSY.TaUUPoPk5cJS4hOLlkrlBq0IAtoKDR0moyTVwwGy8WrcgaDFJ1

此时,系统登录账号密码就被配置为

  • 账号:daniel
  • 密码:mypassword

4.6 数据同步和弹出tf卡

daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ sync
daniel@daniel-ThinkPad-SL410:/media/daniel/bootfs$ cd
daniel@daniel-ThinkPad-SL410:~$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
udev             1950876        0   1950876   0% /dev
tmpfs             398272     3592    394680   1% /run
/dev/sda5      479078088 99785780 354882964  22% /
tmpfs            1991352    12720   1978632   1% /dev/shm
tmpfs               5120        4      5116   1% /run/lock
tmpfs            1991352        0   1991352   0% /sys/fs/cgroup
/dev/loop1        224256   224256         0 100% /snap/gnome-3-34-1804/72
/dev/loop5        224256   224256         0 100% /snap/gnome-3-34-1804/77
/dev/loop7           128      128         0 100% /snap/bare/5
/dev/loop8        354688   354688         0 100% /snap/gnome-3-38-2004/119
/dev/loop0         56960    56960         0 100% /snap/core18/2679
/dev/loop2         56960    56960         0 100% /snap/core18/2697
/dev/loop9         83328    83328         0 100% /snap/gtk-common-themes/1534
/dev/loop3         64896    64896         0 100% /snap/core20/1822
/dev/loop6         64896    64896         0 100% /snap/core20/1778
/dev/loop11        47104    47104         0 100% /snap/snap-store/599
/dev/loop4        354688   354688         0 100% /snap/gnome-3-38-2004/115
/dev/loop10        93952    93952         0 100% /snap/gtk-common-themes/1535
/dev/loop12        47104    47104         0 100% /snap/snap-store/638
/dev/loop13        51072    51072         0 100% /snap/snapd/17950
/dev/loop14        51072    51072         0 100% /snap/snapd/18357
/dev/sda1         523248        4    523244   1% /boot/efi
tmpfs             398268       92    398176   1% /run/user/1000
/dev/sdb1         261108    51022    210086  20% /media/daniel/bootfs
/dev/sdb2        1589576  1196192    294468  81% /media/daniel/rootfs
daniel@daniel-ThinkPad-SL410:~$ sudo umount /dev/sdb1
daniel@daniel-ThinkPad-SL410:~$ sudo umount /dev/sdb2

5. 登录

准备如下动作:

  • 确保AutoLab配置的路由器处于正常工作状态
  • 确保ubuntu laptopn开机,系统正常
  • 将tf卡插入Raspberry Pi Zero W
  • 采用usb直接与Raspberry Pi Zero W连接供电

等待一段时间(2~3分钟),在【Settings】-【Network】下出现【USB Ethernet】连接项。
在这里插入图片描述
如果ssid和密码配置正确的话,路由器管理页面会看到树莓派已经wifi 2.4G动态获得了ip地址。
在这里插入图片描述

5.1 登录异常处理

如果之前登陆过,可能会有IDENTIFICATION 问题,会拒绝登录。

daniel@daniel-ThinkPad-SL410:~$ ssh daniel@raspberrypi.local
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for raspberrypi.local has changed,
and the key for the corresponding IP address 192.168.68.245
has a different value. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/daniel/.ssh/known_hosts:1
  remove with:
  ssh-keygen -f "/home/daniel/.ssh/known_hosts" -R "192.168.68.245"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:eCOHphYnkQDz3KuYx1MpK5Y0z4jjFyBeoTRY2dZ9Ii0.
Please contact your system administrator.
Add correct host key in /home/daniel/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/daniel/.ssh/known_hosts:3
  remove with:
  ssh-keygen -f "/home/daniel/.ssh/known_hosts" -R "raspberrypi.local"
ECDSA host key for raspberrypi.local has changed and you have requested strict checking.
Host key verification failed.

强制更新下ssh-keygen

daniel@daniel-ThinkPad-SL410:~$ ssh-keygen -f "/home/daniel/.ssh/known_hosts" -R "raspberrypi.local"
# Host raspberrypi.local found: line 3
/home/daniel/.ssh/known_hosts updated.
Original contents retained as /home/daniel/.ssh/known_hosts.old

5.2 WiFi 2.4G网络登录

这个是优选的方式,此时登录的IP地址是’192.168.68.245’

daniel@daniel-ThinkPad-SL410:~$ ssh daniel@raspberrypi.local
The authenticity of host 'raspberrypi.local (192.168.68.245)' can't be established.
ECDSA key fingerprint is SHA256:eCOHphYnkQDz3KuYx1MpK5Y0z4jjFyBeoTRY2dZ9Ii0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'raspberrypi.local' (ECDSA) to the list of known hosts.
Warning: the ECDSA host key for 'raspberrypi.local' differs from the key for the IP address '192.168.68.245'
Offending key for IP in /home/daniel/.ssh/known_hosts:1
Are you sure you want to continue connecting (yes/no)? yes
daniel@raspberrypi.local's password:
Linux raspberrypi 5.15.84+ #1613 Thu Jan 5 11:58:09 GMT 2023 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

5.3 USB直接登录

关闭路由器,并对【USB Ethernet】进行配置

在这里插入图片描述
在这里插入图片描述

此时,可以看到登录的IP地址是’169.254.78.153’

daniel@daniel-ThinkPad-SL410:~$ ssh daniel@raspberrypi.local
Warning: Permanently added the ECDSA host key for IP address '169.254.78.153' to the list of known hosts.
daniel@raspberrypi.local's password: 
Linux raspberrypi 5.15.84+ #1613 Thu Jan 5 11:58:09 GMT 2023 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

6. 参考资料

【1】Introduction to Remote NDIS (RNDIS)
【2】ssh-into-pi-zero-over-usb
【3】Setting up a Raspberry Pi - Headless
【4】ISO 3166-1 (Codes for the representation of names of countries and their subdivisions – Part 1: Country codes)
【5】An update to Raspberry Pi OS Bullseye

7. 补充资料

Advanced IP Scanner,可以扫描网络设备发现树莓派。

在这里插入图片描述

通常我们这里采用 ssh pi@raspberrypi.local方式,IP地址也没有这么重要。

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

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

相关文章

HCIP-5OSPF域内域间外部路由学习笔记

1、OSPF区域 每个区域都维护一个独立的LSDB。 Area 0是骨干区域,其他区域都必须与此区域相连。 划分OSPF区域可以缩小路由器的LSDB规模,减少网络流量。 区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不…

【Flutter·学习实践·UI篇】基础且重要的UI知识

前言 参考学习官网:《Flutter实战第二版》 学习前先记住:Flutter 中万物皆为Widget,心中默念3次以上铭记于心。 这一点和开发语言Dart的变量一切皆是对象的概念,相互对应。 Widget 在前面的介绍中,我们知道在Flutt…

CSAPP第八章 异常控制流

目录 异常 异常处理 异常的类别 中断 陷阱和系统调用 故障 终止 ​编辑 Linux/x86-64 系统中的异常 进程 ​编辑 逻辑控制流 并发流 私有地址空间 用户模式和内核模式 上下文切换 ​编辑系统调用错误处理 进程控制 获取进程ID 创建和终止进程 回收子进程 …

汇编系列03-不借助操作系统输出Hello World

每天进步一点点,加油! 上一节,我们通过汇编指令,借助操作系统的系统调用实现了向标准输出打印Hello world。这一节我们打算绕过操作系统,直接在显示屏幕上打印Hello world。 计算机的启动过程 当我们给计算机加电启…

AcWing1049.大盗阿福题解

前言如果想看状态机的详解,点机这里:dp模型——状态机模型C详解1049. 大盗阿福阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有 N家店铺,每家店中都有一些现金。阿福事先调查得知,只有当…

《算法分析与设计》笔记总结

《算法分析与设计》笔记总结第一章 算法引论1.1 算法与程序1.2 表达算法的抽象机制1.3 描述算法1.4 算法复杂性分析第二章 递归与分治策略2.1 递归的概念2.2 分治法的基本思想2.3 二分搜索技术2.4 大整数乘法2.5 Strassen矩阵乘法2.7 合并排序2.8 快速排序2.9 线性时间选择2.10…

深度学习算法训练和部署流程介绍--让初学者一篇文章彻底理解算法训练和部署流程

目录 1 什么是深度学习算法 2 算法训练 2.1 训练的原理 2.2 名词解释 3 算法C部署 3.1 嵌入式终端板子部署 3.3.1 tpu npu推理 3.3.2 cpu推理 3.2 服务器部署 3.2.1 智能推理 3.2.2 CPU推理 1 什么是深度学习算法 这里不去写复杂的概念,就用通俗的话说…

无头盔PICO-unity开发日记1(抓取、传送)

目录 可传送的地面 锚点传送 修改射线颜色(可交互/不可交互) 球、抓手组件 ||刚体(重力)组件 可传送的地面 1.地面添加组件 2.XR交互管理器添加传送提供者 3.地面设置传送提供者 4.XR交互管理器添加locomotion system 5.拖拽 完…

2020蓝桥杯真题日期格式 C语言/C++

问题描述 小蓝要处理非常多的数据, 其中有一些数据是日期。 在小蓝处理的日期中有两种常用的形式: 英文形式和数字形式。 英文形式采用每个月的英文的前三个宁母作为月份标识, 后面跟两位数字 表示日期, 月份标识第一个字母大写, 后两个字母小写, 日期小于 10 时要补 前导 0s…

汇编基础语法和指令总结+案例(用32位汇编实现插入排序)

目录 前提知识 案例 c的插入排序 32位汇编代码 代码分析 效果展示 前提知识 常用指令add指令 sub指令 mul乘法指令 div除法指令 inc(自增)(即) dec(自减)(即--) cmp&#xf…

二叉树的最近公共祖先【Java实现】

题目描述 现有一棵n个结点的二叉树(结点编号为从0到n-1,根结点为0号结点),求两个指定编号结点的最近公共祖先。 注:二叉树上两个结点A、B的最近公共祖先是指:二叉树上存在的一个结点P,使得P既是…

4万字数字政府建设总体规划方案WORD

本资料来源公开网络,仅供个人学习,请勿商用。部分资料内容: 我省“数字政府”架构 (一) 总体架构。 “数字政府”总体架构包括管理架构、业务架构、技术架构。其中,管理架构体现“管运分离”的建设运营模式…

面试必须要知道的常见排序算法

以下排序均为升序 1.直接插入排序 具体思想 把待排序的数据按大小比较插入到一个已经排序好的有序序列中,直到所有的待排序数据全部插入到有序序列中为止.实际生活中,我们平常斗地主摸牌时,就用到了插入排序的思想. 当插入第n个数据时,前面n-1个数据已经有序;第n个数据依次与前…

WebStorm安装教程【2023年最新版图解】一文教会你安装

文章目录引言一、下载WebStorm三、WebStorm激活配置及创建项目Active Code安装完成尝试新建一个项目引言 今天发现了一个专注前端开发的软件,相比VSCode的话,这个好像也不错,为了后续做个API接口项目做准备。 对于入门JavaScript 开发的者&am…

Linux操作系统学习(信号处理)

文章目录进程信号信号的产生方式(信号产生前)1. 硬件产生2.调用系统函数向进程发信号3.软件产生4.定位进程崩溃的代码(进程异常退出产生信号)信号保存的方式(信号产生中)获取pending表&&修改block表…

四轮两驱小车(五):蓝牙HC-08通信

前言: 在我没接触蓝牙之前,我觉得蓝牙模块应用起来应该挺麻烦,后来发觉这个蓝牙模块的应用本质无非就是一个串口 蓝牙模块: 这是我从某宝上买到的蓝牙模块HC-08,价格还算可以,而且可以适用于大多数蓝牙调试…

闲人闲谈PS之三十八——混合制生产下WBS-BOM价格发布增强

惯例闲话:最近中《三体》的毒很深,可能是电视剧版确实给闲人这种原著粉带来太多的感动,又一次引发了怀旧的热潮,《我的三体-罗辑传》是每天睡前必刷的视频,结尾BGM太燃了。闲人对其中一句台词感触很深——人类不感谢罗…

taobao.itemprops.get( 获取标准商品类目属性 )

¥开放平台基础API不需用户授权 通过设置必要的参数,来获取商品后台标准类目属性,以及这些属性里面详细的属性值prop_values。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 点…

数据结构:复杂度的练习(笔记)

数据结构:复杂度的练习(笔记) 例题一: 可以先给数组排序,然后再创建一个i值,让他循环一次一次,遍历这个排序后的数组,但如果用qsort函数进行排序,时间复杂度就和题目要求…

Vue组件进阶(动态组件,组件缓存,组件插槽,具名插槽,作用域插槽)与自定义指令

Vue组件进阶与自定义指令一、Vue组件进阶1.1 动态组件1.2 组件缓存1.3 组件激活和非激活1.4 组件插槽1.5 具名插槽1.6 作用域插槽1.7 作用域插槽使用场景二、自定义指令2.1 自定义指令--注册2.2 自定义指令-传参一、Vue组件进阶 1.1 动态组件 多个组件使用同一个挂载点&#x…