Qt应用开发--国产工业开发板T113-i的部署教程

Qt在工业上的使用场景包括工业自动化、嵌入式系统、汽车行业、航空航天、医疗设备、制造业和物联网应用。Qt被用来开发工业设备的用户界面、控制系统、嵌入式应用和其他工业应用,因其跨平台性和丰富的功能而备受青睐。

Qt能够为工业领域带来什么好处:

  • - Qt提供了强大的图形引擎,使开发人员能够创建具有吸引力和高性能的用户界面。 

  • - Qt允许开发人员根据具体需求定制用户界面和功能。这对于满足不同行业和项目的独特需求至关重要,使工业应用能够实现个性化的解决方案

  • - Qt提供了丰富的库和工具,涵盖了各种应用程序开发需求,包括图形、网络通信、多媒体处理、数据存储等。这简化了工业应用程序的开发流程 

  • - Qt可以轻松与各种硬件设备和通信协议集成,这对于工业自动化和控制系统来说非常重要,因为它们需要与各种传感器、执行器和其他工业设备进行通信

本次开发教程的测试板卡来自创龙科技的TLT113-EVM国产工业评估板,基于全志科技T113-i双核ARM Cortex-A7 + 玄铁C906 RISC-V + HiFi4 DSP异构多核处理器设计,ARM Cortex-A7处理器单元主频高达1.2GHz。

评估板由核心板和评估底板组成,核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率100%。同时,评估底板大部分元器件亦采用国产工业级方案。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。

ae082d3b09c99dbef0c894de56027dba.jpeg

T113-i国产工业评估板硬件资源图解

此外,T113-i国产工业开发板的接口资源丰富,能够支持引出双路网口、双路CAN、双路USB、双路RS485、RS232等通信接口,同时引出LVDS LCD、TFT LCD、MIPI LCD、HDMI OUT、CVBS IN/OUT、LINE IN、MIC IN、H/P OUT等音视频多媒体接口,板载WIFI、4G(选配)模块,支持1080P@60fps JPEG/MJPEG视频硬件编码,支持4K@30fps H.265、4K@24fps H.264视频硬件解码,方便用户快速进行产品方案评估与技术预研。

获取详细的T113-i规格书等资料

可长按二维码识别下载

acef7e07f6883d8cb98a37b18b097afd.png

创龙科技的这款T113-i国产工业开发板它提供了Qt的运行环境,可以让我们快速的部署工业领域的用户交互界面,控制系统。

接下来我们来聊聊如何在创龙科技T113-i工业开发板上部署Qt应用。

开发板Qt运行环境

开发板SDK准备
  • 创龙科技的资料中提供了开发板的SDK-T113-i_v1.0.tar.gz,需要解压ubuntu中解压出来:

rice@rice:~$ mkdir t113             //创建t113工作目录,然后将压缩包拷贝到此目录
rice@rice:~$ cd t113
....

rice@rice:~/t113$ tar -zxvf SDK-T113-i_v1.0.tar.gz
rice@rice:~/t113$ cd T113-i_v1.0/
rice@rice:~/t113/T113-i_v1.0$ ls
brandy  buildroot  device  install_tools.sh  out       rtos-dsp  tools
build   build.sh   kernel  platform          test
  • 安装依赖软件,创龙科技提供了安装脚本:install_tools.sh,我们执行该脚本即可完成依赖工具的安装:

rice@rice:~/t113/T113-i_v1.0$ ./install_tools.sh
[sudo] password for rice: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
texinfo is already the newest version (6.5.0.dfsg.1-2).
0 upgraded, 0 newly installed, 0 to remove and 121 not upgraded.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
pkg-config is already the newest version (0.29.1-0ubuntu2).
0 upgraded, 0 newly installed, 0 to remove and 121 not upgraded.
Reading package lists... Done

......
  • 解压Buildroot dl--dl.tar.gz,其为 Buildroot dl 目录压缩包,用于存放从官网下载的开源软件包:

rice@rice:~/t113$ tar -xvf dl.tar.gz -C ~/t113/buildroot/buildroot-201902/
构建Qt固件
  • 在编译固件前,先清理一下SDK的编译和配置生成文件:

rice@rice:~/t113/T113-i_v1.0$ ./build.sh distclean
  • 配置linux内核,处理器型号,显示方式,编译器等信息

rice@rice:~/t113/T113-i_v1.0$ ./build.sh config
Welcome to mkscript setup progress
All available platform:
 0. linux
Choice [linux]: 0
All available linux_dev:
 0. bsp
 1. dragonboard
 2. longan
 3. tinyos
Choice [longan]: 2
All available kern_ver:
 0. linux-5.4
Choice [linux-5.4]: 0
All available ic:
 0. t113
 1. t113_i
Choice [t113_i]: 1
All available board:
 0. evb1
 1. evb1_auto
 2. evb1_auto_nand
 3. evb1_auto_nor
 4. tlt113-evm-emmc
 5. tlt113-evm-nand
 6. tlt113-minievm-emmc
 7. tlt113-minievm-nand
Choice [tlt113-evm-nand]: 5
All available output_configs:
 0. hdmi
 1. lvds-lcd
 2. mipi-lcd
 3. tft-lcd
 4. cvbs
Choice [hdmi]: 0
All available flash:
 0. default
 1. nor
Choice [default]: 0
All available build_root:
 0. buildroot-201902
 1. ubuntu
Choice [buildroot-201902]: 0
All available gnueabi:
 0. gnueabi
 1. gnueabihf
Choice [gnueabi]: 0
  • 设置编译的环境变量:

rice@rice:~/t113/T113-i_v1.0$ source ./build/envsetup.sh
  • 我们采用一键编译 SPL、U-Boot、Linux 内核和 buildroot文件系统。

rice@rice:~/t113/T113-i_v1.0$ ./build.sh
ACTION List: mklichee;========
Execute command: mklichee 
INFO: ----------------------------------------
INFO: build lichee ...
INFO: chip: sun8iw20p1
INFO: platform: linux
INFO: kernel: linux-5.4
INFO: board: tlt113-evm-nand
INFO: output: /home/rice/t113/T113-i_v1.0/out/t113_i/tlt113-evm-nand/longan
INFO: ----------------------------------------
INFO: build buildroot ...
Prepare br toolchain gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi.tar.xz...
make: Entering directory '/home/rice/t113/T113-i_v1.0/buildroot/buildroot-201902'

...
  • 编译Qt库,使其开发板固件支持Qt应用运行环境:

rice@rice:~/t113/T113-i_v1.0$ ./build.sh qt
ACTION List: mkqt;========
Execute command: mkqt 
INFO: build Qt ...
INFO: build arm-linux-gnueabi version's Qt
/home/rice/t113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix

.....
  • 打包系统镜像文件,执行之后,可以看到生成的固件文件,它默认生成两个版本的固件,分别是:nand固件和SD卡固件,我们是采用SD卡启动,所以使用SD卡固件。

rice@rice:~/t113/T113-i_v1.0$ ./build.sh pack
ACTION List: mkpack ;========
Execute command: mkpack  
INFO: packing firmware ...
INFO: Use BIN_PATH: /home/rice/t113/T113-i_v1.0/device/config/chips/t113_i/bin
copying tools file
copying configs file
copying product configs file
/home/rice/t113/T113-i_v1.0/out/pack_out/aultls32.fex
/home/rice/t113/T113-i_v1.0/out/pack_out/aultools.fex
/home/rice/t113/T113-i_v1.0/out/pack_out/boot_package.cfg
/home/rice/t113/T113-i_v1.0/out/pack_out/boot_package.fex

...... 

dsp0.fex Len: 0x3fc78
Vdsp0.fex Len: 0x4
BuildImg 0
Dragon execute image.cfg SUCCESS !
----------image is at----------

size:613M  /home/rice/t113/T113-i_v1.0/out/t113_i_linux_tlt113-evm-nand-sdboot_uart0.img

pack finish

运行环境验证

下载运行实例
  • 将编译打包后的固件(t113_i_linux_tlt113-evm-nand-sdboot_uart0.img)放到windows上,通过工具PhoenixCard.exe烧录到SD卡上。将SD卡插到读卡器上,然后插进电脑:

2f84078cfed86d2b79146ce228cec467.jpeg
  • 创龙科技提供了qt的demo,我们将led_control的实例拷贝到板子上:

rice@rice:~/t113/qt-demos/led_control/bin$ scp led_control root@ip:~/
创龙T113-i上运行实例
  • 关闭默认的Qt运行程序,设置qt的环境变量

root@T113-Tronlong:~# killall Launcher
root@T113-Tronlong:~# source /etc/qtenv.sh 
add /dev/input/event1 to Qt Application.
find qt5 installed done
  • 运行实例验证Qt功能,运行效果如图:

root@T113-Tronlong:~# ./led_control

678fc448833c824621d7f3147b571557.jpeg

Qt开发环境

开发环境下载
  • Qt开发环境下载,作者是使用Qt 5.12.0,下载链接:https://download.qt.io/archive/qt/5.12/5.12.0/,Ubuntu需要下载:qt-opensource-linux-x64-5.12.0.run

afabe18ff682dc74e3741ba0c3e7ab84.jpeg
开发环境交叉编译环境配置
  • 配置Debuggers

    • 点击菜单栏"Tools -> Options"

    • 击"Kits -> Debuggers -> Add -> Browse…"

    • 选择目标平台的GDB,路径:/home/rice/t113/T113-i_v1.0/out/t113_i/tlt113-evm-nand/longan/buildroot/host/usr/bin/arm-linux-gnueabi-gdb

bfab09f1d3140b18860ca7117a51e592.jpeg
  • 配置交叉工具链

    • 点击菜单栏"Tools -> Options"

    • 击"Kits -> Compilers -> Add -> GCC -> C++ -> Browse…"

    • 选择目标平台的交叉工具链,路径:/home/rice/t113/T113-i_v1.0/out/t113_i/tlt113-evm-nand/longan/buildroot/host/usr/bin/arm-linux-gnueabi-g++

7adcf7db87d85e1c590f01bfb5b22bdb.jpeg
  • 配置Qt Versions

    • 点击菜单栏"Tools -> Options"

    • 击"Kits -> Qt Versions -> Add -> GCC -> C++ -> Browse…"

    • 选择目标平台的Qt Versions,路径:/home/rice/t113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/bin/qmake

80acdd5b8123ff41ec84fae987a01bc9.jpeg
  • 配置Kits

    • 点击菜单栏"Tools -> Options"

    • 击"Kits -> Kits"

    • 将 Name 修改为"T113",Device type 选择"Generic Linux Device",Compiler 的 C++选择"T113-GCC",Debugger 选择"T113-Debugger",Qt version 选择"T113-qt5",点击 Apply,然后点击 OK 完成配置

6c926e75f6ae1987be58e0f2f7360b1f.jpeg

开发Qt应用

  • 作者开发了一个快速验证硬件功能的,主要功能包含:

  1. 板载LED灯控制,代码实现:

static QString ledPath = "/sys/class/leds/user-led0";

void rice::ledInit()
{
    setLedStatus(0);

    ui->ledPushButton->setText("LED OFF");
    ui->ledPushButton->setStyleSheet("border-width:1px;"
                                     "border-style:solid; "
                                     "border-color:white;"
                                     "background-color:rgba(88, 88, 88, 200)");
}

void rice::ledDeinit()
{

}

bool rice::setLedStatus(int status)
{
    QString cmd = "echo " + QString::number(status) + " > " + ledPath + "/brightness";
    if (system(cmd.toStdString().c_str()) == -1) {
        printf("set led status failed!\n");
        return false;
    }
    return true;
}

int rice::getLedStatus(void)
{
    QString cmd = "cat " + ledPath + "/brightness";
    FILE *fp = popen(cmd.toStdString().c_str(), "r");
    if (fp == nullptr) {
        return -1;
    }

    char led_status[32];
    if (fgets(led_status, sizeof(led_status), fp) == nullptr) {
        printf("fgets error: %s\n", cmd.toStdString().c_str());
        pclose(fp);
        return -1;
    }

    pclose(fp);
    return atoi(led_status);
}

void rice::on_ledPushButton_clicked()
{
    int ledStatus = getLedStatus();
    if (ledStatus == 0) {
        setLedStatus(1);
        ui->ledPushButton->setText("LED ON");
        ui->ledPushButton->setStyleSheet("border-width:1px;"
                                         "border-style:solid; "
                                         "border-color:white;"
                                         "background-color:rgba(00, 205, 00, 255)");
    }
    else {
        setLedStatus(0);
        ui->ledPushButton->setText("LED OFF");
        ui->ledPushButton->setStyleSheet("border-width:1px;"
                                         "border-style:solid; "
                                         "border-color:white;"
                                         "background-color:rgba(88, 88, 88, 200)");
    }
}
  1. 板载按键检测,代码实现:

void rice::keyInit()
{
    keyFd = open(keyPath.toUtf8().data(), O_RDONLY);
    if(keyFd == -1)
    {
        printf("Can not open file(%s)", keyPath.toUtf8().data());
        return;
    }
    ui->keyTextEdit->append("Key Monitor!\n");
    ui->keyTextEdit->append("Key user0 pressed!");

    keyNotify = new QSocketNotifier(this->keyFd, QSocketNotifier::Read, this);
    connect(this->keyNotify, SIGNAL(activated(int)), this, SLOT(keyHandler()));
}

void rice::keyDeinit()
{

}

void rice::keyHandler()
{
    struct input_event buf;

    if(read(keyFd, &buf, sizeof(struct input_event)) > 0)
    {
        if(buf.code == KEY_PROG1 && buf.value == 1)
        {
            ui->keyTextEdit->append("Key user0 pressed!");
        }
    }
}
  1. RTC时钟获取并显示,代码实现:

void rice::dateInit()
{
    struct rtc_time rtc_tm_temp;
    dateFd = open(datePath.toUtf8().data(), O_RDONLY);
    if(dateFd == -1)
    {
        printf("Can not open file(%s)", keyPath.toUtf8().data());
        return;
    }
    if(ioctl(dateFd, RTC_RD_TIME, &rtc_tm_temp) < 0)
    {
        printf("Get date failed");
        return;
    }
    ui->yearLineEdit->setText(QString::number(rtc_tm_temp.tm_year + 1900));
    ui->monthLineEdit->setText(QString::number(rtc_tm_temp.tm_mon + 1));
    ui->dayLineEdit->setText(QString::number(rtc_tm_temp.tm_mday));
}

void rice::dateDeint()
{

}
  1. 网络调试助手,代码实现:

void rice::netInit()
{
    server = new QTcpServer();
    socket = new QTcpSocket();
}

void rice::netDeint()
{

}

void rice::netNewClientConnect()
{
    socket = server->nextPendingConnection();
    connect(socket, &QTcpSocket::readyRead, this, &rice::netNewRcve);
}

void rice::on_netPushButton_clicked()
{
    int port = ui->portLineEdit->text().toInt();
    if(ui->netPushButton->text() == tr("Open"))
    {
        if(ui->typeComboBox->currentText() == tr("Server"))
        {
            connect(server, &QTcpServer::newConnection, this, &rice::netNewClientConnect);
            if(!server->listen(QHostAddress::Any, port))
            {
                printf("Listen failed\n");
                return;
            }
        }
        else if(ui->typeComboBox->currentText() == tr("Client"))
        {
            QString ip = ui->ipComboBox->currentText();
            socket->abort();
            socket->connectToHost(ip, port);

            if(!socket->waitForConnected(3000))
            {
                printf("Connect server failed");
                return;
            }
            connect(socket, &QTcpSocket::readyRead, this, &rice::netNewRcve);
        }
        ui->netPushButton->setText("Close");
    }
    else if(ui->netPushButton->text() == tr("Close"))
    {
        if(ui->typeComboBox->currentText() == tr("Server"))
        {
            socket->abort();
            server->close();
        }
        else if(ui->typeComboBox->currentText() == tr("Client"))
        {
            socket->disconnectFromHost();
        }
        ui->netPushButton->setText("Open");
    }
}

void rice::on_sendPushButton_clicked()
{
    if(socket->isOpen())
    {
        socket->write(ui->sendLineEdit->text().toUtf8().data());
    }
}

void rice::netNewRcve()
{
    ui->recvTextEdit->append(socket->readAll());
}

void rice::on_typeComboBox_currentIndexChanged(const QString &arg1)
{
    if(arg1 == tr("Server"))
    {
        ui->ipComboBox->setEditable(false);
    }
    else
    {
        ui->ipComboBox->setEditable(true);
    }
}

Qt应用验证

  1. 板载LED灯控制验证,当点击开关LED按钮时,LED灯会根据状态亮灭:

14f46fb2d6c19947b2a7c887ecb39e8c.jpeg

a1ee92b02d528c2ccf303fe6b4a9b2db.png

  1. 当应用运行起来时,会获取RTC时间,并显示:

27011ea0d66107815a7adfe7253d26de.jpeg
  1. 当板载按键按下时,窗口会显示按键按下:

2692fd427b13c0340e04863a8d6dcc0a.jpeg
  1. 网络调试助手支持TCP客户端和TCP服务器两种类型,下面演示服务器验证。开发板上设置板子的IP,和端口号,然后通过PC上网络调试助手连接上板子,并克实现数据的收发:

  • 客户端往服务器发送数据

33491c7accc8e6c76504e7915d2854dc.jpeg af4e6e09e6f18e903d016986db9d7f50.jpeg
  • 服务器往客户端发送数据

3689345382df0bc1135e2888390cd740.jpeg 81cb408e6624cb8d1b439622558fbaa6.jpeg

 abd7c8cf3909cc16e70f05c574ba1e36.jpeg

关于创龙科技

创龙科技(Tronlong)始创于2013年,是国内领先的嵌入式产品平台提供商,业务主要涵盖工业核心板、工业评估板、工业单板机、项目服务,总部位于广州科学城,下设独立运营的教仪事业部,在北京、天津、上海、南京、深圳、西安、成都等地设有业务及技术服务中心。

创龙科技10多年来一直专注于ARM、FPGA、DSP异构多核技术开发,坚持“国产 + 进口”双引擎产品战略,是全志、瑞芯微金牌合作伙伴,以及TI、NXP、Xilinx、紫光同创中国官方合作伙伴,为实时系统、现场总线、物联网、人工智能等技术提供应用平台,产品广泛应用于工业自动化、能源电力、仪器仪表、医疗、通信、安防等行业。

d9297e9600183e2711fb9c49ee3776f0.jpeg

1582e9459c96ef6d1f94b70f6dbe5b56.jpeg

d2c384769f44ec7f8bae654a77fa93ec.jpeg

更多咨询,联系创龙科技

销售邮箱:sales@tronlong.com

技术邮箱:support@tronlong.com

创龙总机:020-8998-6280

技术热线:020-3893-9734

创龙官网:www.tronlong.com

技术论坛:www.51ele.net

官方商城:tronlong.tmall.com



25feb64580fac6dc3a4eb5c35ef7d047.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最受欢迎的程序员副业排行榜TOP6

程序员接单的情况并不少见&#xff0c;因为程序员职业工种的特殊性&#xff0c;能够比较快的衔接上新项目和新技术&#xff0c;所以接私活做副业成了许多程序员的不二之选。 程序员的副业是指程序员在业余时间里从事与编程相关的兼职工作&#xff0c;或者是与技术相关的创业项…

【渗透测试】垂直越权(高危)、水平越权(中危)

目录 一、简介1.1 水平越权&#xff08;中危&#xff09;1.2 垂直越权&#xff08;高危&#xff09;1.3 方便记忆方法 二、修复方案2.1 水平越权修复2.2 垂直越权修复 一、简介 1.1 水平越权&#xff08;中危&#xff09; 漏洞危害&#xff1a; 水平越权 是相同级别&#xff0…

Photoshop图片处理

工具 Photoshop剪映 步骤 打开photoshop 工具主界面 2. 导入素材图片 或者直接将图片拖入主界面 3. 双击图层&#xff0c;将背景图改为可编辑图层 4. 使用多边形套索工具勾画需要搽除的区域 5. 希望删除的区域使用多边形套索工具勾画出来后&#xff0c; 按“del”键&a…

Flink SQL时间属性和窗口介绍

&#xff08;1&#xff09;概述 时间属性&#xff08;time attributes&#xff09;&#xff0c;其实就是每个表模式结构&#xff08;schema&#xff09;的一部分。它可以在创建表的 DDL 里直接定义为一个字段&#xff0c;也可以在 DataStream 转换成表时定义。 一旦定义了时间…

菜鸟打印组件系列-vue3快速接入

文章目录 前言1. 相关名词或语句2. CAINIAO打印组件能力3. 安装与下载4. vue3集成步骤4.1 使用pina 创建websoket相关处理的模块。4.2 创建本地自定义模板&#xff08;要打印的模板以及样式&#xff09;4.3 结合el-table &#xff0c;实现批量打印 总结 前言 文章主要记录不注…

Kubernetes Dashboard 用户名密码方式登录

Author&#xff1a;rab 前言 为了 K8s 集群安全&#xff0c;默认情况下 Dashboard 以 Token 的形式登录的&#xff0c;那如果我们想以用户名/密码的方式登录该怎么操作呢&#xff1f;其实只需要我们创建用户并进行 ClusterRoleBinding 绑定即可&#xff0c;接下来是具体的操作…

【Docker】Docker中 的AUFS、BTRFS、ZFS、存储池概念的详细讲解

前言 作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&…

Jupyter Notebook交互式开源笔记本工具

1、官网 http://jupyter.org/ 2、什么是Jupyter Notebook Jupyter Notebook一个交互式的开源笔记本工具&#xff0c;可以用于编写、运行、和共享代码、文本、图形等内容。 如下文本、代码、图形 支持多种编程语言&#xff0c;包括python、R和Julia等&#xff0c;可以走一个…

【elasticsearch+kibana基于windows docker安装】

创建网络&#xff1a;es和kibana容器互联 docker network create es-net加载镜像 docker pull elasticsearch:7.12.1运行 docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -v $…

【ES专题】ElasticSearch搜索进阶

目录 前言阅读导航前置知识特别提醒笔记正文一、分词器详解1.1 基本概念1.2 分词发生的时期1.3 分词器的组成1.3.1 切词器&#xff1a;Tokenizer1.3.2 词项过滤器&#xff1a;Token Filter1.3.3 字符过滤器&#xff1a;Character Filter 1.4 倒排索引的数据结构 <font color…

Nacos本地修改编译源码2.2.3

下载Nacos源码 由于github访问速度慢&#xff0c;所以在gitee上下载 git clone https://gitee.com/mirrors/Nacos.git切换2.2.3版本 git checkout 2.2.3或者直接下载2.2.3的源码 本地编译 源码导入idea&#xff0c;然后编译 mvn -Dmaven.test.skiptrue -Drat.skiptrue c…

【owt】p2p client mfc 工程梳理

1年前构建的,已经搞不清楚了。所以梳理下,争取能用较新的webrtc版本做测试。最早肯定用这个测试跑通过 【owt】p2p Signaling Server 运行、与OWT-P2P-MFC 交互过程及信令分析官方的mfc客户端 估计是构造了多个不同的webrc版本的客户端

github使用教程

配置Git 首先在本地创建ssh key&#xff1b; $ ssh-keygen -t rsa -C "your_emailyouremail.com"后面的your_emailyouremail.com改为你在github上注册的邮箱&#xff0c;之后会要求确认路径和输入密码&#xff0c;我们这使用默认的一路回车就行。成功的话会在~/下生…

科技云报道:不卷自研大模型,金山办公如何创新生成式AI?

科技云报道原创。 过去大半年里&#xff0c;很多人对大模型的前景寄予厚望。主流观点认为&#xff0c;每个行业、每款产品都可以通过大模型“重做一遍”。 “重做一遍”听起来想象空间很大&#xff0c;但实际上多数大模型产品需要漫长的训练周期和海量资源投入&#xff0c;落…

unraid 安装并设置 zerotier 内网穿透安装 unraid 局域网内其他设备

Read Original 最近看了以下两个文章&#xff0c;感谢发布的各种精彩文章&#xff0c;让我受益匪浅。OPENWRT 的固件在设置了&#xff0c;【自动允许客户端 NAT】后&#xff0c;可以直接访问局域网其他设备&#xff0c;而我 unraid 部署 zerotier 后&#xff0c;只能访问 unra…

2023第一届OPENAIGC开发者大赛圆满收官获奖名单公示

11月4日&#xff0c;历时两个月的「2023第一届开放AIGC开发者大赛」在苏州国际博览中心圆满收官。本次大赛以“AI生成未来”为主题&#xff0c;旨在寻找并推动中国大模型、AIGC领域的创新人才和前沿技术应用。云集来自各大行业与领域的企业、高校等323支优秀团队&#xff0c;共…

力扣 141.环形链表和142.环形链表2

目录 1.环形链表Ⅰ解题思路2.环形链表Ⅰ代码实现3.环形链表Ⅱ解题思路4.环形链表Ⅱ代码实现 1.环形链表Ⅰ解题思路 利用快慢指针&#xff0c;快指针一次走两个&#xff0c;慢指针一次走一个&#xff0c;如果出现了快指针为空或者快指针的next为空的现象则说明不带环&#xff0…

将 UniLinks 与 Flutter 集成(安卓 AppLinks + iOS UniversalLinks)

让我们使用 Flutter Mobile 和 Flutter Web 集成 UniLinks。 一步一步的指导&#xff01; 我是 Pedro Dionsio&#xff0c;是葡萄牙 InspireIT 公司的 Flutter 开发人员&#xff0c;我写这个 UniLinks 教程的座右铭是&#xff1a; Firebase DynamicLinks 已被弃用&#xff0…

vivo 网络端口安全建设技术实践

作者&#xff1a;vivo 互联网安全团队 - Peng Qiankun 随着互联网业务的快速发展&#xff0c;网络攻击的频率和威胁性也在不断增加&#xff0c;端口是应用通信中的门户&#xff0c;它是数据进出应用的必经之路&#xff0c;因此端口安全也逐渐成为了企业内网的重要防线之一&…

【mmcv报错】ModuleNotFoundError: No module named ‘mmcv.runner

跑一个代码需要用到mmcv和mmseg 其中有两行代码&#xff1a; from mmcv.runner import load_checkpoint from mmseg.utils import get_root_logger我先是按照官方推荐的安装方法去安装了mmcv和mmseg pip install -U openmim mim install mmcv它会自动帮你安装mmengine 我的cu…