安卓内核编译流程 |
您所在的位置:网站首页 › 安卓内核编译升级版本 › 安卓内核编译流程 |
部分在编译过程中需要的工具可在资源下载页下载 配置 操作系统:ubuntu10.04 64位;安卓手机:Nexus5;手机Android版本:4.4.4 注意:笔者在完成以下操作时在root权限下进行,建议进入root权限后开始以下操作 Android源码\内核下载及编译 1、 建立编译环境 a) 安装JDK 1.6版本 i. 下载jdk-6u27-linux-x64.bin文件 ii. 在/usr/lib/目录下新建java文件夹 mkdir /usr/lib/java iii. 将jdk文件拷贝到java文件夹中,并执行该文件 ./jdk-6u27-linux-x64.bin iv. 配置环境变量 gedit /etc/environment 在打开文件中加入下列语句 PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/java/jdk1.6.0_27” JAVA_HOME=/usr/lib/java/jdk1.6.0_27/ CLASSPATH=.:$JAVA_HOME\lib\tools.jar:$JAVA_HOME\lib\dt.jar v. 使修改的环境变量立刻生效 source /etc/environment (重新启动亦可) vi. 查看当前java jdk版本是否为1.6 版本 在终端输入 java –version 若显示为java version “1.6.0_27”则说明jdk 1.6版本安装成功
b) 安装ubuntu下特定的工具包 使用apt-get命令来安装特定的工具包 apt-get install git-coregnupg flex bison gperf build-essential \ zip curl zlib1g-devlibc6-dev lib32ncurses5-dev ia32-libs \ x11proto-core-devlibx11-dev lib32readline5-dev lib32z-dev \ libgl1-mesa-devg++-multilib mingw32 tofrodos python-markdown \ libxml2-utils xsltproc 除了用apt-get命令安装特定的工具包之外,可在ubuntu的系统-系统管理-新立得软件包管理器进行查找对应软件包并选择安装或升级 (笔者采取新立得安装方式)。
在完成工具包下载后,我们还需要对git版本进行升级 apt-add-repositoryppa:git-core/ppa apt-get update apt-get dist-upgrade
2、 下载Android源码(编译源码用到了其中的NDK,ADB,交叉编译器,整个编译过程较长时间,编译完成后可开启模拟器) a) 下载Repo cd ~ mkdir bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo> ~/bin/repo chmod a+x ~/bin/repo b) 下载Android源码 i. 在当前用户的根目录下创建Android平台文件夹 cd ~ mkdir Android_platform cd Android_platform ii. 利用repo init下载源码 repo init -uhttps://android.googlesource.com/platform/manifest -b android-4.4.4_r2 在下载过程中会中断要求输入用户的邮箱和用户名 git config –globaluser.email “email@example” git config --global user.name“your name” 输入认证用户名和邮箱后,输入以下命令重新下载 repo init -uhttps://android.googlesource.com/platform/manifest -b android-4.4.4_r2 repo sync (若在下载过程中意外中断,可重新输入repo sync从中断点开始重新下载) iii. 执行envsetup脚本 在Android目录下执行以下语句 cd ~/Android_platform source./build/envsetup.sh
输入lunch语句,选择Android产品类型(笔者默认选择full-eng版本) lunch full-eng iv. 编译源码 make 或者可选择make –jN语句编译,其中N取决于开发机器的CPU数,每个CPU的核数以及每个核心的线程数(例 make –j4) 注意:若出现段错误,继续make命令即可
3、 编译内核代码并烧录到手机 a) 下载Android内核源码 在Android项目文件夹下创建kernel文件夹,并下载内核源码 cd ~/Android_platform/ mkdir kernel cd kernel git clone https://android.googlesource.com/kernel/msm.git 注意:由于实验手机设备为Nexus 5,因此我们选择内核代码为msm.git b) checkout所选内核版本 cd ~/Android_platform/kernel/msn git branch –a git checkoutremotes/origin/android-msm-hammerhead-3.4-kitkat-rm2 c) 修改Makefile文件支持交叉编译器 cd~/Android_platform/kernel/msm/ gedit Makefile 修改Makefile文件下述内容: export KBUILD_BUILDHOST:= $ (SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPLETE ?= $ (CONFIG_CROSS_COMPILE : “%” =%) 将后面两行修改为: ARCH ?= arm CROSS_COMPLETE ?= arm-eabi- 修改环境变量识别arm-eabi- exportPATH=$PATH:~/Android_platform/prebuilts/gcc/linux-86/arm/arm-eabi-4.7/bin d) 打开内核中支持IO tracer选项 make hammerhead_defconfig make menuconfig 在此之后,选择弹出的界面框中的kernel hacking->Tracers->Supportfor tracing block IO actions 返回主界面后选择Save an Alternate ConfigurationFile. e) 编译内核 make –j4 编译成功后可以看到下面的输出: OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready CAT arch/arm/boot/zImage-dtb Kernel: arch/arm/boot/zImage-dtb is ready
4、 制作boot.img文件 a) 下载bootimg-tools工具 mkdir ~/Android_platform/boot-img cd ~/Android_platform/boot-img git clone https://github.com/pbatard/bootimg-tools.git 下载完成后,执行下列语句 cd bootimg-tools/ make cd cpio/ gcc mkbootfs.c –o mkbootfs –I../include cd ../.. mkdir android_boot_tools_bin cd android_boot_tools_bin/ cp../bootimg-tools/mkbootimg/mkbootimg ./ cp../bootimg-tools/mkbootimg/unmkbootimg ./ cp ../bootimg-tools/cpio/mkbootfs ./ cd ../ b) 配置环境变量 gedit /etc/environment 将PATH修改为以下内容: PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/java/jdk1.6.0_27:/root/Android_platform/boot-img/android_boot_tools_bin” 立即执行 source /etc/environment c) 下载boot.img 下载地址: https://dl.google.com/dl/android/aosp/hammerhead-ktu84q-factory-ae475293.tgz 在~/Android_platform/boot-img/下新建文件夹original-boot-img mkdir~/Android_platform/boot-img/original-boot-img 解压该压缩包中的boot.img至~/Android_platform/boot-img/original-boot-img 执行下述命令语句: cp~/Android_platform/kernel/msm/arch/arm/boot/zImage-dtb~/Android_platform/boot-img/
在~/Android_platform/boot-img/android_boot_tools_bin目录下执行: ./unmkbootimg –i boot-img/original-boot-img/boot.img 执行完unmkbootimg后会出现下述语句 kernel written to 'kernel' (8331496bytes) ramdisk written to 'ramdisk.cpio.gz' (498796 bytes)
To rebuild this boot image, youcan use the command: mkbootimg --base 0 --pagesize 2048--kernel_offset 0x00008000 --ramdisk_offset 0x02900000 --second_offset0x00f00000 --tags_offset 0x02700000 --cmdline 'console=ttyHSL0,115200,n8androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1' --kernel kernel --ramdiskramdisk.cpio.gz -o original-boot-img/boot.img
执行上述中的”mkbootimg –base 0 –pagesize……………”语句修改为下述语句,并执行 mkbootimg --base 0 --pagesize 2048--kernel_offset 0x00008000 --ramdisk_offset 0x02900000 --second_offset0x00f00000 --tags_offset 0x02700000 --cmdline 'console=ttyHSL0,115200,n8androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1' --kernel ~/Android_platform/ boot-img/zImage-dtb --ramdisk ~/Android_platform/boot-img/android_boot_tools_bin/ramdisk.cpio.gz-o ~/Android_platform/boot-img/original-boot-img/boot.img d) 烧录boot.img adb start-server adb reboot bootloader fastboot flash boot~/Android_platform/boot-img/boot.img fastboot reboot
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |