[ RK3566-Android11 ] 关于 RK628F 驱动移植以及调试说明

问题描述

我这个项目的SDK比较老,移植RK628F最新驱动的调试过程,踩了很多坑,希望大家别踩坑。


解决方案:

首先在FTP上下载最新的RK628的驱动 rk628-for-all-v27-240730 版本。
下载完后 不要直接替换,不要直接替换,不要直接替换,重要的事情说三遍!!!
按照一下移植过程同步移植。

U-boot部份:
1.先将RK628\rk628-for-all\v27-240730\kernel\rk628_for_all_v27_240730\src_rk628-for-all-kernel-v26-240730\u-boot\drivers\video\drm\rk628下整个rk628文件夹复制到u-boot\drivers\video\drm下。

2.打入RK628\rk628-for-all\v27-240730\kernel\rk628_for_all_v27_240730\patch_rk628-for-all-kernel-v26-240730\u-boot下的三个补丁。
一个是Kconfig和Makefile添加编译rk628。
一个是u-boot\drivers\video\drm\dw_hdmi.c相关改动。
另外一个rk628添加文件不用管它。

3.在u-boot\configs下找到rk3566.config索引到rk3568_defconfig,添加CONFIG_DRM_ROCKCHIP_RK628=y编译 RK628驱动。

CONFIG_DRM_ROCKCHIP_LVDS=y
CONFIG_DRM_ROCKCHIP_RGB=y
+CONFIG_DRM_ROCKCHIP_RK628=y
CONFIG_ROCKCHIP_CUBIC_LUT_SIZE=9

Kernel部分:
按照如下参考这个说明:

android 路径下补丁主要是针对rk628音频部分  不加   

1. kernel\arch 路径下的主要是dts 和config宏的修改  
       dts 是rk628的demo 作为参考。 替不替换都可以 
       config宏的修改一定要加上去。 

2. kenrel/Documentation  不加  

3. kernel/include  不加 

4.kernel\drivers\clk  不加 

4. kernel\drivers\misc  rk628显示部分 核心文件 
      kernel\drivers\misc\rk628 直接替换  
      kernel\drivers\misc\Kconfig Makefile 参考补丁手动加进去 主要是针对rk628 编译声明 宏声明 

5.kernel\drivers\media  rk628 输入部分的核心文件 主要针对camera  不加  

6. 以下路径文件 参考补丁手动加进去
          kernel\drivers\gpu   hdmi强制输出固定分辨率  绕过读edid流程
          kernel\drivers\i2c     提前i2c设备的注册 以加快rk628的初始化  
          kernel\drivers\base  增加宏主要是为了实现regmap文件结点可以写628寄存器 
          kernel\drivers\pwm  提前pwm设备的注册 以加快rk628的初始化 
          kernel\drivers\video 提前backlight设备的注册 以加快rk628的初始化

1.首先打上第六点的三个补丁,分别是:
0130-rk628-for-all-Call-rockchip_pwm_driver_init-and-pwm_.patch
0001-regmap-debugfs-Allow-register-writes-through-debugfs.patch
0126-i2c-rk3x-Call-rk3x_i2c_driver_init-early-when-CONFIG.patch

2.移植第四点的rk628核心驱动。直接将
rk628-for-all\v27-240730\kernel\rk628_for_all_v27_240730\src_rk628-for-all-kernel-v26-240730\kernel\drivers\misc\rk628整个文件移植到kernel\drivers\misc下
对应kernel\drivers\miscKconfig增加如下:

source "drivers/misc/ocxl/Kconfig"
+source "drivers/misc/rk628/Kconfig"
source "drivers/misc/cardreader/Kconfig"

对应kernel\drivers\misc\Makefile增加如下:

obj-$(CONFIG_RK803)		+= rk803.o
obj-$(CONFIG_ENC_SW2001) 	+= translogic.o
+obj-y				+= rk628/

3.打上rk628-for-all\v27-240730\kernel\rk628_for_all_v27_240730\patch_rk628-for-all-kernel-v26-240730\kernel\0190-drm-bridge-synopsys-Support-hdmi-force-output-kernel-4-19.patch补丁
涉及
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
include/drm/bridge/dw_hdmi.h

4.打上强制4K输出补丁和强制输出RGB888格式。
强制4K输出补丁:
在这里插入图片描述
rk3566-evb1-ddr4-v10.dts

#include "rk3566-evb1-ddr4-v10.dtsi"
#include "rk3568-android.dtsi"
++#include <dt-bindings/display/rockchip_vop.h> //图层 ID 定义头文件

++&vp0 { //x 取决于使用的 vp id,如 vp0
++    rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER0 | 1 << ROCKCHIP_VOP2_ESMART0 | 1 <<
++    ROCKCHIP_VOP2_SMART0 | 1 << ROCKCHIP_VOP2_CLUSTER1 | 1 << ROCKCHIP_VOP2_ESMART1 | 1 <<
++    ROCKCHIP_VOP2_SMART1)>;
++    rockchip,primary-plane = <ROCKCHIP_VOP2_SMART0>;
++};

rk3568 force-output 4k.txt 补丁

//u-boot:
//uboot阶段需要将hdmi版本协议切到2.0,强制打开SCRAMBLER
diff --git a/drivers/video/drm/dw_hdmi.c b/drivers/video/drm/dw_hdmi.c
index 10a593870a..cb4a4a3334 100644
--- a/drivers/video/drm/dw_hdmi.c
+++ b/drivers/video/drm/dw_hdmi.c
@@ -820,14 +820,7 @@ static const struct dw_hdmi_phy_data dw_hdmi_phys[] = {
 static int rockchip_dw_hdmi_scrambling_enable(struct dw_hdmi *hdmi,
                                              int enable)
 {
-       u8 stat;
-
-       drm_scdc_readb(&hdmi->adap, SCDC_TMDS_CONFIG, &stat);
-
-       if (stat < 0) {
-               debug("Failed to read tmds config\n");
-               return false;
-       }
+       u8 stat = 0;

        if (enable == 1) {
                /* Write on Rx the bit Scrambling_Enable, register 0x20 */
@@ -1116,7 +1109,6 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
        }

        /* Scrambling Control */
-       if (hdmi_info->scdc.supported) {
                if (vmode->mtmdsclock > 340000000 ||
                    (hdmi_info->scdc.scrambling.low_rates &&
                     hdmi->scramble_low_rates)) {
@@ -1127,7 +1119,6 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
                } else {
                        rockchip_dw_hdmi_scrambling_enable(hdmi, 0);
                }
-       }

        /* Set up horizontal active pixel width */
        hdmi_writeb(hdmi, hdisplay >> 8, HDMI_FC_INHACTV1);

//强制输出3840x2160@60,这个vic mode为97. 
@@ -2430,13 +2421,15 @@ int rockchip_dw_hdmi_get_timing(struct display_state *state)
        unsigned int bus_format;
        unsigned long enc_out_encoding;
        struct overscan *overscan = &conn_state->overscan;
-       const u8 def_modes_vic[6] = {4, 16, 2, 17, 31, 19};
+       const u8 def_modes_vic[1] = {97};

        if (!hdmi)
                return -EFAULT;

        ret = drm_do_get_edid(&hdmi->adap, conn_state->edid);

+       ret = -EFAULT;  
+
        if (!ret) {
                hdmi->sink_is_hdmi =
                        drm_detect_hdmi_monitor(edid);

//强制修改bus_format为RGB888
@@ -2469,6 +2462,8 @@ int rockchip_dw_hdmi_get_timing(struct display_state *state)
        drm_rk_selete_output(&hdmi->edid_data, conn_state, &bus_format,
                             overscan, hdmi->dev_type, hdmi->output_bus_format_rgb);

+       bus_format = MEDIA_BUS_FMT_RGB888_1X24;
+
        *mode = *hdmi->edid_data.preferred_mode;
        hdmi->vic = drm_match_cea_mode(mode);

//设置为HPD为高电平。  
@@ -2525,6 +2520,8 @@ int rockchip_dw_hdmi_detect(struct display_state *state)
        if (!hdmi)
                return -EFAULT;

+       return connector_status_connected;
+
        ret = dw_hdmi_detect_hotplug(hdmi, state);

        return ret;


//kernel:
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index ee7f83a81016..966ab224425d 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -202,40 +202,12 @@ static const u16 csc_coeff_full_to_limited[3][4] = {
 };

 static const struct drm_display_mode dw_hdmi_default_modes[] = {
-       /* 4 - 1280x720@60Hz 16:9 */
-       { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390,
-                  1430, 1650, 0, 720, 725, 730, 750, 0,
-                  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
-         .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-       /* 16 - 1920x1080@60Hz 16:9 */
-       { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
-                  2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
-                  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
-         .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-       /* 31 - 1920x1080@50Hz 16:9 */
-       { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448,
-                  2492, 2640, 0, 1080, 1084, 1089, 1125, 0,
-                  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
-         .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-       /* 19 - 1280x720@50Hz 16:9 */
-       { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1720,
-                  1760, 1980, 0, 720, 725, 730, 750, 0,
-                  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
-         .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
-       /* 0x10 - 1024x768@60Hz */
-       { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048,
-                  1184, 1344, 0,  768, 771, 777, 806, 0,
-                  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
-       /* 17 - 720x576@50Hz 4:3 */
-       { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
-                  796, 864, 0, 576, 581, 586, 625, 0,
-                  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
-         .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
-       /* 2 - 720x480@60Hz 4:3 */
-       { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,
-                  798, 858, 0, 480, 489, 495, 525, 0,
-                  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
-         .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
+       /* 97 - 3840x2160@60Hz 16:9 */
+        { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 594000, 3840, 4016,
+                   4104, 4400, 0, 2160, 2168, 2178, 2250, 0,
+                   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
+          .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
+
 };

 struct hdmi_vmode {

//强制打开hdmi 2.0 scramble。
@@ -1478,6 +1450,10 @@ static int hdmi_phy_i2c_read(struct dw_hdmi *hdmi, unsigned char addr)
 static bool dw_hdmi_support_scdc(struct dw_hdmi *hdmi)
 {
        struct drm_display_info *display = &hdmi->connector.display_info;
+       unsigned long mtmdsclock = hdmi->hdmi_data.video_mode.mtmdsclock;
+
+       if (mtmdsclock > HDMI14_MAX_TMDSCLK)
+               return true;  

        /* Completely disable SCDC support for older controllers */
        if (hdmi->version < 0x200a)
//将状态强制设置为永久连接的状态
@@ -2722,6 +2698,8 @@ dw_hdmi_connector_detect(struct drm_connector *connector, bool force)
                                             connector);
        enum drm_connector_status result;

+       return connector_status_connected;
+
        if (!hdmi->force_logo) {
                mutex_lock(&hdmi->mutex);
                hdmi->force = DRM_FORCE_UNSPECIFIED;
//走强制输出的流程 
@@ -2792,6 +2770,7 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
                return 0;

        edid = drm_get_edid(connector, hdmi->ddc);
+       edid = NULL;  
        if (edid) {
                dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]\n",
                        edid->width_cm, edid->height_cm);
//初始化时 若rk628没有开始初始化,则phy存在没有拉高的场景
@@ -3985,7 +3964,7 @@ __dw_hdmi_probe(struct platform_device *pdev,

        hdmi->initialized = false;
        ret = hdmi_readb(hdmi, HDMI_PHY_STAT0);
-       if (((ret & HDMI_PHY_TX_PHY_LOCK) && (ret & HDMI_PHY_HPD) &&
+       if (((ret & HDMI_PHY_TX_PHY_LOCK) &&
             hdmi_readb(hdmi, HDMI_FC_EXCTRLDUR)) || hdmi->force_logo) {
                hdmi->mc_clkdis = hdmi_readb(hdmi, HDMI_MC_CLKDIS);
                hdmi->disabled = false;

//即假设在HDMI probe阶段已经将hpd脚和rxsence中断并且rk628端还没有拉高hpd脚,则hdmi会强制关闭
@@ -4072,8 +4051,6 @@ __dw_hdmi_probe(struct platform_device *pdev,
        }

        dw_hdmi_setup_i2c(hdmi);
-       if (hdmi->phy.ops->setup_hpd)
-               hdmi->phy.ops->setup_hpd(hdmi, hdmi->phy.data);

        if (hdmi->version >= 0x200a)
                hdmi->connector.ycbcr_420_allowed =

//强制输出可能导致match不上,出现显示不了kernel logo
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
index 401528583682..2a36b0a07ffc 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -770,8 +770,7 @@ static int setup_initial_state(struct drm_device *drm_dev,
                    /* we just need to focus on DRM_MODE_FLAG_ALL flag, so here
                     * we compare mode->flags with set->flags & DRM_MODE_FLAG_ALL.
                     */
-                   mode->flags == (set->flags & DRM_MODE_FLAG_ALL) &&
-                   mode->picture_aspect_ratio == set->picture_aspect_ratio) {
+                   mode->flags == (set->flags & DRM_MODE_FLAG_ALL)) {
                        found = 1;
                        match = 1;
                        break;


强制输出RGB888格式补丁
kernel\drivers\gpu\drm\rockchip\rockchip_drm_drv.c添加

	if (tmdsclock > max_tmds_clock) {
		if (max_tmds_clock >= 594000) {
			color_depth = 8;
		} else if (max_tmds_clock > 340000) {
			if (drm_mode_is_420(info, mode) || tmdsclock >= 594000)
				*color_format = DRM_HDMI_OUTPUT_YCBCR420;
		} else {
			color_depth = 8;
			if (drm_mode_is_420(info, mode) || tmdsclock >= 594000)
				*color_format = DRM_HDMI_OUTPUT_YCBCR420;
		}
	}

++	*color_format = DRM_HDMI_OUTPUT_DEFAULT_RGB;

	if (*color_format == DRM_HDMI_OUTPUT_YCBCR420) {
		*output_mode = ROCKCHIP_OUT_MODE_YUV420;
		if (color_depth > 8)
			*bus_format = MEDIA_BUS_FMT_UYYVYY10_0_5X30;
		else
			*bus_format = MEDIA_BUS_FMT_UYYVYY8_0_5X24;
		*bus_width = color_depth / 2;
		hdmi->output_bus_format = *bus_format;
	} else {
		*output_mode = ROCKCHIP_OUT_MODE_AAAA;

5.修改 kernel/.config 编译配置

CONFIG_DRM_ROCKCHIP_RK618=y
-- CONFIG_DRM_ROCKCHIP_RK628=y
++ # CONFIG_DRM_ROCKCHIP_RK628 is not set

#
# RK628 misc driver
#
++ CONFIG_RK628_MISC=y
++ CONFIG_RK628_MISC_HDMITX=y
++ CONFIG_ROCKCHIP_THUNDER_BOOT_RK628=y

6.dts配置分享
rk3566-evb1-ddr4-v10.dtsi

&i2c4_rk628 {
		status = "okay";
		// 屏背光脚
		panel-backlight = <&backlight>;
		// 屏使能光脚
		panel-power-supply = <&vcc3v3_lcd0_n>;
		// panel-enable-gpios = <&gpioX RK_PXX GPIO_ACTIVE_HIGH>;
		panel-reset-delay-ms = <10>;
		panel-enable-delay-ms = <150>;
		panel-prepare-delay-ms = <60>;
		panel-unprepare-delay-ms = <10>;
		panel-disable-delay-ms = <60>;
		// 我这里是外挂时钟 不需要24M时钟
		// pinctrl-names = "default";
		// pinctrl-0 = <&rk628_reset &refclk_pins>;
		// assigned-clocks = <&pmucru CLK_WIFI>;
		// assigned-clock-rates = <24000000>;
		// clocks = <&pmucru CLK_WIFI>;
		// clock-names = "soc_24M";

		rk628-hdmi-in;
		rk628-gvi-out {
			/* "rgb666"
			 * "rgb888"
			 * "rgb101010"
			 * "yuyv8"
			 * "yuyv10"
			 */
			bus-format = "rgb888";
			gvi,lanes = <8>;
			rockchip,division-mode;
			// rockchip, gvi-frm-rst;
			status = "okay";
		};

		display-timings {
			src-timing {
				clock-frequency = <594000000>;
				hactive = <3840>;
				vactive = <2160>;
				hback-porch = <296>;
				hfront-porch = <176>;
				vback-porch = <72>;
				vfront-porch = <8>;
				hsync-len = <88>;
				vsync-len = <10>;
				hsync-active = <1>;
				vsync-active = <1>;
				de-active = <0>;
				pixelclk-active = <0>;
			};

			dst-timing {
				clock-frequency = <594000000>;
				hactive = <3840>;
				vactive = <2160>;
				hback-porch = <296>;
				hfront-porch = <176>;
				vback-porch = <72>;
				vfront-porch = <8>;
				hsync-len = <88>;
				vsync-len = <10>;
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <0>;
				pixelclk-active = <0>;
			};
	    };
};

&hdmi {
	status = "okay";
	force-bus-format = <MEDIA_BUS_FMT_RGB888_1X24>;
	force-output;
	force_timing {
		clock-frequency = <594000000>;
		hactive = <3840>;
		vactive = <2160>;
		hback-porch = <296>;
		hfront-porch = <176>;
		vback-porch = <72>;
		vfront-porch = <8>;
		hsync-len = <88>;
		vsync-len = <10>;
		hsync-active = <1>;
		vsync-active = <1>;
		de-active = <0>;
		pixelclk-active = <0>;
	};
};

&hdmi_in_vp0 {
	status = "okay";
};

&hdmi_in_vp1 {
	status = "disabled";
};

&hdmi_sound {
	status = "okay";
};

&route_hdmi {
	status = "okay";
	bridge = <&i2c4_rk628>;
	force-bus-format = <MEDIA_BUS_FMT_RGB888_1X24>;
	force-output;
	force_timing {
		clock-frequency = <594000000>;
		hactive = <3840>;
		vactive = <2160>;
		hback-porch = <296>;
		hfront-porch = <176>;
		vback-porch = <72>;
		vfront-porch = <8>;
		hsync-len = <88>;
		vsync-len = <10>;
		hsync-active = <1>;
		vsync-active = <1>;
		de-active = <0>;
		pixelclk-active = <0>;
	};
};

rk3568-evb.dtsi

&i2c4 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&i2c4m0_xfer>;
	clock-frequency = <400000>;

	i2c4_rk628: rk628@50 {
		status = "okay";
		compatible = "rockchip,rk628";
		reg = <0x50>;
		// INT
		interrupt-parent = <&gpioX>;
		interrupts = <RK_PXX IRQ_TYPE_LEVEL_HIGH>;
		// ENABLE
		enable-gpios = <&gpioX RK_PCXX GPIO_ACTIVE_HIGH>;
		// RESET
		reset-gpios = <&gpioX RK_PXX GPIO_ACTIVE_LOW>;
		#sound-dai-cells = <0>;
		pinctrl-names = "default";
		pinctrl-0 = <&rk628_reset>;
	};
};

&pinctrl {
	rk628 {
		rk628_reset: rk628-reset {
			rockchip,pins = <X RK_PXX RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};
}

最后:如果开机还是黑屏,可以上下电HDMI节点:
echo off > /sys/class/drm/card0-HDMI-A-1/status
echo on > /sys/class/drm/card0-HDMI-A-1/status
上下电如果能出图,那就把dts中的route_hdmi节点disabled。


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

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

相关文章

小琳AI课堂:o1系列模型

大家好&#xff0c;这里是小琳AI课堂&#xff01;今天我们一起来探索OpenAI最新发布的o1系列模型&#xff0c;这可是AI领域的一大突破哦&#xff01; OpenAI o1系列模型技术大揭秘 o1系列模型是基于强化学习&#xff08;RL&#xff09;训练的&#xff0c;包括o1-preview和o1-…

【CSS】选择器(基本选择器、复合选择器、属性匹配选择器、结构伪类选择器、伪元素选择器)

选择器 引入方式基础选择器复合选择器属性匹配选择器结构伪类选择器伪元素选择器 引入方式 1&#xff1a;外联 <!-- css引入方式1&#xff1a;外联 外联与内嵌优先级相同&#xff0c;取决于加载顺序 --><link rel"stylesheet" href"./样式.css"…

起重机检测系统源码分享

起重机检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

直播相关02-录制麦克风声音,QT 信号与槽,自定义信号和槽

一 信号与槽函数 #include "mainwindow.h" #include <QPushButton> #include <iostream> using namespace std;//我们的目的是在 window中加入一个button&#xff0c;当点击这个button后&#xff0c;关闭 MainWindow 。 MainWindow::MainWindow(QWidget …

速通GPT-3:Language Models are Few-Shot Learners全文解读

文章目录 GPT系列论文速通论文实验总览1. 任务设置与测试策略2. 任务类别3. 关键实验结果4. 数据污染与实验局限性5. 总结与贡献 Abstract1. 概括2. 具体分析3. 摘要全文翻译4. 为什么不需要梯度更新或微调⭐ Introduction1. 概括2. 具体分析3. 进一步分析 Approach1. 概括2. 具…

【Unity学习心得】如何制作俯视角射击游戏

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、导入素材二、制作流程 1.制作地图2.实现人物动画和移动脚本3.制作单例模式和对象池4.制作手枪pistol和子弹bullet和子弹壳bulletShell5.制作散弹枪shotgun总…

MMLU-Pro 基准测试数据集上线,含 12k 个跨学科复杂问题,难度提升,更具挑战性!DeepSeek 数学模型一键部署

在大语言模型 (LLM) 蓬勃发展的时代&#xff0c;诸如大规模多任务语言理解 (MMLU) 之类的基准测试&#xff0c;在推动 AI 于不同领域的语言理解与推理能力迈向极限方面&#xff0c;发挥着至关重要的关键作用。 然而&#xff0c;伴随模型的持续改进与优化&#xff0c;LLM 在这些…

Vue路由:Vue router

目录 路由的基本概念 1. 路由 2. 单页应用SPA 3.前端路由的实现方式 3.1Hash模式 3.2History模式 Vue router 4 1.概述 2.安装使用 3.基础用法 3.1路由匹配规则声明 3.2动态路由匹配 3.3路由命名 3.4路由重定向 3.5路由嵌套 3.6命名视图 3.6声明式导航&编程…

el-input设置type=‘number‘和v-model.number的区别

el-input设置typenumber’与设置.number修饰符的区别 1. 设置type‘number’ 使用el-input时想收集数字类型的数据&#xff0c;我们首先会想到typenumber&#xff0c;设置完type为number时会限制我们输入的内容只能为数字&#xff0c;不能为字符/汉字等非数字类型的数值&…

【网络安全】-文件下载漏洞-pikachu

文件操作漏洞包括文件上传漏洞&#xff0c;文件包含漏洞&#xff0c;文件下载漏洞。 文章目录  前言 什么是文件下载漏洞&#xff1f; 1.常见形式&#xff1a; 常见链接形式&#xff1a; 常见参数&#xff1a; 2.利用方式&#xff1a; 3.举例&#xff1a;pikachu不安全的文件…

智能语音技术在人机交互中的应用与发展

摘要&#xff1a;本文主要探讨智能自动语音识别技术与语音合成技术在构建智能口语系统方面的作用。这两项技术实现了人机语音通信&#xff0c;建立起能听能说的智能口语系统。同时&#xff0c;引入开源 AI 智能名片小程序&#xff0c;分析其在智能语音技术应用场景下的意义与发…

使用ESP8266和OLED屏幕实现一个小型电脑性能监控

前言 最近大扫除&#xff0c;发现自己还有几个ESP8266MCU和一个0.96寸的oled小屏幕。又想起最近一直想要买一个屏幕作为性能监控&#xff0c;随机开始自己diy。 硬件&#xff1a; ESP8266 MUColed小屏幕杜邦线可以传输数据的数据线 环境 Windows系统Qt6Arduino Arduino 库…

计算架构模式之负载均衡技巧

通用负载均衡算法 负载均衡算法 -轮询 & 随机 如果服务器挂掉了&#xff0c;那么负载均衡器还是可以感知到的&#xff0c;因为连接已经断掉了。 负载均衡算法-加权轮询 假设你有4核的和8核的&#xff0c;由于你的程序没有办法跑完CPU&#xff0c;那么有可能出现4核的和8核…

Coggle数据科学 | 科大讯飞AI大赛:人岗匹配挑战赛 赛季3

本文来源公众号“Coggle数据科学”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;科大讯飞AI大赛&#xff1a;人岗匹配挑战赛 赛季3 赛题名称&#xff1a;人岗匹配挑战赛 赛季3 赛题类型&#xff1a;自然语言处理、文本匹配 赛题…

Pikachu靶场之csrf

CSRF 跨站请求伪造 CSRF入门及靶场实战 - FreeBuf网络安全行业门户 攻击者伪造恶意链接&#xff0c;诱使用户点击&#xff0c;这个链接附带了用户的认证凭据Cookie、Session等&#xff0c;执行操作如转账。 因为带了cookie、session&#xff0c;服务器认为是用户的行为。借用…

【诉讼流程-健身房-违约认定-私教课-诉讼书前提材料整理-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(2)】

【诉讼流程-健身房-违约-私教课-前期法律流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解&#xff08;2&#xff09;】 &#xff08;1&#xff09;前言说明1、目的2、一个小测试1、更换原教练2、频繁更换教练3、上课估计拖课&#xff0c;占用上课时间&#xff0c;抽烟等。4、以…

谈谈LLM训练中的“过拟合”与“欠拟合”

如今&#xff0c;由于其出色的理解、生成和操纵人类语言的能力&#xff0c;语言模型已经成为焦点。据最新调查数据显示&#xff0c;大概30%的企业计划使用非结构化数据来提高大型语言模型&#xff08;LLM&#xff09;的准确性。在训练这些语言模型时&#xff0c;一个基本挑战是…

知识笔记合集

文章目录 vsCode可以运行c程序却无法运行c程序帆软填报属性不起作用java-实体类日期类型格式化Java-数据库id字段使用雪花算法IDEA-快捷键 vsCode可以运行c程序却无法运行c程序 vsCode中的tasks.json文件中添加"-lstdc" {"tasks": [{"type": &…

【vuetify】v-select 无法正常显示,踩坑记录!

一、上代码 template <v-selectv-model"editedUser.userRole":items"roles"label"角色"item-value"value":rules"[rules.required]" ></v-select>script const editedUser ref({userRole: customer // 设置…

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大&#xff0c;但不同的语言在不同领域都有着自己的优势&#xff0c;为了强强联合&#xff0c;LabVIEW提供了强大的外部程序接口能力&#xff0c;包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等…