编译根文件系统¶
准备工作¶
编译 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 在线浏览源码
编译内核¶
编译内核:
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 方便固件的发布,供终端用户升级系统使用。一般开发时使用分区映像比较方便。