20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】
20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】
 2024/1/12 16:20
 https://blog.csdn.net/u010164190/article/details/79096345
 [Android6.0][RK3399] PCIe 接口 4G模块 EC20 调试记录
https://blog.csdn.net/hnjztyx/article/details/72495433
 S5P4418 android 5.1 EC20 R2.0 PCIE接口调试记录
 步骤:
 1、使用Firefly的AIO-3399【RK3399】开发板,在Android11下调通加USB底板的移远4G模块EC20。
 2、将移远mini-PCIE接口的4G模块EC20接入Firefly的AIO-3399,Android11启动之后不能同构4G上网。也没有/dev/ttyUSB2这个设备节点!
 3、使用AIO-3399J的DTS【Android10】替换默认的挖掘机的DTS之后,更新的内核可以让移远的EC20通过4G上网。
 4、将AIO-3399J的DTS【Android10】合并/替换到挖掘机的DTS之后,更新的内核也可以让移远的EC20通过4G上网。
 步骤:根据经验,将AIO-3399J的DTS文件对应到相应的挖掘机的DTS文件之中。
 对于:AIO-3399J 和 挖掘机都有的DTS项目,直接使用 AIO-3399J的DTS项目覆盖挖掘机的DTS项目。
 对于只在 AIO-3399J 出现的项目,合并到挖掘机对应文件的最后面。
 对于只在挖掘机DTS中的项目不处理!
 1、
 现在可以确认:问题出在DTS设备树的配置部分了!
 现在开始比对AIO-3399J和挖掘机的DTS的异同。
 Z:\firefly\rockchip-excavator
Makefile
 rk3399-android.dtsi
 rk3399-dram-default-timing.dtsi
 rk3399-excavator-sapphire.dtsi
 rk3399-opp.dtsi
 rk3399-sapphire-excavator-edp-avb.dts
 rk3399-sapphire-excavator-edp.dtsi
 rk3399-sapphire.dtsi
 rk3399-sched-energy.dtsi
 rk3399-vop-clk-set.dtsi
 rk3399.dtsi
Z:\firefly\rockchip-firefly
Makefile
 rk3399-android.dtsi
 rk3399-dram-default-timing.dtsi
 rk3399-firefly-aio.dts
 rk3399-firefly-aio.dtsi
 rk3399-firefly-core.dtsi
 rk3399-firefly-demo.dtsi
 rk3399-firefly-port.dtsi
 rk3399-opp.dtsi
 rk3399-sched-energy.dtsi
 rk3399-vop-clk-set.dtsi
 rk3399.dtsi

 干掉同名的文件,差异的文件有:
 Z:\firefly\rockchip-excavator
rk3399-excavator-sapphire.dtsi
 rk3399-sapphire-excavator-edp-avb.dts
 rk3399-sapphire-excavator-edp.dtsi
 rk3399-sapphire.dtsi
Z:\firefly\rockchip-firefly
rk3399-firefly-aio.dts
 rk3399-firefly-aio.dtsi
 rk3399-firefly-core.dtsi
 rk3399-firefly-demo.dtsi
 rk3399-firefly-port.dtsi
 很容易/根据经验/很艰难地比对文件,可以知道:
rk3399-firefly-aio.dts 合并到 rk3399-sapphire-excavator-edp-avb.dts
 rk3399-firefly-aio.dtsi 合并到 rk3399-sapphire-excavator-edp.dtsi
 rk3399-firefly-core.dtsi 合并到 rk3399-sapphire.dtsi
 rk3399-firefly-demo.dtsi  望文生义/根据名字,忽略掉,本文件不处理!
 rk3399-firefly-port.dtsi 合并到 rk3399-excavator-sapphire.dtsi




放心,第一次合并/干的时候肯定会出现没有加全/遗漏的问题!
 就会出现内核编译不过的问题!那就请根据经验修改吧!
 rootroot@rootroot-X99-Turbo:~/3TB/76Android11.0/kernel$ 
rootroot@rootroot-X99-Turbo:~/3TB/76Android11.0/kernel$ make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3399_Android11/boot.img rk3399-sapphire-excavator-edp-avb.img -j36
   DTC     arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dtb
   CALL    scripts/checksyscalls.sh
arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dtb: ERROR (phandle_references): /amba/dma-controller@ff6d0000: Reference to non-existent node or label "iram"
arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dtb: ERROR (phandle_references): /i2c@ff110000/gc2145@3c/port/endpoint: Reference to non-existent node or label "dvp_in_fcam"
ERROR: Input tree has errors, aborting (use -f to force output)
 make[1]: *** [scripts/Makefile.lib:307: arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dtb] Error 2
 make: *** [arch/arm64/Makefile:145: rockchip/rk3399-sapphire-excavator-edp-avb.dtb] Error 2
 make: *** Waiting for unfinished jobs....
 rootroot@rootroot-X99-Turbo:~/3TB/76Android11.0/kernel$ make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3399_Android11/boot.img rk3399-sapphire-excavator-edp-avb.img -j36
   DTC     arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dtb
   CALL    scripts/checksyscalls.sh
 arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dtb: Warning (sound_dai_property): /rt5640-sound/simple-audio-card,dai-link@1/cpu:sound-dai: cell 1 is not a phandle reference
 arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dtb: Warning (sound_dai_property): /rt5640-sound/simple-audio-card,dai-link@1/cpu: Missing property '#sound-dai-cells' in node /interrupt-controller@fee00000 or bad phandle (referred from sound-dai[1])
 arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dtb: Warning (sound_dai_property): /rt5640-sound/simple-audio-card,dai-link@1/codec:sound-dai: cell 1 is not a phandle reference
 arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dtb: Warning (sound_dai_property): /rt5640-sound/simple-audio-card,dai-link@1/codec: Missing property '#sound-dai-cells' in node /interrupt-controller@fee00000 or bad phandle (referred from sound-dai[1])
 arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dtb: Warning (graph_endpoint): /i2c@ff110000/xc7160b@1b/port/endpoint: graph connection to node '/syscon@ff770000/mipi-dphy-rx0/ports/port@0/endpoint@2' is not bidirectional
   LDS     arch/arm64/kernel/vdso/vdso.lds
   CC      arch/arm64/kernel/vdso/vgettimeofday.o
   AS      arch/arm64/kernel/vdso/note.o
   AS      arch/arm64/kernel/vdso/sigreturn.o
   LD      arch/arm64/kernel/vdso/vdso.so.dbg
   VDSOSYM include/generated/vdso-offsets.h
   CHK     include/generated/compile.h
 2、等你终于编译通过了,单独更新boot.img之后,就kernel/boot了,但是HDMI显示器黑屏,进不了Android11系统的UI界面!
[  659.614425] init: starting service 'vendor.audio-hal'...
 [  659.618551] init: starting service 'audioserver'...
 [  659.622310] init: starting service 'surfaceflinger'...
 [  659.622924] init: Could not create socket 'pdx/system/vr/display/client': Failed to bind socket 'pdx/system/vr/display/client': No such file or directory
 [  659.623283] init: Could not create socket 'pdx/system/vr/display/manager': Failed to bind socket 'pdx/system/vr/display/manager': No such file or directory
 [  659.623583] init: Could not create socket 'pdx/system/vr/display/vsync': Failed to bind socket 'pdx/system/vr/display/vsync': No such file or directory
 [  659.627313] init: starting service 'vendor.hwcomposer-2-1'...
 [  659.631574] init: processing action (init.svc.audioserver=running) from (/system/etc/init/audioserver.rc:35)
 [  659.631955] init: Command 'start vendor.audio-hal-4-0-msd' action=init.svc.audioserver=running (/system/etc/init/audioserver.rc:37) took 0ms and failed: service vendor.audio-hal-4-0-msd not found
 [  659.632051] init: Command 'start vendor.audio-hal-2-0' action=init.svc.audioserver=running (/system/etc/init/audioserver.rc:39) took 0ms and failed: service vendor.audio-hal-2-0 not found
 [  659.717087] type=1400 audit(1358499661.996:1072): avc: denied { read } for comm="android.hardwar" name="resolution_white.xml" dev="dm-0" ino=3901 scontext=u:r:hal_graphics_composer_default:s0 tcontext=u:object_r:system_file:s0 tclass=file permissive=0
 [  661.782216] type=1400 audit(1358499664.080:1073): avc: denied { read } for comm="Binder:177_2" name="wakeup9" dev="sysfs" ino=24029 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs_power:s0 tclass=dir permissive=0
 [  661.782403] type=1400 audit(1358499664.080:1074): avc: denied { read } for comm="Binder:177_2" name="wakeup7" dev="sysfs" ino=23543 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  661.783030] type=1400 audit(1358499664.080:1075): avc: denied { read } for comm="Binder:177_2" name="wakeup10" dev="sysfs" ino=24085 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs_power:s0 tclass=dir permissive=0
 [  661.783678] type=1400 audit(1358499664.080:1076): avc: denied { read } for comm="Binder:177_2" name="wakeup8" dev="sysfs" ino=23583 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  661.783793] type=1400 audit(1358499664.080:1077): avc: denied { read } for comm="Binder:177_2" name="wakeup13" dev="sysfs" ino=28271 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  661.783882] type=1400 audit(1358499664.080:1078): avc: denied { read } for comm="Binder:177_2" name="wakeup6" dev="sysfs" ino=22974 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  661.783968] type=1400 audit(1358499664.080:1079): avc: denied { read } for comm="Binder:177_2" name="wakeup11" dev="sysfs" ino=24169 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs_power:s0 tclass=dir permissive=0
 [  664.081178] healthd: battery l=50 v=3 t=2.6 h=2 st=3 fc=100 chg=au
 [  664.620523] init: starting service 'vendor.audio-hal'...
 [  664.624465] init: starting service 'audioserver'...
 [  664.628308] init: starting service 'surfaceflinger'...
 [  664.629009] init: Could not create socket 'pdx/system/vr/display/client': Failed to bind socket 'pdx/system/vr/display/client': No such file or directory
 [  664.629350] init: Could not create socket 'pdx/system/vr/display/manager': Failed to bind socket 'pdx/system/vr/display/manager': No such file or directory
 [  664.629657] init: Could not create socket 'pdx/system/vr/display/vsync': Failed to bind socket 'pdx/system/vr/display/vsync': No such file or directory
 [  664.633580] init: starting service 'vendor.hwcomposer-2-1'...
 [  664.637739] init: processing action (init.svc.audioserver=running) from (/system/etc/init/audioserver.rc:35)
 [  664.638007] init: Command 'start vendor.audio-hal-4-0-msd' action=init.svc.audioserver=running (/system/etc/init/audioserver.rc:37) took 0ms and failed: service vendor.audio-hal-4-0-msd not found
 [  664.638139] init: Command 'start vendor.audio-hal-2-0' action=init.svc.audioserver=running (/system/etc/init/audioserver.rc:39) took 0ms and failed: service vendor.audio-hal-2-0 not found
 [  664.719297] type=1400 audit(1358499667.006:1080): avc: denied { read } for comm="android.hardwar" name="resolution_white.xml" dev="dm-0" ino=3901 scontext=u:r:hal_graphics_composer_default:s0 tcontext=u:object_r:system_file:s0 tclass=file permissive=0
 [  665.338724] selinux: SELinux:  Could not stat /sys/devices/virtual/net/ipsec_test/queues/tx-0: No such file or directory.
 [  665.338772] selinux: 
 [  666.786637] type=1400 audit(1358499669.083:1081): avc: denied { read } for comm="Binder:177_2" name="wakeup9" dev="sysfs" ino=24029 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs_power:s0 tclass=dir permissive=0
 [  666.786799] type=1400 audit(1358499669.083:1082): avc: denied { read } for comm="Binder:177_2" name="wakeup7" dev="sysfs" ino=23543 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  666.786985] type=1400 audit(1358499669.083:1083): avc: denied { read } for comm="Binder:177_2" name="wakeup10" dev="sysfs" ino=24085 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs_power:s0 tclass=dir permissive=0
 [  666.787470] type=1400 audit(1358499669.083:1084): avc: denied { read } for comm="Binder:177_2" name="wakeup8" dev="sysfs" ino=23583 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  666.787602] type=1400 audit(1358499669.083:1085): avc: denied { read } for comm="Binder:177_2" name="wakeup13" dev="sysfs" ino=28271 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  666.787694] type=1400 audit(1358499669.083:1086): avc: denied { read } for comm="Binder:177_2" name="wakeup6" dev="sysfs" ino=22974 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  666.787784] type=1400 audit(1358499669.083:1087): avc: denied { read } for comm="Binder:177_2" name="wakeup11" dev="sysfs" ino=24169 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs_power:s0 tclass=dir permissive=0
 [  669.626628] init: starting service 'vendor.audio-hal'...
 [  669.630678] init: starting service 'audioserver'...
 [  669.634637] init: starting service 'surfaceflinger'...
 [  669.635355] init: Could not create socket 'pdx/system/vr/display/client': Failed to bind socket 'pdx/system/vr/display/client': No such file or directory
 [  669.635707] init: Could not create socket 'pdx/system/vr/display/manager': Failed to bind socket 'pdx/system/vr/display/manager': No such file or directory
 [  669.636015] init: Could not create socket 'pdx/system/vr/display/vsync': Failed to bind socket 'pdx/system/vr/display/vsync': No such file or directory
 [  669.639744] init: starting service 'vendor.hwcomposer-2-1'...
 [  669.643761] init: processing action (init.svc.audioserver=running) from (/system/etc/init/audioserver.rc:35)
 [  669.643992] init: Command 'start vendor.audio-hal-4-0-msd' action=init.svc.audioserver=running (/system/etc/init/audioserver.rc:37) took 0ms and failed: service vendor.audio-hal-4-0-msd not found
 [  669.644071] init: Command 'start vendor.audio-hal-2-0' action=init.svc.audioserver=running (/system/etc/init/audioserver.rc:39) took 0ms and failed: service vendor.audio-hal-2-0 not found
 [  669.713773] type=1400 audit(1358499672.010:1088): avc: denied { read } for comm="android.hardwar" name="resolution_white.xml" dev="dm-0" ino=3901 scontext=u:r:hal_graphics_composer_default:s0 tcontext=u:object_r:system_file:s0 tclass=file permissive=0
[  671.781897] type=1400 audit(1358499674.076:1089): avc: denied { read } for comm="Binder:177_2" name="wakeup9" dev="sysfs" ino=24029 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs_power:s0 tclass=dir permissive=0
 [  671.782153] type=1400 audit(1358499674.080:1090): avc: denied { read } for comm="Binder:177_2" name="wakeup7" dev="sysfs" ino=23543 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  671.782687] type=1400 audit(1358499674.080:1091): avc: denied { read } for comm="Binder:177_2" name="wakeup10" dev="sysfs" ino=24085 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs_power:s0 tclass=dir permissive=0
 [  671.783353] type=1400 audit(1358499674.080:1092): avc: denied { read } for comm="Binder:177_2" name="wakeup8" dev="sysfs" ino=23583 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  671.783465] type=1400 audit(1358499674.080:1093): avc: denied { read } for comm="Binder:177_2" name="wakeup13" dev="sysfs" ino=28271 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  671.783556] type=1400 audit(1358499674.080:1094): avc: denied { read } for comm="Binder:177_2" name="wakeup6" dev="sysfs" ino=22974 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
 [  671.783643] type=1400 audit(1358499674.080:1095): avc: denied { read } for comm="Binder:177_2" name="wakeup11" dev="sysfs" ino=24169 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs_power:s0 tclass=dir permissive=0
console:/ $
 3、根据经验可能是某一个文件更改之后出现的问题,
 很容易/根据经验/很艰难地定位文件,可以知道:
 【问题出在这里,整个文件不要合并了!】
 rk3399-firefly-aio.dts 合并到 rk3399-sapphire-excavator-edp-avb.dts
【合并一下的3个文件,解决编译的问题!】更新的内核也可以让移远的EC20通过4G上网。
 rk3399-firefly-aio.dtsi 合并到 rk3399-sapphire-excavator-edp.dtsi
 rk3399-firefly-core.dtsi 合并到 rk3399-sapphire.dtsi
 rk3399-firefly-demo.dtsi  望文生义/根据名字,忽略掉,本文件不处理!
 rk3399-firefly-port.dtsi 合并到 rk3399-excavator-sapphire.dtsi


 4、查找PCIE/PCIE0根据经验更新代码块即可。
 rk3399-firefly-port.dtsi 合并到 rk3399-excavator-sapphire.dtsi
     wireless-bluetooth {
         compatible = "bluetooth-platdata";
         clocks = <&rk808 1>;
         clock-names = "ext_clock";
         //wifi-bt-power-toggle;
         uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>; /* GPIO2_C3 */
         pinctrl-names = "default", "rts_gpio";
         pinctrl-0 = <&uart0_rts>, <&bt_reset_gpio>, <&bt_wake_gpio>, <&bt_irq_gpio>;
         pinctrl-1 = <&uart0_gpios>;
         //BT,power_gpio  = <&gpio3 19 GPIO_ACTIVE_HIGH>; /* GPIOx_xx */
         BT,reset_gpio    = <&gpio0 9 GPIO_ACTIVE_HIGH>; /* GPIO0_B1 */
         BT,wake_gpio     = <&gpio2 26 GPIO_ACTIVE_HIGH>; /* GPIO2_D2 */
         BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>; /* GPIO0_A4 */
         status = "okay";
     };
     
    vdd_pcie3v3: vdd3v3-pcie-regulator {
         compatible = "regulator-fixed";
         enable-active-high;
         gpio = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>;
         pinctrl-names = "default";
         pinctrl-0 = <&pcie_drv>;
         regulator-name = "vdd3v3_pcie";
     };
     vcc3v3_3g: vcc3v3-3g-regulator {
        compatible = "regulator-fixed";
        enable-active-high;
        regulator-always-on;
        regulator-boot-on;
        gpio = <&gpio2 RK_PA6 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pcie_3g_drv>;
        regulator-name = "vcc3v3_3g";
     };
 };
&dfi {
     status = "okay";
 };
 &pcie0 {
    ep-gpios = <&gpio2 4 GPIO_ACTIVE_HIGH>;
     num-lanes = <4>;
     pinctrl-names = "default";
     pinctrl-0 = <&pcie_clkreqn_cpm>;
 };
修改为:
 &pcie0 {
    ep-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_HIGH>;
     num-lanes = <4>;
     pinctrl-names = "default";
     pinctrl-0 = <&pcie_clkreqn_cpm>;
    vpcie3v3-supply = <&vdd_pcie3v3>;
     status = "okay";
 };
&uart0 {
     pinctrl-names = "default";
     pinctrl-0 = <&uart0_xfer &uart0_cts>;
     status = "okay";
 };
 &pinctrl {
     sdio-pwrseq {
         wifi_enable_h: wifi-enable-h {
             rockchip,pins =
                 <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
         };
     };
    wireless-bluetooth {
         uart0_gpios: uart0-gpios {
             rockchip,pins =
                 <2 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
         };
         bt_reset_gpio: bt-reset-gpio {
             rockchip,pins =
                 <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
         };
         bt_wake_gpio: bt-wake-gpio {
             rockchip,pins =
                 <2 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
         };
         bt_irq_gpio: bt-irq-gpio {
             rockchip,pins =
                 <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>;
         };
     };
     
    pcie {
         pcie_drv: pcie-drv {
             rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
         };
        pcie_3g_drv: pcie-3g-drv {
             rockchip,pins = <2 6 RK_FUNC_GPIO &pcfg_pull_up>;
         };
     };
 };



 5、虽然改动居多,但是查找PCIE/PCIE0根据经验更新代码块即可。
 rk3399-firefly-aio.dtsi 合并到 rk3399-sapphire-excavator-edp.dtsi
     tc358749x: tc358749x@0f {
         compatible = "toshiba,tc358749x";
         reg = <0x0f>;
        //power-gpios = <&gpio2 6 GPIO_ACTIVE_HIGH>;
         power18-gpios = <&gpio2 9 GPIO_ACTIVE_HIGH>;
         power33-gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>;
         csi-ctl-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>;
         stanby-gpios = <&gpio2 8 GPIO_ACTIVE_HIGH>;
         reset-gpios = <&gpio2 7 GPIO_ACTIVE_HIGH>;
         int-gpios = <&gpio2 12 GPIO_ACTIVE_HIGH>;
         pinctrl-names = "default";
         pinctrl-0 = <&hdmiin_gpios>;
         status = "disabled";
     };
 &vopl {
     status = "okay";
     assigned-clocks = <&cru DCLK_VOP1_DIV>;
     assigned-clock-parents = <&cru PLL_VPLL>;
 };
&pcie_phy {
     status = "okay";
 };
&pcie0 {
     status = "okay";
 };
修改为:
 &vopl {
     status = "okay";
     assigned-clocks = <&cru DCLK_VOP1_DIV>;
     assigned-clock-parents = <&cru PLL_VPLL>;
 };
&vdd_pcie3v3 {
     gpio = <&gpio0 13 GPIO_ACTIVE_HIGH>;  //change with power led
 };
&vcc3v3_3g {
     gpio = <&gpio2 6 GPIO_ACTIVE_HIGH>;
 };
&pcie_phy {
     status = "okay";
 };
&pcie0 {
   ep-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_HIGH>;
   status = "okay";
 };
 &rt5651_sound {
     status = "okay";
 };
&pinctrl {
     cam0 {
          cif_pwr: cif-pwr {
             rockchip,pins = <1 22 RK_FUNC_GPIO &pcfg_pull_up>;
          };
     };
     
    pcie {
         pcie_drv: pcie-drv {
             rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
         };
        pcie_3g_drv: pcie-3g-drv {
             rockchip,pins = <2 6 RK_FUNC_GPIO &pcfg_pull_up>;
         };
     };
     
     lcd-panel {
         lcd_panel_reset: lcd-panel-reset {
             rockchip,pins = <4 RK_PD6 RK_FUNC_GPIO &pcfg_pull_up>;
         };
     };
    hdmiin {
         hdmiin_gpios: hdmiin_gpios {
         rockchip,pins =
                 <2 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>,
                 <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>,
                 <2 RK_PA7 RK_FUNC_GPIO &pcfg_pull_none>,
                 <2 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>,
                 <2 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>,
                 <2 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
         };
     };
 };



 6、最后很容易/根据经验/很艰难地定位文件,可以知道是这里的问题【电源的配置】:
 rk3399-firefly-core.dtsi 合并到 rk3399-sapphire.dtsi
 Z:\3TB\76Android11.0\kernel\arch\arm64\boot\dts\rockchip\rk3399-sapphire.dtsi
 &i2s2 {
     status = "okay";
 };
&io_domains {
     status = "okay";
    bt656-supply = <&vcc_3v0>;
     audio-supply = <&vcca1v8_codec>;
     sdmmc-supply = <&vcc_sdio>;
     gpio1830-supply = <&vcc_3v0>;
 };
&pmu_io_domains {
     pmu1830-supply = <&vcc_3v0>;
     status = "okay";
 };
修改为:
 &i2s2 {
     status = "okay";
 };
&io_domains {
     status = "okay";
    bt656-supply = <&vcc1v8_dvp>;        /* bt656_gpio2ab_ms */
     audio-supply = <&vcca1v8_codec>;    /* audio_gpio3d4a_ms */
     //sdmmc-supply = <&vcc_sd>;        /* sdmmc_gpio4b_ms */
     sdmmc-supply = <&vcc_sdio>;
     gpio1830-supply = <&vcc_3v0>;        /* gpio1833_gpio4cd_ms */
 };
 &pmu_io_domains {
     pmu1830-supply = <&vcc_3v0>;
     status = "okay";
 };

 7、使用USB底板的EC20能够上网需要修改的部分:
缘起:使用友善之臂的Android11可以让EC20上网,但是同样的修改步骤,Toybrick的Android11不能让EC20上网。
 最后确认是selinux的问题!
开发板:Firefly的AIO-3399J【RK3399】
 SDK:rk3399-android-11-r20211216.tar.xz【Android11】
 Android11.0.tar.bz2.aa【ToyBrick】
 Android11.0.tar.bz2.ab
 Android11.0.tar.bz2.ac
https://wiki.t-firefly.com/AIO-3399J/prepare_compile_android.html
 AIO-3399J产品规格书 立即购买
 AIO-3399J 采用 RK3399 六核(A72x2+A53x4) 64 位处理器,主频高达1.8GHz,集成了四核 Mali-T860 GPU,性能优异。
0、简略步骤:
 rootroot@rootroot-X99-Turbo:~/3TB$ cat Android11.0.tar.bz2.a* > Android11.0.tar.bz2
 rootroot@rootroot-X99-Turbo:~/3TB$ tar jxvf Android11.0.tar.bz2 
 rootroot@rootroot-X99-Turbo:~/3TB$ mv Android11.0 64rk3399-android-11
 rootroot@rootroot-X99-Turbo:~/3TB$ cd 64rk3399-android-11
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11$ cd u-boot
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11/u-boot$ ./make.sh rk3399
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11/u-boot$ cd ..
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11$ cd kernel/
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11/kernel$ make ARCH=arm64 rockchip_defconfig android-11.config -j36
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11/kernel$ make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3399_Android11/boot.img rk3399-sapphire-excavator-edp-avb.img -j36
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11$ source build/envsetup.sh 
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11$ lunch
      36. rk3399_Android11-userdebug
 Which would you like? [aosp_arm-eng] 36
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11$ 
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11$ make -j36
 rootroot@rootroot-X99-Turbo:~/3TB/64rk3399-android-11$ ./build.sh -u
1、
 Android11 + Kernel所需要修改的文件:
 1、【完全一致/相同】
 Z:\rk3399-android-11\device\rockchip\common\4g_modem\manifest.xml
2、复制库文件:
 chat
 dhcpcd
 ip-down
 ip-up
 libmeig-ril.so
 libquec-ril.so
 libreference-ril-62.so
 libreference-ril.so
Z:\rk3399-android-11\device\rockchip\common\ec20\chat
 Z:\rk3399-android-11\device\rockchip\common\ec20\dhcpcd
 Z:\rk3399-android-11\device\rockchip\common\ec20\ip-down
 Z:\rk3399-android-11\device\rockchip\common\ec20\ip-up
 Z:\rk3399-android-11\device\rockchip\common\ec20\libmeig-ril.so
 Z:\rk3399-android-11\device\rockchip\common\ec20\libquec-ril.so
 Z:\rk3399-android-11\device\rockchip\common\ec20\libreference-ril-62.so
 Z:\rk3399-android-11\device\rockchip\common\ec20\libreference-ril.so
3、
 Z:\rk3399-android-11\device\rockchip\common\BoardConfig.mk
4、
 Z:\rk3399-android-11\device\rockchip\common\device.mk
5、
 Z:\rk3399-android-11\device\rockchip\common\ueventd.rockchip.rc
6、
 Z:\rk3399-android-11\device\rockchip\rk3399\rk3399_Android11\overlay\frameworks\base\core\res\res\values\config.xml
【不用修改】
 Z:\rk3399-android-11\device\rockchip\rk3399\device.mk
7、
 Z:\rk3399-android-11\kernel\drivers\net\usb\Makefile
 Z:\rk3399-android-11\kernel\drivers\net\usb\qmi_wwan_q.c
8、
 Z:\rk3399-android-11\kernel\drivers\usb\serial\option.c
 【几乎没有改动】
 Z:\rk3399-android-11\kernel\drivers\usb\serial\qcserial.c
 Z:\rk3399-android-11\kernel\drivers\usb\serial\usb_wwan.c
9、
 Z:\rk3399-android-11\system\core\init\devices.cpp
3、修改selinux部分:
 https://blog.csdn.net/taye_year/article/details/125948529
 https://codeleading.com/article/76926405628/
 RK3568移远4G模块EC20
Z:\3TB\76Android11.0\device\rockchip\common\ueventd.rockchip.rc
 Z:\3TB\76Android11.0\device\rockchip\common\sepolicy\private\file_contexts
 Z:\3TB\76Android11.0\system\sepolicy\vendor\rild.rc
 【相关的资料:】
 百度搜索:ifeq ($(strip $(BOARD_HAS_EC20_MODEM)),true)
RK3399 EC20 步骤
 Android6.0 RK3399 PCIe 接口 4G模块 EC20 调试记录
 rk3568 Android11系统调试ec20模块的gps功能
 RK3568-ANDROID11-4G-EC20-(详细步骤)
 RK356X android11 移远EC20 modem支持
[ 87.794373] init: Sending signal 9 to service 'ril-daemon' (pid 2176) proce
 重复打印'android.hardware.radio@1.1::IRadio/slot1'
 + if(strcmp(descriptor.c_str(),"android.hardware.radio@1.1::IRadio") != 0)
 [ 44.972959] init: Control message: Processed ctl.interface_start for 'andro
'android.hardware.radio@1.1::IRadio/slot1' from pid: 154 (/system/bin/hwserv
 init: Control message: Processed ctl.interface_start for 'android.hardware.r
 type=1400 audit(1704645252.746:494): avc: denied { read write } for comm="ri
 BING:[   44.972959] init: Control message: Processed ctl.interface_start for 'android.hardware.radio@1.1::IRadio/slot1' from pid: 149 (/system/bin/hwservicemanager)
 https://blog.csdn.net/longmin96/article/details/122716504
 RK3568-ANDROID11-4G-EC20-(详细步骤)
 注意:硬件可以先使用USB转接板把模块接到电脑上,使用AT指令把模块调好。
 https://blog.csdn.net/longmin96/article/details/122687117
 RK3568-ANDROID11-4G-EC20-驱动篇(移远模块)
 旋风旋风
https://blog.csdn.net/longmin96/article/details/122687865
 RK3568-ANDROID11-4G-EC20-系统篇(移远模块)
 首先,要先获得技术支持
 步骤一,先在USB模块上完成4G
 步骤二,移植到PCIE座子上
 https://blog.csdn.net/weixin_51178981/article/details/124804679
 NXP(imx8qxp)上android11的EG25-G(4G)模块调试记录
修改selinux的权限
 修改/system/core/init/selinux.cpp
 diff --git a/init/selinux.cpp b/init/selinux.cpp
 index 5a0255acd..ae6f1fce9 100644
 --- a/init/selinux.cpp
 +++ b/init/selinux.cpp
 @@ -104,6 +104,7 @@ EnforcingStatus StatusFromCmdline() {
  }
  
  bool IsEnforcing() {
 +    return false;
      if (ALLOW_PERMISSIVE_SELINUX) {
          return StatusFromCmdline() == SELINUX_ENFORCING;
      }
 https://blog.csdn.net/terry_xiwang/article/details/123137864
 RK3568 Android12 移远4G模块EM05-CE 调试心得
4、适配Android部分的时候主要是利用了rk已有的4g modem框架,打开BOARD_HAS_RK_4G_MODEM属性,并将librk-ril.so 替换为Quectel的ril库,这样会少走一些弯路。
 5、我用的ril库版本为Quectel_Android_RIL_Driver_V3.3.78,这个版本才能适配Android12。之前用过3.3.57和3.3.62版本的库,加载时都会报错:
 【关闭多余的打印LOG】
 https://bbs.elecfans.com/jishu_2263076_1_1.html
 [问答] 如何调试RK3568-ANDROID11-4G-EC20?
 【下载】
 https://download.csdn.net/download/seasonfangjing/86247556?utm_source=bbsseo
 RK356X android11 移远EC20 modem支持
 https://blog.csdn.net/weixin_38420901/article/details/129875533
 移远EC20 WINDOWS下安装驱动及开机自动拨号上网
 https://download.csdn.net/download/weixin_38420901/87635376
 移远EC20 Windows驱动
 https://download.csdn.net/download/guoruibin123/19886298
 移远EC20 R2.0 全网通4G模块软硬件设计技术资料包(包括模块封装+软硬件设计文档+软件驱动).zip 
 https://download.csdn.net/download/xieyunfei1999/88332693
 移远USB驱动V2.2.2 Quectel-LTE&5G-Windows-USB-Driver-V2.2.2 EC20最新驱动
 https://blog.csdn.net/yjz_0314/article/details/134142847
 Android11.0系统中适配EC20模块4G及GPS功能
 https://download.csdn.net/download/yjz_0314/88490693?spm=1001.2101.3001.9500
 Android11.0系统中适配EC20模块4G及GPS功能
 https://download.csdn.net/download/seasonfangjing/88073682
 RK3588S android13 ec20 modem移植
 https://blog.csdn.net/xierong1/article/details/127091908
 rk3399调试EC20 4G模块
还有 android 8.1 与5.1区别很大就是 系统权限
 Selinux
 ./device/rockchip/common/sepolicy/rild.te
 ./system/sepolicy/vendor/rild.te
 ./system/sepolicy/public/rild.te
 ./system/sepolicy/prebuilts/api/26.0/public/rild.te
 https://www.cnblogs.com/lialong1st/p/11266330.html
 https://blog.csdn.net/weixin_30273931/article/details/101681600
 RK3399 4G模块移远EC20移植调试
 https://download.csdn.net/download/weixin_44498318/18300885
 RK3399 安卓Q适配EC20 4G模块资料
 https://blog.csdn.net/linux_qian/article/details/90715599/
 rk3399添加EC25E/EC20...模组
搞来搞去搞了很久,差点放弃走人的时候,发现竟然是这点事。。。辛酸史如下:
 android6.01-----kernel4.4.36-----编译环境ubuntu16.04
 一、kernel driver
 内核有4种驱动方式,usb serial、CDC ACM、Gobinet、QMI WWAN,本文选用的是usb serial和QMI WWAN两种驱动。
(4)打开dongle功能
 /device/rockchip/common/BoardConfig.mk
 BOARD_HAVE_DONGLE ?= true
(5)检查
 logcat -b radio -v time    //查看log
 getprop init.svc.ril-daemon    //检查ril守护进程Runing
 cat init.rc | grep ril-daemon    //检查ril-daemon服务是否生效
 getenforce         //检查SELinux是否开启,<setenforce 0>命令关闭
 getprop gsm.version.ril-impl  //检查ril版本,出现Quectel_Android_RIL_SR01A41V17,如未出现ril库没有添加上,或者检查phone进程
 https://blog.csdn.net/weixin_43069863/article/details/126587254
 rk3568 4g 模块调试-ec20(移远模块)
如果无法上网,也可以尝试修改上网状态的选择模式
--- a/frameworks/base/telephony/java/com/android/internal/telephony/RILConstants.java
 +++ b/frameworks/base/telephony/java/com/android/internal/telephony/RILConstants.java
 @@ -237,7 +237,7 @@ public interface RILConstants {
      int PREFERRED_NETWORK_MODE = Optional.of(TelephonyProperties.default_network())
              .filter(list -> !list.isEmpty())
              .map(list -> list.get(0))
 -            .orElse(NETWORK_MODE_WCDMA_PREF);
 +            .orElse(NETWORK_MODE_LTE_GSM_WCDMA);
  
      int BAND_MODE_UNSPECIFIED = 0;      //"unspecified" (selected by baseband automatically)
      int BAND_MODE_EURO = 1;             //"EURO band" (GSM-900 / DCS-1800 / WCDMA-IMT-2000)
 https://blog.csdn.net/weixin_44498318/article/details/109289482
 Android:记录一下RK3399 安卓Q适配EC20 4G模块(附log)
4.2 SELinux权限问题
 添加权限:
 SELinux权限问题解决方法 - CSDN
 Selinux SeAndroid理解 - CSDN
 Android : SELinux 简析&修改 - 博客园
 默认关闭/开启权限:
 ANDROID10 关闭SELINUX权限方法 - 灰信网
 参考资料:
 http://www.friendlyelec.com.cn/agent.asp
 http://www.friendlyelec.com.cn/
 https://download.friendlyelec.com/NanoPC-T4
 https://wiki.friendlyelec.com/wiki/index.php/NanoPC-T4/zh#.E4.B8.8B.E8.BD.BDAndroid10.E6.BA.90.E4.BB.A3.E7.A0.81
 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.37562e8dcotDm6&id=570312633249&_u=7ju3ku004a
 友善NanoPC-T4瑞芯微RK3399开发板ROS双摄4K播放开源AI智能安卓10
WiKi维基教程(固件介绍,使用说明,操作步骤等)
 http://wiki.friendlyelec.com/wiki/index.php/NanoPC-T4
 系统固件下载
 https://dl.friendlyelec.com/nanopct4
 原理图(pdf格式)
 http://wiki.friendlyelec.com/wiki/images/e/e0/NanoPC-T4-1902-Schematic.pdf
 尺寸图(dxf格式)
 http://wiki.friendlyelec.com/wiki/images/b/bc/NanoPC-T4_1802_Drawing%28dxf%29.zip
 http://www.friendlyelec.com.cn/nanopi-m4.asp
 NanoPi M4 | NanoPi M4V2
https://wiki.friendlyelec.com/wiki/index.php/NanoPi_M4/zh
 15.3 编译Android10源代码
 15.3.1 下载Android10源代码
 有以下两种途径获取 Android10 的源代码,都需要联网:
使用网盘里的git repo压缩包
 网盘下载地址: 点击进入
https://download.friendlyelec.com/NanoPiM4
 https://pan.baidu.com/share/init?surl=oBLn9H31hILJKEPQXgrUog
 提取码:yn6r
相关文章:
20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】
20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】 2024/1/12 16:20 https://blog.csdn.net/u010164190/article/details/79096345 [Android6.0][RK3399] PCIe 接口 4G模块 EC20 调试记录 https://blog.csdn.net/hnjztyx/artic…...
日志采集传输框架之 Flume,将监听端口数据发送至Kafka
1、简介 Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传 输的系统。Flume 基于流式架构,主要有以下几个部分组成。 主要组件介绍: 1)、Flume Agent 是一个 JVM 进程…...
关于Vue前端接口对接的思考
关于Vue前端接口对接的思考 目录概述需求: 设计思路实现思路分析1.vue 组件分类和获取数值的方式2.http 通信方式 分类 如何对接3.vue 组件分类和赋值方式, 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your p…...
【设计模式之美】SOLID 原则之三:里式替换(LSP)跟多态有何区别?如何理解LSP中子类遵守父类的约定
文章目录 一. 如何理解“里式替换原则”?二. 哪些代码明显违背了 LSP?三. 回顾 一. 如何理解“里式替换原则”? 子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。 里氏替换原则…...
代码随想录第六十三天——被围绕的区域,太平洋大西洋水流问题,最大人工岛
leetcode 130. 被围绕的区域 题目链接:被围绕的区域 步骤一:深搜或者广搜将地图周边的’O’全部改成’A’ 步骤二:遍历地图,将’O’全部改成’X’,将’A’改回’O’ class Solution { private:int dir[4][2] {-1, 0…...
Docker 项目如何使用 Dockerfile 构建镜像?
1、Docker 和 Dockerfile 的重要性 1.1、Docker 简介:讲述 Docker 的起源、它是如何革新现代软件开发的,以及它为开发者和运维团队带来的好处。重点强调 Docker 的轻量级特性和它在提高应用部署、扩展和隔离方面的优势。 本文已收录于,我的…...
实践学习PaddleScience飞桨科学工具包
实践学习PaddleScience飞桨科学工具包 动手实践,在实践中学习!本项目可以在AIStudio平台一键运行!地址:https://aistudio.baidu.com/projectdetail/4278591 本项目第一次执行会报错,再执行一次即可。若碰到莫名其妙的…...
Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式
Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式 今天在项目中碰到一个 UI 改造的需求,需要根据设计图把页面升级成 UI 设计师提供的设计图样式。 到最后页面改造完了,但是 UI 提供的下拉菜单样式全部是黑色半透明的,只能硬着头皮改了。…...
达梦数据库主备集群
1:服务器硬件需求 按实际业务需求,选择合适的服务器,准备 3 台服务器,一台主库服务器,一台备库服务器,一台监视器服务器,服务器参数建议如下: 硬件要求物理内存>16 GB交换区Swa…...
Spark Doris Connector 可以支持通过 Spark 读取 Doris 数据类型不兼容报错解决
1、版本介绍: doris版本: 1.2.8Spark Connector for Apache Doris 版本: spark-doris-connector-3.3_2.12-1.3.0.jar:1.3.0-SNAPSHOTspark版本:spark-3.3.1 2、Spark Doris Connector Spark Doris Connector - Apache Doris 目…...
深入理解 go chan
go 里面,在实际程序运行的过程中,往往会有很多协程在执行,通过启动多个协程的方式,我们可以更高效地利用系统资源。 而不同协程之间往往需要进行通信,不同于以往多线程程序的那种通信方式,在 go 里面是通过…...
java+vue基于Spring Boot的渔船出海及海货统计系统
该渔船出海及海货统计系统采用B/S架构、前后端分离进行设计,并采用java语言以及springboot框架进行开发。该系统主要设计并完成了管理过程中的用户注册登录、个人信息修改、用户信息、渔船信息、渔船航班、海货价格、渔船海货、非法举报、渔船黑名单等功能。该系统操…...
Linux第25步_在虚拟机中备份“ST官方的TF-A源码”
TF-A是ARM公司提供的,ST公司通过修改它,做了一个自己的TF-A代码。因为在后期开发中,若硬件被改变了,我们需要通过修改"ST官方的TF-A源码"就可以自己的TF-A代码了。为了防止源文件被误改了,我们需要将"S…...
统计学-R语言-4.1
文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要,已有的R包或函数不能满足,可以在R中编写自己的函数。函数的定义格式如下所示: …...
C++(1) —— 基础语法入门
目录 一、C初识 1.1 第一个C程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 二、数据类型 2.1 整型 2.2 sizeof 关键字 2.3 实型(浮点型) 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 三…...
构建基于RHEL8系列(CentOS8,AlmaLinux8,RockyLinux8等)的支持63个常见模块的PHP8.1.20的RPM包
本文适用:rhel8系列,或同类系统(CentOS8,AlmaLinux8,RockyLinux8等) 文档形成时期:2023年 因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…...
Vue-插槽(Slots)
1. 介绍 在Vue.js中,插槽是一种强大的功能,它允许你创建可重用的模板,并在使用该模板的多个地方插入自定义内容。 插槽为你提供了一种方式,可以在父组件中定义一些“插槽”,然后在子组件中使用这些插槽,插…...
新火种AI|GPT-5前瞻!GPT-5将具备哪些新能力?
作者:小岩 编辑:彩云 Sam Altman在整个AI领域,乃至整个科技领域都被看作是极具影响力的存在,而2023年OpenAI无限反转的宫斗事件更是让Sam Altman刷足了存在感,他甚至被《时代》杂志评为“2023年度CEO”。 也正因此&…...
安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现
安防视频监控EasyCVR系统具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。EasyCVR平台可覆盖多类型的设备接入&am…...
spring cloud之集成sentinel
写在前面 源码 。 本文一起看下spring cloud的sentinel组件的使用。 1:准备 1.1:理论 对于一个系统来说,最重要的就是高可用,那么如何实现高可用呢?你可能会说,集群部署不就可以了,但事实并…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
