基于海思Hi3716cv200的Android源码编译及烧写之内置存储卡

问题:把编译好的镜像烧写到小板上后,发现设置--->存储 里只显示0.98G的系统空间,而且在设置--->应用 点开后会崩溃。崩溃时的日志信息如下:


time( 3407): at com.android.settings.applications.ManageApplications$TabInfo.updateStorageUsage(ManageApplications.java:333)

E/AndroidRuntime( 3407): at com.android.settings.applications.ManageApplications$TabInfo.setContainerService(ManageApplications.java:234)

E/AndroidRuntime( 3407): at com.android.settings.applications.ManageApplications$2.onServiceConnected(ManageApplications.java:1227)

W/ActivityManager( 2177): Process com.android.settings has crashed too many times: killing!

W/ActivityManager( 2177): Force finishing activity com.android.settings/.Settings

I/ActivityManager( 2177): Killing proc 3407:com.android.settings/1000: crash

W/InputDispatcher( 2177): channel ‘417bd5b0 com.android.settings/com.android.settings.Settings (server)‘ ~ Consumer closed input channel or an error occurred. events=0x9

E/InputDispatcher( 2177): channel ‘417bd5b0 com.android.settings/com.android.settings.Settings (server)‘ ~ Channel is unrecoverably broken and will be disposed!

W/InputDispatcher( 2177): Attempted to unregister already unregistered input channel ‘417bd5b0 com.android.settings/com.android.settings.Settings (server)‘

I/WindowState( 2177): WIN DEATH: Window{417bd5b0 u0 com.android.settings/com.android.settings.Settings}

binder: 2177:2249 transaction failed 29189, size 100-4

binder: 2177:2517 transaction failed 29189, size 4-0

binder: send failed reply for transaction 29309, target dead

仔细查看错误信息后发现,崩溃的原因跟存储设备有关。所有的问题都归结到Android系统不能完全识别存储设备这个问题上。

在shell下发现,系统能识别的存储只有4G,而我们的设备时8G的emmc

 [email protected]:/ # df 

Filesystem     Size Used Free Blksize
/dev           475M 68K 475M 4096
/mnt           475M 0K 475M 4096
/mnt/secure 475M 0K 475M 4096
/mnt/asec    475M 0K 475M 4096
/mnt/obb     475M 0K 475M 4096
/system      492M 254M 237M 4096
/data         1007M 72M 935M 4096 ------->这是设置里显示的内部存储。
/cache       98M 4M 94M 4096

由于我们是使用升级的方式烧写系统,所以在升级文件中应该会有对分区进行处理的脚本。搜索后发现,在update.zip的META-INF\com\google\android目录下存在updater-script升级脚本,对分区的操作就位于该脚本中,在该脚本中没有涉及Sdcard操作。在Android源码的bootable\recovery\etc\META-INF\com\google\android目录下发现了以下文件:

经过对比发现,其中updater-script-emmc就是我编译时默认使用的升级脚本,而在updater-script-produce-emmc中反现了以下代码:

ui_print("foramt sdcard......");
format("ext4", "EMMC", "/dev/block/platform/hi_mci.1/by-name/sdcard", "0", "/sdcard");

该段代码的功能就是格式化sdcard分区,接下来只需要把

updater-script-produce-emmc改名为updater-script-emmc,然后再源码根目录下执行:make updatezip -j8即可在out/target/product/hi3716c/Emmc目录下得到升级包update.zip,再利用该升级包升级系统即可。升级后,在shell下查看系统分区如下:

[email protected]:/ # df
Filesystem             Size   Used   Free   Blksize
/dev                   475M    68K   475M   4096
/mnt                   475M     0K   475M   4096
/mnt/secure            475M     0K   475M   4096
/mnt/asec              475M     0K   475M   4096
/mnt/obb               475M     0K   475M   4096
/system                492M   254M   237M   4096
/data                 1007M    61M   946M   4096
/cache                  98M     4M    94M   4096
/mnt/sdcard              5G    98M     5G   4096
/mnt/secure/asec         5G    98M     5G   4096

可以看到,所有分区都能识别出来了。

注意1:Android系统一般会把整个存储(如本例的8G Emmc)分为两部分,一部分作为系统分区,一部分作为内置SD卡分区。

注意2:以上修改只针对生产时使用,在提供给用户的升级包update.zip中使用的升级脚本一定不能包含对sdcard的格式化操作。也就是说,用户升级包必须使用原来的updater-script-emmc升级脚本。

============================================================================================

附录:上图中各个分区的作用。

/system分区 --->ROM信息

--app------>预安装的应用和系统软件

--data------> 预安装应用和软件的数据信息

/data分区--------->用户软件信息

--app------>用户安装软件,安装时把apk文件复制到此目录

--data------>存放所有软件(/system/app,/data/app 和/mnt/asec中装的软件)的一些lib和xml文件等信息。以及程序缓存文件。

--dalvik-cache----->将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)

/mnt  分区---------> 挂载外部设备

--sdcar  --->内置sd卡分区,用于存储下载的地图、音乐、视频等文件。

基于海思Hi3716cv200的Android源码编译及烧写之内置存储卡

时间: 2024-08-05 20:55:23

基于海思Hi3716cv200的Android源码编译及烧写之内置存储卡的相关文章

基于海思Hi3716cv200的Android源码编译及烧写

1.先说说硬件配置,我最开始是在Win7(I7 4770,8G RAM,2T硬盘)里装ubuntu10.10 64位系统(4G RAM,200G 硬盘)进行源码编译,大概花了3个多小时.而且还多次出现outofmemoryerror 错误.最后将硬件升级为I7 4770.16G内存.2T硬盘,不装虚拟机,直接跑Ubuntu 10.10系统,Swap分区为16G,编译一次大概花了40分钟,没有报任何错误. 所以不推荐在虚拟机里面跑. 2.根据官方文档配置编译环境: 官方文档说的是在"发布包/Sof

基于Hi3716cV200的Android源码编译问题---fastboot-burn.bin

在编译源码时有时会报与"fastboot-burn.bin"有关的错误. 解决办法如下: 进入device/hisilicon/bigfish/sdk目录,一次执行 make hiboot_clean; make hiboot_install. 如果在这个过程中报弄cfg.mak文件的错误,解决办法之一是在Android源码根目录进行一次完整编译,直到出错停止,此时会生成cfg.mak文件:解决方法之二是从sdk/configs拷贝单板配置文件到sdk目录并改名为cfg.mak. ==

android 源码编译及其运行模拟器相关问题记录

最近一直在看android源码相关的文档,包括编译源码,还有framework层的代码,本人很懒,一直没有写博客,今天想自己在编译一下源码,并且运行在模拟器中. 源码的版本不同,需要的jdk可能也有所不同,一切都参照官方给与的文档,下载源码的方法也参考官方文档. 注意点:1.环境变量要设置正确,不要出现错误 2.基本没有一次就能顺利编译源码的,多少都会出错,根据提示修改错误,安装一些包和库就可以搞定,具体问题具体查找,我遇到的问题也可多了,都是按官方文档解决的.有些问题可能和你的编译环境相关,这

有关android源码编译的几个问题

项目用到编译环境,与源码有些差异不能照搬,关键是连源码都没编译过,下面基本上是行网上照的各种自学成才的分享,病急乱投医了,都记在下面作为参照吧. 1.验证是否编译正确,在终端执行 emulator & (注:可进入${ANDROID_PRODUCT_OUT}目录,后执行 emulator -image system.img -data userdata.img -ramdisk ramdisk.img) 模拟器能正常启动则表明编译成功 Android源码编译调试详解  Android2.2的,有

Android源码编译jar包BUILD_JAVA_LIBRARY 与BUILD_STATIC_JAVA_LIBRARY的区别(二)

上文简单介绍了BUILD_JAVA_LIBRARY 与BUILD_STATIC_JAVA_LIBRARY编译出来jar包的区别, 那么你如果拿到了一个内容是dex格式的jar包,而你又偏偏需要这个jar包导入Eclipse来做开发, 手头偏偏又没有这个jar包的源码,或者有源码,但是没有Android源码编译(mm)的环境,怎么办? 这个时候谷歌安卓反编译工具(dex2jar, 本人实在太懒,就不提供下载链接了)就有用处了, 将jar包里面的dex文件(classes.dex)用此神器转换成一个

Android源码编译

Android源码编译学习小结 内容 系统源码编译 笔者之前在学习安卓系统源码的编译,为了能够印象深刻,粗略的总结了以下内容,希望对我一样的初学者有一些帮助. 系统编译的初始化指令 对android编译环境进行初始化很简单,分为两步.第一步打开终端输入source build/envseup.sh加载所需的文件. $ source build/envseup.sh including device/asusource build/envseup.shs/grouper/vendorsetup.s

Android源码编译make的错误处理

android源码下载:官方下载 或参考android源码下载方式 Android编译版本: PLATFORM_VERSION=4.0.1(最新Android 4.0.1) OS 操作系统平台: Linux yanggang 2.6.35-30-generic #61-Ubuntu SMP Tue Oct 11 15:29:15 UTC 2011 i686 GNU/Linux(Ubuntu10.10  32bit) 首先,我们先安装一些常用的工具curl: sudo  apt-get  inst

Android源码编译之Nexus5真机编译

1.   前言 在Android安全的研究工作中,我们时常要对Android进行改进并对其进行源码编译,由于目前几乎所有的手机厂商均对其底层驱动实行封闭政策,导致我们在完成Android编译后无法将我们编译好的系统刷到普通的Android手机上,因此在一般的科学实验中我们更多的是将修改好的android源码编译成模拟器,以模拟器的形式证明实验的成功与否. 事实上,Android作为一款开放源代码的移动设备操作系统,Google最初就考虑到了真机编译的问题,而关于这个问题的解决方案体现在每次Goo

android源码编译完成之后

android源码编译完成之后,在根目录下会有一个out目录生成,如果我们想要运行虚拟机的话,需要配置一下环境变量. 首先我们使用下面的命令打开配置环境变量的文件: gedit ~./bashrc 在这个文件的最后,添加如下代码: export ANDROID_PRODUCT_OUT=~/android/out/target/product/generic ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin export PATH=$