# RK3399上编译linux-kernel **Repository Path**: dai_zixuan/compiling_linux_kernel_on_rk3399 ## Basic Information - **Project Name**: RK3399上编译linux-kernel - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 在Firefly-RK3399上编译linux-kernel ## 一、准备工作 #### 下载 Firefly_Linux_SDK Firefly_Linux_SDK 源码包比较大,可以通过如下方式获取 Firefly_Linux_SDK源码包:[下载连接](http://www.t-firefly.com/doc/download/page/id/3.html) 下载完成后先验证一下 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 固件)请执行一下操作: [前往下载页面 下载对应的Ubuntu 根文件系统镜像](http://www.t-firefly.com/doc/download/page/id/3.html) 把得到的镜像放到 SDK 的指定目录: ``` #解压 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 ```