如何在32位ubuntu11.10 下编译android 4.0.1源码和goldfish一加2 内核源码编译

yanzi1225627
昨晚在编译源码,make一段时间之后报错如下:# A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0x40362d33, pid=12195, tid=
# JRE version: 6.0_45-b06
# Java VM: Java HotSpot(TM) Server VM (20.45-b01 mixed mode linux-x86 )
# Problematic frame:
[libjvm.so+0x158d33]
[error occurred during error reporting (printing problematic frame), id 0xb]&&&&&&& 经过研究是硬盘空间不够的问题,大爷的。也难怪,我原先用wubi安装的ubuntu12.04,分了一个单独的硬盘30G大小。本以为空间够用,下载好源码后空间只剩6G了,也难怪。参考内存要1G,硬盘空间要大于40G最好。&&&&& 为此卸载了ubuntu,然后xp下划了70G的硬盘给ubuntu,但wubi安装时最大仍然是只能选择30G.我擦,这什么意思。为吗不能弄大点。后来看资料说有个LVPM可以修改ubuntu的大小,但根据资料显示LVPM只能支持ubuntu早期的版本,好像是10.04就不中了。后来找到ubuntu有个 链接:/community/ResizeandDuplicateWubiDisk& 叫 就是修改硬盘空间大小的,原理和LVPM一样。兴致勃勃下好后,想分个60G空间大小,结果显示最大参数为32G. 我擦,太坑爹了!看来wubi安装缺点有很多啊,幸好找到可以把android源码放到xp下的其他盘然后编译,在/media/..........目录。&&&&&&&&&& 为此,从头开始记下编译步骤:1,由于重弄的ubuntu原来的android开发环境么有了,因此第一步安JDK吧,必须是1.6版本的,1.7的不中。下载链接:参考南都布衣的文章,选用1.6.0_29版本。新建/usr/local/android目录,为以后安装android作准备。JDK也解压缩到这里。修改/etc/profile文件里添加:export JAVA_HOME=/usr/local/android/jdk1.6.0_29export PATH=$PATH:$JAVA_HOME/bin然后source /etc/profile一下。输入java -version来检查java装成功了么有。一般出现1.6.0_29就表示成功了。但文档里还说要安javac 和 jar。我猜测原因可能是,尽管java装好了,但执行update-alternatives --config java的时候会说无java的选项,所以要update-alternatives --install再install一下。root@ubuntu:/usr/local/android# update-alternatives --install /usr/bin/java java /usr/local/android/jdk1.6.0_29/bin/java 300会提示:update-alternatives: 使用 /usr/local/android/jdk1.6.0_29/bin/java 来提供 /usr/bin/java (java),于 自动模式 中。对javac和jar做相同的处理,命令为:update-alternatives --install /usr/bin/javac javac /usr/local/android/jdk1.6.0_29/bin/javac 300update-alternatives --install /usr/bin/jar jar /usr/local/android/jdk1.6.0_29/bin/jar 300此时,在update-alternatives --config java就会显示有版本信息了,当同时有多个jdk版本时,这个设置就是非常重要的。2,下载需要的包:我主要是参考:sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386但奇怪的是如果我整个粘贴到终端会啥东西都装不了,如果一行一行的粘贴过去则还能安装,这点要注意啊。3,下载android源码,参考,我已经下载好了。压缩后1.9G大小,有时间上传到网盘。解压后是4.7G大小。现在将它放在/media/娱乐/盘符下面,这是xp下的F盘,有50G大小。4,默认的gcc g++版本为4.6.3,& 将其改为4.4.步骤:sudo apt-get install gcc-4.4sudo apt-get install g++-4.4cd /usr/binls -l gcc*sudo mv gcc gcc.baksudo ln -s gcc-4.4 gccls -l g++*sudo mv g++ g++.baksudo ln -s g++-4.4 g++gcc -vg++ -v5,python的版本是2.5-2.7,默认的是2.7 没问题。JDK版本为1.6也么问题。6,参考/1182.html设置ccache加快编译速度。默认的ccache在~/.ccache文件夹下。默认的是1G大小。我在/home/yan/目录下新建一个cache文件夹用来做缓存。gedit ~/.bashrc里面新增的内容是:export USE_CCACHE=1export CCACHE_DIR=/home/yan/cache&&&&&&&&&& 然后设置cache的大小,在androidSource文件夹下,也即工程文件夹下要make的地方终端输入命令:prebuilts/misc/linux-x86/ccache/ccache -M 5G 官方推荐的是50-100G,但我wubi安装的ubuntu总共才30G,剩余空间也就24G,因此设为5G.我想这里也可以把ccache的目录设置在xp下的盘上。【后记,这一步我忘了运行最后那个设置ccache的大小的命令,结果编译时/home/yan/cache文件夹下的内容大约为1G,由此我推测默认的cache为1G大小。通过设置这个应该可以提高编译速度】关于ccache的使用提高编译速度,可以参考如下2篇:1,2,7,参考/forum.php?mod=viewthread&tid=192736&page=1#pid1738873 安装两个软件:sudo apt-get install ntfs-3g& && &//这个12.04已经有了。sudo apt-get install ntfs-config&&//这个是个图形界面的NTFS权限配置程序。&&&& 然后终端输入:sudo ntfs-config,oh shit!出现了https://bugs.launchpad.net/ubuntu/+source/ntfs-config/+bug/1044028上面的bug,大爷的!不管了,这一步咱略过吧。后来我又把ntfs-config给卸载了,因为它总是报错。apt-get remove ntfs-config。事实上,在系统自带了ntfs-3g的情况下,就可以对xp下的盘进行读写了。因此这一步可以省略。8,按照官方的提示,在androidSource路径下,终端依次执行如下命令:source build/envsetup.shlunch full-engmake -j4强烈建议:原文说最后一条命令使用 make showcommands,这样可以显示编译命令,使得编译的时候,屏幕没有输出的时候,不会感觉无聊。但我测试,我就是用了make showcommands结果编译了整整10个小时才编译完。因此最好用make -j4这个命令进行编译,这个4等于cpu内核数*2.如果是2核就写-j4,如果是4核就-j8.这样可以大幅度提高编译速度。&&&&&& 然后就是漫长的等待了,我大约编译了10个多小时,半夜4点起来看才编译完,头一天下午5点开始编译。快12个小时了大爷的,之所以时间这么长,我想是两方面的失误造成的:1,设置了ccache,但是忘了设置大小了,默认的1G来处理的2,最后的编译用的是make showcommands命令,没有用make -j4终端在编译完成后最后的输出是:echo &board=& & out/target/product/generic/android-info.txt
Installed file list: out/target/product/generic/installed-files.txt
build/tools/fileslist.py out/target/product/generic/system & out/target/product/generic/installed-files.txt
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
out/host/linux-x86/bin/mkyaffs2image -f
out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
out/host/linux-x86/bin/acp -fp out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img out/target/product/generic/system.img
out/host/linux-x86/bin/mkbootfs out/target/product/generic/root | out/host/linux-x86/bin/minigzip & out/target/product/generic/ramdisk.img
out/host/linux-x86/bin/mkyaffs2image -f
out/target/product/generic/data out/target/product/generic/userdata.img
true编译完成后在out/target/product/generic文件夹下有3个镜像文件:ramdisk.img system.img userdata.img,截图如下:&&&&&& 这里记录下编译前后相关文件夹的大小,编译前源码文件夹的大小是4.7G,压缩后是2G.编译完成后out文件夹的大小是12.3G,整个源码文件夹的大小是16.7G.真耗空间啊!难怪/forum.php?mod=viewthread&tid=245968这里说,内存大于1G,硬盘大于40G.&&&&&& 看来wubi安装的ubuntu在无法实质扩大安装空间的前提下,只能在挂载的xp盘下进行编译。终端输入命令:df -h查看磁盘使用情况:&&&&&&&& 这里已经自动挂载好了,其中的/dev/sda1是我的c盘,然后sda5 sda6 sda7 分别是D E F盘,sda8是我的最后一个盘也是装ubuntu的盘。我把源码放到了娱乐(F盘)进行编译的。之前还担心文件夹有中文会不会报错,看来多虑了。&&&&&&& 终端切换到root,可以通过如下命令自由卸载和挂载:root@ubuntu:~# umount /dev/sda7 /media/娱乐umount: /media/娱乐 未挂载root@ubuntu:~# mount /dev/sda7 /mnt/root@ubuntu:~# cd /mnt/root@ubuntu:/mnt# lsandroidSource& androidSource_4_0_1.tar.gz& RECYCLER& System Volume Information这样用xp下的盘就跟用linux下的文件夹一样,尽情编译!编译过程没出啥问题,但还是将相关问题的解决方案附录如下:1,2,3,4,南都布衣——[Android]Ubuntu12.04下编译和下载Android4.0.3源码:5,Ubuntu 12.04 编译Android 4.2 源码 --&&&&&& 根据上面的链接2,镜像生成在out/target/product/generic下:android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。&&&&& 根据链接1还要下载kernel代码,下一步就是下载内核代码,并将编译的镜像安到模拟器上!
阅读排行榜3340人阅读
Android(20)
一准备工作
1安装javasdk6
()从官方网站下载文件。
()执行安装文件
$chmod a+x jdk-6u29-linux-i586.bin
$jdk-6u29-linux-i586.bin
配置环境变量
$sudo vim /etc/profile#JAVAEVIRENMENT
exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
exportJRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存后退出编辑,并重启系统。
2安装依赖包
$sudo apt-get install git-core gnupg flex bison gperf build-essential\
zipcurlzlib1g-devlibc6-devlib32ncurses5-devia32-libs\
x11proto-core-devlibx11-devlib32readline5-devlib32z-dev\
libgl1-mesa-devg++-multilibmingw32tofrodospython-markdown\
libxml2-utils
3用repo工具下载源码
$mkdir bin
$curlhttps://dl-/dl/googlesource/git-repo/repo&~/bin/repo
$chmod a+x ~/bin/repo
$exportPATH=$PATH:~/bin(导出环境变量)
下载最新源码
$mkdir android
$cd android
$ repo init -u /platform/manifest -bandroid-4.0.1_r1
...(输入用户名和邮箱名)
$repo sync -j5
...(此处用5个线程开始下载源码,下载过程及其漫长,需要耐心等待)
二 编译源码
$source build/envsetup.sh
includingdevice/samsung/maguro/vendorsetup.sh
includingdevice/samsung/tuna/vendorsetup.sh
includingdevice/ti/panda/vendorsetup.sh
includingsdk/bash_completion/adb.bash
$make-j4(此处用4个线程编译)
编译完成后,会看到类似的输出:
Targetramdisk:out/target/product/generic/ramdisk.img
Targetuserdatafsimage:out/target/product/generic/userdata.img
Installedfilelist:out/target/product/generic/installed-files.txt
2编译遇到的问题
编译错误:
&命令行&:0:0:错误:“_FORTIFY_SOURCE”重定义[-Werror]
&built-in&:0:0:附注: 这是先前定义的位置
cc1plus:所有的警告都被当作是错误
make:*** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]错误 1
因机器上的版本过高,需替换成重新进行编译。
解决方法:
)安装版本的和
$ sudo apt-get install gcc-4.4
$ sudo apt-get install g++-4.4
)设置版本,使链接到
$ ls -l /usr/bin/gcc*
lrwxrwxrwx 1 root root
23:56 /usr/bin/gcc -& gcc-4.6
-rwxr-xr-x 1 root root 1-10-06 05:47 /usr/bin/gcc-4.4
-rwxr-xr-x 1 root root 1-09-17 05:43 /usr/bin/gcc-4.6
$ cd /usr/bin
$ sudo mv gcc gcc.bak
$ sudo ln -s gcc-4.4 gcc
)设置版本,使链接到
$ sudo mv g++ g++.bak
$ sudo ln -s g++-4.4 g++
)设置完毕后,重新进行编译即可
3从模拟器启动编译后的镜像文件
)设置环境变量:
export PATH=~/android/out/host/linux-x86/bin:$PATH
export ANDROID_PRODUCT_OUT=~/android/out/target/product/generic
其中存放模拟器工具,存在编译后的镜像文件。
)启动模拟器
emulator:WARNING: system partition size adjusted to match image file (162 MB &66 MB)
启动后的截图:
三 编译androidgoldfish内核
)进入源码目录,下载内核源码
$ mkdir kernel
$ cd kernel
$ git&clone&/kernel/goldfish.git
$ cd goldfish
$ git branch -a
* (no branch)
remotes/origin/HEAD -& origin/master
remotes/origin/android-goldfish-2.6.29
remotes/origin/master
$ git checkout remotes/origin/android-goldfish-2.6.29
goldfish$ gedit Makefile
?=$(SUBARCH)
CROSS_COMPILE ?=
CROSS_COMPILE ?=arm-eabi-
导出交叉编译器目录为环境变量
$ export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
)编译内核
goldfish$ make goldfish_armv7_defconfig
goldfish$ make
编译完成后,可看到类似如下的输出:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
从模拟器中启动内核镜像
-kernel ~/android/kernel/goldfish/arch/arm/boot/zImage &
启动模拟器后,可从Phone中查看内核版本信息。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:289409次
积分:2384
积分:2384
排名:第9303名
原创:12篇
评论:58条
(3)(1)(2)(2)(2)(2)(1)(3)(1)(2)(1)(1)(1)(5)(6)(1)(2)(4)(10)(2)编译Android系统源码和内核源码
好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操作,但是我说句真心话,那些只能提供参考,因为你的工作环境毕竟和他不一样,所以等你按照他的步骤去操作的时候还是会遇到很多问题,当然我写这篇文章也不是说我的方法就是一定可以的,我只能说我是成功了,所以我只是想记录一下,以后可以进行翻阅查看,主要的还是要看自己的毅力和解决问题的能力了,好了不多说了,说正事吧~~
首先我们来看一下编译Android系统源码
第一:我们知道Android系统是基于Linux开发的,所以我们想编译Android系统源码的话,就必须有一个Linux系统,这里我使用了Ubuntu64位的系统,这个镜像文件的下载地址是:
/s/1c0eUSYc
安装Ubuntu系统不用说了吧,这种问题网上的资料多得很,因为篇幅可能很长,所以如果真的需要的话,请留言~~
问题一:至于我为什么要使用64位系统,因为在后面我会遇到一个问题,就是我第一次安装的是32位的系统,结果在编译的过程中遇到一个问题就是:
ERROR:prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linux-aronly run on 64-bit linux
编译不通过的,我就在网上找答案,下面的这篇文章就是说怎么解决上的问题,主要就是修改一些指定的文件
/s/blog_76dbbd7ecm5.html
但是很悲剧的是:我按照他的方法操作,并没有成功,那怎么办呢?我最后选择了重装了一个64位的系统,但是这次就没有用虚拟机了,直接安装到电脑中的。
问题二:安装的时候我先后卸载在安装系统有好几次,主要原因是第一次编译没经验,开始的时候就分配了20G的空间,结果编译的时候傻了,完全不够,所以我直截了当将电脑的200G的空间都分配出去了
那么安装系统完之后,还有一个问题,当我再去使用同一个方式去下载Android源码的时候,发现总是连接不上了,感觉Google退出中国了,源码也很难下到了,中间只有大约一个月的时间,就不可以下载了,好假,尝试过各种方法,我还买VPN,结果还是不行,那么怎么办呢?之前是有源码的,但是在虚拟机中,这时候就需要将虚拟机中的源码拷贝出来了,那么怎么从虚拟机中拷贝文件呢?这个很简单的,我用的VM的,他能够设置共享文件夹(具体方法可以搜索一下),但是又有一个问题来了,当时在虚拟机中下载的是Android4.4源码,大约有18G,我就尝试拷贝了,结果发现电脑最好拷贝死机了,主要是因为小文件太多了,大约有60万个,电脑配置也不好,所以尝试了几次都是死机了,那拷贝不出来怎么办呢?问题都是得解决的,突然想到了压缩一下在拷贝:
/jiangwei/article/details/
通过上面的一篇文章中,压缩拷贝,结果发现效果很不错,而且压缩也是很快的,这下拷贝就顺利了
至此我们解决了系统问题和源码问题
注意:这里所说的源码问题不是指下载源码的问题,我会在最后面说一下现在如何能够得到相应的Android源码,反正从google上去下载我是不相信了。所以我提供了我已经下载好并且打成压缩包的连接,
/s/1mgoNVGs
只需要进行解压即可,关于解压缩Linux文件的话,可以查看另外一篇blog:
/jiangwei/article/details/
上面的前奏都做好了,下面就来进行编译操作
第一步:在此之前还需要安装一些辅助工具,防止在安装的时候提示错误,当然我们可以现在不安装,等到安装的时候会提示相应的错误,到时候我只需要针对性的去安装,但是那样在编译的过程中会很不爽的,所以我还是先把这些工作做了
首先需要安装JDK,请转战另外的一篇Blog:
/jiangwei/article/details/
当JDK安装完毕之后,下面就需要来安装一下编译库了:
sudo apt-getinstall gnupg flex bison gperf libsdl1.2-devlibesd0-dev sudo apt-getinstall libwxgtk2.6-dev squashfs-toolsbuild-essential
sudo apt-get install zlib1g-dev pngcrush schedtool ia32-libslibncurses5-dev
当然这些是必须要安装的,但是不是一定在编译的时候就没有问题,所以我们在编译的时候遇到什么问题的时候我们再去进行解决
今天在Ubuntu11.04(64位)编译Android2.3源码时,遇到各种各样的问题。不是缺这个,就是少那个。现把这些问题和解决方法罗列出来,供大家参考
普遍错误:1.错误:/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such fileor directorymake: ***[out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 错误1解决:sudo apt-get install libc6-dev-i386 2.错误:make: ***[out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp] error1解决:sudo apt-get install g++-multilib 3.错误:external/clearsilver/cgi/cgi.c:22: fatal error: zlib.h: No suchfile or directorycompilation terminated.make: ***[out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_cgi_intermediates/cgi.o]Error 1解决:sudo apt-get install zlib1g-dev4.错误:/usr/bin/ld: cannot find -lzcollect2: ld returned 1 exit statusmake: ***[out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error1解决:sudo apt-get install lib32z1-dev5.错误:bison -d
-oout/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cppframeworks/base/tools/aidl/aidl_language_y.y/bin/bash: bison: command not foundmake: ***[out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp]Error 127解决:sudo apt-get install bison6.错误:Lex: aidl &= frameworks/base/tools/aidl/aidl_language_l.l/bin/bash: flex: command not foundmake: ***[out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp]Error 127解决:sudo apt-get install flex7.错误:/usr/bin/ld: cannot find -lncursescollect2: ld returned 1 exit statusmake: ***[out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error1解决:sudo apt-get install lib32ncurses5-dev8.错误:prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55: fatal error:X11/Xlib.h: No such file or directorycompilation terminated.make: ***[out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/main-common.o]Error 1解决:sudo apt-get install libx11-dev 9.错误:sh: gperf: not foundcalling gperf failed:
at ./makeprop.pl line 96.make: ***[out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h]Error 25make: *** Deleting fileout/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h 解决:sudo apt-get install gperfFrom:/offbye/article/details/
以上的错误总结参考:/content/12/97_.shtml
致命错误: bits/predefs.h:没有那个文件或目录编译中断
解决方法:sudo apt-getinstall gcc-multilib
参考:/s/blog_6340cd9ch.html
还有一个原因:
Ubuntu11.10以上的gcc版本是4.6.1,版本太高,编译android时出错,要把gcc版本改为4.4.3
sudo apt-get install gcc-4.4sudo apt-get install g++-4.4
参考:/zhaolin@126/blog/static//
总结错误:
host Executable: aapt(out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt)/usr/bin/ld: skipping incompatible/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when searchingfor -lz/usr/bin/ld: skipping incompatible/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.a when searchingfor -lz/usr/bin/ld: skipping incompatible //usr/lib/libz.so when searchingfor -lz/usr/bin/ld: skipping incompatible //usr/lib/libz.a when searchingfor -lz/usr/bin/ld: cannot find -lzcollect2: ld returned 1 exit statusmake: ***[out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error1
缺少lib32z1-dev,安装即可:apt-get installlib32z1-dev2.错误编译时出现 /usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: Nosuch file or directory 错误信息/usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: No suchfile or directorycompilation terminated.make: ***[out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] Error1解决办法:
缺少libc开发包,安装即可: apt-get installlibc6-dev-i3863.错误Android编译遇到错误/usr/bin/ld: cannot find -lstdc++的解决解决办法:
缺少g++-multilib库,安装即可: apt-getinstall g++-multilib
参考:/lecture/doc/android/.html
最后发现的一个错误:
make android 时的 libwebcore.soerror
解决办法:增加文件swap
参考:/zhoukejun/article/details/
/tod_zhang/blog/static/311/
好吧在这上面的工作都做完了,错误也都解决了,编译也完成了,我是在晚上进行编译的,第二天好了,当看到结果的时候真的很开心:
Target system fs image:
out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image:out/target/product/generic/system.img
Target ram disk:out/target/product/generic/ramdisk.img
Target userdata fs image:out/target/product/generic/userdata.img
Installedfile list:out/target/product/generic/installed-files.txt
那么下面就运行一下编译的结果吧:
1. 设置环境变量:USER-NAME@MACHINE-NAME:~/Android$ exportPATH=$PATH:~/Android/out/host/linux-x86/bin USER-NAME@MACHINE-NAME:~/Android$ exportANDROID_PRODUCT_OUT=~/Android/out/target/product/generic其中,~/Android/out/host/linux-x86/bin有我们要执行的emulator命令,而~/Android/out/target/product/generic是Android镜像存放目录,下面执行emulator命令时会用到。2. 运行模拟器。USER-NAME@MACHINE-NAME:~/Android$emulator模拟器运行需要四个文件,分别是LinuxKernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。执行emulator命令时,如果不带任何参数,则LinuxKernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件,而Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img,也就是我们刚刚编译出来的镜像问题。当然,我们也可以以指定的镜像文件来运行模拟器,即运行emulator时,即:USER-NAME@MACHINE-NAME:~/Android$ emulator-kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir./out/target/product/generic -system system.img -data userdata.img-ramdisk ramdisk.img
但是又来了一个错误:
emulator:ERROR: You did not specify a virtual device name, and thesystemdirectory could not be found.If you are an Android SDK user, please use
to start a given virtual device (see -help-avd for details).Otherwise, follow the instructions in -help-disk-images to startthe emulator
解决方法:
进入到Android源码目录中执行:
sourcebuild/envsetup.sh
lunchsdk-eng
然后再执行:
可以启动模拟器
参考:/yf210yf/article/details/
再次运行,好吧有结果了:
编译完Android源码之后,写还得再来看看如何编译Android内核源码,为什么要编译Android内核源码呢?这个是为了后续的工作做准备,后面会说到的,其实我们上面编译的Android源码他的内核源码Google已经编译好了,存放在:源目录/prebuilt/android-arm/kernel/kernel-
下面我们就来看看如何编译内核源码吧,同样如此,想编译内核源码的话,我们需要内核源码,又是一件痛疼的事,网上有很多资源都是说使用goldfish版本的,然后就去:gitclone/kernel/goldfish.git反正我是下载失败,原因和下载源码是一样的,google服务器连接失败,那怎么办呢?当时我是没有办法了,就去各种搜索,结果有人说goldfish是连接不上了,有人将内核源码放到github上了,地址如下:https:///android/kernel_common
如果下载失败的话,我已经下载好了,可以去以下的连接去下载:
我就去下载了,大约几百M吧,下载下来之后,就进行编译吧,在编译之前我们需要修改点东西:
修改文件夹中的Makefile文件中的编译环境
ARCH ?= (SUBARCH)CROSS_COMPILE ?=
修改成ARCH ?= armCROSS_COMPILE ?=arm-eabi-
采用的是arm体系结构,交叉编译使用的是arm-eabi-XXX工具,这个值只是个前缀
下面我们就来编译吧,进入到文件夹中进行编译结果发现,说找不到指定的arm-eabi-gcc工具(这个错误发生在我编译Android4.4版本的时候,因为这个版本的源码中找不到指定的prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin目录,但是最后编译Android2.3.7版本的话就有了,所以针对于4.4版本没有的话,我们怎么办呢,那还得去网上搜索这个工具,下载地址:/download/storeage/),下载下来之后一般是存放到/usr/lib目录中,然后修改一下环境变量,这个可以参考前面配置JDK环境变量的方法
首先需要:makegoldfish_defconfig
但是找不到指定文件,发现这个文件只在goldfish版本中,而我们下载的是kernel_common,这时候我们可以:
makemenuconfig
然后选择对应的配置,但是问题又来了,哪些选项是必选的,哪些是不需要选的,反正最后编译总是失败,搞伤的了,所以还是得去找goldfish版本的(我上面之所以介绍了kernel_common版本的,就是记录一下我操作的过程,虽然最后失败了),不过运气挺好的,最后还真的被我找到了,具体的地址我记得不太清楚了,但是我放到网盘了,里面有相应的说明,goldfish下载地址:
/s/1qW0TkkO
下载下来之后,可以编译了,
makegoldfish_defconfig
这个编译的过程很快,不到一个小时吧
OBJCOPY arch/arm/boot/zImageKernel: arch/arm/boot/zImage isready
这样就编译成功了,那么我就是用这个内核镜像来启动模拟器吧:
1. 在启动模拟器之前,先设置模拟器的目录到环境变量$PATH中去:USER-NAME@MACHINE-NAME:~/Android$ exportPATH=$PATH:~/Android/out/host/linux-x86/bin2. 设置ANDROID_PRODUCT_OUT环境变量:USER-NAME@MACHINE-NAME:~/Android@MACHINE-NAME:~/Android &$ exportANDROID_PRODUCT_OUT=~/Android/out/target/product/generic3. 在后台中指定内核文件启动模拟器:USER-NAME@MACHINE-NAME:~/Android$ emulator -kernel./kernel/common/arch/arm/boot/zImage&
不幸的是模拟器是可以启动但是总是黑屏,而且是用adbshell也连接不上设备,这可怎么办,都快成功了,然后就去网上再次找答案,找到了:原因是我的源码是4.4版本的,2.3版本以后的体系架构是用的是armv7了,所以不是:
makegoldfish_defconfig
makegoldfish_armv7_defconfig
再次编译,成功再次是用镜像文件启动模拟器,草,傻眼了,结果还是失败太蛋疼了,然后各种搜索,原因上面的解答,但是我已经修改了,还是不行(这个问题纠结了两个礼拜,我差点就放弃了),最后想是不是源码的问题,也只能这么想了,所以又去晚上找2.3.7的源码,别说着了一天,真是不负有心人呀,还真的被我找到了,而且找到很多个版本,都是压缩包的形式,在这里我真心的要感谢这个人,懂得资源分享,
Android2.3.7源码下载地址:
/s/1eQ9YT6i
然后我就很兴奋的重新编译了Android2.3.7版本的源码(其实我当时有点担心,因为我现在的系统是64位的,不知道这个源码是多少位的,但是最后编译成功了,这个版本是64位的,也就不需要重新换系统了),因为有了之前的编译过程,好多问题都提前解决了,编译过程中是很顺利的,也是在晚上编译的结果也是成功了,这次我们在通过上面的方式来编译内核,然后启动模拟器,擦,结果可以了:
成功了,这次是真的成功了,好感动,好激动呀,两次挫折两次激动~~
总结:其实我们可以回顾一下上面的过程,个人感觉没有任何技术可言,我遇到的最大的问题就是资源获取不到的问题,所以我将使用到的资源都给出了下载链接,同时感觉遇到问题不可以胆怯,要勇敢面对~~
编译Android系统源码和内核源码由用户自行发布,编译Android系统源码和内核源码内容不代表本站立场,请自行分辨真伪。

我要回帖

更多关于 linux内核源码编译 的文章

 

随机推荐