在Firefly-RK3399上编译linux-kernel
一、准备工作
下载 Firefly_Linux_SDK
Firefly_Linux_SDK 源码包比较大,可以通过如下方式获取 Firefly_Linux_SDK源码包:下载连接
下载完成后先验证一下 MD5 码:
$ md5sum firefly-sdk-20200629.7z
d8c52272725ff8a2216fc2be7a92ffc4 firefly-sdk-20200629.7z
确认无误后,就可以解压:
7z x firefly-sdk-20200629.7z
cd firefly-sdk
git reset --hard
更新
注意:解压后务必要先更新下远程仓库。以下为从 github 处更新的方法:
#1. 进入SDK根目录
cd firefly-sdk
#2. 下载远程bundle仓库
git clone https://github.com/FireflyTeam/bundle.git -b rk3399-linux-bundle
#3. 更新SDK,并且后续更新不需要再次拉取远程仓库,直接执行以下命令即可
./bundle/update rk3399-linux-bundle
#4. 按照提示已经更新内容到 FETCH_HEAD,同步FETCH_HEAD到firefly分支
git rebase FETCH_HEAD
#5 更新共用仓库
./bundle/update common-linux-bundle
git rebase FETCH_HEAD
二、Linux_SDK 目录介绍
目录:
├── linux_sdk
│ ├── app
│ ├── buildroot buildroot 根文件系统的编译目录
│ ├── build.sh -> device/rockchip/common/build.sh 全自动编译脚本
│ ├── device 编译相关配置文件
│ ├── distro debian 根文件系统生成目录
│ ├── docs 文档
│ ├── envsetup.sh -> buildroot/build/envsetup.sh
│ ├── external
│ ├── 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
三、搭建 SDK 编译环境
编译 Debian 固件:
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 gcc-4.8-multilib-arm-linux-gnueabihf gcc-arm-linux-gnueabihf libssl-dev \
gcc-aarch64-linux-gnu g+conf 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
Ubuntu 固件:(根文件系统请使用官方提供的根文件系统镜像)
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 gcc-4.8-multilib-arm-linux-gnueabihf gcc-arm-linux-gnueabihf libssl-dev \
gcc-aarch64-linux-gnu g+conf 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
注意: Ubuntu17.04 或者更高的系统还需要如下依赖包:
sudo apt-get install lib32gcc-7-dev g++-7 libstdc++-7-dev
四、编译 SDK
编译前配置
配置文件firefly-rk3399-ubuntu.mk:
./build.sh firefly-rk3399-ubuntu.mk
#文件路径在 `device/rockchip/rk3399/firefly-rk3399-ubuntu.mk`
如果配置文件生效会连接到device/rockchip/.BoardConfig.mk,检查该文件可以验证是否配置成功
注意:firefly-rk3399-ubuntu.mk为编译生成 Buildroot 固件的配置文件。同时用户也可以通过参考该配置生成新的配置文件来适配自己所需要的固件。
# kernel defconfig
export LINUX_KERNEL_DEFCONFI=firefly_linux_defconfig 编译kernel配置文件
# kernel dts
export RK_KERNEL_DTS=rk3399-firefly 编译kernel用到的dts
默认配置编译 Buildroot 固件,如果想编译其他固件(如 Ubuntu 固件)请执行一下操作:
#解压
tar -xvf rk3399_ubuntu18.04_LXDE.img.tgz
#sdk根目录下
mkdir ubunturootfs
mv rk3399_ubuntu18.04_LXDE.img ubunturootfs/
#修改firefly-rk3399-ubuntu.mk文件
vim device/rockchip/RK3399/firefly-rk3399-ubuntu.mk
#把RK_ROOTFS_IMG属性改成ubuntu文件系统镜像得路径(也就是rk3399_ubuntu18.04_LXDE.img)
RK_ROOTFS_IMG=ubunturootfs/rk3399_ubuntu18.04_LXDE.img
五、全自动编译
在配置和搭建环境的工作都做好的前提下:
./build.sh
全自动编译的固件默认会编译一遍buildroot根文件系统。生成固件目录rockdev/,同时会在 IMAGE 中备份。
六、部分编译
kernel
./build.sh kernel