|
|
(2 intermediate revisions 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工具加载这个目录下的文件即可。
| + | |