【T690 之十一】基于方寸EVB2开发板,结合 Eclipse+gdb+gdbserver 调试 CCAT 的流程总结

news2024/9/24 9:20:43

目录

  • 1. 准备工作
    • 1.1 Eclipse
    • 1.2 工程编译
    • 1.3 烧写固件
  • 2. 创建工程
    • 2.1 搭建调试工程
    • 2.2 配置Dbug调试信息
  • 3. 调试
  • 4. 手动调试过程
  • 4. 总结

备注:
1,假设您已对方寸微电子的T690系列芯片的使用方式都有了一定的了解,可以根据此文的配置进行Linux用户态代码的调试;
2,若您对方寸微电子的T690芯片不了解,但想进一步了解它,那您可以在gitee上获取相关资料,gitee的网址为:https://gitee.com/tihchip;
3,本文中关于gdb、gdbserver的使用方式都是通用的,不仅局限于调试基于T690的工程,希望该文章能对您起到积极的作用;

1. 准备工作

1.1 Eclipse

本文中使用的Eclipse为芯来的 NucleiStudio_IDE_202212,关于Eclipse安装方式不在此累述。
下载地址:https://www.nucleisys.com/download.php
在这里插入图片描述

1.2 工程编译

  对于一个全新的测试的话,需要编译一个全新的文件系统(rootfs),在编译文件系统时已经默认编译了 OpenSBI、U-Boot、Kernel、OpenSSL、CCAT-Engine、CCAT等,但是为了更好的了解使用这些工程,也可以独自编译它们。
  下面采用 yocto 的方式编译文件系统等。

  1. 编译文件系统(rootfs)

注:在编译文件系统之前,必须首先修改U-Boot 及 Kernel 的配置项,参考章节 “编译U-Boot” 及 “编译Kernel” 中的说明

root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake tih-full-cli-debug-image -c cleanall
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake tih-full-cli-debug-image
root@t690mp-evb2-va: mkdir /share/samba/public/shared/jack/rootfs_gmssl
root@t690mp-evb2-va: cp /localhdd/jack/tmp-glibc/deploy/images/t690mp-evb2-va/tih-full-cli-debug-image-t690mp-evb2-va.tar.gz /share/samba/public/shared/jack/rootfs_gmssl
root@t690mp-evb2-va: cd /share/samba/public/shared/jack/rootfs_gmssl
root@t690mp-evb2-va: tar -vxzf tih-full-cli-debug-image-t690mp-evb2-va.tar.gz

(1)tih-full-cli-debug-image :表示编译带有调试信息的文件系统,tih-full-cli-image表示编译不带调试信息的文件系统。我们进行gdb调试时,需要编译带有调试信息的文件系统;
(2)在 /share/samba/public/shared/jack/ 目录下创建一个名为 rootfs_gmssl 的文件夹(需要保证该文件夹时nfs的挂载路径才行),并将生成的文件系统复制到此文件夹下,解压后,如下所示:
在这里插入图片描述

  1. 编译OpenSBI
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake opensbi -c cleanall
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake opensbi 
root@t690mp-evb2-va: cp -rf /localhdd/jack/tmp-glibc/deploy/images/t690mp-evb2-va/fw_jump.bin /share/samba/public/shared/jack/
  1. 编译U-Boot
    在这里插入图片描述
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake u-boot -c cleanall
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake u-boot
root@t690mp-evb2-va: cp /localhdd/jack/tmp-glibc/deploy/images/t690mp-evb2-va/u-boot.bin /share/samba/public/shared/jack/
  1. 编译Kernel
    修改设备树,配置文件系统的挂载路径如下:
    在这里插入图片描述
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake linux-mainline -c cleanall
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake linux-mainline
root@t690mp-evb2-va: cp /localhdd/jack/tmp-glibc/deploy/images/t690mp-evb2-va/fitImage /share/samba/public/shared/jack/rootfs_gmssl/boot/
  1. 编译GMSSL 或 OpenSSL

备注:若使用yocto编译GMSSL,必须采用迂回的路线,即将GMSSL的bb文件中的内容全部替换到OpenSSL的bb文件中去,通过编译OpenSSL的方式实现对GMSSL的编译。

root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake openssl -c cleanall
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake openssl
root@t690mp-evb2-va: cp -rf /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/openssl/1.1.1q-r0/image/* /share/samba/public/shared/jack/rootfs_gmssl/
root@t690mp-evb2-va: cp -rf /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/openssl/1.1.1q-r0/packages-split/openssl-dbg/* /share/samba/public/shared/jack/rootfs_gmssl/
  1. 编译CCAT
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake ccat -c cleanall
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake ccat
root@t690mp-evb2-va: cp -rf /localhdd/jack/tmp-glibc/work/t690mp_evb2_va-tih-linux/ccat/1.0-r0/image/* /share/samba/public/shared/jack/rootfs_gmssl/
root@t690mp-evb2-va: cp -rf /localhdd/jack/tmp-glibc/work/t690mp_evb2_va-tih-linux/ccat/1.0-r0/packages-split/ccat-dbg/* /share/samba/public/shared/jack/rootfs_gmssl/
  1. 编译CCAT-Engine
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake ccat-engine -c cleanall
root@t690mp-evb2-va: MACHINE=t690mp-evb2-va bitbake ccat-engine
root@t690mp-evb2-va: cp -rf /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/ccat-engine/1.0-r0/image/* /share/samba/public/shared/jack/rootfs_gmssl/
root@t690mp-evb2-va: cp -rf /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/ccat-engine/1.0-r0/packages-split/ccat-engine-dbg/* /share/samba/public/shared/jack/rootfs_gmssl/

1.3 烧写固件

参考方寸微电子提供的快速启动文档《TIH64V690 SDK Quick Start.pdf》
下载地址:https://e.gitee.com/tihchip_priv/repos/tihchip/doc/sources
在这里插入图片描述

2. 创建工程

2.1 搭建调试工程

创建并导入待调试的工程的目的是:方便跟踪、查看、并修改源码(切记:这里导入的是源码工作的链接文件,而不是源文件)

  1. 点击:File/New/Project
    在这里插入图片描述
    在这里插入图片描述
  2. 导入工程(ccat、ccat_engine、openssl)
    在这里插入图片描述
    在这里插入图片描述
    依次导入CCAT、CCAT_Engine、OpenSSL的源码工程链接。

2.2 配置Dbug调试信息

  在“debug工程”右键选择“Debug As \ Debug Configurations”,进入如下配置界面。按照下面图示进行配置:

  1. 配置可执行程序(testapp)的路径
/* 当前测试case的可执行程序路径如下: */
/localhdd/jack/tmp-glibc/work/riscv64-tih-linux/ccat-engine/1.0-r0/ccat-engine-1.0/testapp

在这里插入图片描述

  1. 配置GDB及GDB调试信息

备注:此处配置的工具链必须与开发板上的工具链保持一致,建议直接使用我们导出的工具链

工具链的位置:/localhdd/jack/tih_toolchain/sysroots/x86_64-tih_sdk-linux/usr/bin/riscv64-tih-linux/riscv64-tih-linux-gdb
ccat.gdbinit:记录了GDB的命令,启动GDB时会解析该命令,该文件的内容如下:

/* 设置共享库的搜索路径 */
set solib-absolute-prefix /share/samba/public/shared/jack/rootfs_gmssl/

/* 设置ccat源码的替换搜索路径 */
set substitute-path /usr/src/debug/ccat/1.0-r0/ccat/ /localhdd/jack/tmp-glibc/work/t690mp_evb2_va-tih-linux/ccat/1.0-r0/ccat/

/* 设置ccat-engine源码的替换搜索路径 */
set substitute-path /usr/src/debug/ccat-engine/1.0-r0/ccat-engine-1.0/ /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/ccat-engine/1.0-r0/ccat-engine-1.0/

/* 设置OpenSSL源码的替换搜索路径 */
set substitute-path /usr/src/debug/openssl/1.1.1q-r0/openssl-1.1.1q/ /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/openssl/1.1.1q-r0/git/

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

  1. 设置共享库的搜索路径

在这里插入图片描述

  1. 设置IP及端口号
    在这里插入图片描述

3. 调试

  1. 开发板启动成功之后,启动 qat_service 服务(命令:/etc/init.d/qat_service start
root@t690mp-evb2-va:~# /etc/init.d/qat_service start
usdm_drv: loading out-of-tree module taints kernel.
usdm_drv: Loading USDM Module Version 0.7.1 ...
usdm_drv: IOCTLs: c0507100, c0507101, 7102, c0047104
tih_ccat_platform tih_ccat_platform.0: c1xxx - adf_probe
tih_ccat_platform tih_ccat_platform.0: create asym rings - section:KERNEL - name:Cy0BankNumber - bank[0]
tih_ccat_platform tih_ccat_platform.0: create  sym rings - section:KERNEL - name:Cy0BankNumber - bank[0]
tih_ccat_platform tih_ccat_platform.0: create asym rings - section:KERNEL - name:Cy1BankNumber - bank[1]
tih_ccat_platform tih_ccat_platform.0: create  sym rings - section:KERNEL - name:Cy1BankNumber - bank[1]
Restarting all dQevices.AT: Stopping all acceleration devices.

Processing /etc/c1xxx_dev0.conf
tih_ccat_platform tih_ccat_platform.0: init device with bundle[0] information
tih_ccat_platform tih_ccat_platform.0: init bundle[0] ring - ring number:4
tih_ccat_platform tih_ccat_platform.0: init the bundle[0] with instance:CRYPTO
tih_ccat_platform tih_ccat_platform.0: init the bundle[0] with instance:COMP
tih_ccat_platform tih_ccat_platform.0: init device with bundle[1] information
tih_ccat_platform tih_ccat_platform.0: init bundle[1] ring - ring number:4
tih_ccat_platform tih_ccat_platform.0: init the bundle[1] with instance:CRYPTO
tih_ccat_platform tih_ccat_platform.0: init the bundle[1] with instance:COMP
tih_ccat_platform tih_ccat_platform.0: Process section GENERAL
tih_ccat_platform tih_ccat_platform.0: Process section KERNEL
tih_ccat_platform tih_ccat_platform.0: Process section SSL
tih_ccat_platform tih_ccat_platform.0: add derived section:SSL_INT_0 to the adf cfg
tih_ccat_platform tih_ccat_platform.0: copy section:SSL to the derived section:SSL_INT_0
tih_ccat_platform tih_ccat_platform.0: Set InterruptCoalescingEnabled value with error -14
tih_ccat_platform tih_ccat_platform.0: Set InterruptCoalescingTimerNs value with error -14
tih_ccat_platform tih_ccat_platform.0: Set InterruptCoalescingNumResponses value with error -14
tih_ccat_platform tih_ccat_platform.0: Clean up section GENERAL
tih_ccat_platform tih_ccat_platform.0: Clean up section KERNEL
tih_ccat_platform tih_ccat_platform.0: Clean up section SSL
tih_ccat_platform tih_ccat_platform.0: Clean up section Accelerator0
tih_ccat_platform tih_ccat_platform.0: Starting acceleration device ccat_dev0.
tih_ccat_platform tih_ccat_platform.0: bundle(uio)=0, hw_bundle_number(bank)=0
uio dts irq number matched
tih_ccat_platform tih_ccat_platform.0: bundle(uio)=1, hw_bundle_number(bank)=1
uio dts irq number matched
Checking status of all devices.
There is 1 QAT acceleration device(s) in the system:
 ccat_dev0 - type: c1xxx,  instance_id: 0,  #num_logical_accel:1 #banks_per_accle:2,  device sysname: tih_ccat_platform.0,  #accel: 11 #engines: 120,  state: up
  1. 查询开发板的IP地址(命令:ifconfig),如下当前开发板的IP地址为:192.168.100.126
root@t690mp-evb2-va:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500  metric 1
        inet 192.168.100.126  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::2c61:41ff:fe8b:df4e  prefixlen 64  scopeid 0x20<link>
        inet6 fdfc:4fec:614e:0:2c61:41ff:fe8b:df4e  prefixlen 64  scopeid 0x0<global>
        ether 2e:61:41:8b:df:4e  txqueuelen 1000  (Ethernet)
        RX packets 27875  bytes 19035304 (18.1 MiB)
        RX errors 0  dropped 236  overruns 0  frame 0
        TX packets 6772  bytes 1078732 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 113  memory 0x5000000-50fffff

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536  metric 1
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  1. 在开发板(串口终端)上运行gdbserver,启动gdbserver服务,如下所示,此时开发板一直侦听端口1234
    命令gdbserver 192.168.100.126:1234 testapp -v aes128_ecb
    说明
      1)192.168.100.126 :终端的IP地址
      2)1234:端口号(随意设置,只要与gdb端保持一致即可)
      3)testapp:待调试的可执行程序
      4)-v aes128_ecb:可执行程序的参数
root@t690mp-evb2-va:~# gdbserver 192.168.100.126:1234 testapp -v aes128_ecb
Process testapp created; pid = 475
Listening on port 1234
  1. 主机端修改配置信息,配置开发板的IP地址,如下:
    在这里插入图片描述
  2. 主机端,启动调试,如下图所示:
    在这里插入图片描述
  3. 主机端启动成功之后,开发板串口的打印信息如下:
    在这里插入图片描述
    至此,说明整个连接已通,可以愉快的调试代码了。

4. 手动调试过程

  章节3中介绍了,怎么使用Eclipse调试的方式,也可以使用纯手动的方式进行调试,这里也记录一下这种调试过程(假设板子都已经正常运行,此处仅描述 gdb 的过程)。

  1. 在串口终端执行gdbsever命令 gdbserver 192.168.100.49:1234 testapp -engine ccatengine -v sm2
    在这里插入图片描述
  2. 服务器端,开启一个新的终端,执行命令:/localhdd/jack/tih_toolchain/sysroots/x86_64-tih_sdk-linux/usr/bin/riscv64-tih-linux/riscv64-tih-linux-gdb /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/ccat-engine/1.0-r0/ccat-engine-1.0/testapp
  3. 输入命令:target remote 192.168.100.49:1234
  4. 修改查询共享库的路径:set solib-absolute-prefix /share/samba/public/shared/jack/rootfs_gmssl/
  5. 设置CCAT源码的路径:set substitute-path /usr/src/debug/ccat/1.0-r0/ccat/ /localhdd/jack/tmp-glibc/work/t690mp_evb2_va-tih-linux/ccat/1.0-r0/ccat/
  6. 设置Engine源码的路径:set substitute-path /usr/src/debug/ccat-engine/1.0-r0/ccat-engine-1.0/ /home/jack/svn_project/t690/sdk/trunk/linux/pkg/tih/lib/ccat_engine/
  7. 设置GMSSL源码的路径:
    set substitute-path /usr/src/debug/openssl/1.1.1q-r0/openssl-1.1.1q/ /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/openssl/1.1.1q-r0/git/
  8. 设置断点 b main
  9. 后面就可以使用gdb的命令进行愉快的调试了。整过过程执行代码如下所示:
jack@fw02:~$ /localhdd/jack/tih_toolchain/sysroots/x86_64-tih_sdk-linux/usr/bin/riscv64-tih-linux/riscv64-tih-linux-gdb /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/ccat-engine/1.0-r0/ccat-engine-1.0/testapp
GNU gdb (GDB) 10.2
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=x86_64-tih_sdk-linux --target=riscv64-tih-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/ccat-engine/1.0-r0/ccat-engine-1.0/testapp...
(gdb) target remote 192.168.100.49:1234
Remote debugging using 192.168.100.49:1234
Reading /lib/ld-linux-riscv64-lp64d.so.1 from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /lib/ld-linux-riscv64-lp64d.so.1 from remote target...
Reading symbols from target:/lib/ld-linux-riscv64-lp64d.so.1...
Reading /lib/ld-2.31.so from remote target...
Reading /lib/.debug/ld-2.31.so from remote target...
Reading /lib/.debug/ld-2.31.so from remote target...
Reading symbols from target:/lib/.debug/ld-2.31.so...
0x0000001555557020 in _start () from target:/lib/ld-linux-riscv64-lp64d.so.1
(gdb) set solib-absolute-prefix /share/samba/public/shared/jack/rootfs_gmssl/
warning: .dynamic section for "/share/samba/public/shared/jack/rootfs_gmssl/lib/ld-linux-riscv64-lp64d.so.1" is not at the expected address (wrong library or version mismatch?)
Reading symbols from /share/samba/public/shared/jack/rootfs_gmssl/lib/ld-linux-riscv64-lp64d.so.1...
Reading symbols from /share/samba/public/shared/jack/rootfs_gmssl/lib/.debug/ld-2.31.so...
Reading symbols from /share/samba/public/shared/jack/rootfs_gmssl/lib/ld-linux-riscv64-lp64d.so.1...
Reading symbols from /share/samba/public/shared/jack/rootfs_gmssl/lib/.debug/ld-2.31.so...
(gdb) set substitute-path /usr/src/debug/ccat/1.0-r0/ccat/ /localhdd/jack/tmp-glibc/work/t690mp_evb2_va-tih-linux/ccat/1.0-r0/ccat/
(gdb) set substitute-path /usr/src/debug/ccat-engine/1.0-r0/ccat-engine-1.0/ /home/jack/svn_project/t690/sdk/trunk/linux/pkg/tih/lib/ccat_engine/
(gdb) set substitute-path /usr/src/debug/openssl/1.1.1q-r0/openssl-1.1.1q/ /localhdd/jack/tmp-glibc/work/riscv64-tih-linux/openssl/1.1.1q-r0/git/
(gdb) 
(gdb) 
(gdb) 
(gdb) b main
Breakpoint 1 at 0x2aaaaafbc0: file test/main.c, line 1557.
(gdb) c
Continuing.

Breakpoint 1, main (argc=5, argv=0x3ffffffd28) at test/main.c:1557
1557	{
(gdb) n
1559	    tls_version = default_tls_string;
(gdb) 
1560	    digest_kdf = default_digest_string;
(gdb) 
1564	    for (i = 1; i < argc; i++) {
(gdb) r
The "remote" target does not support "run".  Try "help target" or "continue".
(gdb) c
Continuing.
[Inferior 1 (process 503) exited normally]
(gdb) q
jack@fw02:~$ 

4. 总结

  1. gdb与gdbserver必须使用同一个版本的。
  2. 在使用Eclipse进行调试时,当配置文件中指定了共享库的搜索路径之后,在ccat.gdbinit中可以不再指定共享库的搜索路径了。但是若在该文件中指定共享库的搜索路径,则启动调试到调试环境就绪所消耗的时间要比在配置选项中指定共享库所消耗的时间少的多。
    在这里插入图片描述

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

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

相关文章

3D模型人物换装系统二(优化材质球合批降低DrawCall)

3D模型人物换装系统 介绍原理合批材质对比没有合批材质核心代码完整代码修改总结 介绍 本文使用2018.4.4和2020.3.26进行的测试 本文没有考虑法线贴图合并的问题&#xff0c;因为生成法线贴图有点问题&#xff0c;放在下一篇文章解决在进行优化 如果这里不太明白换装的流程可以…

基于物理的多偏置射频大信号氮化镓HEMT建模和参数提取流程

标题&#xff1a;Physics-Based Multi-Bias RF Large-Signal GaN HEMT Modeling and Parameter Extraction Flow 来源&#xff1a;JOURNAL OF THE ELECTRON DEVICES SOCIETY 摘要 本文展示了一种一致的Al镓氮化物&#xff08;AlGaN&#xff09;/氮化镓&#xff08;GaN&#x…

CSS省略号n行公式

记得改图中的n&#xff0c;这是你需要的几行省略号&#xff01;复制中间的5行就行了。 .text {overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: n; //n为你想省略的行数&#xff0c;需要改-webkit-box-orient: vertical; } 这是…

卷积神经网络(1)

目录 卷积 1 自定义二维卷积算子 2 自定义带步长和零填充的二维卷积算子 3 实现图像边缘检测 4 自定义卷积层算子和汇聚层算子 4.1 卷积算子 4.2 汇聚层算子 5 学习torch.nn.Conv2d()、torch.nn.MaxPool2d()&#xff1b;torch.nn.avg_pool2d()&#xff0c;简要介绍使用方…

时间序列预测实战(十三)定制化数据集FNet模型实现滚动长期预测并可视化结果

论文地址->官方论文代码地址 官方代码地址->官方下载地址Github 个人修改代码地址-> 个人修改版本呢的下载地址CSDN 一、本文介绍 本博客将介绍一种新的时间序列预测模型——FNet&#xff0c;它通过使用傅里叶变换代替自注意力机制&#xff0c;旨在解决传统Transf…

瑞吉外卖Day03

小张推荐:瑞吉外卖Day02 1.启用/禁用员工账号 1.1 思路分析 1.2Controller层 PutMapping()public R<String> update(RequestBody Employee employee, HttpServletRequest request) {log.info(employee.toString());Long emp (Long) request.getSession().getAttribu…

AI毕业设计生成器(基于AI大模型技术开发)

这是一个辅助生成计算机毕业设计的工具&#xff0c;可以自动完成毕业设计的源码。它基于几百个github上面开源的java和python项目&#xff0c;运用tengsorflow技术&#xff0c;训练出了AI大模型。基本实现了计算机毕业设计生成器&#xff0c;能够初步生成Java或python基本源码。…

遇到问题,我该如何提问?

作为IT行业的从业者&#xff0c;我们深知程序员在保障系统安全、数据防护以及网络稳定方面所起到的重要作用。他们是现代社会的护城河&#xff0c;用代码构筑着我们的未来。那程序员的护城河又是什么呢&#xff1f;是技术能力的深度&#xff1f;是对创新的追求&#xff1f;还是…

一些分享| 在线笔记、GIF图片生成方法

文章目录 在线笔记视频转GIF 本片博客旨在挖掘一些好用且免费的在线平台&#xff0c;持续更新中~ 正所谓科技解放双手&#xff0c;使用在线平台可以方便快捷地学习办公&#xff0c;节省时间。 在线笔记 语雀 https://www.yuque.com/dashboard 语雀是笔者用得最长最久的平台了…

Pandas教程(非常详细)(第五部分)

接着Pandas教程&#xff08;非常详细&#xff09;&#xff08;第四部分&#xff09;&#xff0c;继续讲述。 二十五、Pandas sample随机抽样 随机抽样&#xff0c;是统计学中常用的一种方法&#xff0c;它可以帮助我们从大量的数据中快速地构建出一组数据分析模型。在 Pandas…

2.5 CE修改器:寻找数值指针

上一步阐述了如何使用代码替换功能对付变化位置的数据地址&#xff0c;但这种方法往往不能达到预期的效果&#xff0c;所以我们需要学习如何利用指针&#xff0c;在本关的Tutorial.exe窗口下面有两个按钮&#xff0c;一个会改变数值&#xff0c;另一个不但能改变数值而且还会改…

初始MySQL(四)(查询加强练习,多表查询)

目录 查询加强 where加强 order by加强 group by 分页查询 总结 多表查询(重点) 笛卡尔集及其过滤 自连接 子查询 子查询当作临时表 all/any 多列子查询 #先创建三张表 #第一张表 CREATE TABLE dept(deptno MEDIUMINT NOT NULL DEFAULT 0,dname VARCHAR(20) NOT …

js随机生成颜色

封装一个函数 返回一个随机颜色 不传参数或者传true返回十六进制&#xff0c; 传false返回rgb模式 script>function Random(n, m) {if (n > m) {let temp nn mm temp}return Math.floor(Math.random() * (m - n 1)) n}function getRandomColor(flag true) {if (fl…

力扣第647题 回文子串 c++ 动态规划 双指针 附Java代码 注释解释版

题目 647. 回文子串 中等 相关标签 字符串 动态规划 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串…

【中国知名企业高管团队】系列66:老板ROBAM

昨天华研荟为您介绍了厨电领域的TOP企业——方太FOTILE的发展历程&#xff0c;以及作为企一代茅理翔和企二代茅忠群的创业故事。 今天为您介绍同处浙江的老板电器。 一、关于老板电器 以下内容来自老板电器官网介绍&#xff1a; 杭州老板电器股份有限公司创立于1979年&…

学校教的Python根本不够!来看看Python学习路线图

如果只靠学校学的东西去找工作&#xff0c;能找到工作吗&#xff1f; 今天给大家看一个粉丝的真实求职案例&#xff0c;想做Python方面的工作&#xff0c;投了二十几个简历却没人要&#xff0c;心态崩了。为什么没人要&#xff1f;我来告诉你答案。 然后我还会结合我的这些年的…

软件开发项目文档系列之十六如何撰写系统运维方案

前言 项目运维方案是为了确保项目的稳定运行和可持续发展而制定的指导性文档。本文将详细介绍项目运维方案的各个方面&#xff0c;包括硬件和软件基础设施、监控和警报、备份和恢复、安全性、团队组织和沟通等方面。本博客将提供示例和最佳实践&#xff0c;以帮助您更好地理解…

AIGC实战——自编码器(Autoencoder)

AIGC实战——自编码器 0. 前言1. 自编码器原理2. 数据集与模型分析2.1 Fashion-MNIST 数据集2.2 自编码器架构 3. 去噪自编码器3.1 编码器3.2 解码器3.3 连接编码器和解码器3.4 训练自编码器3.5 重建图像 4. 可视化潜空间5. 生成新图像小结系列链接 0. 前言 自编码器 (Autoenc…

【Recap教程】autodesk recap软件的安装、认识与使用

一、autodesk recap概述 1. recap介绍 Autodesk Recap是一款由Autodesk公司推出的三维扫描软件,它能够转换多种数据源(如点云、激光雷达、照片)为可视的三维模型。该软件的使用使得用户可以更容易地生成高质量、完整的三维模型。Autodesk Recap通常用于建筑、土木工程、汽…

④【数据查询】MySQL查询语句,拿来即用。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MySQL查询操作 ④【数据查询】MySQL查询语句&a…