PX30 Android8.1适配AIC8800 wifi

news2025/1/10 23:24:14

wifi驱动生成ko文件 生成后 通过wpa_supplicant加载参数

external/wpa_supplicant_8/wpa_supplicant/main.c

int main(int argc, char *argv[])
{
	int ret = -1;
	char module_type[20]={0};

	wpa_printf(MSG_INFO,"argc = %d\n",argc);
	if(argc == 2) {
		if (wifi_type[0] == 0) {
			check_wifi_chip_type_string(wifi_type);
		}
		wpa_printf(MSG_INFO,"Current wifi chip is %s\n",wifi_type);
		if (0 == strncmp(wifi_type, "RTL", 3)) {
			wpa_printf(MSG_INFO,"Start rtl_wpa_supplicant\n");
			ret = read_wpa_param_config(REALTEK_MODULE_NAME,argv[1]);
		} else if (0 == strncmp(wifi_type, "AP", 2)) {
			wpa_printf(MSG_INFO,"Start bcm_wpa_supplicant\n");
			ret = read_wpa_param_config(BROADCOM_MODULE_NAME,argv[1]);
		} else if (0 == strncmp(wifi_type, "SSV", 3)) {
			wpa_printf(MSG_INFO,"Start ssv_wpa_supplicant\n");
			ret = read_wpa_param_config(SSV_MODULE_NAME,argv[1]);
		} else if (0 == strncmp(wifi_type, "ESP", 3)) {
			wpa_printf(MSG_INFO,"Start esp_wpa_supplicant\n");
			ret = read_wpa_param_config(ESP_MODULE_NAME,argv[1]);
		} else if (0 == strncmp(wifi_type, "AIC", 3)) {
			wpa_printf(MSG_INFO,"Start aic_wpa_supplicant\n");
			ret = read_wpa_param_config(AIC_MODULE_NAME,argv[1]);
		} else {
			wpa_printf(MSG_INFO,"Start wpa_supplicant\n");
			sprintf(module_type,"[%s]",wifi_type);
			ret = read_wpa_param_config(module_type,argv[1]);
		}
	} else {
		wpa_printf(MSG_INFO,"Start wpa_supplicant\n");
		ret = main_loop(argc, argv);
	}
	return ret;
}

这里的意思就是加载这个aic开头的

#define AIC_MODULE_NAME "[aic]"

地址在device/rockchip/common/wpa_config.txt

[broadcom]
/vendor/bin/hw/wpa_supplicant
-iwlan0
-Dnl80211
-c/data/misc/wifi/wpa_supplicant.conf
-I/vendor/etc/wifi/p2p_supplicant_overlay.conf
-puse_p2p_group_interface=1p2p_device=1
-m/data/misc/wifi/p2p_supplicant.conf
-e/data/misc/wifi/entropy.bin
-O/data/misc/wifi/sockets
-g@android:wpa_wlan0

[realtek]
/vendor/bin/hw/wpa_supplicant
-ip2p0
-Dnl80211
-c/data/misc/wifi/p2p_supplicant.conf
-e/data/misc/wifi/entropy.bin
-N
-iwlan0
-Dnl80211
-c/data/misc/wifi/wpa_supplicant.conf
-O/data/misc/wifi/sockets
-g@android:wpa_wlan0

[ssv]
/vendor/bin/hw/wpa_supplicant
-ip2p0 -Dnl80211
-c/data/misc/wifi/p2p_supplicant.conf
-I/vendor/etc/wifi/p2p_supplicant.conf
-e/data/misc/wifi/entropy.bin
-N
-iwlan0
-Dnl80211
-c/data/misc/wifi/wpa_supplicant.conf
-O/data/misc/wifi/sockets
-g@android:wpa_wlan0

[esp]
/vendor/bin/hw/wpa_supplicant
-iwlan0
-Dnl80211
-c/data/misc/wifi/wpa_supplicant.conf
-I/system/etc/wifi/wpa_supplicant_overlay.conf
-N
-ip2p0
-Dnl80211
-c/data/misc/wifi/p2p_supplicant.conf
-I/system/etc/wifi/p2p_supplicant_overlay.conf
-O/data/misc/wifi/sockets
-puse_p2p_group_interface=1
-e/data/misc/wifi/entropy.bin
-g@android:wpa_wlan0

[mvl]
/vendor/bin/hw/wpa_supplicant
-ip2p0
-Dnl80211
-c/data/misc/wifi/p2p_supplicant.conf
-e/data/misc/wifi/entropy.bin
-N
-iuap0
-Dnl80211
-c/data/misc/wifi/wpa_supplicant.conf
-N
-iwlan0
-Dnl80211
-c/data/misc/wifi/wpa_supplicant.conf
-O/data/misc/wifi/sockets
-g@android:wpa_wlan0

[aic]
/vendor/bin/hw/wpa_supplicant
-iwlan0
-Dnl80211
-c/data/misc/wifi/wpa_supplicant.conf
-I/vendor/etc/wifi/p2p_supplicant_overlay.conf
-m/data/misc/wifi/p2p_supplicant.conf
-e/data/misc/wifi/entropy.bin
-O/data/misc/wifi/sockets
-puse_p2p_group_interface=1
-g@android:wpa_wlan0

通过aic找到后,加载上面的参数

备注:

1.AIC8800 wifi生成的ko文件并不会自动导入vendor/lib/module/wifi,需要自己修改

device/rockchip/common/mkimage.sh

device/rockchip/common/build_wifi_ko.sh

类似下面这样找到对应ko文件 然后移动到vendor/lib/modules/wifi/

#!/bin/bash
TARGET_ARCH=$1
TARGET_OUT_VENDOR=$2
echo "---- make wifi ko  ----"
echo "TARGET_ARCH = $TARGET_ARCH"

#make -C kernel ARCH=$TARGET_ARCH  modules -j8

mkdir -p $TARGET_OUT_VENDOR/lib/modules/wifi

find kernel/drivers/net/wireless/*  -name "*.ko" | \
xargs -n1 -i cp {} $TARGET_OUT_VENDOR/lib/modules/wifi/
echo "Install wifi ko to $TARGET_OUT_VENDOR/lib/modules/wifi/"
if [ `grep "CONFIG_WIFI_BUILD_MODULE=y" $KERNEL_CONFIG` ]; then
    echo "Install wifi ko to $TARGET_OUT_VENDOR/lib/modules/wifi/"
    mkdir -p $TARGET_OUT_VENDOR/lib/modules/wifi
    find kernel/drivers/net/wireless/*  -name "*.ko" | xargs -n1 -i cp {} $TARGET_OUT_VENDOR/lib/modules/wifi/
fi

2.如果wifi打不开 一般是wifi ko驱动有问题 没有正常加载

3.只要wifi可以正常扫描 说明驱动已经正常 如果不能正常连接到wifi 需要注意是否找到对应wpa_config.txt内的参数 以及wpa_supplicant和p2p_supplicant的地址是否正确 以及是否正常加载

4.另外可以使用strace wpa_cli -i wlan0查看wlan0的情况,有可能是wlan0没有生成,那需要修改如下,正常情况下,指定位置下应该有个wlan0

如果没有,需要注意是否没添加wlan0

hardware/interfaces/wifi/1.1/default/wifi_legacy_hal.cpp

std::string WifiLegacyHal::getP2pIfaceName() {
  std::array<char, PROPERTY_VALUE_MAX> buffer;
  property_get("wifi.direct.interface", buffer.data(), "p2p-dev-wlan0");
  // property_get("wifi.direct.interface", buffer.data(), "p2p0");
  return buffer.data();
}

又有可能是权限不对,日志如下

execve("/sbin/wpa_cli", ["wpa_cli", "-i", "wlan0"], [/* 43 vars */]) = 0
brk(NULL)                               = 0xf68000
uname({sysname="Linux", nodename="raspberrypi_22", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76f52000
access("/etc/ld.so.preload", R_OK)      = 0
open("/etc/ld.so.preload", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=42, ...}) = 0
mmap2(NULL, 42, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0x76f51000
close(3)                                = 0
open("/usr/lib/arm-linux-gnueabihf/libarmmem.so", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\210\5\0\0004\0\0\0"..., 512) = 512
lseek(3, 20868, SEEK_SET)               = 20868
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1000) = 1000
lseek(3, 20540, SEEK_SET)               = 20540
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\1\n\3\f\1\22\4\24"..., 45) = 45
fstat64(3, {st_mode=S_IFREG|0644, st_size=21868, ...}) = 0
mmap2(NULL, 86080, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76f0f000
mprotect(0x76f14000, 61440, PROT_NONE)  = 0
mmap2(0x76f23000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4000) = 0x76f23000
close(3)                                = 0
munmap(0x76f51000, 42)                  = 0
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=86371, ...}) = 0
mmap2(NULL, 86371, PROT_READ, MAP_PRIVATE, 3, 0) = 0x76ef9000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0 \27\0\0004\0\0\0"..., 512) = 512
lseek(3, 25352, SEEK_SET)               = 25352
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1280) = 1280
lseek(3, 24940, SEEK_SET)               = 24940
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0644, st_size=26632, ...}) = 0
mmap2(NULL, 90640, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76ee2000
mprotect(0x76ee8000, 61440, PROT_NONE)  = 0
mmap2(0x76ef7000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5000) = 0x76ef7000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libreadline.so.7", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\354\323\0\0004\0\0\0"..., 512) = 512
lseek(3, 239016, SEEK_SET)              = 239016
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1040) = 1040
lseek(3, 238680, SEEK_SET)              = 238680
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 45) = 45
fstat64(3, {st_mode=S_IFREG|0644, st_size=240056, ...}) = 0
mmap2(NULL, 309004, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76e96000
mprotect(0x76ecc000, 65536, PROT_NONE)  = 0
mmap2(0x76edc000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x36000) = 0x76edc000
mmap2(0x76ee1000, 1804, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x76ee1000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0@h\1\0004\0\0\0"..., 512) = 512
lseek(3, 1231820, SEEK_SET)             = 1231820
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2880) = 2880
lseek(3, 1228284, SEEK_SET)             = 1228284
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0755, st_size=1234700, ...}) = 0
mmap2(NULL, 1303872, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76d57000
mprotect(0x76e80000, 65536, PROT_NONE)  = 0
mmap2(0x76e90000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x129000) = 0x76e90000
mmap2(0x76e93000, 9536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x76e93000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0dI\0\0004\0\0\0"..., 512) = 512
lseek(3, 125740, SEEK_SET)              = 125740
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1560) = 1560
lseek(3, 90536, SEEK_SET)               = 90536
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0755, st_size=127300, ...}) = 0
mmap2(NULL, 164432, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76d2e000
mprotect(0x76d44000, 61440, PROT_NONE)  = 0
mmap2(0x76d53000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15000) = 0x76d53000
mmap2(0x76d55000, 4688, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x76d55000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\354`\0\0004\0\0\0"..., 512) = 512
lseek(3, 123728, SEEK_SET)              = 123728
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1080) = 1080
lseek(3, 123380, SEEK_SET)              = 123380
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 45) = 45
fstat64(3, {st_mode=S_IFREG|0644, st_size=124808, ...}) = 0
mmap2(NULL, 190044, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76cff000
mprotect(0x76d1b000, 65536, PROT_NONE)  = 0
mmap2(0x76d2b000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c000) = 0x76d2b000
close(3)                                = 0
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76f50000
set_tls(0x76f50b20, 0x76f511f8, 0x76f56050, 0x76f50b20, 0x76f56050) = 0
mprotect(0x76e90000, 8192, PROT_READ)   = 0
mprotect(0x76d2b000, 8192, PROT_READ)   = 0
mprotect(0x76d53000, 4096, PROT_READ)   = 0
mprotect(0x76edc000, 4096, PROT_READ)   = 0
mprotect(0x76ef7000, 4096, PROT_READ)   = 0
mprotect(0x76f0f000, 20480, PROT_READ|PROT_WRITE) = 0
mprotect(0x76f0f000, 20480, PROT_READ|PROT_EXEC) = 0
cacheflush(0x76f0f000, 0x76f14000, 0, 0x15, 0) = 0
mprotect(0x76f23000, 4096, PROT_READ)   = 0
mprotect(0x32000, 4096, PROT_READ)      = 0
mprotect(0x76f55000, 4096, PROT_READ)   = 0
munmap(0x76ef9000, 86371)               = 0
set_tid_address(0x76f506c8)             = 5279
set_robust_list(0x76f506d0, 12)         = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x76d322b0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x76d836c0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x76d32390, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x76d836c0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
ugetrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
brk(NULL)                               = 0xf68000
brk(0xf89000)                           = 0xf89000
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
write(1, "wpa_cli v2.4\n", 13wpa_cli v2.4
)          = 13
write(1, "Copyright (c) 2004-2015, Jouni M"..., 67Copyright (c) 2004-2015, Jouni Malinen <j@w1.fi> and contributors

) = 67
write(1, "This software may be distributed"..., 98This software may be distributed under the terms of the BSD license.
See README for more details.
) = 98
write(1, "\n\n", 2

)                     = 2
rt_sigaction(SIGINT, {sa_handler=0x1b268, sa_mask=[INT], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x76d836b0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGTERM, {sa_handler=0x1b268, sa_mask=[TERM], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x76d836b0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
write(1, "\nInteractive mode\n", 18
Interactive mode
)    = 18
write(1, "\n", 1
)                       = 1
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49160, tv_nsec=585537842}) = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49160, tv_nsec=585803778}) = 0
_newselect(1, [], [], [], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49160, tv_nsec=586209974}) = 0
socket(AF_UNIX, SOCK_DGRAM, 0)          = 3
getpid()                                = 5279
bind(3, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_5279-1"}, 110) = 0
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/wpa_supplicant/wlan0"}, 110) = -1 EACCES (Permission denied)
close(3)                                = 0
unlink("/tmp/wpa_ctrl_5279-1")          = 0
write(1, "Could not connect to wpa_supplic"..., 55Could not connect to wpa_supplicant: wlan0 - re-trying
) = 55
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49160, tv_nsec=588232098}) = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49160, tv_nsec=588463660}) = 0
_newselect(1, [], [], [], {tv_sec=0, tv_usec=999769}) = 0 (Timeout)
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49161, tv_nsec=589713629}) = 0
socket(AF_UNIX, SOCK_DGRAM, 0)          = 3
getpid()                                = 5279
bind(3, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_5279-2"}, 110) = 0
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/wpa_supplicant/wlan0"}, 110) = -1 EACCES (Permission denied)
close(3)                                = 0
unlink("/tmp/wpa_ctrl_5279-2")          = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49161, tv_nsec=591746170}) = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49161, tv_nsec=591970960}) = 0
_newselect(1, [], [], [], {tv_sec=0, tv_usec=999776}) = 0 (Timeout)
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49162, tv_nsec=593354264}) = 0
socket(AF_UNIX, SOCK_DGRAM, 0)          = 3
getpid()                                = 5279
bind(3, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_5279-3"}, 110) = 0
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/wpa_supplicant/wlan0"}, 110) = -1 EACCES (Permission denied)
close(3)                                = 0
unlink("/tmp/wpa_ctrl_5279-3")          = 0

请查看

connect(3, {sa_family=AF_UNIX, sun_path="/var/run/wpa_supplicant/wlan0"}, 110) = -1 EACCES (Permission denied)

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

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

相关文章

【MySQL】数据库基础(表的操作)

目录 一、创建表 二、查看表结构 三、修改表 3.1 添加新列 3.2 修改列属性 3.3 删除列属性 3.4 修改表名 3.5 向表中插入 3.6 修改列名 四、删除表 一、创建表 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) …

docker容器安全加固参考建议——筑梦之路

这里主要是rootless的方案。 在以 root 用户身份运行 Docker 会带来一些潜在的危害和安全风险&#xff0c;这些风险包括&#xff1a; 容器逃逸&#xff1a;如果一个容器以 root 权限运行&#xff0c;并且它包含了漏洞或者被攻击者滥用&#xff0c;那么攻击者可能会成功逃出容器…

车载camera avm框图

一、关键词介绍: POC: power on coax LVDS: Low-Voltage Differential Signaling GMSL:Gigabit Multimedia Serial Link AVM: Around View Monitor Serdes:DeSerializer、Serializer DVP:Interface with ISP and Sensor: DVP(Digital Video Port) 二、车载camera avm…

书籍推荐:大数据之路 阿里巴巴大数据实践

书籍推荐&#xff1a;大数据之路 阿里巴巴大数据实践 这本书侧重于理论知识&#xff0c;并结合了阿里大数据发展的过程&#xff0c;将知识总结起来。总的来所&#xff0c;书中的有些章节个人感觉非常不错&#xff0c;比如&#xff1a;数据仓库建模&#xff1b;但是大部分章节都…

性能优化理论篇 | 如何保证数据安全落盘,5分钟彻底弄懂 一次write中的各种缓冲区 !

性能优化系列目录&#xff1a; 性能优化理论篇 | 彻底弄懂系统平均负载 性能优化理论篇 | swap area是个什么东西 性能优化理论篇 | Cache VS Buffer&#xff0c;傻傻分不清 &#xff1f; 在很多IO场景中&#xff0c;我们经常需要确保数据已经安全的写到磁盘上&#xff0c;以便…

xss之DOM破坏

文章目录 DOM破坏漏洞的复现https://xss.pwnfunction.com/基于bp学院DOM破坏漏洞复现思路分析实现 常见的xss触发的标签没有过滤的情况存在过滤的情况 DOM破坏 DOM破坏就是⼀种将 HTML 代码注⼊⻚⾯中以操纵 DOM 并最终更改⻚⾯上 JavaScript ⾏为的技术。 在⽆法直接 XSS的情…

Linux·权限与工具-make

1. Makefile/makefile工具 首先展示一下&#xff0c;makefile工具如何使用。我们先写一个C语言程序 然后我们建立一个Makefile/makefile文件&#xff0c;m大小写均可。我们在文件中写入这样两行 wq保存退出后&#xff0c;我们使用 make 命令 可以看到生成了可执行程序&#xff…

无人机模拟训练室技术详解

无人机模拟训练室作为现代无人机技术培训的重要组成部分&#xff0c;集成了高精度模拟技术、先进的数据处理能力及高度交互的操作界面&#xff0c;为无人机操作员提供了一个安全、高效、接近实战的训练环境。以下是对无人机模拟训练室技术的详细解析&#xff0c;涵盖系统基础概…

为TI的 AM355移植uboot和linux内核

一、uboot移植 在移植之前要先对uboot的源码结构有一定熟悉 1.uboot源码顶层目录下各源码文件夹的作用 2.编译后生成的uboot.xxx 各文件后缀含义 关于以上两点社区已经有很多前辈总结的很详细&#xff0c;这里不做赘述。 对于uboot源码分析韦东山老师b站上有免费的课程&#x…

QT中Charts基本用法

QT中Charts基本用法 第一步:创建工程,添加Charts库 第二步:添加charts视图 注意要打上对钩 第三步:添加所需成员 第四步:编写初始化函数 第五步:添加测试数据

C++学习笔记之算法模板

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、双指针1.1 有序数组的合并1.2 快慢指针/删除有序数组中的重复项1.3 求和 二、动态规划2.1 自底向上和自顶向下&#xff08;带备忘录&#xff09;2.2 带有当前状…

浅谈哈希长度扩展攻击

攻击原理&#xff1a; 我们首先需要了解一下Message Authentication codes (MACs) &#xff0c;称为消息验证码&#xff0c;一般用于服务器验证消息的真实性。服务器把密钥和消息连接起来&#xff0c;用摘要算法获取摘要&#xff0c;对于H&#xff08;secret data&#xff09…

RabbitMq的基本理解

MQ概念及同步异步&#xff1a; 同步调用&#xff1a; 是一种编程模型&#xff0c;其中调用者发送请求并等待响应。在同步调用中&#xff0c;调用者会阻塞&#xff0c;直到被调用的方法返回结果。 异步调用: 是一种编程模型&#xff0c;其中调用者发送请求后立即返回&#x…

09结构型设计模式——组合模式

一、组合模式的简介 组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;主要用于处理树形结构中的对象组合问题。它允许你将对象组合成树形结构&#xff0c;以表示部分-整体层次结构。组合模式使得客户端能够统一地对待单个对象和对象组合&a…

SEREN MC2电源匹配器控制器Matching Network Controller手侧

SEREN MC2电源匹配器控制器Matching Network Controller手侧

NC 反转链表

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定一个单链…

亲测解决Bundler HTTPError Could not fetch specs from

这个问题源于ruby的网站连接不上&#xff0c;解决方法是修改网页地址或者网络配置。 环境 win11 ruby 问题原文 Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from https://rubygems.org/ due to underlying error <IO::TimeoutEr…

C# 将Dll嵌入exe中发布

一、制作模版Dll 二、在exe工程中添加Dll 1、添加上述“创建Dll”&#xff0c;并修改属性为&#xff1a;不复制到输出目录的嵌入资源 2、引用“Resource”中的dll文件&#xff0c;并修改属性&#xff1a;不复制到本地 三、添加重载Dll代码 1、添加以下代码 class DependentFi…

Modbus 通信协议详解

目录 一、概述二、Modbus 的作用三、Modbus 的工作原理1、四种数据类型2、三种工作模式3、三类功能码3.1 标志功能码3.2 Modbus 封装接口3.3 异常 4、Modbus 协议层4.1 协议数据单元4.2 访问数据4.3 数据模型寻址4.3.1 数据寻址范围4.3.2 数据地址起始值 4.4 大数据类型4.4.1 位…

频率检测计

前言 频率计是一种用于测量信号频率的仪器。它可以准确地确定电子信号的频率&#xff0c;广泛应用于电子设备的测试和维护中。频率计的工作原理通常包括对输入信号进行采样&#xff0c;并通过内部电路计算信号的周期&#xff0c;从而得到频率值。现代频率计通常具有高精度、高稳…