首页
关于
友情链接
推荐
悠笙の喵罐头
Search
1
给Android 4.9内核添加KernelSU支持
334 阅读
2
Docker下中心化部署EasyTier
211 阅读
3
记一次为Android 4.9内核的ROM启用erofs支持
152 阅读
4
在TrueNAS上使用Docker安装1Panel
97 阅读
5
为黑群晖迁移RR引导盘
93 阅读
Android
运维
NAS
开发
登录
Search
标签搜索
Linux
Android
AOSP
C&C++
Docker
TrueNAS
Windows
caf/clo
Kernel
MSVC
编程
EasyTier
Web
群晖
Alist
OneDrive
1Panel
STL
神楽悠笙
累计撰写
11
篇文章
累计收到
1
条评论
首页
栏目
Android
运维
NAS
开发
页面
关于
友情链接
推荐
悠笙の喵罐头
搜索到
3
篇与
的结果
2025-03-06
小米845系列机器类原生调用红外摄像头进行人脸识别
背景小米845系列的小米8、小米8屏幕指纹版有一颗前置红外摄像头用于面部识别,这样即使在无光的环境下仍可以使用面部解锁。然而如果使用LineageOS的设备树不加修改编译出来的类原生无法使用红外摄像头,只能使用普通的摄像头,而PixelExperience的设备树是可以的,故探究其原因。原因CameraID首先是需要指定人脸识别模块使用红外摄像头。翻阅PixelExperience的相关设备树源码可以发现:在overlay中设置了调用CameraID为5的摄像头用作人脸识别。https://github.com/PixelExperience-Devices/device_xiaomi_dipper/blob/fourteen/overlay/packages/apps/FaceUnlockService/app/src/main/res/values/config.xml<?xml version="1.0" encoding="utf-8"?> <resources> <integer name="override_front_cam_id">5</integer> <bool name="use_alternative_vendor_impl">true</bool> </resources>PixelExperience使用的是motorola的人脸解锁方案,而现在很多类原生使用的是AOSPA的ParanoidSense,因此上述设置的overlay并不适用。 查阅ParanoidSense源码可以看到:使用了Properties属性ro.face.sense_service.camera_id标识使用的摄像头。https://github.com/AOSPA/android_packages_apps_ParanoidSense/blob/uvite/src/co/aospa/sense/camera/CameraUtil.kt#L32 val cameraIdProp = SystemProperties.get("ro.face.sense_service.camera_id")因此理论上只要设置ro.face.sense_service.camera_id属性为5即可使其调用红外人脸摄像头。vendor.camera.aux.packagelist属性如果仅仅设置上述CameraID相关属性,那么人脸模块调用时会直接报错。翻阅Frameworks部分的代码可以得知:系统默认隐藏了除主前摄和主后摄之外的其他辅助摄像头(即AUXCamera),而红外摄像头也属于AUXCamera之一。取LineageOS的Framework代码作为例子:https://github.com/LineageOS/android_frameworks_base/blob/lineage-21.0/core/java/android/hardware/Camera.java#L295-L301 /** * Returns the number of physical cameras available on this device. * The return value of this method might change dynamically if the device * supports external cameras and an external camera is connected or * disconnected. * * If there is a * {@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA * logical multi-camera} in the system, to maintain app backward compatibility, this method will * only expose one camera per facing for all logical camera and physical camera groups. * Use camera2 API to see all cameras. * * @return total number of accessible camera devices, or 0 if there are no * cameras or an error was encountered enumerating them. */ public static int getNumberOfCameras() { int numberOfCameras = _getNumberOfCameras(); if (!shouldExposeAuxCamera() && numberOfCameras > 2) { numberOfCameras = 2; } return numberOfCameras; }不难看出,即使设备有大于2颗摄像头,若函数shouldExposeAuxCamera()返回为False则会强制指定摄像头数量为2,阻止程序访问CameraID>2的摄像头;再来看看这个判断函数的定义:https://github.com/LineageOS/android_frameworks_base/blob/lineage-21.0/core/java/android/hardware/Camera.java#L264-L278 /** * @hide */ public static boolean shouldExposeAuxCamera() { /** * Force to expose only two cameras * if the package name does not falls in this bucket */ String packageName = ActivityThread.currentOpPackageName(); if (packageName == null) return true; List<String> packageList = Arrays.asList( SystemProperties.get("vendor.camera.aux.packagelist", packageName).split(",")); List<String> packageExcludelist = Arrays.asList( SystemProperties.get("vendor.camera.aux.packageexcludelist", "").split(",")); return packageList.contains(packageName) && !packageExcludelist.contains(packageName); }可以看出,假如包名在属性vendor.camera.aux.packagelist中并且不在vendor.camera.aux.packageexcludelist中就会返回为True,否则False。 那么解决方案就很明了了:将ParanoidSense的包名加到vendor.camera.aux.packagelist属性中即可让其能够调用到红外摄像头。解决将ParanoidSense的包名co.aospa.sense加到vendor.camera.aux.packagelist中:https://github.com/YoriInstitute/crDroidAndroid_device_xiaomi_sdm845-common/commit/28fe5bc41d49b31b4acb840bf167b70d70a40c61设置ro.face.sense_service.camera_id属性以指定摄像头:https://github.com/YoriInstitute/crDroidAndroid_device_xiaomi_equuleus/commit/67518f130650e4592b5f4c7210248072058d48cchttps://github.com/YoriInstitute/AOSPA_device_xiaomi_equuleus/blob/topaz/device.mk#L397-L399在crDroid魔改的ParanoidSense中,因指定了其位于system_ext(https://gitlab.com/crdroidandroid/android_packages_apps_FaceUnlock/-/commit/545688260eb32ba19f348e84e3cae89ba29f20d1),故将这个属性加到system_ext的prop文件中。
2025年03月06日
42 阅读
0 评论
0 点赞
2025-02-03
简述对AOSP设备树中的一些文件和概念的理解
设备树所共有的内容大致分为以下几类: Android.bp 各种Makefile,后缀.mk prop文件,后缀.prop overlay,放在overlay文件夹中 sepolicy,即SELinux规则,放在sepolicy文件夹中 manifest.xml extract-files.py、setup-makefiles.py和proprietary-files.txt .dependencies结尾的依赖文件 其他各种配置
2025年02月03日
89 阅读
0 评论
0 点赞
2024-12-25
记一次为Android 4.9内核的ROM启用erofs支持
前言众所周知,咱是老牌小米8屏幕指纹版钉子户了 咱一直想给这个机子上个erofs(关于erofs是什么请自行搜索 但是经过查阅得知erofs是在5.10被加入到Linux内核中的,也就是说咱4.9得手动集成准备材料Android ROM源码:这里使用的是LineageOS 22.0Android Kernel源码:这里咱用的是LineageOS官方小米845内核:LineageOS/android_kernel_xiaomi_sdm845设备树:这里使用的是LineageOS官方设备树,包含sdm845-common部分(LineageOS/android_device_xiaomi_sdm845-common)和device-specific部分(LineageOS/android_device_xiaomi_equuleus)编译服务器{alert type="info"}注:因为咱主要是玩编译的比较多,因此这篇主要阐述的是编译ROM过程中的折腾记录{/alert}开整部署Android ROM编译环境就不说了,网上一搜一大片,把ROM源码、设备树、内核源码下载下来放到对应位置为内核添加erofs支持此处代码pick from ReallySnow的msm-4.9内核(谢谢ReallySnow大佬的支持!),可参考如下分支:https://github.com/ReallySnow/msm-4.9/tree/erofshttps://github.com/YoriInstitute/android_kernel_xiaomi_sdm845/tree/lineage-22.0-erofspick之前要先处理lz4压缩部分代码的冲突。详细Relation chain可参考:https://review.lineageos.org/c/LineageOS/android_kernel_xiaomi_sdm845/+/412614咱尝试将改造提交给LineageOS官方但是很显然没被合并xpick完更改后在内核的defconfig文件中开启erofs支持: 打开$KERNEL_SOURCE/arch/arm64/configs/vendor/xiaomi/mi845_defconfig并添加:CONFIG_EROFS_FS=y:commit 7ae5caab2c15982b3d3821c97e2f2e6126ca1281 (HEAD -> erofs, refs/published/erofs) Author: KaguraiYoRoy <neko@yori.moe> Date: Tue Dec 24 22:49:07 2024 +0800 arch: arm64: configs: mi845: Enable CONFIG_EROFS_FS Change-Id: Ie387b03bde54700d73ccf19f0baf4db62526cc8f diff --git a/arch/arm64/configs/vendor/xiaomi/mi845_defconfig b/arch/arm64/configs/vendor/xiaomi/mi845_defconfig index 7684be360d98..69ea580fdb11 100644 --- a/arch/arm64/configs/vendor/xiaomi/mi845_defconfig +++ b/arch/arm64/configs/vendor/xiaomi/mi845_defconfig @@ -651,3 +651,4 @@ CONFIG_SOUNDWIRE_WCD_CTRL=y CONFIG_WCD9XXX_CODEC_CORE=y CONFIG_WCD_DSP_GLINK=y CONFIG_WCD_SPI_AC=y +CONFIG_EROFS_FS=y \ No newline at end of file修改分区文件系统和fstab打开设备树中板级配置文件把要改为erofs的分区的文件系统改为erofs,示例中的配置文件在$WORKING_DIR/device/xiaomi/sdm845-common/BoardConfigCommon.mk:commit 0fce86fb40ca637a8563bef6192afaea1658c881 (HEAD -> erofs, refs/published/erofs) Author: KaguraiYoRoy <neko@yori.moe> Date: Tue Dec 24 23:37:50 2024 +0800 sdm845-common: Switch to erofs Change-Id: I9a8d6de4dcb79cd6bc177451ce3cbc4682748501 diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index cf73d39..700592f 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -78,11 +78,11 @@ BOARD_CACHEIMAGE_PARTITION_SIZE := 268435456 BOARD_USERDATAIMAGE_PARTITION_SIZE := 57453555712 BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4 -BOARD_ODMIMAGE_FILE_SYSTEM_TYPE := ext4 +BOARD_ODMIMAGE_FILE_SYSTEM_TYPE := erofs BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := ext4 BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := ext4 BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := ext4 -BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4 +BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := erofs BOARD_FLASH_BLOCK_SIZE := 262144 # (BOARD_KERNEL_PAGESIZE * 64) 修改机器fstab文件,此处在$WORKING_DIR/device/xiaomi/equuleus/rootdir/fstab.qcom,将挂载文件系统改为erofs,挂载参数仅保留一个ro即可:commit d66bfc8fe722f7368ef56835d35fb88b904e10fb (HEAD -> erofs, refs/published/erofs) Author: KaguraiYoRoy <neko@yori.moe> Date: Tue Dec 24 23:40:08 2024 +0800 equuleus: Update fstab for erofs Change-Id: I814eab1dd77cf2c184ebd398cc4914785bc37ad6 diff --git a/rootdir/etc/fstab.qcom b/rootdir/etc/fstab.qcom index 7aca90a..685ec84 100644 --- a/rootdir/etc/fstab.qcom +++ b/rootdir/etc/fstab.qcom @@ -6,8 +6,8 @@ system /system ext4 ro,barrier=1,discard wait,logical,first_stage_mount system_ext /system_ext ext4 ro,barrier=1,discard wait,logical,first_stage_mount product /product ext4 ro,barrier=1,discard wait,logical,first_stage_mount -vendor /vendor ext4 ro,barrier=1,discard wait,logical,first_stage_mount -odm /odm ext4 ro,barrier=1,discard wait,logical,first_stage_mount +vendor /vendor erofs ro wait,logical,first_stage_mount +odm /odm erofs ro wait,logical,first_stage_mount /dev/block/bootdevice/by-name/userdata /data ext4 noatime,nosuid,nodev,barrier=0,noauto_da_alloc latemount,wait,check,fileencryption=ice,quota /dev/block/bootdevice/by-name/modem /vendor/firmware_mnt vfat ro,shortname=lower,uid=0,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0 wait /dev/block/bootdevice/by-name/dsp /vendor/dsp ext4 ro,nosuid,nodev,barrier=1 wait最后编译并刷入,如果不出意外的话就能启动进系统了。特别注意LineageOS官方对我这款机型做了动态分区改造,上述设备树的修改可能并不适用于你的机型erofs为只读文件系统,如果后期要刷Gapps,请勿改造system、system_ext、product这三个分区常见问题开机进入fastboot:检查fstab是否修改正确头图下载
2024年12月25日
152 阅读
0 评论
0 点赞