全量搜索地址 清华开源镜像网站
https://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os-images/
全量搜索地址 清华开源镜像网站
https://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os-images/
打开pwm15
echo 0 > /sys/class/pwm/pwmchip2/export
设置频率1khz
echo 1000000 > /sys/class/pwm/pwmchip2/pwm0/period
设置占空比 10%
echo 100000 > /sys/class/pwm/pwmchip2/pwm0/duty_cycle
开始pwm
echo 1 > /sys/class/pwm/pwmchip2/pwm0/enable
关闭pwm
echo 0 > /sys/class/pwm/pwmchip2/pwm0/enable
echo 0 > /sys/class/pwm/pwmchip2/unexport
安卓系统启动后会执行
/vendor/etc/init/hw/init.rk3588.rc
这个文件来源于
device/rockchip/rk3588/init.rk3588.rc
在on boot后添加执行脚本
on boot
chmod 0666 /dev/mem
chown root system /dev/mem
chmod 0666 /dev/i2c-5
chown root system /dev/i2c-5
以上是启动后 增加几个文件的读写权限
这几个文件跟GPIO控制有关系
ro.build.fingerprint 是在编译时决定的
frameworks/base/core/java/android/os/Build.java
publicstatic final String FINGERPRINT = deviceFingerprint()
private stattic String deviceFingerprint(){
String finger = SystemProperties.get("ro.vuild.fingerprint");
if(TextUtils.isEmpty(finger)){
finger = getString("ro.product.brand")+'/'+
getString("ro.product.name")+'/'+
getString("ro.product.device")+'/'+
getString("ro.build.version.release")+'/'+
getString("ro.build.id")+'/'+
getString("ro.build.version.incremental")+'/'+
getString("ro.build.type")+'/'+
getString("ro.build.tags")+'/'+
}
return finger;
}
fingerprint 格式
make file定义在
build/make/core/sysprop.mk
$(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BF_BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)
要缩短该fingerprint
新更新
安卓系统会读取 system/build.prop
可以在这个文件设置 build.prop
在源码目录out/target/product/rk3588s_s/system/build.prop
设置
ro.build.fingerprint=rk3588s_s/12/SQ3A.220705.003.A1/eng.robin.20240217:userdebug/release-keys
若没有这个out文件夹(删除了out目录)
则需要在build/make/tools/buildinfo.sh
添加
echo "ro.build.fingerprint=$PRODUCT_BRAND/:$PLATFORM_VERSION/$BUILD_ID"
在AOSP中 前置摄像头 (index=0)默认是镜像显示预览
frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.cpp
previewTransform = degToTransform(0,
cameraFacing == CAMERA_FACING_FRONT);
int Parameters::degToTransform(int degrees, bool mirror) {
degToTransform 第二个参数 是是否镜像显示
修改所有 degToTransform 第二个参数为false
第一
签名要用系统platform级别的签名
第二
adb remount 挂在system目录为可读写
mv /data/app/* /system/app*
adb 触发事件
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
am broadcast -a android.intent.action.BOOT_COMPLETED –receiver-include-background
定义java native文件
package com.robin.spot.jni;
public class WiringOP {
static {
System.loadLibrary("WiringOP");
}
public final static native int wiringPiSetup();
}
生成java native 头文件
javac -h ./ .\com\robin\spot\jni\WiringOP.java
头文件内容
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_robin_spot_jni_WiringOP */
#ifndef _Included_com_robin_spot_jni_WiringOP
#define _Included_com_robin_spot_jni_WiringOP
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_robin_spot_jni_WiringOP
* Method: wiringPiSetup
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_robin_spot_jni_WiringOP_wiringPiSetup
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
复制文件到jni目录并且实现该头文件
执行c文件编译
ndk-build
out/.module_paths/Android.mk.list
该文件会保存用到的模块
修改该全局变量 PRODUCT_PACKAGES
通常在device.mk
example : device/rockchip/common/device.mk
device/rockchip/rk3588/rk3588s_s/rk3588s_s.mk
device/rockchip/common/modules/rockchip_apps.mk
//查看device/rockchip/common/device.mk
可以看到调用路径
device/rockchip/common/build/rockchip/Partitions.mk
修改
#BOARD_SUPER_PARTITION_SIZE ?= 3263168512
默认为3G?
可合理增大 添加默认应用
证书秘钥保存在build/target/product/security/文件夹下
-rw-rw-r-- 1 robin robin 977 7月 13 2022 Android.bp
-rw-rw-r-- 1 robin robin 3179 7月 13 2022 Android.mk
-rw-rw-r-- 1 robin robin 1217 7月 13 2022 cts_uicc_2021.pk8
-rw-rw-r-- 1 robin robin 1464 7月 13 2022 cts_uicc_2021.x509.pem
-rw-rw-r-- 1 robin robin 1484 7月 13 2022 fsverity-release.x509.der
-rw-rw-r-- 1 robin robin 1675 7月 13 2022 media.pem
-rw-rw-r-- 1 robin robin 1217 7月 13 2022 media.pk8
-rw-rw-r-- 1 robin robin 1440 7月 13 2022 media.x509.pem
-rw-rw-r-- 1 robin robin 2375 7月 13 2022 networkstack.pk8
-rw-rw-r-- 1 robin robin 2094 7月 13 2022 networkstack.x509.pem
-rw-rw-r-- 1 robin robin 1675 7月 13 2022 platform.pem
-rw-rw-r-- 1 robin robin 1216 7月 13 2022 platform.pk8
-rw-rw-r-- 1 robin robin 1440 7月 13 2022 platform.x509.pem
-rw-rw-r-- 1 robin robin 3299 7月 13 2022 README
-rw-rw-r-- 1 robin robin 1679 7月 13 2022 shared.pem
-rw-rw-r-- 1 robin robin 1218 7月 13 2022 shared.pk8
-rw-rw-r-- 1 robin robin 1440 7月 13 2022 shared.x509.pem
-rw-rw-r-- 1 robin robin 1675 7月 13 2022 testkey.pem
-rw-rw-r-- 1 robin robin 1216 7月 13 2022 testkey.pk8
-rw-rw-r-- 1 robin robin 1440 7月 13 2022 testkey.x509.pem
-rw-rw-r-- 1 robin robin 524 7月 13 2022 verity_key
-rw-rw-r-- 1 robin robin 1219 7月 13 2022 verity.pk8
-rw-rw-r-- 1 robin robin 1444 7月 13 2022 verity.x509.pem
.pk8 代表私钥 private key
.x509.pem 代表公钥 public key (CERTIFICATE)
.pem 代表rsa 私钥 RSA PRIVATE KEY (pk8 的另一种格式)
主要有四个签名
testKey platform shared media
最重要的是platform 系统签名应用 该签名的app能 获取系统权限
该文件夹下的readme介绍如何生成新的秘钥
删除备份旧的platform秘钥
rm platform.pem
rm platform.pk8
rm platform.x509.pem
生成新的秘钥
development/tools/make_key platform '/C=CN/ST=Guangdong/L=Guangzhou/O=Android/OU=Robin/CN=blog.robinluo.top/emailAddress=1569964920@qq.com'
不输入密码
生成platform 秘钥文件
platform.pk8
platform.x509.pem
生成p12文件
openssl pkcs12 -export -out platform.p12 -inkey platform.pem -in platform.x509.pem
生成jks签名文件
keytool -importkeystore -deststorepass RobinLuo -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12
查看jks文件
keytool -list -keystore platform.jks