Android vendor.img中文件执行权问题

问题

Android 9、11往vendor.img增加文件,烧写到设备后发现增加的可执行文件没有执行权限。经过漫长查找,终于找到了问题的根源,谨以此篇献给哪些脚踏实地的人们。

根本原因

system/core/libcutils/fs_config.cpp文件,fs_config函数根据android_dirs、android_files中的配置修改文件的uid、gui、mode(权限)。除了/vendor/bin/、/vendor/xbin/目录下的文件的有执行权限,/vendor目录下的其他文件都没有执行权限。

vendor.img是如何生成的

build/core/Makefile

INSTALLED_VENDORIMAGE_TARGET 

3314 # We just build this directly to the install location.
3315 INSTALLED_VENDORIMAGE_TARGET := $(BUILT_VENDORIMAGE_TARGET)
3316 $(INSTALLED_VENDORIMAGE_TARGET): \
3317     $(INTERNAL_USERIMAGES_DEPS) \
3318     $(INTERNAL_VENDORIMAGE_FILES) \
3319     $(INSTALLED_FILES_FILE_VENDOR) \
3320     $(RECOVERY_FROM_BOOT_PATCH)
3321     $(build-vendorimage-target)

build-vendorimage-target

BUILT_VENDORIMAGE_TARGET

3294 vendorimage_intermediates := \
3295     $(call intermediates-dir-for,PACKAGING,vendor)
3296 BUILT_VENDORIMAGE_TARGET := $(PRODUCT_OUT)/vendor.img
3297 define build-vendorimage-target
3298   # $(hide) /usr/bin/python build/tools/rcmerge.py $(subst full_,,$(TARGET_PRODUCT)) vnd
3299   $(call pretty,"Target vendor fs image: $(INSTALLED_VENDORIMAGE_TARGET)")
3300   @mkdir -p $(TARGET_OUT_VENDOR)
3301   @rm -rf $(TARGET_OUT_VENDOR)/avm
3302   @mkdir -p $(TARGET_OUT_VENDOR)/avm
3303   $(call create-vendor-odm-symlink)
3304   @mkdir -p $(vendorimage_intermediates) && rm -rf $(vendorimage_intermediates)/vendor_image_info.txt
3305   $(hide) cp -rf $(TOP)/vendor/autochips/proprietary/frameworks/base/avm/file/* $(TARGET_OUT_VENDOR)/avm
3306   $(call generate-image-prop-dictionary, $(vendorimage_intermediates)/vendor_image_info.txt,vendor,skip_fsck=true)
3307   PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
3308       $(BUILD_IMAGE) \
3309           $(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt \
3310           $(INSTALLED_VENDORIMAGE_TARGET) $(TARGET_OUT)
3311   $(call assert-max-image-size,$(INSTALLED_VENDORIMAGE_TARGET) $(RECOVERY_FROM_BOOT_PATCH),$(BOARD_VENDORIMAGE_PARTITION_SIZE))
3312 endef

build_image

build/core/config.mk

635 BUILD_IMAGE := $(HOST_OUT_EXECUTABLES)/build_image$(HOST_EXECUTABLE_SUFFIX)

out/host/linux-x86/bin/build_image

Builds output_image from the given input_directory, properties_file,
and writes the image to target_output_directory.Usage:  build_image input_directory properties_file output_image \target_output_directory

build_image.py

build/tools/releasetools/build_image.py

BuildImageMkfs

231 def BuildImageMkfs(in_dir, prop_dict, out_file, target_out, fs_config):
232   """Builds a pure image for the files under in_dir and writes it to out_file.
233
234   Args:
235     in_dir: Path to input directory.
236     prop_dict: A property dict that contains info like partition size. Values
237         will be updated with computed values.
238     out_file: The output image file.
239     target_out: Path to the TARGET_OUT directory as in Makefile. It actually
240         points to the /system directory under PRODUCT_OUT. fs_config (the one
241         under system/core/libcutils) reads device specific FS config files from
242         there.
243     fs_config: The fs_config file that drives the prototype
244
245   Raises:
246     BuildImageError: On build image failures.
247   """

 build_command

mkuserimg_mke2fs -s out/target/product/ac8257_64bit/vendor out/target/product/ac8257_64bit/vendor.img ext4 vendor 825540608 -j 0 -D out/target/product/ac8257_64bit/system -L vendor -M 0 --inode_size 256  out/target/product/ac8257_64bit/obj/ETC/file_contexts.bin_intermediates/file_contexts.bin

mkuserimg_mke2fs.py

system/extras/ext4_utils/mkuserimg_mke2fs.py

mke2fs
Usage: mke2fs [-c|-l filename] [-b block-size] [-C cluster-size][-i bytes-per-inode] [-I inode-size] [-J journal-options][-G flex-group-size] [-N number-of-inodes] [-d root-directory][-m reserved-blocks-percentage] [-o creator-os][-g blocks-per-group] [-L volume-label] [-M last-mounted-directory][-O feature[,...]] [-r fs-revision] [-E extended-option[,...]][-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file][-jnqvDFSV] device [blocks-count]
MKE2FS_CONFIG=out/soong/.temp/tmpGyRCz5mke2fs -O ^has_journal -L vendor -I 256  -M /vendor -m 0 -E android_sparse -t ext4 -b 4096 out/target/product/ac8257_64bit/vendor.img 201548
e2fsdroid
e2fsdroid -p out/target/product/ac8257_64bit/system -S out/target/product/ac8257_64bit/obj/ETC/file_contexts.bin_intermediates/file_contexts.bin -f out/target/product/ac8257_64bit/vendor -a /vendor out/target/product/ac8257_64bit/vendor.img

file_contexts

obj/ETC/file_contexts.bin_intermediates

system/sepolicy/private/file_contexts
device/autochips/sepolicy/basic/plat_private/file_contexts
device/autochips/sepolicy/bsp/plat_private/file_contexts

SetUpInDirAndFsConfig

e2fsdroid源在何处

external/e2fsprogs/contrib/android/e2fsdroid.c 

Usage

e2fsdroid [-B block_list] [-D basefs_out] [-T timestamp][-C fs_config] [-S file_contexts] [-p product_out][-a mountpoint] [-d basefs_in] [-f src_dir] [-e] [-s] image

android_configure_fs

326 errcode_t android_configure_fs(ext2_filsys fs, char *src_dir, char *target_out,
327                    char *mountpoint,
328                    struct selinux_opt *seopts EXT2FS_ATTR((unused)),
329                    unsigned int nopt EXT2FS_ATTR((unused)),
330                    char *fs_config_file, time_t fixed_time,
331                    const struct ugid_map* uid_map,
332                    const struct ugid_map* gid_map)
333 {359     /* Load the FS config */
360     if (fs_config_file) {
361         retval = load_canned_fs_config(fs_config_file);
362         if (retval < 0) {
363             com_err(__func__, retval,
364                 _("while loading fs_config \"%s\""),
365                 fs_config_file);
366             return retval;
367         }
368         fs_config_func = canned_fs_config;
369     } else if (mountpoint)
370         fs_config_func = fs_config;
371
372     return __android_configure_fs(fs, src_dir, target_out, mountpoint,
373                       fs_config_func, sehnd, fixed_time,
374                       uid_map, gid_map);
375 }

fs_config

system/core/libcutils/fs_config.cpp文件,fs_config函数根据android_dirs、android_files中的配置修改文件的uid、gui、mode(权限)。除了/vendor/bin/、/vendor/xbin/目录下的文件的有执行权限,/vendor目录下的其他文件都没有执行权限。

366     for (pc = dir ? android_dirs : android_files; pc->prefix; pc++) {
367         if (fs_config_cmp(dir, pc->prefix, strlen(pc->prefix), path, plen)) {
368             break;
369         }
370     }
371     *uid = pc->uid;
372     *gid = pc->gid;
373     *mode = (*mode & (~07777)) | pc->mode;
374     *capabilities = pc->capabilities;
375 }

 android_dirs

 59 static const struct fs_path_config android_dirs[] = {60         // clang-format off61     { 00770, AID_SYSTEM,       AID_CACHE,        0, "cache" },62     { 00555, AID_ROOT,         AID_ROOT,         0, "config" },63     { 00771, AID_SYSTEM,       AID_SYSTEM,       0, "data/app" },64     { 00771, AID_SYSTEM,       AID_SYSTEM,       0, "data/app-private" },65     { 00771, AID_SYSTEM,       AID_SYSTEM,       0, "data/app-ephemeral" },66     { 00771, AID_ROOT,         AID_ROOT,         0, "data/dalvik-cache" },67     { 00771, AID_SYSTEM,       AID_SYSTEM,       0, "data/data" },68     { 00771, AID_SHELL,        AID_SHELL,        0, "data/local/tmp" },69     { 00771, AID_SHELL,        AID_SHELL,        0, "data/local" },70     { 00770, AID_DHCP,         AID_DHCP,         0, "data/misc/dhcp" },71     { 00771, AID_SHARED_RELRO, AID_SHARED_RELRO, 0, "data/misc/shared_relro" },72     { 01771, AID_SYSTEM,       AID_MISC,         0, "data/misc" },73     { 00775, AID_MEDIA_RW,     AID_MEDIA_RW,     0, "data/media/Music" },74     { 00775, AID_MEDIA_RW,     AID_MEDIA_RW,     0, "data/media" },75     { 00750, AID_ROOT,         AID_SHELL,        0, "data/nativetest" },76     { 00750, AID_ROOT,         AID_SHELL,        0, "data/nativetest64" },77     { 00750, AID_ROOT,         AID_SHELL,        0, "data/benchmarktest" },78     { 00750, AID_ROOT,         AID_SHELL,        0, "data/benchmarktest64" },79     { 00775, AID_ROOT,         AID_ROOT,         0, "data/preloads" },80     { 00771, AID_SYSTEM,       AID_SYSTEM,       0, "data" },81     { 00755, AID_ROOT,         AID_SYSTEM,       0, "mnt" },82     { 00751, AID_ROOT,         AID_SHELL,        0, "product/bin" },83     { 00777, AID_ROOT,         AID_ROOT,         0, "sdcard" },84     { 00751, AID_ROOT,         AID_SDCARD_R,     0, "storage" },85     { 00751, AID_ROOT,         AID_SHELL,        0, "system/bin" },86     { 00755, AID_ROOT,         AID_ROOT,         0, "system/etc/ppp" },87     { 00755, AID_ROOT,         AID_SHELL,        0, "system/vendor" },88     { 00751, AID_ROOT,         AID_SHELL,        0, "system/xbin" },89     { 00751, AID_ROOT,         AID_SHELL,        0, "system/apex/*/bin" },90     { 00751, AID_ROOT,         AID_SHELL,        0, "system_ext/bin" },91     { 00751, AID_ROOT,         AID_SHELL,        0, "system_ext/apex/*/bin" },92     { 00751, AID_ROOT,         AID_SHELL,        0, "vendor/bin" },93     { 00755, AID_ROOT,         AID_SHELL,        0, "vendor" },94     { 00755, AID_ROOT,         AID_ROOT,         0, 0 },95         // clang-format on96 };

android_files

139 static const struct fs_path_config android_files[] = {
140         // clang-format off
141     { 00644, AID_SYSTEM,    AID_SYSTEM,    0, "data/app/*" },
142     { 00644, AID_SYSTEM,    AID_SYSTEM,    0, "data/app-ephemeral/*" },
143     { 00644, AID_SYSTEM,    AID_SYSTEM,    0, "data/app-private/*" },
144     { 00644, AID_APP,       AID_APP,       0, "data/data/*" },
145     { 00644, AID_MEDIA_RW,  AID_MEDIA_RW,  0, "data/media/*" },
146     { 00640, AID_ROOT,      AID_SHELL,     0, "data/nativetest/tests.txt" },
147     { 00640, AID_ROOT,      AID_SHELL,     0, "data/nativetest64/tests.txt" },
148     { 00750, AID_ROOT,      AID_SHELL,     0, "data/nativetest/*" },
149     { 00750, AID_ROOT,      AID_SHELL,     0, "data/nativetest64/*" },
150     { 00750, AID_ROOT,      AID_SHELL,     0, "data/benchmarktest/*" },
151     { 00750, AID_ROOT,      AID_SHELL,     0, "data/benchmarktest64/*" },
152     { 00600, AID_ROOT,      AID_ROOT,      0, "default.prop" }, // legacy
153     { 00600, AID_ROOT,      AID_ROOT,      0, "system/etc/prop.default" },
154     { 00600, AID_ROOT,      AID_ROOT,      0, "odm/build.prop" }, // legacy; only for P release
155     { 00600, AID_ROOT,      AID_ROOT,      0, "odm/default.prop" }, // legacy; only for P release
156     { 00600, AID_ROOT,      AID_ROOT,      0, "odm/etc/build.prop" },
157     { 00444, AID_ROOT,      AID_ROOT,      0, odm_conf_dir + 1 },
158     { 00444, AID_ROOT,      AID_ROOT,      0, odm_conf_file + 1 },
159     { 00444, AID_ROOT,      AID_ROOT,      0, oem_conf_dir + 1 },
160     { 00444, AID_ROOT,      AID_ROOT,      0, oem_conf_file + 1 },
161     { 00600, AID_ROOT,      AID_ROOT,      0, "product/build.prop" },
162     { 00444, AID_ROOT,      AID_ROOT,      0, product_conf_dir + 1 },
163     { 00444, AID_ROOT,      AID_ROOT,      0, product_conf_file + 1 },
164     { 00600, AID_ROOT,      AID_ROOT,      0, "system_ext/build.prop" },
165     { 00444, AID_ROOT,      AID_ROOT,      0, system_ext_conf_dir + 1 },
166     { 00444, AID_ROOT,      AID_ROOT,      0, system_ext_conf_file + 1 },
167     { 00755, AID_ROOT,      AID_SHELL,     0, "system/bin/crash_dump32" },
168     { 00755, AID_ROOT,      AID_SHELL,     0, "system/bin/crash_dump64" },
169     { 00755, AID_ROOT,      AID_SHELL,     0, "system/bin/debuggerd" },
170     { 00550, AID_LOGD,      AID_LOGD,      0, "system/bin/logd" },
171     { 00700, AID_ROOT,      AID_ROOT,      0, "system/bin/secilc" },
172     { 00750, AID_ROOT,      AID_ROOT,      0, "system/bin/uncrypt" },
173     { 00600, AID_ROOT,      AID_ROOT,      0, "system/build.prop" },
174     { 00444, AID_ROOT,      AID_ROOT,      0, sys_conf_dir + 1 },
175     { 00444, AID_ROOT,      AID_ROOT,      0, sys_conf_file + 1 },
176     { 00440, AID_ROOT,      AID_SHELL,     0, "system/etc/init.goldfish.rc" },
177     { 00550, AID_ROOT,      AID_SHELL,     0, "system/etc/init.goldfish.sh" },
178     { 00550, AID_ROOT,      AID_SHELL,     0, "system/etc/init.ril" },
179     { 00555, AID_ROOT,      AID_ROOT,      0, "system/etc/ppp/*" },
180     { 00555, AID_ROOT,      AID_ROOT,      0, "system/etc/rc.*" },
181     { 00750, AID_ROOT,      AID_ROOT,      0, "vendor/bin/install-recovery.sh" },
182     { 00600, AID_ROOT,      AID_ROOT,      0, "vendor/build.prop" },
183     { 00600, AID_ROOT,      AID_ROOT,      0, "vendor/default.prop" },
184     { 00440, AID_ROOT,      AID_ROOT,      0, "vendor/etc/recovery.img" },
185     { 00444, AID_ROOT,      AID_ROOT,      0, ven_conf_dir + 1 },
186     { 00444, AID_ROOT,      AID_ROOT,      0, ven_conf_file + 1 },
187
188     // the following two files are INTENTIONALLY set-uid, but they
189     // are NOT included on user builds.
190     { 06755, AID_ROOT,      AID_ROOT,      0, "system/xbin/procmem" },
191     { 04750, AID_ROOT,      AID_SHELL,     0, "system/xbin/su" },
192
193     // the following files have enhanced capabilities and ARE included
194     // in user builds.
195     { 00700, AID_SYSTEM,    AID_SHELL,     CAP_MASK_LONG(CAP_BLOCK_SUSPEND),
196                                               "system/bin/inputflinger" },
197     { 00750, AID_ROOT,      AID_SHELL,     CAP_MASK_LONG(CAP_SETUID) |
198                                            CAP_MASK_LONG(CAP_SETGID),
199                                               "system/bin/run-as" },
200     { 00750, AID_ROOT,      AID_SHELL,     CAP_MASK_LONG(CAP_SETUID) |
201                                            CAP_MASK_LONG(CAP_SETGID),
202                                               "system/bin/simpleperf_app_runner" },
203     { 00755, AID_ROOT,      AID_ROOT,      0, "first_stage_ramdisk/system/bin/e2fsck" },
204     { 00755, AID_ROOT,      AID_ROOT,      0, "first_stage_ramdisk/system/bin/tune2fs" },
205     { 00755, AID_ROOT,      AID_ROOT,      0, "first_stage_ramdisk/system/bin/resize2fs" },
206     // generic defaults
207     { 00755, AID_ROOT,      AID_ROOT,      0, "bin/*" },
208     { 00640, AID_ROOT,      AID_SHELL,     0, "fstab.*" },
209     { 00750, AID_ROOT,      AID_SHELL,     0, "init*" },
210     { 00755, AID_ROOT,      AID_SHELL,     0, "odm/bin/*" },
211     { 00755, AID_ROOT,      AID_SHELL,     0, "product/bin/*" },
212     { 00755, AID_ROOT,      AID_SHELL,     0, "system/bin/*" },
213     { 00755, AID_ROOT,      AID_SHELL,     0, "system/xbin/*" },
214     { 00755, AID_ROOT,      AID_SHELL,     0, "system/apex/*/bin/*" },
215     { 00755, AID_ROOT,      AID_SHELL,     0, "system_ext/bin/*" },
216     { 00755, AID_ROOT,      AID_SHELL,     0, "system_ext/apex/*/bin/*" },
217     { 00755, AID_ROOT,      AID_SHELL,     0, "vendor/bin/*" },
218     { 00755, AID_ROOT,      AID_SHELL,     0, "vendor/xbin/*" },
219     { 00771, AID_ROOT,      AID_SYSTEM,    0, "avm/*" },
220     { 00644, AID_ROOT,      AID_ROOT,      0, 0 },
221         // clang-format on
222 };

如何调试

build_image.py

build/core

--- a/tools/releasetools/build_image.py
+++ b/tools/releasetools/build_image.py
@@ -341,8 +341,12 @@ def BuildImageMkfs(in_dir, prop_dict, out_file, target_out, fs_config):raise BuildImageError("Error: unknown filesystem type: {}".format(fs_type))+  if "vendor" == prop_dict["mount_point"]:
+    print("build_command: %s" % (build_command))try:mkfs_output = common.RunAndCheckOutput(build_command)
+    if "vendor" == prop_dict["mount_point"]:
+      print("mkfs_output: %s" % mkfs_output)except:try:du = GetDiskUsage(in_dir)

mkuserimg_mke2fs.py

system/extras

--- a/ext4_utils/mkuserimg_mke2fs.py
+++ b/ext4_utils/mkuserimg_mke2fs.py
@@ -223,6 +223,7 @@ def main(argv):if args.timestamp:mke2fs_env["E2FSPROGS_FAKE_TIME"] = args.timestamp+    print("mke2fs_cmd: %s, mke2fs_env: %s\n" % (mke2fs_cmd, mke2fs_env))output, ret = RunCommand(mke2fs_cmd, mke2fs_env)print(output)if ret != 0:
@@ -234,6 +235,7 @@ def main(argv):if args.timestamp:e2fsdroid_env["E2FSPROGS_FAKE_TIME"] = args.timestamp+  print("e2fsdroid_cmd: %s, e2fsdroid_env: %s\n" % (e2fsdroid_cmd, e2fsdroid_env))output, ret = RunCommand(e2fsdroid_cmd, e2fsdroid_env)# The build script is parsing the raw output of e2fsdroid; keep the pattern# unchanged for now.

 fs_config.cpp

system/core

--- a/libcutils/fs_config.cpp
+++ b/libcutils/fs_config.cpp
@@ -367,6 +367,7 @@ void fs_config(const char* path, int dir, const char* target_out_path, unsigned*break;}}
+    printf("%s %s, prefix: %s %o\n", path, target_out_path, pc->prefix, pc->mode);*uid = pc->uid;*gid = pc->gid;*mode = (*mode & (~07777)) | pc->mode;

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux《基础指令》

在之前的Linux《Linux简介与环境的搭建》当中我们已经初步了解了Linux的由来和如何搭建Linux环境&#xff0c;那么接下来在本篇当中我们就要来学习Linux的基础指令。在此我们的学习是包括两个部分&#xff0c;即指令和关于Linux的基础知识&#xff1b;因此本篇指令和基础知识的…

Addressable学习

AssetsBundle是Unity的资源管理机制,将资源打包到AssetsBundle资源包并提供接口能从ab包里面加载资源出来。有了这个机制以后&#xff0c;我们要做资源管理&#xff0c;还需要做: a: 根据项目需求,编写编辑器扩展,提供指定资源打入对应bundle包工具策略; b: 根据项目的需求,资源…

详解u3d之AssetBundle

一.AssetBundle的概念 “AssetBundle”可以指两种不同但相关的东西。 1.1 AssetBundle指的是u3d在磁盘上生成的存放资源的目录 目录包含两种类型文件(下文简称AB包)&#xff1a; 一个序列化文件&#xff0c;其中包含分解为各个对象并写入此单个文件的资源。资源文件&#x…

【Block总结】OutlookAttention注意力,捕捉细节和局部特征|即插即用

论文信息 标题: VOLO: Vision Outlooker for Visual Recognition作者: Li Yuan, Qibin Hou, Zihang Jiang, Jiashi Feng, Shuicheng Yan代码链接: https://github.com/sail-sg/volo论文链接: https://arxiv.org/pdf/2106.13112 创新点 前景注意力机制: VOLO引入了一种称为“…

后端token校验流程

获取用户信息 前端中只有 await userStore.getInfo() 表示从后端获取数据 在页面中找到info对应的url地址&#xff0c;在IDEA中查找 这里是getInfo函数的声明&#xff0c;我们要找到这个函数的使用&#xff0c;所以点getInfo() Override public JSONObject getInfo() {JSO…

一文讲解Java中的异常处理机制

Java中的异常处理机制用于处理程序运行过程中可能发生的各种异常情况&#xff0c;通常通过try-catch-finally语句和throw关键字来实现 Throwable是Java语言中所有错误和异常的父类。它有两个主要的子类&#xff1a;Error和Exception&#xff1b;Error类代表那些严重的错误&am…

论文速读|Matrix-SSL:Matrix Information Theory for Self-Supervised Learning.ICML24

论文地址&#xff1a;Matrix Information Theory for Self-Supervised Learning 代码地址&#xff1a;https://github.com/yifanzhang-pro/matrix-ssl bib引用&#xff1a; article{zhang2023matrix,title{Matrix Information Theory for Self-Supervised Learning},author{Zh…

SpringCloud系列教程:微服务的未来(十八)雪崩问题、服务保护方案、Sentinel快速入门

前言 在分布式系统中&#xff0c;雪崩效应&#xff08;Avalanche Effect&#xff09;是一种常见的故障现象&#xff0c;通常发生在系统中某个组件出现故障时&#xff0c;导致其他组件级联失败&#xff0c;最终引发整个系统的崩溃。为了有效应对雪崩效应&#xff0c;服务保护方…

【NLP251】意图识别 与 Seq2Seq

Seq2Seq模型作为从RNN演进到Transformer和Attention机制的关键中间阶段&#xff0c;它不仅承前启后&#xff0c;还为我们深入理解这些复杂的模型架构提供了重要的基础。接下来&#xff0c;我们将详细探讨Seq2Seq模型的原理及其在自然语言处理领域中的应用。 1. 原理及网络框架 …

docker配置mysql并使用mysql connector cpp编程

mysql 配置mysql使用docker 这里使用docker安装了&#xff0c;比较简洁&#xff0c;不想使用了直接就可以把容器删掉&#xff0c;首先获取下镜像&#xff0c;如下命令 docker pull container-registry.oracle.com/mysql/community-server这里直接默认使用最新版本的mysql了 …

赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。

佬们过年好呀~新年第一篇博客让我们来场赛博算命吧&#xff01; 更多文章&#xff1a;个人主页 系列文章&#xff1a;JAVA专栏 欢迎各位大佬来访哦~互三必回&#xff01;&#xff01;&#xff01; 文章目录 #一、文化背景概述1.文化起源2.起卦步骤 #二、卦象解读#三、just do i…

【16届蓝桥杯寒假刷题营】第2期DAY4

【16届蓝桥杯寒假刷题营】第2期DAY4 - 蓝桥云课 问题描述 幼儿园小班的浩楠同学有一个序列 a。 他想知道有多少个整数三元组 (i,j,k) 满足 1≤i,j,k≤n 且 ai​aj​ak​。 输入格式 共2行&#xff0c;第一行一个整数 n&#xff0c;表示序列的长度。 第二行 n 个整数&#x…

基于单片机的超声波液位检测系统(论文+源码)

1总体设计 本课题为基于单片机的超声波液位检测系统的设计&#xff0c;系统的结构框图如图2.1所示。其中包括了按键模块&#xff0c;温度检测模块&#xff0c;超声波液位检测模块&#xff0c;显示模块&#xff0c;蜂鸣器等器件设备。其中&#xff0c;采用STC89C52单片机作为主控…

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…

【Block总结】动态蛇形卷积,专注于细长和弯曲的局部结构|即插即用

论文信息 标题: Dynamic Snake Convolution based on Topological Geometric Constraints for Tubular Structure Segmentation 作者: 戚耀磊、何宇霆、戚晓明、张媛、杨冠羽 会议: 2023 IEEE/CVF International Conference on Computer Vision (ICCV) 发表时间: 2023年10月…

【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口

最近在使用华为AI平台ModelArts训练自己的图像识别模型&#xff0c;并部署了在线服务接口。供给客户端&#xff08;如&#xff1a;鸿蒙APP/元服务&#xff09;调用。 import核心能力&#xff1a; import { http } from kit.NetworkKit; import { fileIo } from kit.CoreFileK…

Linux工具使用

1.gcc/g的使用 1.1程序翻译的过程 ①预处理&#xff1a;展开头文件&#xff0c;替换宏&#xff0c;调节编译&#xff0c;去注释。 ②编译&#xff1a;将代码变成汇编语言 ③汇编&#xff1a;将汇编代码变成二进制不可执行的目标文件。 ④链接&#xff1a;将多个我写的多个…

Mac Electron 应用签名(signature)和公证(notarization)

在MacOS 10.14.5之后&#xff0c;如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核&#xff0c;来判断是否存在病毒)&#xff0c;那么就不能被安装。当然现在很多人的解决方案都是使用sudo spctl --master-disable&#xff0c;取消验证模式&#…

单细胞-第五节 多样本数据分析,打分R包AUCell

文件在单细胞\5_GC_py\1_single_cell\3.AUCell.Rmd 1.基因 rm(list = ls()) load("g.Rdata")2.AUCell https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9897923 IF: NA NA NA用这个文章里的方法,将单细胞亚群的marker基因与ros相关基因取交集,用作AUCell的基因集…

[EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型

Paper Card 论文标题&#xff1a;RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者&#xff1a;Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接&#xff1a;https://arxiv.org/ab…