Difference between revisions of "How to build FriendlyWrt/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(Replaced content with "How to Build FriendlyWrt")
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
[[Buildroot for RK3399|English]]
+
[[How to Build FriendlyWrt]]
 
+
==Buildroot简介==
+
{{RK3399 Buildroot Intro/zh}}
+
 
+
==下载体验版固件==
+
访问[http://download.friendlyarm.com/nanopct4 此处的下载地址]下载:<br />
+
{| class="wikitable"
+
|-
+
  | colspan=2 | Image Files
+
|-
+
  | rk3399-sd-buildroot-linux-4.4-arm64-YYYYMMDD.img.zip
+
  | 从SD卡启动的固件
+
|-
+
  | rk3399-eflasher-buildroot-YYYYMMDD.img.zip
+
  | 用于烧写到eMMC运行
+
|}
+
解压后用 dd 或者 win32image 烧写到 SD 卡。
+
==帐户与密码==
+
用户名: root<br />
+
密码: rockchip<br />
+
<br />
+
==获取项目源代码==
+
===安装 repo 工具===
+
首先需要安装 repo 工具:
+
<syntaxhighlight lang="bash">
+
git clone https://github.com/friendlyarm/repo
+
cp repo/repo /usr/bin/
+
</syntaxhighlight>
+
===下载项目源代码===
+
有以下两种途径获取项目源代码,中国大陆用户建议使用方法1的途径下载:
+
====方法一:使用网盘里的repo压缩包====
+
网盘下载地址: [http://download.friendlyarm.com/{{#replace:{{#replace:{{BASEPAGENAME}}| |}}|/zh|}} 点击进入]<br />
+
文件位于网盘的以下路径:sources/linuxsdk-friendlyelec-YYYYMMDD.tar (YYYYMMDD表示打包的日期)<br />
+
从网盘中获取的 repo 压缩包在解压之后,需要执行一下以下命令做一次解包动作:
+
<syntaxhighlight lang="bash">
+
tar xvf /path/to/netdisk/sources/linuxsdk-friendlyelec-YYYYMMDD.tar
+
cd linuxsdk-friendlyelec
+
repo sync -l
+
</syntaxhighlight>
+
用此方法得到的源代码版本是repo打包时的版本,如果想拉取到官方最新的版本,可以去掉 -l 参数,执行一次 repo sync, 例如:
+
<syntaxhighlight lang="bash">
+
cd linuxsdk-friendlyelec
+
repo sync
+
</syntaxhighlight>
+
====方法二:从github下载====
+
<syntaxhighlight lang="bash">
+
mkdir linuxsdk-friendlyelec
+
cd linuxsdk-friendlyelec
+
repo init -u https://github.com/friendlyarm/buildroot_manifests -b master -m rk3399_linux_release.xml --repo-url=https://github.com/rockchip-linux/repo
+
repo sync -c
+
</syntaxhighlight>
+
====同步项目到最新版本====
+
<syntaxhighlight lang="bash">
+
cd linuxsdk-friendlyelec
+
repo sync -c
+
</syntaxhighlight>
+
同步过程中,由于网络原因出现中断,可以使用下面脚本同步代码:
+
<syntaxhighlight lang="bash">
+
#! /bin/bash
+
repo sync -c
+
while [ $? -ne 0 ];
+
do 
+
    repo sync -c
+
done
+
</syntaxhighlight>
+
 
+
==如何编译==
+
===搭建编译环境===
+
在PC的Ubuntu系统下,执下以下命令安装所需的软件:
+
<syntaxhighlight lang="bash">
+
sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-
+
compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-
+
tools linaro-image-tools autoconf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make
+
binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget
+
libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-
+
client subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev texinfo
+
liblz4-tool genext2fs lib32stdc++6
+
</syntaxhighlight>
+
 
+
===全自动方式编译===
+
<syntaxhighlight lang="bash">
+
./build.sh
+
</syntaxhighlight>
+
===部分编译===
+
====kernel====
+
<syntaxhighlight lang="bash">
+
./build.sh kernel
+
</syntaxhighlight>
+
====u-boot====
+
<syntaxhighlight lang="bash">
+
./build.sh uboot
+
</syntaxhighlight>
+
====rootfs====
+
<syntaxhighlight lang="bash">
+
./build.sh rootfs
+
</syntaxhighlight>
+
===生成sdcard固件===
+
<syntaxhighlight lang="bash">
+
sudo ./build.sh sd-img
+
</syntaxhighlight>
+
或者直接将固件烧写到sd卡:
+
<syntaxhighlight lang="bash">
+
./friendlyelec/rk3399/sd-fuse_rk3399/fusing.sh /dev/sdX buildroot
+
</syntaxhighlight>
+
其中,/dev/sdX请替换为真实的SD卡设备文件名。
+
===生成emmc (eflasher) 固件===
+
<syntaxhighlight lang="bash">
+
sudo ./build.sh emmc-img
+
</syntaxhighlight>
+
 
+
===查看帮助===
+
<syntaxhighlight lang="bash">
+
# ./build.sh help
+
====USAGE: build.sh modules====
+
uboot              -build uboot
+
kernel            -build kernel
+
rootfs            -build default rootfs, currently build buildroot as default
+
buildroot          -build buildroot rootfs
+
ramboot            -build ramboot image
+
yocto              -build yocto rootfs, currently build ros as default
+
ros                -build ros rootfs
+
debian            -build debian rootfs
+
pcba              -build pcba
+
recovery          -build recovery
+
all                -build uboot, kernel, rootfs, recovery image
+
cleanall          -clean uboot, kernel, rootfs, recovery
+
firmware          -pack all the image we need to boot up system
+
updateimg          -pack update image
+
sd-img            -pack sd-card image, used to create bootable SD card
+
emmc-img          -pack sd-card image, used to install buildroot to emmc
+
save              -save images, patches, commands used to debug
+
default            -build all module
+
</syntaxhighlight>
+
重点参数说明:<br />
+
uboot              -单独编译uboot<br />
+
kernel            -单独编译kernel<br />
+
rootfs            -单独编译buildroot<br />
+
buildroot          -同上<br />
+
sdimg              -生成用于dd到sd卡的image文件,以及用于eFlasher工具使用的eMMC烧写文件<br />
+
<br />
+
 
+
==Buildroot定制与开发==
+
===目录结构===
+
<syntaxhighlight lang="bash">
+
├── linuxsdk-friendlyelec
+
│  ├── app
+
│  ├── buildroot buildroot根文件系统的编译目录
+
│  ├── build.sh -> device/rockchip/common/build.sh 全自动编译脚本
+
│  ├── device 编译相关配置文件
+
│  ├── distro debian根文件系统生成目录
+
│  ├── docs 文档
+
│  ├── envsetup.sh -> buildroot/build/envsetup.sh
+
│  ├── external
+
│  ├── friendlyelec 用于适配友善电子RK3399开发板的文件
+
│  ├── kernel 内核
+
│  ├── Makefile -> buildroot/build/Makefile
+
│  ├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh rockdev链接更新脚本
+
│  ├── prebuilts
+
│  ├── rkbin
+
│  ├── rkflash.sh -> device/rockchip/common/rkflash.sh 烧写脚本
+
│  ├── rootfs debian根文件系统编译目录
+
│  ├── tools 烧写、打包工具
+
│  └── u-boot u-boot
+
</syntaxhighlight>
+
====更改Buildroot配置====
+
* 列出当前可用的配置
+
<syntaxhighlight lang="bash">
+
cd buildroot
+
make list-defconfigs
+
</syntaxhighlight>
+
显示所下:<br />
+
rockchip_rk3399_defconfig          - Build for rockchip_rk3399<br />
+
* 使用menuconfig更改配置
+
<syntaxhighlight lang="bash">
+
make rockchip_rk3399_defconfig
+
make menuconfig
+
make savedefconfig
+
diff .defconfig configs/rockchip_rk3399_defconfig
+
cp .defconfig configs/rockchip_rk3399_defconfig
+
</syntaxhighlight>
+
* 重新编译
+
<syntaxhighlight lang="bash">
+
cd ../
+
./build.sh rootfs
+
</syntaxhighlight>
+
===预装文件到文件系统===
+
将文件放在 friendlyelec/rk3399/fs-overlay-64,然后重新编译 rootfs。
+
===修改u-boot和kernel===
+
直接修改u-boot和kernel目录下的文件即可。
+
===使用sdk里的交叉编译器===
+
<syntaxhighlight lang="bash">
+
export PATH=$PWD/buildroot/output/rockchip_rk3399/host/bin/:$PATH
+
aarch64-buildroot-linux-gnu-g++ -v
+
</syntaxhighlight>
+
显示版本如下:<br />
+
gcc 版本 6.4.0 (Buildroot 2018.02-rc3-g4f000a0797)
+
===交叉编译Qt程序===
+
<syntaxhighlight lang="bash">
+
git clone https://github.com/friendlyarm/QtE-Demo.git
+
cd QtE-Demo
+
../buildroot/output/rockchip_rk3399/host/bin/qmake QtE-Demo.pro
+
make
+
</syntaxhighlight>
+
要实现开机自动运行你的Qt程序,可将QtE-Demo拷贝到开发板上,然后修改 /etc/init.d/下的S50launcher,将/usr/local/QLauncher/QLauncher &这一行改为QtE-Demo的文件路径即可。
+
==常见问题==
+
===如何获取用于USB Type-C烧写的文件?===
+
执行 build.sh emmc-img 之后,在 friendlyelec/rk3399/sd-fuse_rk3399 下面会有一个 buildroot 目录,使用android_tools工具加载这个目录下的文件即可。
+

Latest revision as of 05:07, 28 August 2019

How to Build FriendlyWrt