Skip to main content

Ubuntu 系统编译

1 SDK 获取

发送邮件至 [support@neardi.com](mailto:support@neardi.com) 获取相关开发资料

下载完成后,在解压��前先查看 MD5 码和 neardi_bm1684x.tar.gz.md5sum 中是否一致:

$ md5sum neardi_bm1684x.tar.gz
******************************** neardi_bm1684x.tar.gz

解压:

请使用当前 Ubuntu 系统用户直接解压文件,避免在 Windows 系统中解压后再复制到 Ubuntu 系统中。这样做可以确保文件属性和权限的正确性,避免潜在的兼容性问题

tar zxvf neardi_bm1684x.tar.gz

提取:

cd neardi_bm1684x

# 务必执行,否则只有.repo目录,没有源码
.repo/repo/repo sync -l

2 环境准备

主机的环境准备方式

  1. 推荐使用 ubuntu18 版本或者 ubuntu20 版本;可以使用docker虚拟
  2. 编译目录下至少需要40GB的可用空间
  3. 安装如下环境包(注:ubuntu系统版本不同中包名可能有更改)
bsdmainutils wget curl rsync ca-certificates bc bison build-essential byobu cmake cpio debootstrap device-tree-compiler dosfstools dpkg-dev exfat-utils fakeroot flex gcc kmod kpartx language-pack-en language-pack-zh-hans libssl-dev libxml2 libxml2-dev qemu-user qemu-user-static rsync sudo u-boot-tools util-linux uuid uuid-dev
  1. 编译目录环境如下
.
├── bootloader-arm64
│ ├── distro → 文件系统 Overlay
│ ├── docs → 开发文档
│ ├── ramdisk → ramdisk 的 cpio 文件和 u-boot 启动脚本文件
│ ├── scripts → 脚本文件
│ ├── trusted-firmware-a
│ └── u-boot → u-boot 源代码
├── distro
│ └── distro_focal.tgz → Ubuntu 20.04 文件系统底包
├── gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu → 交叉编译工具链
├── install
│ └── soc_bm1684 → 构建输出目录
└── linux-arm64 → kernel 源代码

3 编译 SDK

在编译 SDK 前,需执行 source bootloader-arm64/scripts/envsetup.sh 配置编译基础环境变量

部分编译命令如下:

命令作用备注
build_bsp整体编译生成刷机包位于:install/soc_bm1684
build_bsp_without_package编译fip、uboot、kernel以及一些相关deb包,并且准备好打包刷机包的环境
build_package进行根文件系统编译和打包刷机包生成sdcard目录和tftp目录以及刷机包
build_fip包含BL2 BL31 UBOOT固件包含BL2 BL31 UBOOT固件
build_kernel编译kernel包含kernel、模块、头文件包
build_ramdisk编译ramdisk可以编译emmc启动ramdisk和恢复模式ramdisk
build_bootp制作启动分区
build_debs编译部分deb包
build_rootp编译根文件系统
build_update将之前生成的各个分区压缩包编译为刷机包可以编译tgz升级包、SD卡卡刷包、tftp刷机包
revert_packageinstall/soc_bm1684/bsp-debs 下sdcard卡刷包解包为各个分区压缩包socbak功能中的重打包需要

3.1 整体编译 SDK

进入 SDK 根目录,执行以下命令:

build_bsp

编译结果在 install/soc_bm1684 目录下,重点有如下几个文件(夹):

sdcard → SD 卡刷机包
tftp → tftp 刷机包
emmcboot.itb → kernel 和 ramdisk、dtb 打包在一起
spi_flash.bin → bootloader
rootfs* → 根文件系统内容

3.2 单独编译 kernel

在 SDK 根目录执行以下命令:

build_kernel
build_emmcboot

即可得到新的 emmcboot.itb, 内核编译结果在如下路径:install/soc_bm1684

编译出的 ko 可以在如下路径找到:install/soc_bm1684/rootfs/lib/modules/5.4.217-bm1684-g43484d208342/kernel,默认已经打进刷机包

编译出的 linux-header 安装包在如下路径:install/soc_bm1684/bsp-debs,默认已经打进刷机包,即板卡上的/home/linaro/bsp-debs 目录