编译根文件系统

准备工作

编译 Buildroot 对机器的配置的要求:

  • 64 位 CPU
  • 8GB 物理内存+交换内存
  • 30GB 空闲的磁盘空间用于构建,源码树另外占用大约 10GB

建议使用 Ubuntu 64ibt 系统开发,如 Ubuntu 14.04 64ibt、Ubuntu 16.04 64ibt等,避免出现环境问题。

编译环境的初始化

您需要一个 64 位版本的 Ubuntu 。注意:使用老版本 Ubuntu 可能会有兼容性问题。

  • Ubuntu 14.04 软件包安装:
$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip tar 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 cmake tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386 lzop
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gn
u/libGL.so
  • 安装 ARM 交叉编译工具链和编译内核相关软件包
$ sudo apt-get install gcc-arm-linux-gnueabihf \
gcc-aarch64-linux-gnu device-tree-compiler lzop libncurses5-dev \
libssl1.0.0 libssl-dev
  • 目前Buildroot默认支持的Qt版本为Qt5.9.1,此版本要求主机的编译工具GCC和G++的版本必须为4.8以上,所以如果当前编译环境的GCC和G++版本小于4.8,请先更新GCC和G++版本,再进行编译。

下载 SDK

由于 SDK 比较大,我们提供了一个打包好的.git以供下载:

下载完成后先验证一下 MD5 码:

$ md5sum Firefly-PX3-SE_Buildroot_git_180421.7z
21b8c26d61731ce7bacc9000d39f33ed  Firefly-PX3-SE_Buildroot_git_180421.7z

确认无误后,就可以解压:

mkdir -p ~/proj/Firefly-PX3-SE
cd ~/proj/Firefly-PX3-SE
7zr x Firefly-PX3-SE_Buildroot_git_180421.7z
git reset --hard

更新remote地址,解决更新仓库时的权限问题:

git remote set-url gitlab https://gitlab.com/TeeFirefly/px3se-buildroot.git

以后就可以直接从 gitlab 处更新:

git pull gitlab firefly-px3se:firefly-px3se

也可以到 https://gitlab.com/TeeFirefly/px3se-buildroot 在线浏览源码

编译uboot

编译内核:

cd ~/proj/Firefly-PX3-SE/u-boot
make px3se_linux_defconfig
make -j8

编译内核

编译内核:

cd ~/proj/Firefly-PX3-SE/kernel
make ARCH=arm px3se_linux_defconfig
make ARCH=arm px3se-fireprime.img -j8

编译 rootfs

编译 rootfs:

cd ~/proj/Firefly-PX3-SE
. envsetup.sh
cd ~/proj/Firefly-PX3-SE/buildroot/
make rockchip_px3se_defconfig && cd ..
./build_all.sh && ./mkfirmware.sh

其中,envsetup.sh 是终端环境变量设置脚本。有些模块可通过rk_make.sh单独编译,此时需要设置终端环境变量。

注意: Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。buildroot/dl/目录存在从官网上下载的开源软件包,第一次下载后,下次就不会再去从官网下载了,而是从dl/目录下拿开源包。因此由于国内网络限制,第一次编译会很漫长。为了节省时间,我们提供了基本上会用到的软件包,下载解压,将dl目录拷贝到buildroot/下即可。

  • 开源软件包:dl.7z

firefly脚本编译

firefly提供了便捷的编译脚本工具。

  • 编译uboot:
cd ~/proj/Firefly-PX3-SE
./FFTools/make.sh -u
  • 编译内核:
cd ~/proj/Firefly-PX3-SE
./FFTools/make.sh -k -d px3se-fireprime

注意:-d dts_file_name,dts默认使用px3se-fireprime.dts

  • 编译根文件系统:
cd ~/proj/Firefly-PX3-SE
./FFTools/make.sh -a
  • 以上全部编译:
cd ~/proj/Firefly-PX3-SE
./FFTools/make.sh

烧写分区映像

上一步骤的 ./mkimage.sh 会重新打包 rootfs.img。 并将其它相关的映像文件拷贝到目录 rockimg/中。以下列出一般固件用到的映像文件:

  • kernel.img :内核映像。
  • recovery.img :急救模式映像。
  • resource.img :资源映像,内含开机图片和内核的设备树信息。
  • rootfs.img:根文件系统,ext4 文件系统格式。

请参照《升级固件》一文来烧写分区映像文件。

如果使用的是 Windows 系统,将上述映像文件拷贝AndroidTool (Windows 下的固件升级工具)的 rockdev\Image 目录中,之后参照升级文档烧写分区映像即可,这样的好处是使用默认配置即可,不用修改文件的路径。

打包成统一固件

  • 在ubuntu下打包统一固件,编译好SDK后,在SDK根目录执行./FFTools/mkupdate/mkupdate.sh。即可生成统一固件例如:Firefly-PX3SE_Buildroot_DEFAULT_xxxxxx.img
  • 在 Windows 下打包统一固件 update.img 很简单,按上一步骤将文件拷贝到 AndroidTool 的 rockdev\Image 目录中,然后运行 rockdev 目录下的 mkupdate.bat 批处理文件即可创建 update.img 并存放到 rockdev\Image 目录里。

update.img 方便固件的发布,供终端用户升级系统使用。一般开发时使用分区映像比较方便。