Buildroot/zh

From FriendlyELEC WiKi
Jump to: navigation, search

English

1 Buildroot简介

Buildroot是Linux平台上一个构建嵌入式Linux系统的框架,由Makefile脚本和Kconfig配置文件构成,旨在简化系统制作步骤,可实现一站式生成可烧写的系统固件,最终的固件包含boot-loader、kernel和rootfs,以及rootfs中的各种库和应用程序 (例如qt, gstreamer, busybox等)。

由 FriendlyELEC 提供的 Buildroot 项目是基于Rockchip原厂的 linux-sdk 制作, 项目使用 git 管理,与原厂的linux sdk更新保持同步;


Buildroot for rockchip运行界面如下:

  • Rk3399-buildroot-home.jpg
  • Rk3399-buildroot-console.jpg

  • Rk3399-buildroot-camera.jpg
  • Rk3399-buildroot-player.jpg

2 下载体验版固件

2.1 Buildroot for RK3588

访问此处的下载地址下载:

Image Files
rk3588-sd-buildroot-5.10-arm64-YYYYMMDD.img.gz 从SD卡启动的固件
rk3588-eflasher-buildroot-YYYYMMDD.img.gz 用于烧写到eMMC运行

2.2 Buildroot for RK3568

访问此处的下载地址下载:

Image Files
rk3568-sd-buildroot-5.10-arm64-YYYYMMDD.img.gz 从SD卡启动的固件
rk3568-eflasher-buildroot-YYYYMMDD.img.gz 用于烧写到eMMC运行

2.3 Buildroot for RK3399

访问此处的下载地址下载:

Image Files
rk3399-sd-buildroot-linux-4.19-arm64-YYYYMMDD.img.zip 从SD卡启动的固件
rk3399-eflasher-buildroot-4.19-arm64-YYYYMMDD.img.gz 用于烧写到eMMC运行

2.4 Buildroot for RK3328

访问此处的下载地址下载:

Image Files
rk3328-sd-buildroot-linux-4.19-arm64-YYYYMMDD.img.zip 从SD卡启动的固件
rk3328-eflasher-buildroot-4.19-arm64-YYYYMMDD.img.gz 用于烧写到eMMC运行

解压后用 dd 或者 win32image 烧写到 SD 卡。

3 帐户与密码

用户名: root
密码: rockchip

密码可通过以下文件更改:

buildroot/configs/rockchip/network.config # branch: rockchip-kernel4.19
buildroot/rockchip/base/common.config     # branch: rockchip-kernel5.10

4 连接WiFi

  • 编辑 /etc/wpa_supplicant.conf, 在ssid与psk处填上要连接的WiFi信息
  • 使用如下命令启动wpa_supplicant进程
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
  • 没有错误的话, 用命令 ifconfig wlan0 可以查看ip地址

5 获取项目源代码

5.1 安装 repo 工具

首先需要安装 repo 工具:

git clone https://github.com/friendlyarm/repo --depth 1
sudo cp repo/repo /usr/bin/

5.2 下载项目源代码

有以下两种途径获取项目源代码,中国大陆用户建议使用方法1的途径下载:

5.2.1 方法一:使用网盘里的repo压缩包

网盘下载地址: RK3588 RK3568 RK3399 RK3328
文件位于网盘的以下路径:07_源代码/buildroot-rkXXXX-YYYYMMDD.tar (YYYYMMDD表示打包的日期)
从网盘中获取的 repo 压缩包在解压之后,需要执行一下以下命令做一次解包动作:

tar xvf /path/to/netdrive/07_源代码/buildroot-rkXXXX-YYYYMMDD.tar
cd buildroot-rkXXXX
repo sync -l

用此方法得到的源代码版本是repo打包时的版本,如果想拉取到官方最新的版本,可以去掉 -l 参数,执行一次 repo sync, 例如:

cd buildroot-rkXXXX
repo sync --no-clone-bundle

5.2.2 方法二:从github下载

5.2.2.1 Buildroot for RK3588
mkdir buildroot-rk3588
cd buildroot-rk3588
repo init -u https://github.com/friendlyarm/buildroot_manifests \
    -b rockchip-kernel5.10 -m rk3588.xml --repo-url=https://github.com/friendlyarm/repo \
    --no-clone-bundle
repo sync -c --no-clone-bundle
5.2.2.2 Buildroot for RK3568
mkdir buildroot-rk3568
cd buildroot-rk3568
repo init -u https://github.com/friendlyarm/buildroot_manifests \
    -b rockchip-kernel5.10 -m rk3568.xml --repo-url=https://github.com/friendlyarm/repo \
    --no-clone-bundle
repo sync -c --no-clone-bundle
5.2.2.3 Buildroot for RK3399
mkdir buildroot-rk3399
cd buildroot-rk3399
repo init -u https://github.com/friendlyarm/buildroot_manifests \
    -b rockchip-kernel4.19 -m rk3399.xml --repo-url=https://github.com/friendlyarm/repo \
    --no-clone-bundle
repo sync -c --no-clone-bundle
5.2.2.4 Buildroot for RK3328
mkdir buildroot-rk3328
cd buildroot-rk3328
repo init -u https://github.com/friendlyarm/buildroot_manifests \
    -b rockchip-kernel4.19 -m rk3328.xml --repo-url=https://github.com/friendlyarm/repo \
    --no-clone-bundle
repo sync -c --no-clone-bundle

5.2.3 同步项目到最新版本

repo sync -c --no-clone-bundle

同步过程中,由于网络原因出现中断,可以使用下面脚本同步代码:

#! /bin/bash
repo sync -c --no-clone-bundle
while [ $? -ne 0 ]; 
do  
    repo sync -c --no-clone-bundle
done

6 如何编译

6.1 搭建编译环境

在PC的Ubuntu系统下 (建议使用版本20.04-64bit),执下以下命令安装所需的软件:

wget -O - https://raw.githubusercontent.com/friendlyarm/build-env-on-ubuntu-bionic/master/install.sh | bash

6.2 在Docker容器里编译

请使用此链接提供的Docker映象, 具体方法可阅读此链接中的README:
docker-cross-compiler-novnc

6.3 查看帮助

不带参数执行 build.sh,默认是打印帮助信息:

./build.sh

显示的帮助信息如下 (以RK3399平台为例):

USAGE: ./build.sh <parameter>
 
# 选择目标的硬件平台:
  ./build.sh nanopc_t4.mk
  ./build.sh nanopi_m4.mk
  ./build.sh nanopi_neo4.mk
  ./build.sh nanopi_r4s.mk
  ./build.sh som-rk3399.mk
 
# 编译各个模块:
  ./build.sh all                -编译所有组件
  ./build.sh uboot              -单独编译uboot
  ./build.sh kernel             -单独编译kernel
  ./build.sh buildroot          -单独编译buildroot
  ./build.sh sd-img             -生成sd启动的镜像文件
  ./build.sh emmc-img           -生成用于安装到emmc的镜像文件 (镜像文件需要dd到sd卡,通过sd卡启动安装程序)
# 清理:
  ./build.sh clean              -remove old images
  ./build.sh cleanall

6.4 全自动方式编译

初次编译,需要选择目标的硬件平台,以RK3399平台的R4S为例:

./build.sh nanopi_r4s.mk

执行上述命令,会自动编译所有组件,其中包括u-boot, kernel 和 buildroot,并生成sd启动的烧写镜像文件。

6.5 编译单独的模块

6.5.1 kernel

./build.sh kernel

6.5.2 u-boot

./build.sh uboot

6.5.3 buildroot

./build.sh buildroot

6.6 生成sdcard固件

sudo ./build.sh sd-img

打包img成功后,终端会显示如下信息,可以参考下面的dd命令将img写入sd卡,注意/dev/sdX需要替换成真实的sd卡设备:

Run the following for sdcard install:
    sudo dd if=out/Buildroot_20211213_NanoPi-R4S_arm64_sd.img bs=1M of=/dev/sdX

6.7 生成emmc (eflasher) 固件

sudo ./build.sh emmc-img

打包img成功后,终端会显示如下信息,可以参考下面的dd命令将img写入sd卡,注意/dev/sdX需要替换成真实的sd卡设备:

Run the following for sdcard install:
    sudo dd if=out/Buildroot_20211213_NanoPi-R4S_arm64_eflasher.img bs=1M of=/dev/sdX

用此sd卡启动eflasher系统,执行eflasher命令,将系统写入emmc,之后就可以拨掉sd卡,从emmc启动buildroot了。

7 Buildroot定制与开发

7.1 目录结构

├── buildroot-xxyyzz
│   ├── buildroot -> buildroot源代码
|   └── toolchain -> 交叉编译器,仅用于编译u-boot与kernel
│   ├── build.sh -> 编译脚本
│   ├── device/friendlyelec -> 用于适配友善电子开发板的相关文件
│   ├── kernel -> 内核
│   └── u-boot -> u-boot
│   └── app -> rockchip的app
│   └── external -> rockchip的buildroot软件包
│   └── rkbin -> rockchip的引导程序
│   └── scripts -> 打包img的相关脚本

7.1.1 更改Buildroot配置

  • 列出当前可用的配置
cd buildroot
make list-defconfigs

适合FriendlyELEC RK3399的配置所下:
friendlyelec_rk3399_defconfig - Build for friendlyelec_rk3399

  • 使用menuconfig更改配置
make friendlyelec_rk3399_defconfig
make menuconfig
make savedefconfig
diff .defconfig configs/friendlyelec_rk3399_defconfig 
cp .defconfig configs/friendlyelec_rk3399_defconfig
  • 重新编译
cd ../
./build.sh buildroot

7.2 预装文件到文件系统

将文件放在 device/friendlyelec/rk3399/common-files,然后重新打包img:

sudo ./build.sh sd-img
sudo ./build.sh emmc-img

7.3 修改u-boot和kernel

直接修改u-boot和kernel目录下的文件即可。

7.4 使用sdk里的交叉编译器

export PATH=$PWD/buildroot/output/rockchip_rk3399/host/bin/:$PATH
aarch64-buildroot-linux-gnu-g++ -v

显示版本如下:
gcc 版本 6.4.0 (Buildroot 2018.02-rc3-g4f000a0797)

7.5 交叉编译Qt程序

git clone https://github.com/friendlyarm/QtE-Demo.git
cd QtE-Demo
../buildroot/output/rockchip_rk3399/host/bin/qmake QtE-Demo.pro
make

要实现开机自动运行你的Qt程序,可将QtE-Demo拷贝到开发板上,然后修改 /etc/init.d/下的S50launcher,将/usr/local/QLauncher/QLauncher &这一行改为QtE-Demo的文件路径即可。

8 常见问题

8.1 如何获取用于USB Type-C烧写的文件?

执行 build.sh emmc-img 之后,在 scripts/sd-fuse 下面会有一个 buildroot 目录,使用android_tools工具加载这个目录下的文件即可。

9 报告bug

欢迎发邮件到:techsupport@friendlyarm.com

10 更新日志

10.1 2023-08-15

  • 增加rk3588的支持
  • 将buildroot更新至原厂新版本 linux-5.10-gen-rkr5.1

10.2 2022-07-20

  • 增加rk3568的支持
  • 将buildroot更新至原厂新版本

10.3 2021-12-23

  • 简化构建脚本, 并将buildroot更新至原厂新版本