目录
基于RK3288
7寸B屏800*1280
10.1A屏1024*600
10.1C屏1920*1200
1.修改为7寸B屏800*1280
DTS 文件路径 kernel/arch/arm/boot/dts/rp-rk3288.dts
修改说明:
目 前 通 用 屏 幕 有
lcd-rpdzkj_mipi_7.dtsi
lcd-rpdzkj_mipi_10_1.dtsi
lcd-rpdzkj_lvds.dtsi
lcd-rpdzkj_dual_lvds.dtsi
如需要自行修改或添加自己的屏请根据屏类型参考下列文件:
10.1 寸 LVDS: kernel/arch/arm/boot/dts/lcd-rpdzkj_lvds.dtsi
双 LVDS: kernel/arch/arm/boot/dts/ lcd-rpdzkj_dual_lvds.dtsi
MIPI: kernel/arch/arm/boot/dts/ lcd-rpdzkj_mipi_7.dtsi(7 寸) 或者
kernel/arch/arm/boot/dts/ lcd-rpdzkj_mipi_10_1.dtsi(10.1 寸)
备注:目前双 LVDS 屏幕配置中未使用 TP
我的修改
1.开机 logo 修改:
开机 logo 是在 u-boot 与 kernel 运行阶段显示的图片
3288 平台 u-boot 与 kernel 阶段显示用同一张 logo,图片位置在 3288/kernel/logo.bmp
更改时用自己需要的 logo.bmp 替换该图片(名字是固定为 logo.bmp)
3399 平台 u-boot 使用 logo.bmp kernel 使用 logo_kernel.bmp
注意:图片的像素为所需要使用的屏的分辨率大小(如使用 1920*1200 的屏,使用 logo 图片像素为 1920*1200,否则容 易出现不显示,形变等问题),图片类型为 BMP 图片(最好使用画图板转换),图片大小尽量要小(3288 大小 5M 以内, 3399 大小 2M 以内,太大可能会导致 kernel 大小超出分区,图片解析失败而无法开机等问题)
测试:
uboot和kernel阶段的图片,但是kernel里面已经关闭了,可以参考Android5.1更换开机logo(rk3288)
烧录完:logo.bmp --->字符串-->黑屏--->logo.bmp--->android(动画)
再次启动:logo.bmp--->android(动画)
备注
在 kernel/arch/arm/boot/dts 找到使用的 dts 文件,再找到该文件包含的 lcd-xxx.dtsi ,与使用的屏有关,在 lcd-xxx.dtsi 中找到 fb 选项:
&fb {
rockchip,disp-mode = <DUAL>;
rockchip,uboot-logo-on = <0>;
rockchip,disp-policy = <DISPLAY_POLICY_BOX_TEMP>;
};
我的是lcd-rpdzkj_mipi_7.dtsi
修改为
中间的 uboot-logo-on 的值为0,即不启用logo,同时将 kernel/arch/arm/confings 中使用到的相关的配置文件中的选项:"CONFIG_LOGO = y " 屏蔽掉。如果想更改该logo,即将 uboot-logo-on 中的值改为1同时启用"CONFIG_LOGO",与logo有关的文件为以下几个:kernel/drivers/video/fbmem.c,kernel/drivers/video/logo/logo.c,默认的logo是 kernel/drivers/video/logo/logo_linux_clut224.ppm,可以更改该logo,然后单独编译内核烧录。
我的是arch/arm/configs/rp-rk3288_defconfig
本生没有设置
3288kernel里面的logo.bmp是uboot阶段的,kernel阶段没有
2.开机动画修改:
开机动画有两种方式,我们使用 bootanimation.zip 方式
建立 bootanimation 目录,里面建立 desc.txt 文件及 N 个文件夹, 文件夹里面放着的就是开
机动画的图片资源。 decs.txt 的作用就是指导系统如何去执行开机动画
Android开机logo
Android系统启动init进程时的logo,与 initlogo.rle文件有关,源码路径:system/core/init/init.c,system/core/init/logo.c
Android开机默认动画
默认动画是明暗交替的"Android"字样,该资源文件在 frameworks/base/core/res/assets/images 中,如果想修改默认动画,更换即可。有兴趣可以研究源码,在 frameworks/base/cmds/bootanimation。
如果我们想自己定制logo,那我们可以按以下步骤进行:
(1)准备好我们需要的图片,格式为PNG,分别放入 part0 和 part1目录中
(2)编写logo描述文件:desc.txt
desc.txt中的格式为:
12800 800 30 //800*1280为屏幕分辨率,30是动画播放速度为30帧每秒
p 1 0 part0 //p的意思是play,第一个参数是循环次数(0为无限循环),第二个是循环间隔帧数
p 0 5 part1 //由上我们可知,表示的是part1中的图片以间隔5帧的速度,无限循环播放
(3)将上面三个文件打包成bootanimation.zip:在windows下面打包可能造成无法显示的问题,所以最好在linux下打包
zip -Z store bootanimation.zip part0/*.png part1/*.png desc.txt
(4)将 bootanimation.zip 放入out/target/product/xxx-rk3288/system/media 中,然后重新编译system.img。如果没有编译过源码,可以按照这篇中的步骤进行打包 。
RK3288改开机logo问题
1# logo制作说明
把bootanimation.zip复制到板卡里面,开机logo修改OK
A:使用RootExplorer.apk 复制到/system/media ,板卡需要root
B:使用adb工具,复制到/system/media/
3.打开终端运行如下命令
adb shell
root@rk3288:/ # mount -o remount -o rw /system
Ctrl+c 或者#exit 退出root@rk3288:/ #
adb push D:\bootanimation.zip /system/media/
4# bootanimation.zip 文件说明
bootanimation.zip 文件打包前的结构为:
desc.txt 动画属性描述文件
part0 第一阶段动画图片的目录 (动画是由一帧帧图片组成的)
part1 第二阶段动画图片的目录
bootanimation.zip 文件是直接由这几个文件打包的,打包的格式是ZIP,并且要指定用压
缩打包方式(就是在打包时的压缩方式选择为存储)。
desc.txt 文件的格式为:
480 250 15
p 1 0 part0 //part0 为第一个目录文件
p 0 10 part1 //part1 为第二个目录文件
其中各个参数的意义为:
480 250 15
图片的宽 图片的高 每秒显示的帧数
p 1 0 part0
标识符 循环的次数 阶段切换间隔时间 对应图片的目录
p 0 10 part1
标识符 循环的次数 阶段切换间隔时间 对应图片的目录
标识符:p 是必须的。
循环次数:指该目录中图片循环显示的次数,0 表示本阶段无限循环。
每秒显示的帧数:就是每秒显示的图片数量,决定每张图片显示的时间。
阶段切换间隔时间:指的是该阶段结束后间隔多长时间显示下一阶段的图片,其单位是每
张图片显示的时间。
对应图片的目录:就是该阶段动画的系列图片,以图片文件目录的顺序显示动画,而且图
片的格式必须要为PNG。
5.android 定制系统,APK集成到系统
基本功能块定制修改:
Y为有效 N无效
在 Kernel/arch/arm/boot/dts/rp-rk3288.dts 文件中使用#include 包含的屏的 DTSI 文件中:
rpdzkj_config {
compatible = "rp_config";
system_rotate = "90";
//系统旋转角度 0 90 180 270
back_camera_rotate = "0";
//后置摄像头旋转角度 0 90 180 270
front_camera_rotate = "0";
//前置摄像头旋转角度 0 90 180 270
lcd_density = "160";
//修改系统图标大小,更改 DPI 的值
language = "zh-CN"; //zh-CN //en-US
//中文(zh-CN),英文(en-US) Y
time_zone = "Asia/Shanghai"; //Asia/Shanghai = +8 //Europe/London = +0
//时区,上海时区(Asia/Shanghai),伦敦时区(Europe/London)
not_navigation_bar = "false";
//是否有导航栏, true 表示有导航栏, false 相反
not_status_bar = "false";
//是否有状态栏 true 表示有状态栏, false 相反
module_4G = "EC20";//EC20//ME909s
//4G 模块型号的选择 EC20 模块 ME909s 模块
default_launcher = "true";
//系统默认的 Launcher, true 表示系统默认, false 相反
has_root = "false";
//系统是否 root, true 表示 root, false 相反 由 true 改为 false 后,系统所有固件必须全部重新烧写
usb_not_permission = "true"; //false //true
//是否有 USB Camera 的权限, true 表示没有权限, false 相反
//注意:这里没有的 USB Camera 的权限指的是插上 USB Camera 打开 USB Camera
相关的安卓应用不会弹出需要选择默认的 USB device 选项
usb_camera_only_front = "false";
//只有前置的 USB Camera, true 表示只有前置的 USB Camera, false 相反
status = "okay";
};
修改后编译 kernel,烧写编译出来的 resource.img 即可
备注:如果屏对应配置上某个选项没有,则代表改平台并未实现该设置
直接改这里是不行的
基本配置修改:
基本系统 prop 属性: device\rockchip\rk3288\system.prop
配置设备节点权限(用户名,组用户)修改: device/rockchip/common/ueventd.rockchip.rc
apk
内置 APK:
内置不可删除 APK:可参考内置 RkExplorer 修改
在 vendor/rockchip/rpdzkj/apps/apps.mk 文件里面增加 编译配置
里面已经有了
在 vendor\rockchip\rpdzkj\apps\下添加 如 RkExplorer 文件夹,并在该文件夹下面
创建 Android.mk 内容如下示例:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := RKExplorer
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_OVERRIDES_PACKAGES := RkExplorer
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
include $(BUILD_PREBUILT)
拷贝 APK 到 vendor\rockchip\rpdzkj\apps\RkExplorer(自己创建的目录) \目录下
特别说明: apk 名字,目录名字与 Android.mk 中的 LOCAL_MODULE 的值要相互对
应,且不能有符号存在
内置不可删除且恢复出厂设置时也被删除的 APK:
拷贝 APK 到 3288/vendor/rockchip/rpdzkj/apps/preinstall/下即可
这是文档中标注的,按照实际情况执行即可
备注: 本文档描述的基本配置修改和内置 APK,编译前需要在 Android 根目录先执行
make installclean 之后再编译
测试1
在vendor\rockchip\rpdzkj\apps\ 下增加RKTest目录
在 vendor\rockchip\rpdzkj\apps\ apps.mk 文件里面增加 编译配置
拷贝apk到vendor\rockchip\rpdzkj\apps\RKTest
cp /mnt/hgfs/MAndroid5.1_source/app_test/hello_test/RKTest.apk .
拷贝vendor/rockchip/rpdzkj/apps/RKExplorer/Android.mk 进行修改
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := RKTest
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#LOCAL_PRIVILEGED_MODULE :=
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_OVERRIDES_PACKAGES := RkTest
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
#LOCAL_REQUIRED_MODULES :=
#LOCAL_PREBUILT_JNI_LIBS :=
include $(BUILD_PREBUILT)
编译./make.sh android
烧录system.img
注:测试apk中未加home选项,开机不会启动,但是会安装到系统里,且不可以卸载,恢复出厂设置也还是在
其实编译是将apk拷贝到out/target/product/rk3288_box/system/app/,当然先创建apk的目录在将apk拷进去。
测试二:
拷贝apk到vendor/rockchip/rpdzkj/apps/preinstall/
上面测试了,我是直接把out/target/product/rk3288_box/system/app/RKTest目录先删除掉
在执行./make.sh android
烧录system.img
测试结果:安装到系统里,可以卸载,恢复出厂设置已删除
其实编译时将apk拷贝到out/target/product/rk3288_box/system/usr/preinstall
Android添加c程序
测试一
在external/下穿件test_hello目录
main.c
#include <stdio.h>
#include "add.h"
int main(int argc, char **argv)
{
printf("Hello World!\n");
printf("add(2,3)= %d\n", add(2,3));
return 0;
}
add.c
#include "add.h"
int add(int a, int b)
{
return a+b;
}
add.h
#ifndef __ADD_H__
#define __ADD_H__
int add(int a, int b);
#endif
Android.mk
写法一
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= $(call all-subdir-c-files)
LOCAL_MODULE := test_hello
include $(BUILD_EXECUTABLE)
写法二
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
main.c\
add.c
LOCAL_MODULE := test_hello
include $(BUILD_EXECUTABLE)
回到源码根目录:
make test_hello
Import includes file: out/target/product/rk3288_box/obj/EXECUTABLES/test_hello_intermediates/import_includes
target thumb C: test_hello <= external/test_hello/add.c
target thumb C: test_hello <= external/test_hello/main.c
external/test_hello/main.c: In function 'main':
external/test_hello/main.c:3:14: warning: unused parameter 'argc' [-Wunused-parameter]
int main(int argc, char **argv)
^
external/test_hello/main.c:3:27: warning: unused parameter 'argv' [-Wunused-parameter]
int main(int argc, char **argv)
^
target Executable: test_hello (out/target/product/rk3288_box/obj/EXECUTABLES/test_hello_intermediates/LINKED/test_hello)
target Symbolic: test_hello (out/target/product/rk3288_box/symbols/system/bin/test_hello)
Export includes file: external/test_hello/Android.mk -- out/target/product/rk3288_box/obj/EXECUTABLES/test_hello_intermediates/export_includes
target Strip: test_hello (out/target/product/rk3288_box/obj/EXECUTABLES/test_hello_intermediates/test_hello)
Install: out/target/product/rk3288_box/system/bin/test_hello
#### make completed successfully (45 seconds) ####
out/target/product/rk3288_box/obj/EXECUTABLES/test_hello_intermediates/
测试ok
打包apk失败
android studio2.3以后给apk签名打包后安装失败的问题[INSTALL_PARSE_FAILED_NO_CERTIFICATES]
在Android Studio 超级简单的打包生成apk一文中,我选的是v2
生成了apk,然后按照<5.android 定制系统,APK集成到系统>一文增加apk到
vendor/rockchip/rpdzkj/apps/preinstall/目录下发现,编译源码后,不能安装apk
于是乎,在windows下通过adb进行安装,发现不行
[F:\3288\MAndroid5.1_source\app_test\RKHellotest]$ adb install app.apk
pkg: /data/local/tmp/app.apk
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
4310 KB/s (1418673 bytes in 0.321s)
搜索页一下这个错误
参考:https://blog.csdn.net/love_yan_1314/article/details/70184528
自己的Android studio(windows平台上)刚刚更新到2.3版本,在没有充分了解它的新变化的情况下,使用的时候难免会遇到一些问题,比如gradle的问题可能是大家最常见的,不过解决的一般思路和之前(例如2.1更新到2.2之类的)没太大区别,本文要说不是gradle的问题,而是给apk正式签名后安装失败的问题。
项目在正式上线之前一般都要有正式签名,也就是发布release版本的apk,而不再使用默认的debug版签名文件----debug.keystore。最常用的方式就是通过Android studio的工具栏里的Build-->Generate Signed APK...方式去签名。更多的步骤不再赘述,按照提示一步步的往下走就可以,相信大家都知道了。
这种方式签名后的apk就是发布版(release)的apk,Android studio2.3之前是可以直接安装到设备上的,安装方式之一就是在docs命令行里用adb install <apk绝对路径>命令去安装到连接到PC上的Android设备。但是,Android studio2.3以后(更高版本的不敢保证有同样问题,起码2.3目前是这样的,哈)这种方式打包apk的话就有了些变化:
就如画圈的地方,2.3以前应该是没有的(印象中是没有,如果有的话是我记错了,见谅),多了这些选项的话不选择是无法继续下去的,选择的话,我当时看到V2和apk有关,V1和jar有关,在没有弄明白区别的时候果断选择V2的方式,然后点击了Finish.等了一会,apk打包好了,我用adb install命令安装这个apk的时候却遇到这样的问题:
对,就是说没有签名证书!但是我确实是签了名了啊,而且相应的.jks文件也是存在的。我通过手动编辑gradle文件进行签名的话再安装也是OK的。于是我clean,rebuild,新建项目,重启studio...各种方式都试了,然后通过这种方式签名打包后的apk仍然存在这个问题。于是只能上网找答案,然后就发现了问题确实是在上述画圈的地方:把V1单独勾选或者V1和V2都勾选的话,再打包就是OK的,也就是说只要勾选了V1就行,生成的apk就可以正常安装...晕。
网上相关的文章也不少了,至于其他的签名方式也有无数文章讲到,这里不再重复造车。只是希望这篇文章能给和我一样的"姿势"遇到这个问题的各位一点启示,比如用新东西之前最好能知道它的新变化,发现和之前的不起眼的差异点(就如上图划线地方新出现的细节)要知道是干什么用的...否则就有可能在这个点上遇到问题,会浪费不必要的时间,也会使自己烦躁。
如果测试不行,把AndroidStudioProjects\FirstApp\app\release\app-release.apk删除重来一次就好
测试ok
[F:\3288\MAndroid5.1_source\app_test\RKHellotest]$ adb install app.apk
pkg: /data/local/tmp/app.apk
Success
5361 KB/s (1441657 bytes in 0.262s)
在打包内置到系统中,测试ok