0 android bringup过程梳理

写在前面

主要是工作中需要在现有的android系统代码中添加一款产品,梳理一下android系统添加一个产品的移植步骤,此处已经假设你下载完了aosp的代码。

编译

先编译一下现有的代码,调试一下错误,主要是编译环境遇到的错,我将我遇到错误放在了最后,如果遇到相同的可以参考。

source  build/envsetup.sh
lunch
make

这一步主要是会遇到一些奇奇怪怪的环境方面的问题,先编译一遍,要不然已经改了东西的话,咳咳,分不清是自己改的锅还是环境的锅,一言难尽。

新增分支

新增一个分支

mkdir device/rockchip/rk3326/PX30_Myandroid 
cp -ra device/rockchip/rk3326/PX30_Android10/* device/rockchip/rk3326/PX30_Myandroid/

允许第三方定制Product配置,在源码/device/rockchip/rk3326目录下,需要分别新增/修改如下文件:
AndroidProducts.mk :指定 product 配置,并把 product 添加到 lunch 选择项中
product.mk :一个产品的软件相关的配置,比如内置哪些软件模块,由AndroidProducts.mk 中的PRODUCT_MAKEFILES指定(非固定)
BoardConfig.mk :芯片硬件相关配置,分区设置等

下面是我的修改
/device/rockchip/rk3326/AndroidProducts.mk:
主要是添加一个lunch选项

COMMON_LUNCH_CHOICES +=            
      PX30_Myandroid-userdebug \
      PX30_Myandroid-user \

device/rockchip/rk3326/PX30_Myandroid/BoardConfig.mk:
主要是写硬件配置相关
PRODUCT_KERNEL_CONFIG : 里面有三个 并不是选择关系 是并列关系,将三个包含的选项都选择进去了 相应的目录为/kernel/arch/arm64/configs

// 定义板级信息:使用dts设备树文件、kernel的defconfig配置文件、uboot的defconfig配置文件
PRODUCT_KERNEL_DTS := px30-evb-ddr3-rgb-v10
PRODUCT_KERNEL_CONFIG := px30_android_defconfig android-10-go.config rk3326.config
PRODUCT_UBOOT_CONFIG := px30

device/rockchip/rk3326/PX30_Myandroid/PX30_Myandroid.mk:

mv PX30_Android10.mk PX30_Myandroid.mk

修改一下里面PX30_Android10 改为PX30_Myandroid
大概是这些

PRODUCT_NAME := PX30_Myandroid 
PRODUCT_DEVICE := PX30_Myandroid 
PRODUCT_BRAND := rockchip
PRODUCT_MODEL := PX30_Myandroid 

修改kernel

1 设备文件树
首先需要新建BoardConfig.mk 中指定的设备树文件
涉及需要修改的文件

kernel/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-rgb-v10.dts //新建:px30-evb-ddr3-v10.dts拷贝来进行修改
cd kernel/arch/arm64/boot/dts/rockchip
cp px30-evb-ddr3-v10.dts px30-evb-ddr3-rgb-v10.dts

android

系统登录动画

Android 的系统登录动画类似于Windows系统的滚动条,是由前景和背景两张PNG图片组成:
frameworks/base/core/res/assets/images/android-logo-IP-mask.png
frameworks/base/core/res/assets/images/android-logo-IP-shine.png

前景图片(android-logo-mask.png)上的Android文字部分镂空,背景图片 (android-logo-shine.png)则是简单的纹理。系统登录时,前景图片在最上层显示,程序代码控制背景图片连续滚动,透过前景图片文字 镂空部分滚动显示背景纹理,从而实现动画效果


/frameworks/base/cmds/bootanimation/BootAnimation.cpp 
bool BootAnimation::android()
{
  initTexture(&mAndroid[0], mAssets, "images/android-logo-IP-mask.png"); // 前景
  initTexture(&mAndroid[1], mAssets, "images/android-logo-IP-shine.png"); // 背景
}

编译时遇到的问题

记录下编译时候遇到的问题和一些解决方式

问题1

环境搭建时 ,shell中发现上下左右键是乱码 不能正常使用,表现为linux shell上左右上下键出现乱码^[[D ^[[C ^[[A ^[[B
查看shell环境

echo $SHELL

如果显示bin/sh, 那么试试输入

bash

如果OK了,
a) 让管理员把bash环境加到/etc/passwd 里,找到自己的username,在最后的冒号后添加:/bin/bash
b)使用:chsh -s /bin/bash username或者使用usermod -s /bin/bash username命令修改shell类型。
c) 另一种是当前用户的shell类型是/bin/bash但是还是会有这个问题,这时可以在终端输入:export TERM=linux。这个好像是因为ubuntu的版本的TERM的问题。

问题2

clang++: error: unable to execute command: Segmentation fault (core dumped)
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
Android (6052599 based on r353983c1) clang version 9.0.3 (https://android.googlesource.com/toolchain/clang 745b335211bb9eadfa6aa6301f84715cee4b37c5) (https://android.googlesource.com/toolchain/llvm 31c3f8c4ae6cc980405a3b90e7e88db00249eba5) (based on LLVM 9.0.3svn)
Target: aarch64-unknown-linux-android
Thread model: posix
InstalledDir: prebuilts/clang/host/linux-x86/clang-r353983c1/bin
clang++: note: diagnostic msg: PLEASE submit a bug report to https://github.com/android-ndk/ndk/issues and include the crash backtrace, preprocessed source, and associated run script.
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /work3/tengxingru/Rockchip_Android10/out/soong/.temp/regexp-macro-assembler-tracer-85a75a.cpp
clang++: note: diagnostic msg: /work3/tengxingru/Rockchip_Android10/out/soong/.temp/regexp-macro-assembler-tracer-85a75a.sh
clang++: note: diagnostic msg: 

********************
14:54:04 ninja failed with: exit status 1

unable to execute command: Segmentation fault 这种问题,实在莫名其妙,我的代码tar包经过压缩解压 复制过来之后,会跟源代码有所不同,比较过后,有三个不同,其中一个只相差中间的一个字节,很费解,整理一下可能的几个原因
1 tar的时候,压缩到解压缩过程中文件出错了,我将源码tar了之后 解包,使用diff工具跟原本的代码比较了一下,竟然有几个文件不一样,将源代码中不同文件重新复制过来,不要问我为什么,我也已经怀疑人生了。
2 注意一下语言吧
经验所得,那个 LANG 和LANGUAGE都配一下吧,比如

export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh 

或者

export  LANG=en_US.UTF-8
export  LANGUAGE=en_US:en

设置了之后,重新编译试试

3 注意一下内存,这个原因网上可以找到增加swap的方式,正常来说,应该是把内存增大,如果不好增加 ,先试着减少编译的线程,就是-jn 里那个n,多线程同时编译,可能会遇到因为不足出现莫名其妙的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值