两种方式:
repo工具(批处理工具,一次下载多个git仓库) ①.安装repo: mkdir ~/bin PATH=~/bin:$PATH 下载repo脚本: curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 设置repo可执行权限: chmod a+x ~/bin/repo②.初始化repo客户端 创建AndroidCode目录用来存放源码: mkdir AndroidCode cd AndroidCode 运行repo下载源码: repo init -u https://android.googlesource.com/platform/manifest -b android-4.4_r1 repo sync 据说20个G,提供更新.repo文件占10个g,我们暂时用不到,所以采用第二种,并让同学帮我分担了一部分流量~直接下载:百度云下Android2.3到6.0的源码链接: http://blog.csdn.net/ilittleone/article/details/6823441 是经过压缩split分割过的,需要合并: cat droidSplit*>droid.tar.gz 文件校验码md5sum校验文件是否被改过:
合并+解压 耗时2h,期间CPU持续满负荷运行
安装一系列工具、依赖: sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib sudo apt-get install tofrodos python-markdown libxml2-utils xsltPRoc zlib1g-dev:i386 sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev sudo apt-get install git-core gnupg flex bison gperf build-essential sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib sudo apt-get install libc6-dev-i386 sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev sudo apt-get install lib32z-dev ccache sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
安装jdk: Android4.4的源码编译所使用的jdk为Oracle jdk1.6。jdk一定要安装1.6的最高版本,即jdk1.6.0_45,否则编译中会报错
具体过程: 在/usr/loacl目录下创建jvm文件夹用来存放jdk:mkdir /usr/local/jvm 复制到/usr/local/jvm中:cp jdk-6u45-linux-x64.bin /usr/local/jvm 进入到/usr/local/jvm下,给.bin文件一个可执行权限 chmod +x jdk-6u45-linux-x64.bin 执行.bin文件进行安装:./jdk-6u45-linux-x64.bin 安装成功后设置环境变量,打开/etc/profile,添加如下几行后保存export JAVA_HOME=/usr/local/java/jdk1.6.0_45 export JRE_HOME=/usr/local/java/jdk1.6.0_45/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH source /etc/profile后,输入java -version,显示java version “1.6.0_45”则成功安装make: 由于ubuntu16.04自带make版本过高,无法编译。因此需要将make降至3.82版本,下载地址ftp://ftp.gnu.org/gnu/make/ 解压:tar -zxvf make3.8.2.tar.gz 然后进入make3.8.2目录下: ./configure make make install 执行完后在/usr/local/bin中可得到新的make,复制到/usr/bin中即可
我当时是以root身份编译的,图片中的编译时间是23号,而我是23号晚上11点开始编译,24号2点结束,所以是开始编译的时间。说明:Android源码包自带一个编译好的内核镜像,看不到内核源码的。
下载kernel仓库:还有支持HTC、三星、高通MSM等的内核,goldfish专门针对模拟器的。 mkdir kernel cd kernel git clone https:// android.googlesource.com/kernel/goldfish.git 宿舍网连Google不稳定,git clone不支持断点续传,so我用的是清华的源;
可以看出清华的源是很给力的,另外同学告诉说可以开启多线程下载,平均速度可达5m/s!
cd /usr/local/android/kernel/goldfish export ARCH=arm export SUBARCH=arm export CROSS_COMPILE=arm-eabi- export PATH=/usr/local/android/prebuilts/gcc/linux- x86/arm/arm-eabi-4.6/bin:$PATH make goldfish_armv7_defconfig //Android4.1以上平台 在内核源码根目录下生成.config内核裁剪: make menuconfig 来配置源码根目录下的.config (这个命令在编译Linux内核时也会用到)
这是个错误,原因是我窗口化屏幕太小了,f11全屏即可
这是执行命令后出来的UI选择功能界面。
内核编译: make -j4 
编译后内核zImage存放在:./arch/arm/boot/zImage
查看系统信息: 先设置模拟器的目录到环境变量PATH中去: export PATH=$PATH:/usr/local/android/mydroid/out/host/linux-x86/bin 选择zImage内核启动:emulator –kernel zImage & 用adb工具连接模拟器: 输入adb shell进入 cd proc cat version
这是用命令查看。
当然也可以打开模拟器的设置界面,看到内核是3.4.67和之前的3.4.0不同,so编译内核刷机成功。
在my_test下,gedit makefile//编译hello.c 内容:obj-y := hello.o //内建编译,还有个obj-m表示模块编译,没时间实现了~在../char下,gedit Makefile //包含hello驱动 加入:obj-y += my_test/hello.o重新编译,将hello驱动设备编译到内核中; make –j4启动后查看内核状态: emulator –kernel zImage –show-kernel &
成功打印出hello,而且它是以drivers下的char字符驱动的形式实现的。PS:期间查了很多Android安全的资料,发现好多游戏的修改都是利用注入、hook技术实现,打算实现一个简单的游戏修改展示的。但由于时间和能力有限,以及编译速度感人,只能退而求其次次,选择Android内核的helloworld来展示。 PS:发博客图片上传不方便~而且老卡。
Android系统源码与内核下载编译及刷机讲解前言说明准备工作Android源码下载搭建Android编译环境编译Android源码Android内核下载Android内核编译Android内核模块编译
新闻热点
疑难解答