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 环境准备
主机的环境准备方式
- 推荐使用 ubuntu18 版本或者 ubuntu20 版本;可以使用docker虚拟
- 编译目录下至少需要40GB的可用空间
- 安装如下环境包(注: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
- 编译目录环境如下
.
├── 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_package | 将 install/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 目录