树莓派第一次开机

文章目录

  • 基于树莓派的OpenEuler基础实验一
    • 一、树莓派介绍
      • 树莓派较普通电脑的优势
        • 1、廉价便携可折腾
        • 2、树莓派运行开源的Linux操作系统
        • 3、编程好平台
        • 4、开源大社区
        • 5、引脚可编程
        • 6、便携随身带
        • 7、灵活可扩展
    • 二、openEuler embedded介绍
    • 三、树莓派开机指南
      • 1. 硬件准备
      • 2. 软件准备
      • 3. openEuler embedded的构建
      • 4. 第一次开机
        • (1)格式化SD卡
        • (2)烧录镜像
        • (3)Wi-Fi网络配置
          • 使能无线驱动
          • 启用Wi-Fi网卡
        • (4)远程登陆树莓派
      • ★树莓派的关机
    • 四、基于SDK的应用开发
      • 1. 交叉编译
        • 交叉编译是什么
        • 为什么需要交叉编译?
      • 2. SDK环境配置
      • 3. 使用SDK交叉编译hello world样例
    • 五、基于树莓派的OpenEuler内核模块基础实验
      • 1. Linux内核模块
        • 一些常用模块指令
      • 2. 第一个内核模块helloworld
        • (1)编写代码和生成hello内核模块
        • (2)将编译好的hello.ko拷贝到openEuler Embedded系统中
        • (3)原理

基于树莓派的OpenEuler基础实验一

一、树莓派介绍

树莓派由英国的树莓派基金会发行,旨在通过发行这个廉价开源的可随意破解的微型计算机,推动中小学编程教育,发行之后很快在全世界的开源创客圈中流行。截止到2018年10月,最新版本的树莓派主板是3B+,国内某宝上卖230元左右,还有更微型的树莓派主板Zero,国内某宝卖100元左右。树莓派是一种麻雀虽小五脏俱全的掌上电脑,它可以完成普通电脑的所有功能,有USB接口、HDMI显示屏接口、网线接口、耳机接口、蓝牙、Wifi、可编程引脚,可外接摄像头和显示屏。其CPU计算速度大概相当于iphone 4S,足以满足创客开发日常需求。而且,树莓派是最适合学习Linux和Python的工具,而且能通过它登堂入室,走进计算机科学的大千世界,搭上目前火热的人工智能、物联网、嵌入式开发、智能硬件的车。中国很多高校的毕业设计和课程设计要用到树莓派,特别是自动化专业。

树莓派

树莓派较普通电脑的优势

1、廉价便携可折腾

在国内您花费千元左右就能够购买全套顶配的开发配件。在使用树莓派的时候,你可以大胆地尝试电路改线、CPU超频、破解、删库、病毒攻击、渗透测试、内存挤占等一系列实践,大不了就是重新安装操作系统(5分钟不到),闹翻天也不过买块新树莓派(五百元左右)。这样就不必冒着风险折腾自家宝贵的笔记本电脑和台式电脑。

史上最全的树莓派购买指南

基础套餐

2、树莓派运行开源的Linux操作系统

普通电脑上普遍运行Windows操作系统,但树莓派上运行的是Linux操作系统。你可以接触到真正的程序员和黑客每天面对的酷炫的Linux命令行和图形界面。Linux是开源的操作系统,由世界各地的开发者历经三十年的时间逐渐积累优化,衍生出许多发行版(比如智能手机上的安卓操作系统),Linux的诞生和发展催生了开源软件文化和开源软件社群,很多软件和代码库对Linux极其友好,但如果你用Windows安装配置就会发现十分困难。

十个使用Linux操作系统的理由

Linux Debian

3、编程好平台

作为旨在为编程教学而生的计算机,树莓派内置了各种编程语言的开发环境,包括Python2、Python3、Java、Wolfram、科学计算内核,还有艺术图形可视化编程工具Processing、音乐可视化编程工具Sonic Pi、创客可视化编程工具Scratch、NodeJS、我的世界Mine Craft等。无需复杂的安装配置,直接上手敲代码运行即可。

各种语言的编程环境

4、开源大社区

树莓派的所有硬件、操作系统、软件、杂志、论坛全部是开源免费的,并且在全世界有规模庞大的玩家社群,他们贡献出自己的奇思妙想和源代码,你可以直接用别人写好的库和代码。一些知名开源项目,比如谷歌的人工智能框架TensorFlow、人脸识别项目face_recognition、开源机器视觉库SimpleCV、OpenCV、安卓操作系统等,都会专门开发树莓派可用的版本并撰写技术手册。

树莓派官方杂志MagPi的中文翻译版

开源人脸识别项目face_recognition

在树莓派上安装开源机器视觉库OpenCV

开源软件运动

5、引脚可编程

树莓派主板上有GPIO引脚(通用输入输出接口),在3B+主板上是40个引脚,通过对这些引脚编程,可以控制各种各样的传感器、电子元器件、电路,进而进行机器人控制、数字电路实验,开发物联网应用。

GPIO引脚

6、便携随身带

树莓派非常便携,只有信用卡大小,可以随身携带,可以用普通安卓手机充电器或者移动电源供电,可以随身携带,非常方便。各种上天入地,翻山下海的任务都可以交给树莓派。树莓派除了传统的3B+之外还有微型的树莓派Zero,专门为便携嵌入式设计,可以放在手心里。

基于树莓派摄像头的冷水珊瑚礁科考

基于树莓派的FRILLER多地形机器人

树莓派Zero 用树莓派zero制作的小电脑

7、灵活可扩展

你可以用树莓派进行各领域的开发,搭上当前火热的人工智能、大数据、物联网的车。搭配一个摄像头模块(40元),你可以做网络摄像头以及各种机器视觉和人工智能应用。搭配一个英特尔神经棒(500元),可以大大加快神经网络计算速度,可以达到毫秒级的物体检测。

1

二、openEuler embedded介绍

为从生态上解决国内嵌入式和实时操作系统遭受国外技术垄断的风险,华为公司推出了旨在具备实时性、安全可靠、互联互通、混合部署等特性的开源嵌入式操作系统OpenEuler Embedded。它基于openEuler社区的嵌入式系统软件平台,可同时部署Linux内核、自研微内核以及实时OS。OpenEuler Embedded针对嵌入式场景的需求,在内核特性、系统配置、软件包组合、镜像裁剪、安全加固、轻量化等方面进行创新,其OS镜像最小可达5M,并具有<5S的快速启动能力。OpenEuler Embedded总体架构如下图所示:

img

在硬件方面,OpenEuler Embedded目前重点支持ARM架构的处理器,如ARM32、ARM64,并通过QEMU和树莓派4B两个平台承载。未来OpenEuler Embedded还计划实现对RISC-V、X86、龙芯等架构的支持,全面面向多核异构嵌入式系统。在系统软件方面,OpenEuler Embedded采用了混合部署架构,加入linux内核以继承Linux的管理能力、丰富的生态,同时可加入RTOS内核以使系统能够支撑具有高实时、高可靠、高安全等需求的应用场景。在此基础上,OpenEuler Embedded摒弃了低效的资源静态部署方案,采用嵌入式虚拟化的办法,解决了混合关键性系统各子系统之间的兼容性、安全性等问题,实现了对各子系统内核的良好兼容,灵活开发和部署。OpenEuler Embedded还引入分布式软总线技术,打通了鸿蒙和欧拉两大生态。

在操作系统的开发方面,介于嵌入式系统资源有限,OpenEuler Embedded发布了专用的SDK (Software Development Kit)并集成了与OpenEuler Embedded配套的嵌入式系统仿真方案,未来计划集成图形化IDE (Integrated Development Environment), 组成一套完整的开发工具体系,实现对操作系统的开发、调试与优化。

综上所述,OpenEuler Embedded具有强大的开发平台,广阔的应用场景,着眼于生态建设,并且其结构的设计符合嵌入式和实时操作系统的未来发展趋势。因此,本课程的实践部分将基于OpenEuler开发,为中国嵌入式实时系统打破技术壁垒,走向世界,提供人才基础。

考虑到openeuler embedded更适用于产品化,在教学中对学生的门槛比较高,因此,为了方便教学,实验过程中,学生可自行构建openeuler embedded,或者选用已经构建好的openeuler树莓派镜像。

三、树莓派开机指南

1. 硬件准备

  • SD卡、读卡器、树莓派实验套件、一台电脑

2. 软件准备

  • 下载压缩包【树莓派开机工具】,解压,共有两个文件夹
  • 基本工具包括:SD卡格式化工具SD Formatter、镜像烧录工具、局域网IP扫描器、远程ssh工具
  • 开机常用文件:包括ssh空文件和wifi配置文件

3. openEuler embedded的构建

环境:Ubuntu20.04

1)运行环境准备

  • 安装python3和pip

    • apt-get install python3 python3-pip
  • 安装oebuild

    • sudo su
    • pip install oebuild
    • sudo apt install docker docker.io -y
    • sudo groupadd docker
    • sudo usermod -a -G docker $(whoami)
    • sudo systemctl-reload && systemctl restart docker
    • sudo chmod o+rw /var/run/docker.sock

2)构建

  • 初始化oebuild

    • cd ~
    • oebuild init //该操作会初始化 oebuild 的目录,表示要初始化目录的名称
  • oebuild更新

    • cd

    • oebuild update

      更新工作主要有两点:

      • pull相关的运行容器镜像
      • 从gitee上下载yocto-meta-openeuler仓代码,如果本地没有openeuler相关容器,则在这一步执行会比较漫长,请耐心等待。
  • 编译环境建立

    //进入oebuild工作目录,创建对应的编译配置文件

    • cd
    • oebuild generate -p raspberrypi4-64 //生成raspberrypi4-64配置文件
    • oebuild bitbake //进入构建交互终端
    • bitbake openeuler-image //构建镜像
    • bitbake openeuler-image -c do_populate_sdk //构建sdk
  • 二进制介绍

    • Image: 树莓派内核镜像

    • openeuler-glibc-x86-64-openeuler-image-cortexa72-raspberrypi4-64-toolchain-*.sh: SDK工具链

    • openeuler-image-raspberrypi4-64-*.rootfs.rpi-sdimg: openEuler Embedded树莓派支持SD卡镜像

      image-20230809194030250

    • 将得到的openeuler-image-raspberrypi4-64-20230809013758.rootfs.rpi-sdimg镜像通过共享文件夹传输给windows,windows后续再将其烧录到树莓派的SD卡中。

4. 第一次开机

(1)格式化SD卡

  • 如果SD卡是旧卡,需要用SDFormatter格式化工具先格式化。如果用新的SD卡可以跳过此步。

    格式化SD卡 格式化SD卡成功

格式化之后,可以看到SD卡对应的盘变成了空盘。

(2)烧录镜像

将第3步中获得的镜像文件openeuler-image-raspberrypi4-64-20230809013758.rootfs.rpi-sdimg烧录到SD卡中

  • 打开烧录工具Win32DiskImager(或者另一个镜像烧录工具balena-etcher),选好镜像文件和要烧录的SD卡对应的盘。

    选SD卡对应盘符号的时候一定要小心,不要选到其它盘或者硬件,不然镜像可能会覆盖写到其它盘里

  • 然后点击write,开始烧录

  • 烧录成功后,将空白的ssh文件放入SD卡的boot盘【旨在一开始就让树莓派允许SSH进行连接】

    • 手动创建一个空白记事本.txt文件,命名为ssh,重命名,删除.txt扩展名,将这个文件放入SD卡的boot盘中。
    • 在003文件夹中也有已创建好的ssh文件,可以直接复制到SD卡的boot盘中

(3)Wi-Fi网络配置

需要显示屏

配置wifi文件

  • 新建一个空白文件wpa_supplicant.txt

  • 编辑wpa_supplicant.txt文件,输入以下配置,其中可以使用多个network{}来配置多个wifi,【不建议使用校园网,需要认证】

    country=GB
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    network={ssid="第一个WiFi的名字,不删除引号,不能有中文"psk="WiFi密码,不删除引号"priority=数字,数字越大代表优先级越高
    }
    network={ssid="第二个WiFi的名字,不删除引号,不能有中文"psk="WiFi密码,不删除引号"priority=数字,数字越大代表优先级越高
    }
    

    priority表示几个wifi同时都搜得到的时候优先连接哪个。

  • 将txt后缀改成conf

  • 将wpa_supplicant.conf文件放入SD卡的boot盘中

开机

  • 拔出SD卡,插到树莓派的SD卡槽里,插好HDMI线连接显示器、电源线、鼠标线以及键盘线(鼠键支持2.4G无线接收器类型),通电

    • 树莓派上的红灯常亮,表示通电。绿灯间歇性亮,表示读写SD卡
  • 开机后可以看到显示器上输出很多树莓派启动日志,待树莓派启动成功后,输入用户名(root),然后修改密码(比如说openeuler@123)**登录。

    1f8b5589353da6297181b7ed9c47d8a
    • 开机后通过命令ifconfig或者ip a查看wlan0下是否有ip地址,或者通过手机热点查看是否连接上了设备,如果有则说明wifi连接成功,否则连接失败。
使能无线驱动
  • 修改/etc/network/interfaces文件中无线网卡wlan0的配置

    iface wlan0 inet dhcpwireless_mode managedwireless_essid anywpa-driver wextwpa-conf /etc/wpa_supplicant.conf
    当前树莓派所使用的无线网卡驱动是 nl80211系列
    因此将wpa-driver wext 改为 wpa-driver nl80211
    才能正确启动wpa_supplicant
    iface wlan0 inet dhcpwireless_mode managedwireless_essid anywpa-driver nl80211wpa-conf /etc/wpa_supplicant.conf
    
  • 修改完成后重启networking service使配置生效

    • service networking restart
启用Wi-Fi网卡
  • 使用ifup启动Wi-Fi连接并自动获取IP地址

    • ifup wlan0

      当修改/etc/wpa_supplicant.conf配置文件后, 例如新增Wi-Fi网络配置或修改Wi-Fi网络配置, 需要使用ifdown wlan0来关闭网卡, ifup wlan0开启网卡使wpa_supplicant配置重新加载生效

  • 使用ifconfig命令查看wlan0网卡, 已经具有IP地址, 并可以正常通信

    image-20230809232041883

  • 注意:如果不成功的话可以查看是否是wpa_supplicant.conf没有修改成功

    • cat wpa_supplicant.conf

(4)远程登陆树莓派

知道树莓派的ip地址后,就可以用我们的笔记本电脑远程登录树莓派

  • 以MobaXterm为例进行展示,课后可以自行尝试使用Putty

    【注意:电脑需要与树莓派连接至同一个热点,确保二者在同一个网段,否则远程登陆不成功】

    • 电脑端进入cmd终端窗口,输入ipconfig,查看二者是否在同一网段

    image-20230809232404651

    与前面树莓派的ip地址192.168.1.110在同一网段(前三个数字相同)

    image-20230309230832979 image-20230309230839195
    • 输入前面获得的树莓派的ip地址和用户名,OK

      image-20230809232545374

    • 输入密码

      image-20230809232728654

    • 选No即可

    image-20230809233029764

    • 输入密码,即可登录成功

      image-20230809233051529

    • 输入uname -a 可以查看版本名

      image-20230809233156419

    • 查看openeuler embedded系统信息

      • cat /etc/os-release

        image-20230809233512511

  • 注意:服务器版本的openeuler树莓派镜像的网络配置过程可以参考 openeuler官方安装指导

★树莓派的关机

  • 不能直接拔掉电源,会造成树莓派数据无法及时保存而丢失
  • 可以按需选择相关的终端命令操作
    • sudo poweroff 关闭电源
    • sudo shutdown -h now 立刻关机
    • sudo shutdown -r now 立刻重启
    • sudo reboot 重启
    • sudo shutdown -h +2 2分钟之后关机

四、基于SDK的应用开发

1. 交叉编译

交叉编译是什么

  • 编译可以分为两类:
    • 本地编译:编译器和目标程序都是相同架构的编译过程,如编译器运行在x86_64/ARM架构平台上,编译生成x86_64/ARM架构的可执行程序。
    • 交叉编译:编译器和目标程序运行在不同架构的编译过程,如编译器运行在x86架构平台上,编译生成ARM架构的可执行程序。
  • 通俗的来说,交叉编译就是在pc(x86架构)上的代码,通过相应的交叉编译工具链编译后,能在树莓派上运行(arm架构)。

为什么需要交叉编译?

这是因为通常编译工具链对编译环境有较高的要求,编译复杂的程序时,可能需要巨大的存储空间以及强大的 CPU 运算能力加快编译速度。嵌入式往往面临资源受限的问题,包括处理器性能、内存容量、存储空间等。因此,需要使用交叉编译器在构建主机上编译目标代码,以在嵌入式系统上运行。通常做法是在 PC 上使用交叉编译工具链生成能够在嵌入式设备运行的可执行程序,然后再将程序放到设备中去执行。

2. SDK环境配置

openEuler Embedded提供了SDK自解压安装包,包含了应用程序开发所依赖的交叉编译器、库、头文件,下面将介绍如何构建ARM64的SDK,以及如何使用SDK进行用户态程序、内核模块的开发。

安装SDK

在前面openEuler embedded的构建中,我们已经构建了SDK,得到了openeuler-glibc-x86-64-openeuler-image-cortexa72-raspberrypi4-64-toolchain-*.sh文件,是SDK安装包。接下来进行安装

  • 安装依赖软件包

    • sudo apt-get install make gcc g++ flex bison libgmp3-dev libmpc-dev libssl-dev
  • 执行SDK自解压安装脚本

    • sh openeuler-glibc-x86_64-openeuler-image-cortexa72-raspberrypi4-64-toolchain-23.03.sh
    • 根据提示输入工具链的安装路径,默认路径是 /opt/openeuler/<openeuler version>
  • 设置SDK环境变量

    前一步执行结束最后已打印source命令,运行即可

    • . /opt/openeuler/oecore-x86_64/environment-setup-cortexa72-openeuler-linux
  • 查看是否安装成功

    • 运行如下命令,查看是否安装成功、环境设置成功

      aarch64-openeuler-linux-gcc -v

      image-20230810102518620

3. 使用SDK交叉编译hello world样例

1)准备代码

以构建一个hello world程序为例,运行在openEuler Embedded根文件系统镜像中。

  • 在Ubuntu上创建一个hello.c文件

    #include <stdio.h>int main(void)
    {printf("hello openEuler\r\n");
    }
    
  • 在hello.c程序所在目录执行如下命令

    • 交叉编译生成二进制aarch64-linux-gnu-gcc hello.c -o hello

    • 使用交叉编译器编译后,生成的 hello 已经变成了 ARM 平台的可执行文件

    • 可以通过 readelf 工具来查看具体的程序信息,readelf -a hello

      image-20230810103043120

  • 将上一步生成的可执行文件拷贝到树莓派的openeuler embedded中,并执行

    • chmod +x hello

    • ./hello

      image-20230810102926397

      运行成功

五、基于树莓派的OpenEuler内核模块基础实验

1. Linux内核模块

内核模块就是实现了某个功能的一段内核代码,在内核运行过程中,可以加载这部分代码到内核中,从而动态地增加了内核的功能。Linux引入内核模块这一机制,当需要修改、增加内核某个功能时,不再需要重新编译一遍整个内核,只需要编译相关某一段功能代码即内核模块,再加载到内核中即可,避免内核变得臃肿,实现灵活增减。

一些常用模块指令

  • 加载内核模块

    lsmod xx.ko

  • 卸载内核模块

    rmmod xx.ko

  • 列出当前内核中已经加载的内核模块

    lsmod查看全部内核模块

    lsmod | grep xx 查看指定内核模块

  • 查看内核模块的相关信息

    modinfo xx.ko

  • 显示模块打印信息

    dmesg或者dmesg | tail -n 5查看最后5行信息

2. 第一个内核模块helloworld

(1)编写代码和生成hello内核模块

  • 创建文件hello.c

    • vi hello.c
    • i进入编辑模式,输入或者复制以下内容
    #include <linux/init.h>
    #include <linux/module.h>static int hello_init(void)
    {printk("Hello, openEuler Embedded!\r\n");return 0;
    }static void hello_exit(void)
    {printk("Byebye!");
    }module_init(hello_init);
    module_exit(hello_exit);MODULE_LICENSE("GPL");
    
    • Esc进入命令行模式,按:wq保存退出
  • 编写Makefile,和hello.c文件放在同一个目录,方法同上

    Makefile是用来执行一组操作的特殊文件,其中最重要的操作是程序的编译。

    • vi Makefile
    KERNELDIR := ${KERNEL_SRC}
    CURRENT_PATH := $(shell pwd)target := hello
    obj-m := $(target).obuild := kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
    clean:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
    

KERNEL_SRC 为SDK中内核源码树的目录,该变量在安装SDK后会被自动设置。

  • make指令用于执行Makefile,构建模块

    make

    image-20230810104103080

(2)将编译好的hello.ko拷贝到openEuler Embedded系统中

  • 加载模块

    insmod hello.ko

  • 查看加载的内容

    dmesg | tail -n 2

    image-20230810103805637

  • 模块的卸载及查看

    rmmod hello

    dmesg | tail -n 1

(3)原理

重新回顾hello.c,通过insmod加载helloworld.ko内核模块时,自动执行module_init()函数,该函数输出Hello, openEuler Embedded!

执行rmmod卸载内核模块helloworld.ko时,会自动执行hello_exit()函数,该函数输出Byebye!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 —— ref 全家桶及源码学习

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 本章 ref 全家桶 主要包括以下几个api 和 对应源码的学习&#xff1a; refisRefshallowReftriggerRefcustomRef 一、api 各自的使用 1、ref 使用 v…

【Python篇】Python基础语法

【Python篇】Python基础语法 拖拖拖&#xff0c;能使工作便捷高效的为何要拒绝&#xff0c;作个记录—【蘇小沐】 文章目录 【Python篇】Python基础语法1.实验环境 1、标识符2、Python保留字&#xff08;关键字&#xff1a;不能用作任何标识符名称&#xff09;3、注释1&#x…

【链表OJ 3】链表的中间结点

前言: 本文收录于http://t.csdn.cn/n6UEP数据结构刷题的博客中,首先欢迎大家的来访&#xff0c;其次如有错误&#xff0c;非常欢迎大家的指正&#xff01;我会及时更正错误&#xff01; 目录 一.链表的中间结点 1.1原理:快慢指针的使用 链表元素个数为奇数时 链表元素个数…

抽象工厂模式-java实现

介绍 抽象工厂模式基于工厂方法模式引入了“产品族”的概念&#xff0c;即我们认为具体产品是固定的&#xff0c;具体产品存在等级之分&#xff0c;比如我们常说的手机&#xff0c;有“青春版”&#xff0c;“至尊版”&#xff0c;“至臻版”。一个产品有多个版本族。这时候&a…

day23-113. 路径总和ii

113. 路径总和ii 力扣题目链接(opens new window) 给定一个二叉树和一个目标和&#xff0c;找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树&#xff0c;以及目标和 sum 22&#xff0c; 思路 利用…

django中使用bootstrap-datepicker时间插件

1、插件的下载 Bootstrap Datepicker是一款基 于Bootstrap框架的日期选择控件&#xff0c;可以方便地在Web应用中添加可交互的日期选择功能。Bootstrap Datepicker拥有丰富的选项和API,支持多种日期格式&#xff0c;可以自定义样式并支持各种语言。 Bootstrap Datepicker 依赖…

【Linux】冯诺伊曼体系结构|操作系统概念理解

个人主页&#xff1a;&#x1f35d;在肯德基吃麻辣烫 我的gitee&#xff1a;Linux仓库 个人专栏&#xff1a;Linux专栏 分享一句喜欢的话&#xff1a;热烈的火焰&#xff0c;冰封在最沉默的火山深处 文章目录 前言一、先谈硬件——冯诺依曼体系结构1.什么是冯诺依曼体系结构&am…

SpringCloud整体架构概述

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; SpringCloud整体架构概述 SpringCloud对常见的分布式系统模式提供了简单易用的编程模型&#xff0c;帮助开发者构建弹性、可靠、协调的应用程序。 SpringCloud是在Spr…

汽车IVI中控开发入门及进阶(十):车载摄像头接口CVBS、AHD和MIPI

文章目录 前言一、CVBS是什么?二、AHD是什么?三、MIPI是什么?前言 汽车电子电气架构正在由传统的分布式架构向域集中式架构转变,也就是将多个应用程序集中在一个域中,正如提到IVI,有些已经开始导入域控,除了一带多的显示屏、一带多的雷达传感器,当然还有一带多的摄像头…

unity 修改默认脚本

using System.Collections; using System.Collections.Generic; using UnityEngine; //***************************************** //创建人&#xff1a; xxxx //功能说明&#xff1a; //***************************************** #ROOTNAMESPACEBEGIN# public class #SCRI…

Jenkins集成appium自动化测试(Windows篇)

一&#xff0c;引入问题 自动化测试脚本绝大部分用于回归测试&#xff0c;这就需要制定执行策略&#xff0c;如每天、代码更新后、项目上线前定时执行&#xff0c;才能达到最好的效果&#xff0c;这时就需要进行Jenkins集成。 不像web UI自动化测试可以使用无痕浏览器做到无界…

03微服务到底是什么

一句话导读 微服务是一种架构模式&#xff0c;英文翻译 microservice&#xff0c;微服务架构的核心理念是将大型、复杂的单体应用拆分成更小的、自治的组件&#xff0c;每个组件即为一个微服务 目录 一句话导读 一、微服务的定义 二、微服务的特点 1.独立性 2.松耦合 3.可伸…

营收、净利同比微增,喜临门品牌升级“临门一脚”?

8月8日晚&#xff0c;喜临门发布2023上半年业绩报告。根据财报&#xff0c;2023年上半年&#xff0c;喜临门营业收入约38.05亿元&#xff0c;同比增加5.53%&#xff1b;归属于上市公司股东的净利润约2.22亿元&#xff0c;同比增加1.2%。 如果仅从这份财报看&#xff0c;喜临门…

操作系统—调度算法

进程调度算法 进程调度算法也称CPU调度算法 调度发生时期 当进程从运行状态转到等待状态&#xff1b;当进程从运行状态转到就绪状态&#xff1b;当进程从等待状态转到就绪状态&#xff1b;当进程从运行状态转到终止状态&#xff1b; 其中发生在 1 和 4 两种情况下的调度称为…

electron+vue3全家桶+vite项目搭建【13.1】ipc通信的使用,主进程与渲染进程之间的交互

文章目录 引入IPC通信[主/渲染]进程对应渲染进程>主进程代码测试测试效果 主进程>渲染进程代码测试测试效果 双向通信代码测试测试效果 引入 electron项目常常由一个主进程和多个渲染进程构成&#xff0c;渲染进程之间是隔离的&#xff0c;而所有渲染进程都和主进程共享…

学习左耳听风栏目90天——第一天 1-90(学习左耳朵耗子的工匠精神,对技术的热爱)【洞悉技术的本质,享受科技的乐趣】

洞悉技术的本质&#xff0c;享受科技的乐趣 第一篇&#xff0c;我的感受就是 耗叔是一个热爱技术&#xff0c;可以通过代码找到快乐的技术人。 作为it从业者&#xff0c;我们如何可以通过代码找到快乐呢&#xff1f;这是一个问题&#xff1f; 至少目前&#xff0c;我还没有这种…

Vue [Day6]

路由进阶 路由模块的封装抽离 src/router/index.js import VueRouter from vue-router // 用绝对路径的方式来写目录 相当于src import Find from /views/Find import Friend from ../views/Friend import My from ../views/Myimport Vue from vue Vue.use(VueRouter)con…

在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

1.Cadence 17.2 配置CIS数据库报&#xff1a;ERROR(ORCIS-6245): Database Operation Failed 安装cadance17.2以上版本时&#xff0c;ERROR(ORCIS-6245): Database Operation Failed_收湾湾的博客-CSDN博客 原因是ODBC数据库没有配置&#xff0c;或者没有驱动&#xff0c; 驱…

Linux(进程间通信详解)

进程间通信&#xff0c;顾名思义&#xff0c;就是进程与进程之间互通信交流&#xff0c;OS保证了各进程之间相互独立&#xff0c;但这不意味着进程与进程之间就互相隔离开&#xff0c;在不少的情况下&#xff0c;进程之间需要相互配合共同完成某项6任务&#xff0c;这就要求各进…

产品体系架构202308版

1.前言 当我们不断向前奔跑时&#xff0c;需要回头压实走过的路。不断扩张的同时把相应的内容沉淀下来&#xff0c;为后续的发展铺垫基石。 不知从何时起&#xff0c;产品的架构就面向了微服务/中台化/前后端分离/低代码化/分布式/智能化/运行可观测化的综合体&#xff0c;让…