4.100ASK_V853-PRO开发板支持4寸MIPI屏

news2024/7/6 19:21:36

0.前言

​ 由于之前我们已经适配过RGB屏,如果我们去适配了4寸MIPI屏,那么RGB屏就不能使用了。对于4寸屏购买链接为:

百问网4寸MIPI屏

在这里插入图片描述

LCD_调试指南:https://tina.100ask.net/SdkModule/Linux_LCD_DevelopmentGuide-01/

Display_开发指南:https://tina.100ask.net/SdkModule/Linux_Display_DevelopmentGuide-01/

4寸屏适配资源包:https://forums.100ask.net/uploads/short-url/g7BQ0FPSSnKHSptR2QMjIPwnwno.zip。该资源包里面包含了适配修改后的所有文件(包括驱动程序、设备树和配置文件等)

1.添加新驱动

将驱动程序添加到

内核的lcd驱动目录下:

tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd

uboot的lcd驱动目录下:

tina-v853-open/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/

由于uboot和内核中的屏驱动会存在一些差别,下面分别展示出uboot和内核中不同的屏驱动。具体源文件可以在4寸屏适配资源包中查看。

1.1 uboot驱动程序

驱动程序头文件tft08006.h

#ifndef _TFT08006_H
#define _TFT08006_H

#include "panels.h"

extern __lcd_panel_t tft08006_panel;

extern s32 bsp_disp_get_panel_info(u32 screen_id, disp_panel_para *info);

#endif /*End of file*/

驱动程序的C文件tft08006.c

这里只展示与内核不同的部分

__lcd_panel_t tft08006_panel = {
        /* panel driver name, must mach the name of
         * lcd_drv_name in sys_config.fex
         */
        .name = "tft08006",
        .func = {
                .cfg_panel_info = lcd_cfg_panel_info,
                        .cfg_open_flow = lcd_open_flow,
                        .cfg_close_flow = lcd_close_flow,
                        .lcd_user_defined_func = lcd_user_defined_func,
        },
};

1.2 内核驱动程序

驱动程序头文件tft08006.h

#ifndef _TFT08006_H
#define _TFT08006_H

#include "panels.h"

extern struct __lcd_panel tft08006_panel;

extern s32 bsp_disp_get_panel_info(u32 screen_id, struct disp_panel_para *info);

#endif /*End of file*/

驱动程序的C文件"tft08006.c,这里只展示与uboot不同的部分。

struct __lcd_panel tft08006_panel = {
        /* panel driver name, must mach the name of
         * lcd_drv_name in sys_config.fex
         */
        .name = "tft08006",
        .func = {
                .cfg_panel_info = lcd_cfg_panel_info,
                        .cfg_open_flow = lcd_open_flow,
                        .cfg_close_flow = lcd_close_flow,
                        .lcd_user_defined_func = lcd_user_defined_func,
        },
};

2.修改内核中panels.h和panels.c

由于内核中没有对tft08006屏驱动有相关的配置,所以我们还需要在panels全志显示驱动中增加定义。

2.1 修改内核中panels.h

在屏驱动目录下修改panels.h

book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd$ vi panels.h

在icn6202屏驱动定义的后面增加tft08006屏驱动定义

#ifdef CONFIG_LCD_SUPPORT_ICN6202
extern struct __lcd_panel icn6202_panel;
#endif
#ifdef CONFIG_LCD_SUPPORT_ICN6202
extern struct __lcd_panel icn6202_panel;
#endif
#ifdef CONFIG_LCD_SUPPORT_NT35510_MIPI
extern struct __lcd_panel nt35510_panel;
#endif

按下ESC,输入:wq,保存刚才的修改并退出

2.2 修改内核中panels.c

在屏驱动目录下修改panels.c

book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd$ vi panels.c

在icn6202屏驱动定义的后面增加tft08006屏驱动定义

#ifdef CONFIG_LCD_SUPPORT_ICN6202
       &icn6202_panel,
#endif
#ifdef CONFIG_LCD_SUPPORT_TFT08006
        &tft08006_panel,
#endif

#ifdef CONFIG_LCD_SUPPORT_NT35510_MIPI
        &nt35510_panel,
#endif

按下ESC,输入:wq,保存刚才的修改并退出

3.修改内核中Kconfig和Makefile

3.1 修改内核中的Kconfig

修改屏驱动目录下的Kconfig,使内核配置中增加tft08006屏驱动的,以便后续选择编译该屏驱动

在屏驱动目录下输入vi Kconfig

tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd$ vi Kconfig

在icn6202屏驱动配置的后面增加tft08006屏驱动配置

config LCD_SUPPORT_ICN6202
       bool "LCD support icn6202 panel"
       default n
       ---help---
               If you want to support icn6202 panel for display driver, select it.

config LCD_SUPPORT_TFT08006
       bool "LCD support tft08006 panel"
       default n
       ---help---
               If you want to support tft08006 panel for display driver, select it.

config LCD_SUPPORT_NT35510_MIPI
        bool "LCD support nt35510_mipi panel"
        default n
        help
                If you want to support nt35510_mipi panel for display driver, select it.

按下ESC,输入:wq,保存刚才的修改并退出

3.2 修改内核中的Makefile

返回屏驱动的上一级目录,修改Makefile文件

book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp$ vi Makefile

在icn6202屏驱动编译规则的后面增加tft08006屏驱动编译规则

disp-$(CONFIG_LCD_SUPPORT_ICN6202) += lcd/icn6202.o
disp-$(CONFIG_LCD_SUPPORT_TFT08006) += lcd/tft08006.o
disp-$(CONFIG_LCD_SUPPORT_NT35510_MIPI) += lcd/nt35510.o

按下ESC,输入:wq,保存刚才的修改并退出

4.修改内核配置

在Tina的根目录下输入make kernel_menuconfig,进入内核配置界面。

book@100ask:~/workspaces/tina-v853-open$ make kernel_menuconfig

在选中屏驱动前,要确保DISP Driver Support(sunxi-disp2) ,我们的提供的SDK默认已经打开了,如果您之前关闭了,需要在内核配置界面中,进入Video support for sunxi目录下输入Y选中sunxi-disp2打开lcd节点配置。

→ Device Drivers 
	→ Graphics support 
		→ Frame buffer Devices 
			→ Video support for sunxi
				<*> DISP Driver Support(sunxi-disp2)

进入屏驱动目录,输入Y选中tft08006

→ Device Drivers 
	→ Graphics support 
		→ Frame buffer Devices 
			→ Video support for sunxi 
				→ LCD panels select 
					[*] LCD support tft08006 panel

如下图所示,选中tft08006屏驱动,编译到内核中。

在这里插入图片描述

保存并推车内核配置界面。

5.修改uboot配置

进入uboot的根目录下,执行make menuconfig,打开uboot配置界面。

book@100ask:~/workspaces/tina-v853-open/brandy/brandy-2.0/u-boot-2018$ make menuconfig

在选中屏驱动前,要确保DISP Driver Support(sunxi-disp2) ,我们的提供的SDK默认已经打开了,如果您之前关闭了,需要在内核配置界面中,进入Graphics support目录下输入Y选中sunxi-disp2打开lcd节点配置。

→ Device Drivers 
	→ Graphics support 
		[*] DISP Driver Support(sunxi-disp2)  --->

进入屏驱动目录下,输入Y选中TFT08006屏驱动。

→ Device Drivers 
	→ Graphics support 
		→ LCD panels select 
			 [*] LCD support TFT08006 panel 

如下图所示,选中tft08006屏驱动。

在这里插入图片描述

保存并退出uboot配置界面

6.修改设备树

设备树位置:tina-v853-open/device/config/chips/v853/configs/100ask/

book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ ls
BoardConfig.mk  board.dts  buildroot  env.cfg  linux-4.9  sys_config.fex  uboot-board.dts

其中board.dts为内核设备树,uboot-board.dts为uboot设备树。

6.1 修改uboot设备树

在设备树的目录下输入vi uboot-board.dts,编译uboot设备树。

book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ vi uboot-board.dts

注释掉原来的lcd0节点,修改tft08006屏lcd0节点

&lcd0 {
        base_config_start   = <1>;
        lcd_used            = <1>;

        lcd_driver_name     = "tft08006";

        lcd_backlight       = <500>;
        lcd_if              = <4>;

        lcd_x               = <480>;
        lcd_y               = <800>;
        lcd_width           = <52>;
        lcd_height          = <52>;
        lcd_dclk_freq       = <25>;

        lcd_pwm_used        = <1>;
        lcd_pwm_ch          = <9>;
        lcd_pwm_freq        = <50000>;
        lcd_pwm_pol         = <1>;
        lcd_pwm_max_limit   = <255>;

        lcd_hbp             = <10>;
        lcd_ht              = <515>;
        lcd_hspw            = <5>;

        lcd_vbp             = <20>;
        lcd_vt              = <830>;
        lcd_vspw            = <5>;

        lcd_dsi_if          = <0>;
        lcd_dsi_lane        = <2>;
        lcd_dsi_format      = <0>;
        lcd_dsi_te          = <0>;
        lcd_dsi_eotp        = <0>;
        lcd_frm             = <0>;
        lcd_io_phase        = <0x0000>;
        lcd_hv_clk_phase    = <0>;
        lcd_hv_sync_polarity= <0>;
        lcd_gamma_en        = <0>;
        lcd_bright_curve_en = <0>;
        lcd_cmap_en         = <0>;
        lcdgamma4iep        = <22>;

        lcd_gpio_0          = <&pio PH 0 1 0 3 1>;
        pinctrl-0           = <&dsi4lane_pins_a>;
        pinctrl-1           = <&dsi4lane_pins_b>;
        base_config_end     = <1>;

};

在&pio节点后增加复用引脚

         dsi4lane_pins_a: dsi4lane@0 {
                allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11";
                allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11";
                allwinner,function = "dsi";
                allwinner,muxsel = <5>;
                allwinner,drive = <3>;
                allwinner,pull = <0>;
        };

        dsi4lane_pins_b: dsi4lane@1 {
                allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11";
                allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "DP11";
                allwinner,function = "io_disabled";
                allwinner,muxsel = <0xf>;
                allwinner,drive = <1>;
                allwinner,pull = <0>;
        };

6.2 修改内核设备树

在设备树的目录下输入vi board.dts,编译内核设备树。

book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ vi board.dts

注释掉原来的lcd0节点,修改tft08006屏lcd0节点

&lcd0 {
        base_config_start   = <1>;
        lcd_used            = <1>;

        lcd_driver_name     = "tft08006";

        lcd_backlight       = <500>;
        lcd_if              = <4>;

        lcd_x               = <480>;
        lcd_y               = <800>;
        lcd_width           = <52>;
        lcd_height          = <52>;
        lcd_dclk_freq       = <25>;

        lcd_pwm_used        = <1>;
        lcd_pwm_ch          = <9>;
        lcd_pwm_freq        = <50000>;
        lcd_pwm_pol         = <1>;
        lcd_pwm_max_limit   = <255>;

        lcd_hbp             = <10>;
        lcd_ht              = <515>;
        lcd_hspw            = <5>;

        lcd_vbp             = <20>;
        lcd_vt              = <830>;
        lcd_vspw            = <5>;

        lcd_dsi_if          = <0>;
        lcd_dsi_lane        = <2>;
        lcd_dsi_format      = <0>;
        lcd_dsi_te          = <0>;
        lcd_dsi_eotp        = <0>;
        lcd_frm             = <0>;
        lcd_io_phase        = <0x0000>;
        lcd_hv_clk_phase    = <0>;
        lcd_hv_sync_polarity= <0>;
        lcd_gamma_en        = <0>;
        lcd_bright_curve_en = <0>;
        lcd_cmap_en         = <0>;
        lcdgamma4iep        = <22>;

        lcd_gpio_0          = <&pio PH 0 1 0 3 1>;
        pinctrl-0           = <&dsi4lane_pins_a>;
        pinctrl-1           = <&dsi4lane_pins_b>;
        base_config_end     = <1>;

};

在&pio节点后增加复用引脚

         dsi4lane_pins_a: dsi4lane@0 {
                allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11";
                allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11";
                allwinner,function = "dsi";
                allwinner,muxsel = <5>;
                allwinner,drive = <3>;
                allwinner,pull = <0>;
        };

        dsi4lane_pins_b: dsi4lane@1 {
                allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11";
                allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "DP11";
                allwinner,function = "io_disabled";
                allwinner,muxsel = <0xf>;
                allwinner,drive = <1>;
                allwinner,pull = <0>;
        };

7.增加I2C触摸

通过拿到的屏幕资料包,我们可以知道该MIPI屏的触摸芯片为FT5336,下面我们使用全志已经内置好的FT6336触摸驱动。

7.1 修改设备树

修改twi2节点,使用ft6336驱动,修改触摸的范围。宽X为480,高y为800。其中初始化引脚需要查看V853底板原理图,其中初始化引脚为PH7,唤醒引脚为PH8。

在这里插入图片描述

&twi2 {
        ctp@38 {
                status = "okay";
                ctp_used = <1>;
                ctp_name = "ft6336";
                ctp_twi_id = <0x2>;
                ctp_twi_addr = <0x38>;
                ctp_screen_max_x = <0x480>;
                ctp_screen_max_y = <0x800>;
                ctp_revert_x_flag = <0x0>;
                ctp_revert_y_flag = <0x1>;
                ctp_exchange_x_y_flag = <0x0>;
                ctp_int_port = <&pio PH 7 6 1 3 0xffffffff>;
                ctp_wakeup   = <&pio PH 8 1 1 3 0xffffffff>;
        };
};

对于设备树的参数意义,可以访问百问网的Tina站点:https://tina.100ask.net/SdkModule/Linux_Deploy_DevelopmentGuide-02/#39

7.2 修改内核配置

​ 由于我们之前适配过了RGB屏触摸驱动,所以需要进入内核中修改为我们使用的新驱动,进入如下目录中,按下空格键取消勾选之前的触摸驱动gt9xxnew touchscreen driver,输入Y选中我们使用的ft6336 touchscreen driver新驱动,并保存退出。

→ Device Drivers 
	→ Input device support 
		→ Touchscreens
			<*>   ft6336 touchscreen driver

在这里插入图片描述

7.3 修改驱动程序

修改ft6336.c触摸驱动程序,这里只展示修改的部分,源文件可见4寸屏适配资源包中查看。

                        input_report_abs(ts->input_dev,
                                        ABS_MT_POSITION_X, -(event->au16_x[i]-480));
                        input_report_abs(ts->input_dev,
                                        ABS_MT_POSITION_Y, -(event->au16_y[i]-800));

7.4 LVGL绑定新触摸节点

由于Tina使用的默认绑定的触摸节点为/dev/input/event0,我们需要修改lvgl驱动头文件中绑定的节点为我们触摸驱动上报数据的节点,我们触摸驱动上报的节点为event2,所以需要进入

tina-v853-open/platform/thirdparty/gui/lvgl-8/lv_examples/src目录下修改lv_drv_conf.h头文件,如下所示

book@100ask:~/workspaces/tina-v853-open$ cd platform/thirdparty/gui/lvgl-8/lv_examples/src/
book@100ask:~/workspaces/tina-v853-open/platform/thirdparty/gui/lvgl-8/lv_examples/src$ vi lv_drv_conf.h

找到触摸节点中的LIBINPUT_NAME,将原来的/dev/input/event0修改/dev/input/event2,如下图红框内所示。

在这里插入图片描述

注意:我们这里修改的是头文件,可能之前编译生成过了之后再重新编译时可能不会再编译头文件,导致修改的节点不会生效,可以手动删除out目录中的lv_examples示例程序或者直接删除out目录重新编译即可。具体原因可以观看韦东山老师的《ARM架构与编程》课程中的gcc编译过程详解。访问链接为:ARM架构与编程

8.编译系统并打包生成镜像

返回Tina根目录下,输入make,编译系统

book@100ask:~/workspaces/tina-v853-open$ make -j4
...
sun8iw21p1 compile Kernel successful
INFO: ----------------------------------------
INFO: build Tina OK.
INFO: ----------------------------------------

打包生成镜像,输入pack

book@100ask:~/workspaces/tina-v853-open$ pack
...
Dragon execute image.cfg SUCCESS !
----------image is at----------

33M     /home/book/workspaces/tina-v853-open/out/v853/100ask/openwrt/v853_linux_100ask_uart0.img

pack finish

9.烧录并测试

​ 打包完成后,将新生成的镜像拷贝到Windows主机电脑上,使用全志PhoenixSuit烧写工具,烧写到开发板上。具体可以参考:https://forums.100ask.net/t/topic/2882。烧写完成后需要断电,才能连接MIPI屏的排线到MIPI屏接口,注意排线的线序是否一致。

在这里插入图片描述

​ 接完排线后,重新接入电源,和2条Type-C数据线,再将开关拨向电源接口处上电启动,启动时会出现Tina Linux小企鹅logo,进入系统后,可以查看触摸节点

root@TinaLinux:/# ls /dev/input/
event0  event1  event2

​ 我们使用的event2,如果你不确定您的触摸驱动程序使用的是哪个,可以通过cat /dev/input/event*,其中*表示要查看的是哪一个触摸节点,例如我使用的是event2,则需要输入cat /dev/input/event2,此时触摸屏幕会有上报信息。

​ 使用LVGL DEMO示例,输入lv_examples 0启动lvgl示例,可以通过点击屏幕上的UI交互按钮测试触摸是否生效。

root@TinaLinux:/# lv_examples 0
wh=480x800, vwh=480x1600, bpp=32, rotated=0
Turn on double buffering.
Turn on 2d hardware acceleration.
Turn on 2d hardware acceleration rotate.

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

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

相关文章

pmp学习对职场的影响有多大?

不知不觉&#xff0c;2021的进度条已经走过了一半。行业政策的变化&#xff0c;岗位的能力对比&#xff0c;都让职场竞争变得更加激烈&#xff0c;成为一名优秀且具有竞争力的项目经理好像变得越来越难了。 为什么这样说呢&#xff1f;因为各行各业在对PM要求各项专业技能的同…

ChatGPT人工智能聊天机器人的优势与应用

当今社会&#xff0c;聊天机器人(Chatbot)已经成为一种新的交互方式。而ChatGPT则是一种基于深度学习技术的聊天机器人&#xff0c;它可以模拟人类对话的过程&#xff0c;可以为人们提供快速、便捷的解决方案。以下是ChatGPT的简介和优势&#xff1a; 基本信息&#xff1a;Chat…

将区块链技术融入电梯管理系统

电梯管理系统 电梯是人们日常生活和工作中必不可少的交通工具&#xff0c;为了保障电梯的安全性和运营效率&#xff0c;需要实时监测电梯状态及事件/故障。这里可以查考网络上提供的方案&#xff0c;在电梯内部安装了各种各样的传感器&#xff0c;通过网关将收集到的数据上传到…

小红书保姆级投放指南 | 助力引爆618

5月到来&#xff0c;618营销正式进入放量冲刺期&#xff0c;作为年中重量级营销节点&#xff0c;各大品牌角逐激烈。 本期千瓜推出618投放指南&#xff0c;助力品牌在冲刺期抢占用户心智、抓住高转化周期流量&#xff0c;打赢这场无硝烟之战。整体节奏把控四个阶段循序渐进 品牌…

Acrel-2000系列监控系统在亚运手球比赛馆建设10kV供配电工程中的应用

安科瑞 耿敏花 摘要:智能化配电监控系统是数字化和信息化时代应运而生的产物&#xff0c;已经被广泛应用于电网用户侧楼宇、体育场馆、科研设施、机场、交通、医院、电力和石化行业等诸多领域的高/低压变配电系统中。安科瑞自研的Acrel-2000系列监控系统可监控高压开关柜、低压…

第八章 SSM整合

1.整合关键点 Spring&#xff1a;负责对象的创建、维护、管理及对象依赖资源的注入 SpringMVC&#xff1a;负责请求的处理相当于(Servlet) MyBatis&#xff1a;负责与数据库进行交互 2.整合步骤 2.1.在pom.xml文件中导入依赖 mybatis、spring-webmvc、mybatis-spring、bonecp数…

GIF动态图录制工具

大家好&#xff0c;我是小寻&#xff0c;欢迎关注公众号:工具优选&#xff0c;免费领取优质项目源码和常用工具&#xff0c;还可以加入我的交流群! 一、工具介绍 Screen to Gif中文版是一款方便可靠的gif动画录制软件&#xff0c;可以用来快速录制屏幕上的指定区域&#xff…

二十年前的老游戏,为何再次让无数程序员痴迷不已?

SpaceTraders是个古老的策略类游戏&#xff0c;运行在古老的Palm OS和Windows Mobile PDA上。 游戏开始时&#xff0c;玩家将获得一艘飞船&#xff0c;然后驾驶它在各个星球之间穿梭&#xff0c;挖掘星球矿产&#xff0c;低买高卖赚取利润&#xff0c;赚了钱可以升级飞船&#…

麻了,一个操作把MySQL主从复制整崩了

最近公司某项目上反馈mysql主从复制失败&#xff0c;被运维部门记了一次大过&#xff0c;影响到了项目的验收推进&#xff0c;那么究竟是什么原因导致的呢&#xff1f;而主从复制的原理又是什么呢&#xff1f;本文就对排查分析的过程做一个记录。 主从复制原理 我们先来简单了…

淘宝商品详情接口 淘宝商品库存接口 淘宝商品销量接口 淘宝商品sku信息接口 淘宝商品优惠价接口

淘宝商品详情API接口item_get是一个非常重要的API接口&#xff0c;它可以获取淘宝商品的详细信息。对于淘_宝卖家来说&#xff0c;通过调用该接口可以实现对自己商品信息的获取、修改和管理等功能。 使用item_get接口可以获取一个商品的所有信息&#xff0c;包括商品的标题、价…

[学习笔记] [机器学习] 4. [上]线性回归(正规方程、梯度下降、岭回归)

视频链接数据集下载地址&#xff1a;无需下载 本文学习目标&#xff1a; 掌握线性回归的实现过程应用LinearRegression或SGDRegressor实现回归预测知道回归算法的评估标准及其公式知道过拟合与欠拟合的原因以及解决方法知道岭回归的原理及与线性回归的不同之处应用Ridge实现回…

这次彻底不需要账号了,无需魔法永久白嫖GPT

免费GPT 自GPT风靡以来&#xff0c;大家用的是不亦乐乎&#xff0c;你用他去解决过实际问题&#xff0c;你用他去写过代码&#xff0c;你用他去修改过bug&#xff0c;你用他去写过sql&#xff0c;你用他去画过图&#xff0c;你问过他你能想到的任何“刁钻”问题。 你&#xff…

如何在没有密码的情况下解锁华为手机

华为手机用户通常会使用密码保护他们的设备免受未经授权的访问。但是当用户忘记密码时就会出现问题。如果您无法回忆起密码&#xff0c;可以选择重置手机。但是有更多更好的方法可以帮助您解锁华为手机。在本文中&#xff0c;我们将向您展示如何免密码解锁华为手机。按照本文&a…

“五位一体”打造数字业务安全体系

顶象联合中国信通院发布的《业务安全白皮书—数字业务风险与安全》显示&#xff0c;随着数字化的发展&#xff0c;企业的关键数据、用户信息、基础设施、运营过程等均处于边界模糊且日益开放的环境中&#xff0c;涉及利益流和高附加值的业务面临多样的安全隐患&#xff1b;同时…

Linux下最强安卓模拟器,流畅又丝滑(附详细安装教程)此瓜保熟|Linux游戏党

我打算完全从头开始&#xff0c;写一个专门用于桌面办公的纯国产操作系统 &#xff0c;规避主流操作系统上影响用户体验的问题&#xff0c;系统力求简洁。有兴趣加QQ群&#xff1a;709652950 好东西让更多人发现&#xff01;我找了整整两年&#xff0c;什么Anbox&#xff0c;什…

【必知必懂论文】之多模态实体识别

引言 命名实体识别&#xff08;NER&#xff09;是自然语言处理(NLP)领域中的最基础、最核心的任务之一&#xff0c;该任务旨在识别出文本中的命名实体&#xff08;通常指特定类型事物的名称或符号&#xff0c;一般是一个名词或者短语&#xff09;&#xff0c;并将识别出的实体…

【这七款网工在线画拓扑工具,你会用几个呢?】

其实绘制拓扑图的工具有很多&#xff0c;今天主要推荐给大家7款在线的绘图软件&#xff0c;不仅好用&#xff0c;不占内存&#xff0c;而且功能强大。 看看有没有你种草的那一款哈&#xff0c;当然&#xff0c;如果有其他更好用的工具&#xff0c;也欢迎留言区告诉其他网工朋友…

apifm-wxapi

文章目录 apifm-wxapi介绍为什么要用 apifm-wxapi使用1. 项目导入 apifm-wxapi2. 平台注册3. 平台配置4. 用户注册5. 用户登录6. 使用其他API 【参考】 apifm-wxapi 介绍 “微信小程序接口工具包&#xff0c;无需服务器&#xff0c;无需开发后台&#xff0c;开箱即用&#xf…

(四)运行微信小程序:在主页加入表单组件实现提交功能

我们在上个小练习的基础上&#xff0c;继续在主页添加功能——使用表单组件form。 根据微信官方文档&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/component/form.html 当需要获取用户提交的信息时&#xff0c;可以使用表单组件form。当用户点击表单中fo…

从 0~1 创建 Vue3项目(Vue3 + JS)

前言 我目前还是在用 JavaScripr开发项目&#xff0c;后面会学习 TypeScript &#xff0c;也会专门写一篇《从 0~1 创建Vue3 TS 项目》。求关注&#x1f62d; 一、创建项目前的准备工作 1.1 安装Node 创建项目需要使用 npm 或 yarn 可以去看我的另一篇文章&#xff1a;《…