深圳市新创云智能科技有限公司
致力于rockchip主流平台的软硬件解决方案
最快联系方式:
QQ-7643066
TEL-13632965530(微信同号)
本 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 libusb-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
Firefly_Linux_SDK 源码包比较大,可以通过如下方式获取 Firefly_Linux_SDK源码包:下载链接
下载完成后先验证一下 MD5 码:
$ md5sum firefly-sdk-20200629.7z d8c52272725ff8a2216fc2be7a92ffc4 firefly-sdk-20200629.7z
确认无误后,就可以解压:
mkdir -p ~/proj/cd ~/proj/7z x /path/to/firefly-sdk-20200629.7z -r -o./cd firefly-sdkgit reset --hard
注意: 解压后务必先更新下 SDK。
SDK 更新包括如下两部分:
更新 rk3328-linux-bundle
#1. 进入 SDK 根目录cd ~/proj/firefly-sdk#2. 下载远程 bundle 仓库git clone https://github.com/FireflyTeam/bundle.git -b rk3328-linux-bundle#3. 更新;后续更新不需要再次拉取远程仓库,直接执行以下命令即可./bundle/update rk3328-linux-bundle#4. 按照提示已经更新内容到 FETCH_HEAD,同步 FETCH_HEAD 到 firefly 分支git rebase FETCH_HEAD
更新 common-linux-bundle
下载链接(提取码:tkj8)
#1. 下载并将 common-linux-bundle 放至 SDK 根目录cd ~/proj/firefly-sdk mv common-linux-bundle/ .common-linux-bundle/#2. 更新;后续更新可以查看 `Change_log.txt`chmod 755 .common-linux-bundle/update && .common-linux-bundle/update git rebase FETCH_HEAD
$ tree -L 1 . ├── app ├── buildroot ├── build.sh -> device/rockchip/common/build.sh ├── bundle ├── debian ├── 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 ├── tools ├── u-boot └── yocto
在device/rockchip/rk3328/
目录下,选择对应的板型的配置文件
本文以编译Ubuntu
固件为例子:使用aio-rk3328-jd4-ubuntu.mk
配置文件
注意: 编译Buildroot
固件使用aio-rk3328-jd4-buildroot.mk
配置文件
配置文件使用source
命令包含其它文件的方式,一些配置选项在其包含的文件中。
相关配置介绍:
# 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-rk3328_defconfig kernel配置文件 # Kernel dts export RK_KERNEL_DTS=rk3328-firefly-aiojd4 dts文件 # parameter for GPT table export RK_PARAMETER=parameter-ubuntu.txt 分区表(关键) # rootfs image path export RK_ROOTFS_IMG=ubuntu_rootfs/rk3328_ubuntu_rootfs.img 根文件系统路径
重点:
如果编译Buildroot
固件,跳过此步,如果编译的是Ubuntu
固件,需要通过以下步骤来配置:
以Ubuntu18.04为例
1、 下载根文件系统:ubuntu18.04 根文件系统,放到SDK路径下。
2、 该文件为7z压缩包,解压该文件。
7z x rk3328-ubuntu1804-arm64-rootfs.7z
3、 完成上述后,得到rk3328-ubuntu1804-arm64-rootfs.img,拷贝根文件系统到ubuntu_rootfs目录下。
mkdir ubuntu_rootfscp rk3328-ubuntu1804-arm64-rootfs.img ubuntu_rootfs/
4、 在 device/rockchip/rk3328/firefly-rk3328-ubuntu.mk
中,将“# rootfs image path”修改为以下的配置选项或者在 device/rockchip/rk3328/aio-rk3328-jd4-ubuntu.mk
中添加该配置选项。
export RK_ROOTFS_IMG=ubuntu_rootfs/rk3328-ubuntu1804-arm64-rootfs.img
./build.sh aio-rk3328-jd4-ubuntu.mk
运行完上述脚本后,在 device/rockchip/
目录下,生成.BoardConfig.mk 软链接 device/rockchip/rk3328/aio-rk3328-jd4-ubuntu.mk
.
./build.sh
注意:若用户需要用的根文件系统是Debian
或者Ubuntu
时,请!先!将!对应的根文件系统准备好,不然在执行该build.sh脚本时,会在整理分区镜像、打包固件时出错,这部分操作在以下的“部分编译”中“编译rootfs”有详细说明,按照操作执行即可!
build.sh脚本运行完成后,会将分区镜像和统一固件放在rockdev/
目录下,同时创建IMAGE/目录备份。
./build.sh uboot
./build.sh kernel
本SDK支持三种根文件系统,分别是Buildroot、Debian、Ubuntu;
Buildroot
编译 Buildroot
文件系统前请在编译前配置中选择aio-rk3328-jd4-buildroot.mk
为配置文件。
编译 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 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 expect
搭建环境完成后,编译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 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
搭建环境完成后,编译Debian,按照自身需求,执行如下命令:
cd rootfs/## Usage for 32bit DebianBuilding 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.shBuilding the rk-debain rootfs with debug: VERSION=debug ARCH=armhf ./mk-rootfs-stretch.shCreating the ext4 image(linaro-rootfs.img): ./mk-image.sh------------------------------------------------------------------## Usage for 64bit DebianBuilding 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.shBuilding the rk-debain rootfs with debug: VERSION=debug ARCH=arm64 ./mk-rootfs-stretch-arm64.shCreating the ext4 image(linaro-rootfs.img): ./mk-image.sh
完成上述后,会在rootfs目录下,生成linaro-rootfs.img.修改device/rockchip/.BoardConfig.mk中的根文件系统路径即可,参考配置前编译中的“配置Rootfs”.
Ubuntu
以Ubuntu18.04为例
1、 下载根文件系统:ubuntu18.04 根文件系统,放到SDK路径下。
2、 该文件为7z压缩包,解压该文件。
7z x rk3328-ubuntu1804-arm64-rootfs.7z
3、 完成上述后,得到rk3328_ubuntu_18.04.img,拷贝根文件系统到rootfs目录下。
mkdir ubuntu_rootfscp rk3328-ubuntu1804-arm64-rootfs.img ubuntu_rootfs/
./build.sh recovery
Usage: build.sh [OPTIONS]Available options:*.mk -switch to specified board configuboot -build ubootspl -build splkernel -build kernelmodules -build kernel modulestoolchain -build toolchainextboot -build extlinux boot.img, boot from EFI partitionrootfs -build default rootfs, currently build buildroot as defaultbuildroot -build buildroot rootfsramboot -build ramboot imagemulti-npu_boot -build boot image for multi-npu boardyocto -build yocto rootfsdebian -build debian9 stretch rootfsdistro -build debian10 buster rootfspcba -build pcbarecovery -build recoveryall -build uboot, kernel, rootfs, recovery imagecleanall -clean uboot, kernel, rootfs, recoveryfirmware -pack all the image we need to boot up systemsdupdateimg -pack sdupdate imageupdateimg [-p] -pack update image; [-p] compresssdbootimg [-p] -pack sdboot image; [-p] compressotapackage -pack ab update otapackage imagesave -save images, patches, commands used to debugallsave -build all & firmware & updateimg & saveDefault option is 'allsave'.
parameter.txt文件中包含了固件的重要信息,如以rk3288为例: 路径:device/rockchip/rk3328/parameter-ubuntu.txt
FIRMWARE_VER: 8.1MACHINE_MODEL: RK3328MACHINE_ID: 007MANUFACTURER: RK3328MAGIC: 0x5041524BATAG: 0x00200800MACHINE: 3328CHECK_MASK: 0x80PWR_HLD: 0,0,A,0,1TYPE: GPTCMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00010000@0x0000a000(boot),0x00010000@0x0001a000(recovery),0x00010000@0x0002a000(backup),0x00600000@0x0005a000(rootfs),-@0x0065a000(userdata:grow)uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
CMDLINE属性是我们关注的地方,以uboot为例 0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置0x00002000为分区的大小,后面相同,用户可以根据自己需要增减或者修改分区信息,但是请最少保留uboot,trust,boot,rootfs分区,这是机器能正常启动的前提条件。
分区介绍:
uboot 分区: uboot编译出来的 uboot.img. trust 分区: uboot编译出来的 trust.img misc 分区: misc.img开机检测进入recovery模式. boot 分区: 编译出来的 boot.img包含kernel和设备树信息. recovery 分区: 烧写 recovery.img. backup 分区: 预留,暂时没有用。后续跟 android 一样作为 recovery 的 backup 使用. oem 分区: 给厂家使用,存放厂家的 app 或数据,只读,代替原来音箱的 data 分区,挂载在/oem 目录.(可省略) rootfs 分区: 存放 buildroot 或者 debian 编出来的rootfs.img只读. userdata 分区: 存放app临时生成的文件或者是给最终用户使用。可读写,挂载在/userdata目录下.(可省略)
注意:若发现根文件分区大小异常时,执行如下命令:
resize2fs /dev/mmcblk2p5
package-file文件用于打包统一固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。 路径tools/linux/Linux_Pack_Firmware/rockdev/目录下,以package-file为例:
# NAME Relative path##HWDEF HWDEFpackage-file package-filebootloader Image/MiniLoaderAll.binparameter Image/parameter.txttrust Image/trust.imguboot Image/uboot.imgboot Image/boot.imgmisc Image/misc.imgrecovery Image/recovery.imgrootfs Image/rootfs.imguserdata:grow RESERVEDbackup RESERVED
整理分区镜像到rockdev/目录下
./mkfirmware.sh
每次打包固件前先确保 rockdev/ 目录下文件链接是否正确:
$ tree -L 1 rockdev/ rockdev/ ├── boot.img -> ../kernel/boot.img ├── MiniLoaderAll.bin -> ../u-boot/rk3328_loader_v1.16.250.bin ├── misc.img -> ../device/rockchip/rockimg/wipe_all-misc.img ├── oem.img ├── pack ├── parameter.txt -> ../device/rockchip/rk3328/parameter-buildroot.txt ├── recovery.img -> ../buildroot/output/rockchip_rk3328_recovery/images/recovery.img ├── rootfs.ext4 -> ../buildroot/output/rockchip_rk3328/images/rootfs.ext2 ├── rootfs.img -> ../buildroot/output/rockchip_rk3328/images/rootfs.ext2 ├── trust.img -> ../u-boot/trust.img ├── uboot.img -> ../u-boot/uboot.img └── userdata.img
整合统一固件
./build.sh updateimg
输入该命令后将会提醒是否需要重命名,输入y
可以将固件重新命名,输入n
使用默认的固件名字,在rockdev/pack
目录下生成该固件。
注意:每次打包固件前,需要运行mkfirmware.sh脚本更新rockdev/下的分区镜像。
Windows:AndroidTool_v2.58
Linux:Upgrade_tool_1.34
下载 AndroidTool2.58后,解压,运行里面的 AndroidTool.exe(注意,如果是 Windows 7/8,需要按鼠标右键,选择以管 理员身份运行),如下图:
前提:设备烧写固件或分区镜像时,需处于Loader模式或Maskrom模式,参考设备模式
烧写统一固件 update.img 的步骤如下:
切换至”升级固件”页。
按”固件”按钮,打开要升级的固件文件。升级工具会显示详细的固件信息
按”升级”按钮开始升级。
如果升级失败,可以尝试先按”擦除Flash”按钮来擦除 Flash,然后再升级。
注意:如果你烧写的固件loader版本与原来的机器的不一致,请在升级固件前先执行”擦除Flash”。
烧写分区映像时,请使用对应SDK下的FFTools/AndroidTool.rar烧写。步骤如下:
切换至”下载镜像”页。
勾选需要烧录的分区,可以多选。
确保映像文件的路径正确,需要的话,点路径右边的空白表格单元格来重新选择。
点击”执行”按钮开始升级,升级结束后设备会自动重启。
下载Upgrade_tool1.34.zip后,解压,将upgrade_tool拷贝到/usr/local/bin/目录下,操作如下:
unzip Linux_Upgrade_Tool_v1.34.zipcd Linux_Upgrade_Toolsudo mv upgrade_tool /usr/local/binsudo chown root:root /usr/local/bin/upgrade_tool
使用upgrade_tool工具烧写:
sudo upgrade_tool uf update.img
使用SDK脚本烧写:
./rkflash.sh firmware
使用upgrade_tool工具烧写:
sudo upgrade_tool ul $LOADER sudo upgrade_tool di -p $PARAMETER sudo upgrade_tool di -uboot $UBOOT sudo upgrade_tool di -trust $TRUST sudo upgrade_tool di -misc $MISC sudo upgrade_tool di -b $BOOT sudo upgrade_tool di -recovery $RECOVERY sudo upgrade_tool di -rootfs $ROOTFS
使用脚本烧写:
#全自动烧写./rkflash.sh#分区镜像烧写./rkflash.sh loader./rkflash.sh parameter./rkflash.sh uboot./rkflash.sh trust./rkflash.sh misc./rkflash.sh boot./rkflash.sh recovery./rkflash.sh rootfs
说明:rkflash.sh该脚本文件的原理便是使用upgrade_tool工具烧写
深圳市新创云智能科技有限公司
致力于rockchip主流平台的软硬件解决方案
最快联系方式:
QQ-7643066
TEL-13632965530(微信同号)