用python编译linux内核,戴子轩/RK3399上编译linux-kernel

在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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值