树莓派第一次开机

news2024/11/25 11:09:48

文章目录

  • 基于树莓派的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 dhcp
           wireless_mode managed
           wireless_essid any
           wpa-driver wext
           wpa-conf /etc/wpa_supplicant.conf
    当前树莓派所使用的无线网卡驱动是 nl80211系列
    因此将wpa-driver wext 改为 wpa-driver nl80211
    才能正确启动wpa_supplicant
    iface wlan0 inet dhcp
           wireless_mode managed
           wireless_essid any
           wpa-driver nl80211
           wpa-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).o
    
    build := kernel_modules
    
    kernel_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.coloradmin.cn/o/861965.html

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

相关文章

ROS入门-使用常用的ROS命令行工具:操作节点、话题、服务、消息和参数

目录 使用常用的ROS命令行工具&#xff1a;操作节点、话题、服务、消息和参数 1. rosnode&#xff1a;操作节点 2. rostopic&#xff1a;操作话题 3. rosservice&#xff1a;操作服务 4. rosmsg&#xff1a;操作msg消息 5. rossrv&#xff1a;操作srv消息 6. rosparam&am…

MySQL 存储过程、函数、触发器、事件

​ 目录 存储过程 创建存储过程 调用存储过程 查看存储过程 删除存储过程 进阶 变量 if条件判断 传递参数 case结构 while循环 repeat结构 loop语句 leave语句 游标/光标 存储函数 触发器 创建触发器 删除触发器 查看触发器 事件 查看事件调度器是否开启…

eNSP:ebgp和bgp的基础运用

实验要求&#xff1a; 拓扑图&#xff1a; 命令操作&#xff1a; r1: <Huawei>sys [Huawei]sys r1 [r1]int g 0/0/1 [r1-GigabitEthernet0/0/1]ip add 12.1.1.1 24 [r1-GigabitEthernet0/0/1]int lo0 [r1-LoopBack0]ip add 1.1.1.1 24[r2]ospf 1 router-id 2.2.2.2 [r2…

肉豆蔻酰五肽-8——祛眼袋和黑眼圈

肉豆蔻酰五肽-8 简介 眼袋和黑眼圈形成的原因&#xff1a; 1. 随着年龄的增大眼部皮肤会失去弹性, 眼部肌肉同时也会松弛, 从而在眼脸形成皱褶。衬垫在眼眶的脂肪从眼腔转移出并在眼脸聚集。袋状眼脸医学上称为皮肤松垂, 通常可以通过眼脸成形术得到改善。 2. 眼袋形成另外一…

【2023年11月第四版教材】《第2章-信息技术发展(合集篇)》

《第2章-信息技术发展&#xff08;第一部分&#xff09;》 章节说明1 计算机软硬件2 计算机网络2.1 网络的作用范围2.2 OSI模型2.3 广域网协议2.4 网络协议2.5 TCP/IP2.6 软件定义网络&#xff08;SDN&#xff09;2.7 第五代移动通信技术 3 存储和数据库3.1 存储系统架构3.2 存…

能化校对软件:提高招标文件质量的创新解决方案

智能化校对软件是一种创新的解决方案&#xff0c;可以进一步提高招标文件的质量和准确性。 以下是一些智能化校对软件的创新功能和优势&#xff1a; 1.自然语言处理(NLP)技术&#xff1a;智能化校对软件利用NLP技术来理解和分析文本&#xff0c;识别和纠正更复杂的语法和语义错…

Linux系统性能调优及调试课:Linux Kernel Printk

🚀返回专栏总目录 文章目录 0、printk 说明1、printk 日志等级设置2、屏蔽等级日志控制机制3、printk打印常用方式4、printk打印格式0、printk 说明 在开发Linux device Driver或者跟踪调试内核行为的时候经常要通过Log API来trace整个过程,Kernel API printk()是整个Kern…

需要数电发票接口的,先熟悉下数电发票基本常识

最近有一些技术小伙伴来咨询数电发票接口的时候&#xff0c;对数电发票的一些常识不太了解&#xff0c; 导致沟通起来比较困难。比较典型的这三个问题&#xff1a; 一、开具数电票时&#xff0c;如何设置身份认证频次&#xff1f; 请公司的法定代表人或财务负责人登录江苏省电…

什么是回归测试?回归测试的类型和方法?

随着软件开发进程的进行&#xff0c;每一次的修改和更新都有可能引入新的问题和错误。为了确保产品质量和稳定性&#xff0c;需要进行回归测试。那么&#xff0c;什么是回归测试&#xff1f;本文将为您解答。 回归测试是指在软件代码、使用环境或产品需求发生改变时&#xff0…

MinGW-W64 下载、安装与配置(支持最新版的GCC,目前 GCC 13.2.0)

文章目录 一、简介1. MinGW 和 MinGW-W64 区别和联系2. MSVCRT 和 UCRT 介绍 二、下载1. 从 sourceforge.net 下载2. 从 github 下载3. 从 镜像站点 下载4. 自己编译 三、安装与配置1. 在线安装2. 离线安装3. 环境配置 四、总结 一、简介 1. MinGW 和 MinGW-W64 区别和联系 M…

Linux系统之使用cmatrix实现数字雨效果

Linux系统之使用cmatrix实现数字雨效果 一、cmatrix介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、环境准备工作3.1 安装开发环境3.2 安装基本软件3.3 安装 ImageMagick等工具 四、安装aalib工具4.1 新建目录4.2 下载aalib安装包4.3 解压软件包4.4 编译安装aalib …

9篇论文速览 ICML 2023 测试时自适应(TTA)最新研究进展

测试时自适应对于领域转移下真实机器感知应用的成功至关重要&#xff0c;近年来&#xff0c;研究者们仍然在不断优化现有的方法。在今年的ICML中&#xff0c;TTA相关的研究也有了最新进展。 1.Uncovering Adversarial Risks of Test-Time Adaptation 标题&#xff1a;揭示测试…

JVM垃圾回收篇-垃圾回收器

JVM垃圾回收篇-垃圾回收器 串行垃圾回收器 Serial串行&#xff1a;为单线程环境设计且只使用一个线程进行垃圾回收&#xff0c;会暂停所有用户的线程&#xff0c;所以不适合服务器环境&#xff0c;适用于堆内存小&#xff0c;适合于个人电脑 开启串行垃圾回收 -XX:UseSeria…

MySQL_多表关系

多表关系 一对一关系 用户和用户详情 关系&#xff1a;一对一的关系 用途&#xff1a;用于单表拆分&#xff0c;将一张表的基础字段放在一张表中&#xff0c;其它字段放在另一张表中&#xff0c;可以提升查询效率 实现&#xff1a;在任意一张表里面添加外键&#xff0c;关联…

《向量数据库指南》——判断一个好的向量数据库,标准是什么?

一个不容忽略的问题是,趁着大模型这波狂热浪潮,软件市场催生了大量的向量数据库,软件质量和性能参差不齐,其中更是不乏套壳的向量数据库。那么,如何区分一个向量数据库是否真正具备自己所需的能力,如何迅速了解并对比不同向量数据库的性能和容量成本差距呢? 不久前,Zil…

【dnf5文档】新一代RedHat自动化包管理器

前言 HI,CSDN的码友们&#xff0c;距离上一次我发文章已经过去了半年的时间&#xff0c;现在我又来介绍自己新发现和探究的开源技术了。计算机的发展总是飞速的&#xff0c;当我在写这篇文章的时候&#xff0c;Fedora rawhide已经进入了40版本、默认采用的自动化包管理器为dnf…

亚马逊推出新卖家论坛!提供多种新功能!

亚马逊欧洲站发布公告称新推出的亚马逊卖家论坛新论坛提供更简单的导航和搜索&#xff0c;高级过滤功能&#xff0c;投票功能以及个性化设置&#xff0c;以下是公告内容&#xff1a; 我们推出了新的亚马逊卖家论坛体验&#xff0c;卖家每天都可以在这里寻找答案&#xff0c;帮…

560. 和为 K 的子数组

思路 本题的主要思路为创建一个哈希表记录每个0~i的和&#xff0c;在遍历这个数组的时候查询有没有sum-k的值在哈希表中&#xff0c;如果有&#xff0c;说明有个位置到当前位置的和为k。   有可能不止一个&#xff0c;哈希表负责记录有几个sum-k&#xff0c;将和记录下来。这…

网络远程USB共享 VirtualHere USB Server v4.5.8 Crack

VirtualHere 允许通过网络远程使用 USB 设备&#xff0c;就像本地连接一样&#xff01; 传统上&#xff0c;USB 设备需要直接插入计算机才能使用。有了 VirtualHere&#xff0c;这不再是必需的&#xff0c;网络本身变成了传输 USB 信号的电缆&#xff08;也称为 USB over IP、U…

勘探开发人工智能技术:机器学习(2)

0 提纲 3.1 k k k 近邻算法 3.2 决策树 3.3 k k kMeans 3.4 如何定义机器学习问题 3.5 线性回归 1 k k k 近邻算法 开卷考试, 在桌上堆的资料越多, 越是 “见多识广”. 1.1 核心思想 具有讽刺意味的是: 机器学习最基本的算法居然是不学习, 也称为惰性学习 (lazy learni…