本文当记录使用buildroot制作rockchip-rk3288平台的rootfs过程。
首先,需要到Buildroot的官网下载最新版本的源码,以及官方的使用手册。使用手册的第二章说明了Buildroot在Linux上编译时所依赖的工具以及第三方库。下面列列出了可能用到的软件包:
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
buildroot使用类似于Linux kernel的配置工具,我们可以使用make menuconfig工具对平台编译参数进行配置。进入buildroot主目录,执行
make menuconfig
下面为rockchip-rk3288平台的配置信息:
toolchain主要涉及交叉编译器的相关配置,有两种方式:
Buildroot toolchain为buildroot官方提供的交叉编译器,而External toolchain为第三方提供的交叉编译器。这里我们详细说明一下External toolchain。
对于External toolchain,buildroot提供了三种配置方式:
这里我们选择Custom toolchain配置方式。具体的配置参数如下:
这里需要主义的是gcc版本、kernel headers series等信息的获取方式。对于gcc版本我们可以通过arm-linux-gnueabihf-gcc -v命令查看,例如:
gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05)
对于kernel headers series,我们需要到交叉编译器的相关目录下进行查看,例如,本文档所使用的。
gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/linux/version.h #define LINUX_VERSION_CODE 263680 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
将System hostname和System banner配置成平台相关的信息。将 Init system配置成Busybox。注意 /dev management配置成 Dynamic using devtmpfs + mdev,并且将system/device_table.txt配置到Path to the permission tables属性。我们可以使用‘Enable root login with password’设置系统的登陆密码。
Target packages包括大量的第三方库,我们可以根据项目的具体要求,将所需的工具编译进根文件系统。
切换到buildroot的主目录,执行make命令或者执行make O=/path/to/store/build/file(指定编译结果存放的位置),buildroot就会自动下载、安装制作rootfs所需的软件包。编译结束后,在buildroot/output下会生成rootfs相关的内容,各个文件的作用如下:
将编译好的rootfs通过具体开发板的烧写工具进行下载,下载成功后,重启系统。如果启动成功的话,会出现如下的提示信息:
帐号:root,密码:123456
如果发现根文件系统分区大小存在问题,如图:
可以使用resize2fs命令对/dev/root设备分区大小重新识别,如下:
Enjoy it!