编译 Linux 固件(GPT)
前言
本 SDK 开发环境是在 Ubuntu 上开发测试的。我们推荐使用 Ubuntu 16.04 的系统进行编译。其他的 Linux 版本可能需要对软件包做相应调整。 除了系统要求外,还有其他软硬件方面的要求。
准备工作
硬件要求:
64 位系统,硬盘空间大于 40G。如果您进行多个构建,将需要更大的硬盘空间。
软件要求:编译环境初始化
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 lib32stdc++6 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Ubuntu 16.04 软件包安装
sudo apt-get install git gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler mtools parted libudev-dev libu***-1.0-0-dev python-linaro-image-tools linaro-image-tools libssl-dev autotools-dev libsigsegv2 m4 libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libglib2.0-dev openssh-client lib32stdc++6
安装 ARM 交叉编译工具链和编译内核相关软件包
$ sudo apt-get install gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu device-tree-compiler lzop libncurses5-dev libssl1.0.0 libssl-dev
下载LINUX-SDK:
提供两种方式给用户下载:1:Github上同步SDK;2:下载源码包(推荐国内用户使用)
Github上同步SDK
下载repo工具
初始化仓库
下载源码包(推荐国内用户使用)
下载repo工具
下载链接:Linux-SDK GPT 源码包
拷贝到 linux 文件夹下
解压文件:7z x linux-sdk-3328.7z
注意:解压完之后,用户可能会疑惑看不到文件。在 linux/ 目录运行 ls -a 命令,有 .repo/ 目录,这是我们的仓库。
同步源码:
repo sync -c
注意:从 Github 上同步 SDK 时,部分国内用户会有不稳定的现象,这就需要多次运行同步命令 repo sync -c 才可以
目录
$ tree -L 1 . ├── app ├── buildroot buildroot根文件系统的编译目录 ├── build.sh -> device/rockchip/common/build.sh 全自动编译脚本 ├── device ├── distro ├── docs 开发文档 ├── envsetup.sh -> buildroot/build/envsetup.sh ├── external ├── kernel 内核 ├── Makefile -> buildroot/build/Makefile ├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh 打包脚本 ├── prebuilts ├── rkbin ├── rkflash.sh -> device/rockchip/common/rkflash.sh 烧写脚本 ├── rootfs ├── tools └── u-boot
编译SDK
编译前配置:
在 device/rockchip/rk3328/ 目录下,选择对应的板型的配置文件
本文例子:确定选用 rk3328/roc-rk3328-cc.mk
roc-rk3328-cc.mk 相关配置介绍:
# Target arch export RK_ARCH=arm64 64位ARM架构 # Uboot defconfig export RK_UBOOT_DEFCONFIG=firefly-rk3328 u-boot配置文件 # Kernel defconfig export RK_KERNEL_DEFCONFIG=firefly_linux_defconfig kernel配置文件 # Kernel dts export RK_KERNEL_DTS=rk3328-roc-cc dts文件 # parameter for GPT table export RK_PARAMETER=parameter-ubuntu.txt 分区表(关键) # rootfs image path export RK_ROOTFS_IMG=buildroot/output/$RK_CFG_BUILDROOT/images/rootfs.$RK_ROOTFS_TYPE 根文件系统路径
重点:
配置Rootfs
源码中默认的 Linux rootfs 是 buildroot,如果 rootfs 使用 buildroot,跳过此步,如果用户需要使用 Ubuntu,需要通过以下步骤来配置:
以 Ubuntu18.04 为例
1、 下载根文件系统:ubuntu18.04 根文件系统(64位)放到SDK路径下;
2、 该文件为7z压缩包,解压该文件;
7z x rk3328-ubuntu1804-arm64-rootfs.7z
3、 完成上述后,得到rk3328-ubuntu1804-arm64-rootfs.img(2.6G),拷贝根文件系统到rootfs目录下;
cp rk3328-ubuntu1804-arm64-rootfs.img rootfs/
4、 在device/rockchip/rk3328/roc-rk3328-cc.mk中, 将“# rootfs image path”修改为:
export RK_ROOTFS_IMG=rootfs/rk3328-ubuntu1804-arm64-rootfs.img
编译配置文件:
./build.sh roc-rk3328-cc.mk
运行完上述脚本后,在 device/rockchip/ 目录下,生成 .BoardConfig.mk 软链接 device/rockchip/rk3328/roc-rk3328-cc.mk
完全编译
完全编译运行如下命令,包含 kernel 、uboot、buildroot、recovery。 如果用户使用 buildroot,可以使用完全编译。如果用户使用 Ubuntu 系统,则不需要使用完全编译。
./build.sh
注意:该脚本默认编译 buildroot 根文件系统,若用户需要用的根文件系统是 Debian 或者 Ubuntu16.04 时,请!先!将!对应的根文件系统准备好,不然在执行该 build.sh 脚本时,会在整理分区镜像、打包固件时出错,这部分操作在以下的“部分编译”中“编译 rootfs ”有详细说明,按照操作执行即可!
build.sh 脚本运行完成后,会将分区镜像和统一固件 update.img 放在 rockdev/ 目录下,同时创建 IMAGE/ 目录备份。
模块化编译:
编译u-boot:
./build.sh uboot
编译kernel:
./build.sh kernel
编译rootfs:
本SDK支持三种根文件系统,分别是buildroot、Debian、Ubuntu;
Buildroot
编译 Buildroot 环境搭建所依赖的软件包安装命令如下:
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 libu***-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,执行如下命令:
./build.sh rootfs
Debian
编译 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 libu***-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
搭建环境完成后,编译 Debian,按照自身需求,执行如下命令:
cd rootfs/ ## Usage for 32bit Debian Building a base debian system by ubuntu-build-service from linaro. sudo apt-get install binfmt-support qemu-user-static sudo dpkg -i ubuntu-build-service/packages/* sudo apt-get install -f RELEASE=stretch TARGET=desktop ARCH=armhf ./mk-base-debian.sh Building the rk-debain rootfs with debug: VERSION=debug ARCH=armhf ./mk-rootfs-stretch.sh Creating the ext4 image(linaro-rootfs.img): ./mk-image.sh ------------------------------------------------------------------ ## Usage for 64bit Debian Building a base debian system by ubuntu-build-service from linaro. sudo apt-get install binfmt-support qemu-user-static sudo dpkg -i ubuntu-build-service/packages/* sudo apt-get install -f RELEASE=stretch TARGET=desktop ARCH=arm64 ./mk-base-debian.sh Building the rk-debain rootfs with debug: VERSION=debug ARCH=arm64 ./mk-rootfs-stretch-arm64.sh Creating the ext4 image(linaro-rootfs.img): ./mk-image.sh
完成上述后,会在 rootfs 目录下,生成 linaro-rootfs.img.修改device/rockchip/.BoardConfig.mk中的根文件系统路径即可,参考配置前编译中的“配置 Rootfs ”.
编译 Linux 固件(GPT)
前言
本 SDK 开发环境是在 Ubuntu 上开发测试的。我们推荐使用 Ubuntu 16.04 的系统进行编译。其他的 Linux 版本可能需要对软件包做相应调整。 除了系统要求外,还有其他软硬件方面的要求。
准备工作
硬件要求:
64 位系统,硬盘空间大于 40G。如果您进行多个构建,将需要更大的硬盘空间。
软件要求:编译环境初始化
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 lib32stdc++6 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Ubuntu 16.04 软件包安装
sudo apt-get install git gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler mtools parted libudev-dev libu***-1.0-0-dev python-linaro-image-tools linaro-image-tools libssl-dev autotools-dev libsigsegv2 m4 libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libglib2.0-dev openssh-client lib32stdc++6
安装 ARM 交叉编译工具链和编译内核相关软件包
$ sudo apt-get install gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu device-tree-compiler lzop libncurses5-dev libssl1.0.0 libssl-dev
下载LINUX-SDK:
提供两种方式给用户下载:1:Github上同步SDK;2:下载源码包(推荐国内用户使用)
Github上同步SDK
下载repo工具
初始化仓库
下载源码包(推荐国内用户使用)
下载repo工具
下载链接:Linux-SDK GPT 源码包
拷贝到 linux 文件夹下
解压文件:7z x linux-sdk-3328.7z
注意:解压完之后,用户可能会疑惑看不到文件。在 linux/ 目录运行 ls -a 命令,有 .repo/ 目录,这是我们的仓库。
同步源码:
repo sync -c
注意:从 Github 上同步 SDK 时,部分国内用户会有不稳定的现象,这就需要多次运行同步命令 repo sync -c 才可以
目录
$ tree -L 1 . ├── app ├── buildroot buildroot根文件系统的编译目录 ├── build.sh -> device/rockchip/common/build.sh 全自动编译脚本 ├── device ├── distro ├── docs 开发文档 ├── envsetup.sh -> buildroot/build/envsetup.sh ├── external ├── kernel 内核 ├── Makefile -> buildroot/build/Makefile ├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh 打包脚本 ├── prebuilts ├── rkbin ├── rkflash.sh -> device/rockchip/common/rkflash.sh 烧写脚本 ├── rootfs ├── tools └── u-boot
编译SDK
编译前配置:
在 device/rockchip/rk3328/ 目录下,选择对应的板型的配置文件
本文例子:确定选用 rk3328/roc-rk3328-cc.mk
roc-rk3328-cc.mk 相关配置介绍:
# Target arch export RK_ARCH=arm64 64位ARM架构 # Uboot defconfig export RK_UBOOT_DEFCONFIG=firefly-rk3328 u-boot配置文件 # Kernel defconfig export RK_KERNEL_DEFCONFIG=firefly_linux_defconfig kernel配置文件 # Kernel dts export RK_KERNEL_DTS=rk3328-roc-cc dts文件 # parameter for GPT table export RK_PARAMETER=parameter-ubuntu.txt 分区表(关键) # rootfs image path export RK_ROOTFS_IMG=buildroot/output/$RK_CFG_BUILDROOT/images/rootfs.$RK_ROOTFS_TYPE 根文件系统路径
重点:
配置Rootfs
源码中默认的 Linux rootfs 是 buildroot,如果 rootfs 使用 buildroot,跳过此步,如果用户需要使用 Ubuntu,需要通过以下步骤来配置:
以 Ubuntu18.04 为例
1、 下载根文件系统:ubuntu18.04 根文件系统(64位)放到SDK路径下;
2、 该文件为7z压缩包,解压该文件;
7z x rk3328-ubuntu1804-arm64-rootfs.7z
3、 完成上述后,得到rk3328-ubuntu1804-arm64-rootfs.img(2.6G),拷贝根文件系统到rootfs目录下;
cp rk3328-ubuntu1804-arm64-rootfs.img rootfs/
4、 在device/rockchip/rk3328/roc-rk3328-cc.mk中, 将“# rootfs image path”修改为:
export RK_ROOTFS_IMG=rootfs/rk3328-ubuntu1804-arm64-rootfs.img
编译配置文件:
./build.sh roc-rk3328-cc.mk
运行完上述脚本后,在 device/rockchip/ 目录下,生成 .BoardConfig.mk 软链接 device/rockchip/rk3328/roc-rk3328-cc.mk
完全编译
完全编译运行如下命令,包含 kernel 、uboot、buildroot、recovery。 如果用户使用 buildroot,可以使用完全编译。如果用户使用 Ubuntu 系统,则不需要使用完全编译。
./build.sh
注意:该脚本默认编译 buildroot 根文件系统,若用户需要用的根文件系统是 Debian 或者 Ubuntu16.04 时,请!先!将!对应的根文件系统准备好,不然在执行该 build.sh 脚本时,会在整理分区镜像、打包固件时出错,这部分操作在以下的“部分编译”中“编译 rootfs ”有详细说明,按照操作执行即可!
build.sh 脚本运行完成后,会将分区镜像和统一固件 update.img 放在 rockdev/ 目录下,同时创建 IMAGE/ 目录备份。
模块化编译:
编译u-boot:
./build.sh uboot
编译kernel:
./build.sh kernel
编译rootfs:
本SDK支持三种根文件系统,分别是buildroot、Debian、Ubuntu;
Buildroot
编译 Buildroot 环境搭建所依赖的软件包安装命令如下:
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 libu***-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,执行如下命令:
./build.sh rootfs
Debian
编译 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 libu***-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
搭建环境完成后,编译 Debian,按照自身需求,执行如下命令:
cd rootfs/ ## Usage for 32bit Debian Building a base debian system by ubuntu-build-service from linaro. sudo apt-get install binfmt-support qemu-user-static sudo dpkg -i ubuntu-build-service/packages/* sudo apt-get install -f RELEASE=stretch TARGET=desktop ARCH=armhf ./mk-base-debian.sh Building the rk-debain rootfs with debug: VERSION=debug ARCH=armhf ./mk-rootfs-stretch.sh Creating the ext4 image(linaro-rootfs.img): ./mk-image.sh ------------------------------------------------------------------ ## Usage for 64bit Debian Building a base debian system by ubuntu-build-service from linaro. sudo apt-get install binfmt-support qemu-user-static sudo dpkg -i ubuntu-build-service/packages/* sudo apt-get install -f RELEASE=stretch TARGET=desktop ARCH=arm64 ./mk-base-debian.sh Building the rk-debain rootfs with debug: VERSION=debug ARCH=arm64 ./mk-rootfs-stretch-arm64.sh Creating the ext4 image(linaro-rootfs.img): ./mk-image.sh
完成上述后,会在 rootfs 目录下,生成 linaro-rootfs.img.修改device/rockchip/.BoardConfig.mk中的根文件系统路径即可,参考配置前编译中的“配置 Rootfs ”.
举报