Difference between revisions of "Template:RK3399-BuildFromSource/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
Line 1: Line 1:
 
==如何编译系统==
 
==如何编译系统==
 
===搭建编译环境===
 
===搭建编译环境===
搭建编译Android的环境建议使用64位的Ubuntu 16.04,安装需要的包即可。
+
搭建用于编译Android的环境,建议使用64位的Ubuntu 16.04,需要安装如下软件包:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zip
 
sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zip
Line 8: Line 8:
 
sudo apt-get install exfat-fuse exfat-utils device-tree-compiler liblz4-tool
 
sudo apt-get install exfat-fuse exfat-utils device-tree-compiler liblz4-tool
 
</syntaxhighlight>
 
</syntaxhighlight>
更多说明可查看 https://source.android.com/source/initializing.html
+
更多说明可查看 https://source.android.com/source/initializing.html; <br />
 +
也可以使用Docker环境:[http://github.com/friendlyarm/friendlyelec-android-docker friendlyelec-android-docker]<br />
  
 
===安装交叉编译器===
 
===安装交叉编译器===
 
====安装aarch64-linux-gcc 6.4====
 
====安装aarch64-linux-gcc 6.4====
首先下载并解压编译器:
+
该编译器可用来编译Linux系统的内核和u-boot,用以下命令下载并安装:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
git clone https://github.com/friendlyarm/prebuilts.git
 
git clone https://github.com/friendlyarm/prebuilts.git
Line 30: Line 31:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
这个编译器是64位的,不能在32位的Linux系统上运行,安装完成后,你可以快速的验证是否安装成功:
+
这个编译器是64位的,不能在32位的PC Linux系统上运行,安装完成后,用以下命令可以验证是否安装成功:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
aarch64-linux-gcc -v
 
aarch64-linux-gcc -v
Line 45: Line 46:
 
gcc version 6.4.0 (ctng-1.23.0-150g-FA)
 
gcc version 6.4.0 (ctng-1.23.0-150g-FA)
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
===编译Android8.1源代码===
 +
====下载Android8.1源代码====
 +
{{{1}}} 源代码托管在 gitlab 上,使用以下命令进行下载:
 +
<syntaxhighlight lang="bash">
 +
git clone https://gitlab.com/friendlyelec/rk3399-android-8.1 --depth 1 -b master
 +
</syntaxhighlight>
 +
 +
====编译并生成Image文件====
 +
使用以下命令编译 Android7:
 +
<syntaxhighlight lang="bash">
 +
cd rk3399-android-8.1
 +
./build-nanopc-t4.sh -F -M
 +
</syntaxhighlight>
 +
 +
====更新系统为自已编译的Image====
 +
编译完成后,image文件会存放在Android8.1源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 {{{1}}}上: <br />
 +
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区; <br />
 +
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 android8 目录; <br />
 +
3) 将SD卡插入{{{1}}},重新烧写Andorid系统即可; <br />
 +
也可参考这个github仓库的方法来更新:[https://github.com/friendlyarm/sd-fuse_rk3399 sd-fuse_rk3399]<br />
  
 
===编译Android7源代码===
 
===编译Android7源代码===
Line 50: Line 72:
 
{{{1}}} 源代码托管在 gitlab 上,使用以下命令进行下载:
 
{{{1}}} 源代码托管在 gitlab 上,使用以下命令进行下载:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git clone https://gitlab.com/friendlyelec/rk3399-nougat.git
+
git clone https://gitlab.com/friendlyelec/rk3399-nougat --depth 1 -b nanopc-t4-nougat
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 65: Line 87:
 
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的  nougat 目录; <br />
 
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的  nougat 目录; <br />
 
3) 将SD卡插入{{{1}}},重新烧写Andorid系统即可; <br />
 
3) 将SD卡插入{{{1}}},重新烧写Andorid系统即可; <br />
 +
也可参考这个github仓库的方法来更新:[https://github.com/friendlyarm/sd-fuse_rk3399 sd-fuse_rk3399]<br />
  
===编译Lubuntu内核源代码===
+
===编译 FriendlyCore/FriendlyDesktop/Lubuntu 内核源代码===
====compile Linux kernel====
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi4-linux-v4.4.y
+
git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi4-linux-v4.4.y kernel-rockchip
 
cd kernel-rockchip
 
cd kernel-rockchip
 
make ARCH=arm64 nanopi4_linux_defconfig
 
make ARCH=arm64 nanopi4_linux_defconfig
 +
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
 
make ARCH=arm64 nanopi4-images
 
make ARCH=arm64 nanopi4-images
 
</syntaxhighlight>
 
</syntaxhighlight>
  
====更新内核到Lubuntu====
+
编译完成后会生成 kernel.img resource.img 这两个文件,将其拷贝到eflasher系统的SD卡覆盖旧文件即可, 假设SD卡的FRIENDLYARM分区挂载到FRIENDLYARM目录,更新命令如下:
需要使用原厂的Linux_Upgrade_Tool_1.27.rar工具烧写,请本文参考上面的章节。
+
<syntaxhighlight lang="bash">
 +
# for Lubuntu
 +
cp kernel.img resource.img /media/FRIENDLYARM/lubuntu/
 +
 
 +
# for FriendlyCore
 +
cp kernel.img resource.img /media/FRIENDLYARM/friendlycore-arm64/
 +
 
 +
# for FriendlyDesktop
 +
cp kernel.img resource.img /media/FRIENDLYARM/friendlydesktop-arm64/
 +
</syntaxhighlight>
 +
也可以用线刷工具来更新。
 +
 
 +
===编译 FriendlyCore/FriendlyDesktop/Lubuntu U-boot源代码===
 +
<syntaxhighlight lang="bash">
 +
git clone https://gitlab.com/friendlyelec/rk3399-nougat --depth 1 -b nanopc-t4-nougat
 +
cd rk3399-nougat/u-boot
 +
make CROSS_COMPILE=aarch64-linux- rk3399_defconfig
 +
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
 +
make CROSS_COMPILE=aarch64-linux-
 +
</syntaxhighlight>
 +
 
 +
编译完成后会生成 uboot.img、trust.img 和 rk3399_loader_v1.12.109.bin这3个文件,其中rk3399_loader_v1.12.109.bin需要重命名为MiniLoaderAll.bin,将其拷贝到eflasher系统的SD卡覆盖旧文件即可,假设SD卡的FRIENDLYARM分区挂载到FRIENDLYARM目录,更新命令如下:
 +
<syntaxhighlight lang="bash">
 +
# for Lubuntu
 +
cp uboot.img trust.img /media/FRIENDLYARM/lubuntu
 +
cp rk3399_loader_v1.12.109.bin /media/FRIENDLYARM/lubuntu/MiniLoaderAll.bin
 +
 
 +
# for FriendlyCore
 +
cp uboot.img trust.img /media/FRIENDLYARM/friendlycore-arm64
 +
cp rk3399_loader_v1.12.109.bin /media/FRIENDLYARM/friendlycore-arm64/MiniLoaderAll.bin
 +
 
 +
# for FriendlyDesktop
 +
cp uboot.img trust.img /media/FRIENDLYARM/friendlydesktop-arm64
 +
cp rk3399_loader_v1.12.109.bin /media/FRIENDLYARM/friendlydesktop-arm64/MiniLoaderAll.bin
 +
</syntaxhighlight>
 +
也可以用线刷工具来更新。
 +
 
 +
===制作用于量产的启动卡或者烧写文件===
 +
如果要自已做启动卡,或制作用于批量生产的img文件,可参考这个github仓库:[https://github.com/friendlyarm/sd-fuse_rk3399 sd-fuse_rk3399]<br />

Revision as of 10:20, 15 November 2018

1 如何编译系统

1.1 搭建编译环境

搭建用于编译Android的环境,建议使用64位的Ubuntu 16.04,需要安装如下软件包:

sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zip
sudo apt-get install flex curl libncurses5-dev libssl-dev zlib1g-dev gawk minicom
sudo apt-get install openjdk-8-jdk
sudo apt-get install exfat-fuse exfat-utils device-tree-compiler liblz4-tool

更多说明可查看 https://source.android.com/source/initializing.html;
也可以使用Docker环境:friendlyelec-android-docker

1.2 安装交叉编译器

1.2.1 安装aarch64-linux-gcc 6.4

该编译器可用来编译Linux系统的内核和u-boot,用以下命令下载并安装:

git clone https://github.com/friendlyarm/prebuilts.git
sudo mkdir -p /opt/FriendlyARM/toolchain
sudo tar xf prebuilts/gcc-x64/aarch64-cortexa53-linux-gnu-6.4.tar.xz -C /opt/FriendlyARM/toolchain/

然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:

export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin:$PATH
export GCC_COLORS=auto

执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:

. ~/.bashrc

这个编译器是64位的,不能在32位的PC Linux系统上运行,安装完成后,用以下命令可以验证是否安装成功:

aarch64-linux-gcc -v
Using built-in specs.
COLLECT_GCC=aarch64-linux-gcc
COLLECT_LTO_WRAPPER=/opt/FriendlyARM/toolchain/6.4-aarch64/libexec/gcc/aarch64-cortexa53-linux-gnu/6.4.0/lto-wrapper
Target: aarch64-cortexa53-linux-gnu
Configured with: /work/toolchain/build/aarch64-cortexa53-linux-gnu/build/src/gcc/configure --build=x86_64-build_pc-linux-gnu
--host=x86_64-build_pc-linux-gnu --target=aarch64-cortexa53-linux-gnu --prefix=/opt/FriendlyARM/toolchain/6.4-aarch64
--with-sysroot=/opt/FriendlyARM/toolchain/6.4-aarch64/aarch64-cortexa53-linux-gnu/sysroot --enable-languages=c,c++
--enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-cpu=cortex-a53
...
Thread model: posix
gcc version 6.4.0 (ctng-1.23.0-150g-FA)

1.3 编译Android8.1源代码

1.3.1 下载Android8.1源代码

{{{1}}} 源代码托管在 gitlab 上,使用以下命令进行下载:

git clone https://gitlab.com/friendlyelec/rk3399-android-8.1 --depth 1 -b master

1.3.2 编译并生成Image文件

使用以下命令编译 Android7:

cd rk3399-android-8.1
./build-nanopc-t4.sh -F -M

1.3.3 更新系统为自已编译的Image

编译完成后,image文件会存放在Android8.1源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 {{{1}}}上:
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区;
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 android8 目录;
3) 将SD卡插入{{{1}}},重新烧写Andorid系统即可;
也可参考这个github仓库的方法来更新:sd-fuse_rk3399

1.4 编译Android7源代码

1.4.1 下载Android7源代码

{{{1}}} 源代码托管在 gitlab 上,使用以下命令进行下载:

git clone https://gitlab.com/friendlyelec/rk3399-nougat --depth 1 -b nanopc-t4-nougat

1.4.2 编译并生成Image文件

使用以下命令编译 Android7:

cd rk3399-nougat
./build-nanopc-t4.sh -F -M

1.4.3 更新系统为自已编译的Image

编译完成后,image文件会存放在Android7源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 {{{1}}}上:
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区;
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 nougat 目录;
3) 将SD卡插入{{{1}}},重新烧写Andorid系统即可;
也可参考这个github仓库的方法来更新:sd-fuse_rk3399

1.5 编译 FriendlyCore/FriendlyDesktop/Lubuntu 内核源代码

git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi4-linux-v4.4.y kernel-rockchip
cd kernel-rockchip
make ARCH=arm64 nanopi4_linux_defconfig
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
make ARCH=arm64 nanopi4-images

编译完成后会生成 kernel.img resource.img 这两个文件,将其拷贝到eflasher系统的SD卡覆盖旧文件即可, 假设SD卡的FRIENDLYARM分区挂载到FRIENDLYARM目录,更新命令如下:

# for Lubuntu
cp kernel.img resource.img /media/FRIENDLYARM/lubuntu/
 
# for FriendlyCore
cp kernel.img resource.img /media/FRIENDLYARM/friendlycore-arm64/
 
# for FriendlyDesktop
cp kernel.img resource.img /media/FRIENDLYARM/friendlydesktop-arm64/

也可以用线刷工具来更新。

1.6 编译 FriendlyCore/FriendlyDesktop/Lubuntu U-boot源代码

git clone https://gitlab.com/friendlyelec/rk3399-nougat --depth 1 -b nanopc-t4-nougat
cd rk3399-nougat/u-boot
make CROSS_COMPILE=aarch64-linux- rk3399_defconfig
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
make CROSS_COMPILE=aarch64-linux-

编译完成后会生成 uboot.img、trust.img 和 rk3399_loader_v1.12.109.bin这3个文件,其中rk3399_loader_v1.12.109.bin需要重命名为MiniLoaderAll.bin,将其拷贝到eflasher系统的SD卡覆盖旧文件即可,假设SD卡的FRIENDLYARM分区挂载到FRIENDLYARM目录,更新命令如下:

# for Lubuntu
cp uboot.img trust.img /media/FRIENDLYARM/lubuntu
cp rk3399_loader_v1.12.109.bin /media/FRIENDLYARM/lubuntu/MiniLoaderAll.bin
 
# for FriendlyCore
cp uboot.img trust.img /media/FRIENDLYARM/friendlycore-arm64
cp rk3399_loader_v1.12.109.bin /media/FRIENDLYARM/friendlycore-arm64/MiniLoaderAll.bin
 
# for FriendlyDesktop
cp uboot.img trust.img /media/FRIENDLYARM/friendlydesktop-arm64
cp rk3399_loader_v1.12.109.bin /media/FRIENDLYARM/friendlydesktop-arm64/MiniLoaderAll.bin

也可以用线刷工具来更新。

1.7 制作用于量产的启动卡或者烧写文件

如果要自已做启动卡,或制作用于批量生产的img文件,可参考这个github仓库:sd-fuse_rk3399