当前位置: 首页 > news >正文

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 提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传 输的系统。Flume 基于流式架构&#xff0c;主要有以下几个部分组成。 主要组件介绍&#xff1a; 1&#xff09;、Flume Agent 是一个 JVM 进程&#xf…...

关于Vue前端接口对接的思考

关于Vue前端接口对接的思考 目录概述需求&#xff1a; 设计思路实现思路分析1.vue 组件分类和获取数值的方式2.http 通信方式 分类 如何对接3.vue 组件分类和赋值方式&#xff0c; 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your p…...

【设计模式之美】SOLID 原则之三:里式替换(LSP)跟多态有何区别?如何理解LSP中子类遵守父类的约定

文章目录 一. 如何理解“里式替换原则”&#xff1f;二. 哪些代码明显违背了 LSP&#xff1f;三. 回顾 一. 如何理解“里式替换原则”&#xff1f; 子类对象能够替换程序中父类对象出现的任何地方&#xff0c;并且保证原来程序的逻辑行为不变及正确性不被破坏。 里氏替换原则…...

代码随想录第六十三天——被围绕的区域,太平洋大西洋水流问题,最大人工岛

leetcode 130. 被围绕的区域 题目链接&#xff1a;被围绕的区域 步骤一&#xff1a;深搜或者广搜将地图周边的’O’全部改成’A’ 步骤二&#xff1a;遍历地图&#xff0c;将’O’全部改成’X’&#xff0c;将’A’改回’O’ class Solution { private:int dir[4][2] {-1, 0…...

Docker 项目如何使用 Dockerfile 构建镜像?

1、Docker 和 Dockerfile 的重要性 1.1、Docker 简介&#xff1a;讲述 Docker 的起源、它是如何革新现代软件开发的&#xff0c;以及它为开发者和运维团队带来的好处。重点强调 Docker 的轻量级特性和它在提高应用部署、扩展和隔离方面的优势。 本文已收录于&#xff0c;我的…...

实践学习PaddleScience飞桨科学工具包

实践学习PaddleScience飞桨科学工具包 动手实践&#xff0c;在实践中学习&#xff01;本项目可以在AIStudio平台一键运行&#xff01;地址&#xff1a;https://aistudio.baidu.com/projectdetail/4278591 本项目第一次执行会报错&#xff0c;再执行一次即可。若碰到莫名其妙的…...

Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式

Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式 今天在项目中碰到一个 UI 改造的需求&#xff0c;需要根据设计图把页面升级成 UI 设计师提供的设计图样式。 到最后页面改造完了&#xff0c;但是 UI 提供的下拉菜单样式全部是黑色半透明的&#xff0c;只能硬着头皮改了。…...

达梦数据库主备集群

1&#xff1a;服务器硬件需求 按实际业务需求&#xff0c;选择合适的服务器&#xff0c;准备 3 台服务器&#xff0c;一台主库服务器&#xff0c;一台备库服务器&#xff0c;一台监视器服务器&#xff0c;服务器参数建议如下&#xff1a; 硬件要求物理内存>16 GB交换区Swa…...

Spark Doris Connector 可以支持通过 Spark 读取 Doris 数据类型不兼容报错解决

1、版本介绍&#xff1a; doris版本&#xff1a; 1.2.8Spark Connector for Apache Doris 版本&#xff1a; spark-doris-connector-3.3_2.12-1.3.0.jar:1.3.0-SNAPSHOTspark版本&#xff1a;spark-3.3.1 2、Spark Doris Connector Spark Doris Connector - Apache Doris 目…...

深入理解 go chan

go 里面&#xff0c;在实际程序运行的过程中&#xff0c;往往会有很多协程在执行&#xff0c;通过启动多个协程的方式&#xff0c;我们可以更高效地利用系统资源。 而不同协程之间往往需要进行通信&#xff0c;不同于以往多线程程序的那种通信方式&#xff0c;在 go 里面是通过…...

java+vue基于Spring Boot的渔船出海及海货统计系统

该渔船出海及海货统计系统采用B/S架构、前后端分离进行设计&#xff0c;并采用java语言以及springboot框架进行开发。该系统主要设计并完成了管理过程中的用户注册登录、个人信息修改、用户信息、渔船信息、渔船航班、海货价格、渔船海货、非法举报、渔船黑名单等功能。该系统操…...

Linux第25步_在虚拟机中备份“ST官方的TF-A源码”

TF-A是ARM公司提供的&#xff0c;ST公司通过修改它&#xff0c;做了一个自己的TF-A代码。因为在后期开发中&#xff0c;若硬件被改变了&#xff0c;我们需要通过修改"ST官方的TF-A源码"就可以自己的TF-A代码了。为了防止源文件被误改了&#xff0c;我们需要将"S…...

统计学-R语言-4.1

文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要&#xff0c;已有的R包或函数不能满足&#xff0c;可以在R中编写自己的函数。函数的定义格式如下所示&#xff1a; …...

C++(1) —— 基础语法入门

目录 一、C初识 1.1 第一个C程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 二、数据类型 2.1 整型 2.2 sizeof 关键字 2.3 实型&#xff08;浮点型&#xff09; 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 三…...

构建基于RHEL8系列(CentOS8,AlmaLinux8,RockyLinux8等)的支持63个常见模块的PHP8.1.20的RPM包

本文适用&#xff1a;rhel8系列&#xff0c;或同类系统(CentOS8,AlmaLinux8,RockyLinux8等) 文档形成时期&#xff1a;2023年 因系统版本不同&#xff0c;构建部署应略有差异&#xff0c;但本文未做细分&#xff0c;对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…...

Vue-插槽(Slots)

1. 介绍 在Vue.js中&#xff0c;插槽是一种强大的功能&#xff0c;它允许你创建可重用的模板&#xff0c;并在使用该模板的多个地方插入自定义内容。 插槽为你提供了一种方式&#xff0c;可以在父组件中定义一些“插槽”&#xff0c;然后在子组件中使用这些插槽&#xff0c;插…...

新火种AI|GPT-5前瞻!GPT-5将具备哪些新能力?

作者&#xff1a;小岩 编辑&#xff1a;彩云 Sam Altman在整个AI领域&#xff0c;乃至整个科技领域都被看作是极具影响力的存在&#xff0c;而2023年OpenAI无限反转的宫斗事件更是让Sam Altman刷足了存在感&#xff0c;他甚至被《时代》杂志评为“2023年度CEO”。 也正因此&…...

安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现

安防视频监控EasyCVR系统具备较强的兼容性&#xff0c;它可以支持国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。EasyCVR平台可覆盖多类型的设备接入&am…...

spring cloud之集成sentinel

写在前面 源码 。 本文一起看下spring cloud的sentinel组件的使用。 1&#xff1a;准备 1.1&#xff1a;理论 对于一个系统来说&#xff0c;最重要的就是高可用&#xff0c;那么如何实现高可用呢&#xff1f;你可能会说&#xff0c;集群部署不就可以了&#xff0c;但事实并…...

让车辆做到“耳听八方”,毫米波雷达芯片与系统设计

摘要: 毫米波雷达,是指工作在毫米波波段(一般为30~300GHz频域,波长1~10mm)探测的雷达。毫米波雷达体积小、质量轻、空间分辨率高,穿透“雾烟灰”的能力强,还具备全天候全天时工作的优势。在智能网联汽车体系中,毫米波雷达是系统感知层不可或缺的重要硬件,能让智能驾…...

Python如何实现数据驱动的接口自动化测试

大家在接口测试的过程中&#xff0c;很多时候会用到对CSV的读取操作&#xff0c;本文主要说明Python3对CSV的写入和读取。下面话不多说了&#xff0c;来一起看看详细的介绍吧。 1、需求 某API&#xff0c;GET方法&#xff0c;token,mobile,email三个参数 token为必填项mobil…...

高级分布式系统-第15讲 分布式机器学习--联邦学习

高级分布式系统汇总&#xff1a;高级分布式系统目录汇总-CSDN博客 联邦学习 两种常见的架构&#xff1a;客户-服务器架构和对等网络架构 联邦学习在传统的分布式机器学习基础上的变化。 传统的分布式机器学习&#xff1a;在数据中心或计算集群中使用并行训练&#xff0c;因为…...

小程序基础学习(事件处理)

原理&#xff1a;组件内部设置点击事件&#xff0c;然后冒泡到页面捕获点击事件 在组件内部设置点击事件 处理点击事件&#xff0c;并告诉页面 页面捕获点击事件 页面处理点击事件 组件代码 <!--components/my-info/my-info.wxml--> <view class"title"…...

网络协议与攻击模拟_01winshark工具简介

一、TCP/IP协议簇 网络接口层&#xff08;没有特定的协议&#xff09; 物理层&#xff1a;PPPOE宽带拨号&#xff08;应用场景&#xff1a;宽带拨号&#xff0c;运营商切网过来没有固定IP就需要拨号&#xff0c;家庭带宽一般都采用的是拨号方式&#xff09;数据链路层网络层…...

【linux学习笔记】网络

目录 【linux学习笔记】网络检查、监测网络ping-向网络主机发送特殊数据包traceroute-跟踪网络数据包的传输路径netstat-检查网络设置及相关统计数据 通过网络传输文件ftp 【linux学习笔记】网络 检查、监测网络 ping-向网络主机发送特殊数据包 最基本的网络连接命令就是pin…...

JUC-线程中断机制和LockSupport

线程中断机制 概念 java提供了一种用于停止线程的协商机制-中断。称为中断标识协商机制。 常用API public void interrupt() 仅仅让线程的中断标志位设置为true。不进行其他操作。public boolean isInterrupted() 获取中断标志位的状态。public static boolean interrupted…...

哈希表与哈希算法(Python系列30)

在讲哈希表数据结构和哈希算法之前&#xff0c;我想先刨析一下数组和python中的列表 首先来讲一下数组&#xff0c;我想在这提出一个疑问&#xff1a; 为什么数组通过索引查询数据的时间复杂度为O(1)&#xff0c;也就是不管数组有多大&#xff0c;算法的执行时间都是不变的。…...

『 C++ 』AVL树详解 ( 万字 )

&#x1f988;STL容器类型 在STL的容器中,分为几种容器: 序列式容器&#xff08;Sequence Containers&#xff09;: 这些容器以线性顺序存储元素&#xff0c;保留了元素的插入顺序。 支持随机访问&#xff0c;因此可以使用索引或迭代器快速访问任何位置的元素。 主要的序列式…...

Python下载安装pip方法与步骤_pip国内镜像

前提&#xff1a;下载安装好 python 打开命令提示符winR->cmd&#xff08;不需要进入 python&#xff0c;直接在终端输入指令执行即可&#xff0c;也可以再 pycharm 终端执行命令&#xff09;加入要安装ipython&#xff0c;需要执行以下命令&#xff1a; pip install **<…...

pycharm网站开发实例/百度扫一扫识别图片

学习 Python 之 Pygame 开发魂斗罗&#xff08;一&#xff09;Pygame回忆Pygame1. 使用pygame创建窗口2. 设置窗口背景颜色3. 获取窗口中的事件4. 在窗口中展示图片(1). pygame中的直角坐标系(2). 展示图片(3). 给部分区域设置颜色5. 在窗口中显示文字6. 播放音乐7. 图片翻转与…...

做平面免费接单网站/品牌网络营销案例

map:数据的插入 在构造map容器后&#xff0c;我们就可以往里面插入数据了。这里讲三种插入数据的方法&#xff1a;第一种&#xff1a;用insert函数插入pair数据map<int, string> mapStudent;mapStudent.insert(pair<int, string>(1,“student_one”)); 第二种&…...

淘宝客网站制作/百度一下 官方网

NumPy算术运算 NumPy 数组的“加减乘除”算术运算&#xff0c;分别对应 add()、subtract()、multiple() 以及 divide() 函数。 注意&#xff1a;做算术运算时&#xff0c;输入数组必须具有相同的形状&#xff0c;或者符合数组的广播规则&#xff0c;才可以执行运算。 下面看一…...

wordpress htaccess 404/识万物扫一扫

&#xff1f; EDGE的后续发展表明无线网卡的知识应该得到普及和常识&#xff1f;两台计算机如何共享Internet: 只有一个宽带接口并且不想购买无线路由器&#xff0c;使用桥接功能2008年7月30日类别: 无线Internet信息评论: 3浏览: 2601我相信大多数家庭用户都会同时拥有笔记本电…...

php如何自学做网站/新手怎么入行sem

01先来谈谈企业搭建大数据分析平台的背景1、搭建大数据平台离不开BI。在大数据之前&#xff0c;BI就已经存在很久了&#xff0c;简单把大数据等同于BI&#xff0c;明显是不恰当的。但两者又是紧密关联的&#xff0c;相辅相成的。BI是达成业务管理的应用工具&#xff0c;没有BI&…...

wordpress插件搬家/广告代发平台

本文实例讲述了JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;当网页被加载时&#xff0c;浏览器会创建页面的文档对象模型(Document Object Model)。HTML DOM 模型被构造为对象的树。通过可编程的对象…...