Toybrick

UBUNTU16.4开发环境的搭建以及工程的编译

samtu

中级会员

积分
383
楼主
发表于 2019-7-21 15:22:15    查看: 12068|回复: 9 | [复制链接]    打印 | 只看该作者
第一步,官网下载好SDK,约40G左右,
第二步,你的电脑装好UBUNTU16.4系统
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo apt-get install  android-tools-adb
sudo apt-get install openssh-server

更新环境变量
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.{JAVA_HOME}/lib{JRE_HOME}/lib
export PATH=${JAVA_HOME}/binPATH
export PATH=${CLASSPATH}PATH


OSP编译工具
sudo apt install flex
sudo apt install bison
sudo apt install gperf
sudo apt install curl
sudo apt install libssl-dev
sudo apt install libncurses5-dev:i386e
sudo apt install libxml2-utils
sudo apt install zlib1g-dev:i386
sudo apt install libx11-dev:i386
sudo apt install libreadline6-dev:i386
sudo apt install libgl1-mesa-dev
sudo apt install g++-multilib
sudo apt install tofrodos
sudo apt install python-markdown
sudo apt install python-mako
sudo apt install xsltproc
sudo apt install ccache
sudo apt-get install liblz4-tool

sudo apt install genext2fs



problem1:error while loading shared libraries: libstdc++.so.6
在官方文件中发现有两个包包含这个文件
一个是libstdc++6
一个事lib32stdc++6
于是
$sudo apt-get install libstdc++6
$sudo apt-get install lib32stdc++6


make menuconfig //执行这个不出现图形界面,安装下面那个就OK
sudo apt-get install libncursesw5-dev//



按官方的方法 解压同步工程:
有可能你没有装这几个软件
sudo apt-get install git
sudo apt-get install rope    //not ok
//从Ubuntu 14.04开始,repo被集成在packet phablet-tools中,所以安装该tools即可
sudo apt-get install phablet-tools
sudo apt-get install repo


repo init -m release/rk3399pro_release-V1.1.xml//如果你碰到这里失败时,你就按下面的格式写你自己的邮件。。。。。
git config --global user.email "tuzhiquan@126.com"
git config --global user.name "samtu"
Please move or remove them 3 release before you can merge.
then:先把3个RELEASE翦切放在别处,再执行下面的,就ok
repo init -m release/rk3399pro_release-V1.1.xml
.repo/repo/repo sync


最后你同步成功后,就要进行到下一步编译:
按官方的PDF文档肯定是不成功的,要按论坛里的来,估计也不会成功。我根据全自己SHELL里面的角本,经过很多次的测试,有两种方法:
1,全自动编译  
./build.sh  -b prod

2,根据全自动编译里面的SHELL程序,分开编译
U-BOOT编译:
cd u-boot
make distclean && ./make.sh rk3399pro_dual


KERNEL编译:
cd kernel
./make.sh linux prod
cd kernel
./make.sh android prod




cd ..//回主目录下
make installclean
make -j12
./mkimage.sh
make otapackage -j4
./mkimage.sh ota






回复

使用道具 举报

samtu

中级会员

积分
383
沙发
 楼主| 发表于 2019-7-21 15:24:54 | 只看该作者
美金符号$ 变成了表情符号了,注意
回复

使用道具 举报

jefferyzhang

版主

积分
13578
板凳
发表于 2019-7-22 09:43:48 | 只看该作者
安卓编译环境搭建可以直接参考google官网:
http://source.android.com/source/initializing.html
回复

使用道具 举报

hjf515

中级会员

积分
213
地板
发表于 2019-7-22 10:17:48 | 只看该作者
请问楼主编译的是什么系统?rk3399pro的 ubuntu系统还是 Fedora,或者是其它?
回复

使用道具 举报

samtu

中级会员

积分
383
5#
 楼主| 发表于 2019-7-23 10:05:31 | 只看该作者
双系统都有,版主发的那个要翻强才能得到
回复

使用道具 举报

INstea

新手上路

积分
42
6#
发表于 2019-8-15 12:44:26 | 只看该作者
samtu 发表于 2019-7-23 10:05
双系统都有,版主发的那个要翻强才能得到

翻墙不是问题,我要网站
回复

使用道具 举报

niuting99

新手上路

积分
30
7#
发表于 2019-8-20 08:34:40 | 只看该作者
想请教一下,如何编译驱动程序,谢谢各位
回复

使用道具 举报

niuting99

新手上路

积分
30
8#
发表于 2019-8-20 08:36:20 | 只看该作者
在linux系统下,怎么编译驱动程序,新手上路,还望各位大神多多指教,谢谢
回复

使用道具 举报

samtu

中级会员

积分
383
9#
 楼主| 发表于 2019-10-15 19:10:54 | 只看该作者
搭建编译环境
本部分介绍了如何设置本地工作环境来编译 Android 源文件。您需要使用 Linux 或 Mac OS。目前不支持在 Windows 环境下进行编译。

要简要了解整个代码审核和代码更新流程,请参阅补丁程序的生命周期。

注意:本网站中所有命令的前面都带有美元符号 ($),以便与文件中的输出或条目区分开来。您可以使用每个命令框右上角的“点击复制”功能来复制所有行(不包括美元符号),也可以三击每个行来分别复制各行(不包括美元符号)。

选择分支
针对编译环境的某些要求是由您打算编译的源代码的版本决定的。要查看您可以选择的分支的完整列表,请参阅版本号。您还可以选择下载并编译最新的源代码(称为 master)。如果您选择这么做,请在初始化存储库时直接忽略分支规范。

选择分支后,请按照下面的相应说明来设置编译环境。

设置 Linux 编译环境
以下说明适用于所有分支(包括 master)。

我们会定期在最近推出的一些 Ubuntu LTS (14.04) 版本中对 Android 编译过程进行内部测试,但大多数 Ubuntu 分发版本都应该有所需的编译工具。欢迎向我们报告在其他分发版本中的测试结果(无论结果是成功还是失败)。

如果是 Gingerbread (2.3.x) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。

注意:要查看完整的硬件和软件要求列表,请参阅要求。然后,请按照下方适用于 Ubuntu 和 Mac OS 的详细说明进行操作。

安装 JDK
Android 开放源代码项目 (AOSP) 中 Android 的 master 分支在 platform/prebuilts/jdk/jdk8 中有预编译版本的 OpenJDK。因此,无需再额外安装。

较低版本的 Android 需要另行安装 JDK。在 Ubuntu 上,请使用 OpenJDK。要了解确切版本,请参阅 JDK 要求;要了解相关说明,请参阅以下各个部分。

如果 Ubuntu >= 15.04
请运行以下命令:

sudo apt-get update
sudo apt-get install openjdk-8-jdk

如果是 Ubuntu LTS 14.04
目前没有适用于 Ubuntu 14.04 的受支持 OpenJDK 8 程序包。Ubuntu 15.04 OpenJDK 8 程序包能够在 Ubuntu 14.04 中成功使用。我们发现,按照以下说明操作时,更高的程序包版本(例如适合 15.10、16.04 的版本)在 Ubuntu 14.04 中无法正常工作。

从 archive.ubuntu.com 下载适用于 64 位架构的 .deb 软件包:

openjdk-8-jre-headless_8u45-b14-1_amd64.deb(SHA256:0f5aba8db39088283b51e00054813063173a4d8809f70033976f83e214ab56c0)
openjdk-8-jre_8u45-b14-1_amd64.deb(SHA256:9ef76c4562d39432b69baf6c18f199707c5c56a5b4566847df908b7d74e15849)
openjdk-8-jdk_8u45-b14-1_amd64.deb(SHA256:6e47215cf6205aa829e6a0a64985075bd29d1f428a4006a80c9db371c2fc3c4c)
(可选)对照随以上每个程序包列出的 SHA256 字符串,确认已下载文件的校验和。

例如,使用 sha256sum 工具:

sha256sum {downloaded.deb file}

安装程序包:

sudo apt-get update

为下载的每个 .deb 文件运行 dpkg。运行过程中可能会因缺少依赖项而出现错误:

sudo dpkg -i {downloaded.deb file}

解决缺少依赖项的问题:

sudo apt-get -f install

更新默认的 Java 版本 - 可选
(可选)对于以上 Ubuntu 版本,您可以通过运行以下命令来更新默认的 Java 版本:

sudo update-alternatives --config java
sudo update-alternatives --config javac

在编译过程中,如果您遇到 Java 版本错误,请按照错误的 Java 版本部分中的说明设置其路径。

安装所需的程序包 (Ubuntu 14.04)
您将需要 64 位版本的 Ubuntu。建议您使用 Ubuntu 14.04。

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

注意:要使用 SELinux 工具进行政策分析,还需要安装 python-networkx 软件包。

注意:如果您使用 LDAP 并且希望运行 ART 主机测试,还需要安装 libnss-sss:i386 软件包。

安装所需的程序包 (Ubuntu 12.04)
您可以使用 Ubuntu 12.04 来编译较低版本的 Android。master 或最近推出的一些版本不支持 Ubuntu 12.04。

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

安装所需的程序包 (Ubuntu 10.04 - 11.10)
不再支持在 Ubuntu 10.04-11.10 中进行编译,但它们仍可用来编译较低版本的 AOSP。

sudo apt-get install git gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc

在 Ubuntu 10.10 中,请运行以下命令:

sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so

在 Ubuntu 11.10 中,请运行以下命令:

sudo apt-get install libx11-dev:i386

配置 USB 使用权限
按照说明设置用于开发的设备,以安装适用于所有 Android 设备且由社区维护的默认 udev 规则集。

使用单独的输出目录
默认情况下,每次编译的输出都会存储在相应源代码树的 out/ 子目录下。

在一些拥有多个存储设备的计算机上,如果将源文件和输出存储在单独的存储卷中,编译速度会更快。若要进一步提高编译速度,可以将输出存储在已针对速度(而非崩溃稳定性)进行优化的文件系统中,这是因为在文件系统损坏时可以重新生成所有文件。

要进行这项设置,请导出 OUT_DIR_COMMON_BASE 变量,使其指向将存储输出目录的位置。

export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>

对于每个单独的源代码树,其输出目录都将以其存放目录命名。

例如,如果您有源代码树 /source/master1 和 /source/master2,并且 OUT_DIR_COMMON_BASE 设为了 /output,那么输出目录将为 /output/master1 和 /output/master2。

在这种情况下,切勿将多个源代码树存储在具有相同名称的目录下,否则会导致输出目录共享终止,并且会出现不可预知的结果。

只有 Jelly Bean (4.1) 及更高版本(包括 master 分支)支持这种做法。

设置 Mac OS 编译环境
在默认安装过程中,Mac OS 会在一个保留大小写但不区分大小写的文件系统中运行。Git 并不支持此类文件系统,而且此类文件系统会导致某些 Git 命令(例如 git status)的行为出现异常。因此,我们建议您始终在区分大小写的文件系统中对 AOSP 源文件进行操作。使用下文中介绍的磁盘映像可以非常轻松地做到这一点。

有了适当的文件系统,在新型 Mac OS 环境中编译 master 分支就会变得非常简单。要编译较低版本的分支,则需要一些额外的工具和 SDK。

创建区分大小写的磁盘映像
您可以使用磁盘映像在现有的 Mac OS 环境中创建区分大小写的文件系统。要创建磁盘映像,请启动磁盘工具,然后选择“新建映像”。完成编译至少需要 25GB 空间;更大的空间能够更好地满足未来的需求。使用稀疏映像有助于节省空间,而且以后可以随着需求的增加进行扩展。请务必选择“Case sensitive, Journaled”存储卷格式。

您也可以通过 shell 使用以下命令创建磁盘映像:

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg

这将创建一个 .dmg(也可能是 .dmg.sparseimage)文件,该文件在装载后可用作具有 Android 开发所需格式的存储卷。

如果您以后需要更大的存储卷,还可以使用以下命令来调整稀疏映像的大小:

hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage

对于存储在主目录下的名为 android.dmg 的磁盘映像,您可以向 ~/.bash_profile 中添加辅助函数:

要在执行 mountAndroid 时装载磁盘映像,请运行以下命令:
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }

注意:如果系统创建的是 .dmg.sparseimage 文件,请将 ~/android.dmg 替换成 ~/android.dmg.sparseimage。

要在执行 umountAndroid 时卸载磁盘映像,请运行以下命令:

# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }

装载 android 存储卷后,您将在其中开展所有工作。您可以像对待外接式存储盘一样将其弹出(卸载)。

安装 JDK
要查看在开发各种 Android 版本时要使用的 Java 版本,请参阅相关要求。

安装所需的程序包
使用以下命令安装 Xcode 命令行工具:

xcode-select --install

对于较低版本的 Mac OS(10.8 或更低版本),您需要通过 Apple 开发者网站安装 Xcode。如果您尚未注册成为 Apple 开发者,则需要创建一个 Apple ID 才能下载。

通过 macports.org 安装 MacPorts。

注意:请确保在路径中 /opt/local/bin 显示在 /usr/bin 之前。否则,请将以下内容添加到 ~/.bash_profile 文件中:

export PATH=/opt/local/binPATH

注意:如果主目录中没有 .bash_profile 文件,请创建一个。

通过 MacPorts 获取 Make、Git 和 GPG 程序包:

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

如果您使用 Mac OS X v10.4,还需要安装 bison:

POSIXLY_CORRECT=1 sudo port install bison

将 make 3.82 还原到较低版本
在 Android 4.0.x (Ice Cream Sandwich) 及更低版本中,gmake 3.82 中存在一个会导致 Android 无法编译的错误。您可以按照以下步骤使用 MacPorts 来安装 3.81 版:

修改 /opt/local/etc/macports/sources.conf,在 rsync 行上方添加下面这行内容:

file:///Users/Shared/dports

然后创建该目录:

mkdir /Users/Shared/dports

在新的 dports 目录下,运行以下命令:

svn co --revision 50980 http://svn.macports.org/reposito ... dports/devel/gmake/ devel/gmake/

为新的本地存储库创建一个端口索引:

portindex /Users/Shared/dports

使用以下命令安装旧版 gmake:

sudo port install gmake @3.81

设置文件描述符数量上限
在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。

要提高此上限,请将下列行添加到 ~/.bash_profile 中:

# set the number of open files to be 1024
ulimit -S -n 1024

优化编译环境(可选)
设置 ccache
您可以视需要指示编译过程使用 ccache 编译工具,ccache 是适用于 C 和 C++ 的编译器缓存,有助于提高编译速度。这对于编译服务器和其他高容量生产环境来说尤其有用。ccache 可用作用于加快重新编译速度的编译器缓存。如果您经常使用 make clean,或者经常在不同的编译产品之间切换,则非常适合使用 ccache。

注意:如果您是在执行增量编译(例如个人开发者而非编译服务器),ccache 可能会让您为缓存未命中埋单,从而减慢您的编译速度。

要使用 ccache,请在源代码树的根目录下执行以下命令:

export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G

建议的缓存大小为 50G 到 100G。

请将以下内容添加到 .bashrc(或等同文件)中:

export USE_CCACHE=1

默认情况下,缓存将存储在 ~/.ccache 下。如果主目录位于 NFS 或一些其他的非本地文件系统中,您还需要在 .bashrc 文件中指定目录。

在 Mac OS 中,您应将 linux-x86 替换成 darwin-x86:

prebuilts/misc/darwin-x86/ccache/ccache -M 50G

在编译 Ice Cream Sandwich (4.0.x) 或更低版本时,ccache 位于其他位置:

prebuilt/linux-x86/ccache/ccache -M 50G

该设置会存储在 CCACHE_DIR 中,并且为永久设置。

在 Linux 中,您可以运行以下命令来观看使用 ccache 时的情况:

watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s

下一篇:下载源代码
编译环境已准备就绪!接下来您就可以下载源代码了。
回复

使用道具 举报

samtu

中级会员

积分
383
10#
 楼主| 发表于 2019-10-15 19:11:34 | 只看该作者
过墙搞过来的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表