ubuntu 12.04 64位环境下编译cm 10.1 for mako

转载请声明出处。

http://www.cnblogs.com/csonezp/archive/2013/03/21/2974071.html

无图无排版,基本纯文字。

首先提供我这次编译过程的参考来源:

1,android官方指南:http://source.android.com/source/index.html

2,cm 官方wiki:http://wiki.cyanogenmod.org/w/Mako_Info

这两个链接里基本包含了所有编译的内容了。英语好以及有一定基础的可以去看看。

好了,开始正文。

 

一,初始化编译环境。

1,配置java环境。

  android官方要求jdk6或者7,cm上要求是openjdk。

  jdk6,android官方指南上说在终端输入以下命令:

  

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

但我实验后无效果。于是去sun上自己下载的jdk64位包。具体过程不细表。

  openjdk:

sudo apt-get install openjdk-6-jdk

 

装完后 java 和javadoc命令都可以找到即表示jdk安装成功。(javadoc这个是openjdk才有,但是编译的时候又好像需要这个命令,所以我openjdk,jdk6都装了)

 

二,配置android sdk开发环境。

现在这个简单了,直接去http://developer.android.com/下载一个sdk就行了。其实这一步应该是非必须的,你只要有一个adb就行了。

 

三,安装依赖。

结合android官方指南和cmwiki,安装依赖如下:

复制代码
$ sudo apt-get install git 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
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
$ sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl 
libncurses5-dev zlib1g-dev openjdk-6-jre openjdk-6-jdk pngcrush schedtool libxml2 xsltproc
$ sudo apt-get install g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev gcc-multilib g++-4.5-multilib
复制代码

四,配置usb使用权

这一步是为了ubuntu能识别通过usb连接的手机。

sudo gedit /etc/udev/rules.d/51-android.rules

然后将下面内容复制到上一句打开的命令中,将所有username换成你自己的用户名。这是google官方提供的nexus系列的方法,通用方法请自行百度“ubuntu连接手机”

复制代码
# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
# adb protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"
# fastboot protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"
# adb protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"
# fastboot protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"
复制代码

五,开始同步源码

首先要下载repo,这个是google提供的同步工具。

 

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

这样就把repo下载到本地了。接下来初始化repo,为下载做准备。

mkdir WORK_SPACE   #WORKSPACE是自定的名称,可以随便取
cd WORK_SPACE        #移到WORK_SPACE

repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1     #-b后面的 cm-10.1就是cm 4.2.2的分支,可以自己换
repo sync        #这个就是开始同步的命令。cm10.1全部同步有9G多

等待同步完毕。

六,编译之前的准备(如无cd命令,则操作均在WORK_SPACE下进行)。

源码同步完以后,是不能直接编译出nexus4可用的刷机包的,因为cm的源码里没有关于具体设备的信息,具体说来就是device文件,kernel文件,vendor文件。其中device,kernel都可以在cm的github中找到,地址(我给的都是nexus4的):

device:http://www.github.com/cyanogenmod/android_device_lge_mako

kernel:http://www.github.com/cyanogenmod/lge-kernel-mako

device解压到device/lge中,将解压的文件夹重命名为mako。kernel解压到kernel/lge中,重命名为mako。

还却一个vendor,如果你手头有机器,则可将手机连接电脑,然后进行如下操作:

用文本编辑器打开device/lge/mako/extract-files.sh,内容如下:

#!/bin/sh

VENDOR=lge
DEVICE=mako

BASE=http://www.cnblogs.com/../vendor/$VENDOR/$DEVICE/proprietary
rm -rf $BASE/*

for FILE in `cat proprietary-blobs.txt | grep -v ^# | grep -v ^$ | sed -e 's#^/system/##g'`; do
DIR=`dirname $FILE`
if [ ! -d $BASE/$DIR ]; then
mkdir -p $BASE/$DIR
fi
adb pull /system/$FILE $BASE/$FILE
done

./setup-makefiles.sh

 

注意红色的adb,要换成你自己的android sdk中adb的位置。

然后执行这个文件

cd device/lge/mako

./extract-files.sh

cd WORK_SPACE

执行完毕后打开vendor,就会看到多了个lge文件夹,里面有mako文件夹。

 

好了,准备工作完成,要开始编译了。

七,开始编译。

进入work_space,

source build/envsetup.sh
breakfast mako    #mako是设备代号,可以替换成其他的

等待编译完成,将会在out/target/product/mako里生成一个cm-10.1-20130321-UNOFFICIAL-mako.zip文件

结束

内容概要:本文从关键概念、核心技巧、应用场景、代码案例分析及未来发展趋势五个维度探讨了Python编程语言的进阶之路。关键概念涵盖装饰器、生成器、上下文管理器、元类和异步编程,这些概念有助于开发者突破基础认知的核心壁垒。核心技巧方面,介绍了内存优化、性能加速、代码复用和异步处理的方法,例如使用生成器处理大数据流、numba库加速计算密集型任务等。应用场景展示了Python在大数据处理、Web开发、人工智能和自动化运维等多个领域的广泛运用,特别是在FastAPI框架中构建异步API服务的实战案例,详细分析了装饰器日志记录、异步数据库查询和性能优化技巧。最后展望了Python的未来发展趋势,包括异步编程的普及、类型提示的强化、AI框架的深度整合以及多语言协同。 适合人群:已经掌握Python基础语法,希望进一步提升编程技能的开发者,特别是有意向从事数据科学、Web开发或AI相关工作的技术人员。 使用场景及目标:①掌握Python进阶概念和技术,如装饰器、生成器、异步编程等,提升代码质量和效率;②学习如何在实际项目中应用这些技术,如通过FastAPI构建高效的异步API服务;③了解Python在未来编程领域的潜在发展方向,为职业规划提供参考。 阅读建议:本文不仅提供了理论知识,还包含了丰富的实战案例,建议读者在学习过程中结合实际项目进行练习,特别是尝试构建自己的异步API服务,并通过调试代码加深理解。同时关注Python社区的发展动态,及时掌握最新的技术和工具。
内容概要:本文档《Rust系统编程实战》详细介绍了Rust在系统编程领域的应用,强调了其内存安全、零成本抽象和高性能的特点。文档分为三个主要部分:核心实战方向、典型项目案例和技术关键点。在核心实战方向中,重点讲解了unsafe编程、FFI(外部函数接口)和底层API调用,涉及操作系统组件开发、网络编程、设备驱动开发、系统工具开发和嵌入式开发等多个领域,并列出了每个方向所需的技术栈和前置知识。典型项目案例部分以Linux字符设备驱动为例,详细描述了从环境搭建到核心代码实现的具体步骤,包括使用bindgen生成Linux内核API的Rust绑定,定义设备结构体,以及实现驱动核心函数。 适合人群:对系统编程有兴趣并有一定编程基础的开发者,尤其是那些希望深入了解操作系统底层机制、网络协议栈或嵌入式系统的工程师。 使用场景及目标:①掌握Rust在不同系统编程场景下的应用,如操作系统组件开发、网络编程、设备驱动开发等;②通过实际项目(如Linux字符设备驱动)的学习,理解Rust与操作系统内核的交互逻辑;③提高对unsafe编程、FFI和底层API调用的理解和运用能力。 阅读建议:由于文档内容较为深入且涉及多个复杂概念,建议读者在学习过程中结合实际操作进行练习,特别是在尝试实现Linux字符设备驱动时,务必按照文档提供的步骤逐步进行,并多加调试和测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值