源码编译
Firefly 提供完整的 SDK 方便用户开发。
下载源码
源码获取请联系我们
搭建环境
-
配置默认使用 bash
sudo dpkg-reconfigure dash #选择no
-
安装软件包
sudo apt-get install make libc6:i386 lib32z1 lib32stdc++6 zlib1g-dev libncurses5-dev
ncurses-term libncursesw5-dev g++ u-boot-tools:i386 texinfo texlive gawk libssl-dev openssl \ bc -
创建/etc/ld.so.preload 文件
echo "" > /etc/ld.so.preload #解决 64bit linux server 上某些第三方库编译失败的问题。
-
安装交叉编译器
安装 aarch64 交叉编译器:
- 文档工具包,拷贝出
aarch64-himix100-linux.tgz - 解压
tar -xvf aarch64-himix100-linux.tgz - 安装交叉编译工具
sudo ./aarch64-himix100-linux.install
安装 arm-none-eabi 交叉编译器:
- 文档工具包,拷贝出` gcc-arm-none-eabi-4_9-2015q3.tgz
- 解压
tar -xvf gcc-arm-none-eabi-4_9-2015q3.tgz - 安装交叉编译工具
sudo ./gcc-arm-none-eabi-4_9-2015q3.install
- 文档工具包,拷贝出
PS:
官方使用Ubuntu 18.04安装编译验证成功。如选择其他 Linux 操作系统推荐使用较新版本。
SDK 编译
下面所有步骤如没有特殊说明都是在 SDK 的根目录下进行
非异构
-
./build.sh prepare Firefly3559A4G-multi-core_defconfig 配置 SDK 配置
-
./build.sh osdrv 编译海思原始 SDK
-
./build.sh mpp_sample 编译 mpp sample
-
./build.sh mali_ko 编译 Mali
-
进入 Hi3559AV100_SDK/drv/interdrv make 编译外设驱动
-
./build.sh rootfs hi3559a_smp_defconfig 配置 Buildroot 配置
-
./build.sh rootfs 编译 Buildroot SDK
-
./build.sh sd 生成 SD 卡固件
-
output/Firefly-3559A4G_linux/images/sd 固件
异构
-
./build.sh prepare Firefly3559A4G-big-little_defconfig 配置 SDK 配置
-
./build.sh osdrv 编译海思原始 SDK
-
./build.sh mpp_sample 编译 mpp sample
-
./build.sh mali_ko 编译 Mali
-
cd Hi3559AV100_SDK/drv/interdrv; make;cd - 编译外设驱动
-
./build.sh liteos_a53 编译 liteos sample
-
./build.sh rootfs hi3559a_smp_defconfig 配置 Buildroot 配置
-
./build.sh rootfs 编译 Buildroot SDK
-
./build.sh sd 生成 SD 卡固件
-
output/Firefly-3559A4G_linux/images/sd 固件
PS:
-
格式化 SD 卡后,sd 目录下所有文件拷贝到 SD 卡中,SD 升级卡制作完成。
-
编译重构某个模块可以使用 rebuild 来完成,如:
-
编译 kernel:
./build.sh kernel-hisilicon-rebuild;./build.sh hiatf-rebuild -
编译 u-boot:
./build.sh u-boot-rebuild
-
-
关于 Hi3559av100 平台的所有 Buildroot Package 都放在了
buildroot-external/package/中
添加应用
以 settings-qt QT 应用为例。
-
开发好自己的 QT 应用并且把项目工程复制到 sdk/app 中
cp settings ./app/ -rf //settings 为自己开发的 QT 应用
-
创建 Package 文件夹
cd sdk/buildroot-external/package mkdir settings-qt
-
在文件夹内添加 Config.in
vim Config.in
config BR2_PACKAGE_SETTINGS_QT //必须和文件夹名字一致 bool "Settings Examples" help Settings examples in Qt 5.
-
在文件夹内添加 settings_app.mk
vim settings_app.mk
SETTINGS_QT_VERSION = 1.0 //所有 SETTINGS_QT 都需要与文件夹名匹配 SETTINGS_QT_DEPENDENCIES = qt5base HiMPP SETTINGS_QT_VERSION = master SETTINGS_QT_SITE_METHOD = local SETTINGS_QT_SITE = ../app/settings
define SETTINGS_QT_CONFIGURE_CMDS (cd $(@D);
$(QT5_QMAKE);
) endefdefine SETTINGS_QT_BUILD_CMDS $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) endef
define SETTINGS_QT_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0755 $(@D)/settings $(TARGET_DIR)/usr/bin/settings //编译后生成的可执行文件 $(INSTALL) -D -m 0755 $(@D)/setting.desktop $(TARGET_DIR)/usr/share/applications //桌面应用配置文件 $(INSTALL) -D -m 0755 $(@D)/image/setting/setting_icon.png $(TARGET_DIR)/usr/share/icons/setting_icon.png //桌面图标 endef
$(eval $(generic-package))
-
修改顶层 Config.ini
cd buildroot-external vim Config.in
silicon Hi3559AV100"
menu "Host tools"source "$BR2_EXTERNAL_HI3559A_PATH/package/hiprepare/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/ext4_utils/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/hiregbin/Config.in"endmenusource "$BR2_EXTERNAL_HI3559A_PATH/package/HiMPP/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/mali/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/mali_eglfs/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/examples-qt5/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/amp-examples/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/hisyslink/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/kernel-hisilicon/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/hiatf/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/u-boot/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/hiipcm/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/liteos-loader/Config.in"source "$BR2_EXTERNAL_HI3559A_PATH/package/firefly-app/Config.in"- source "$BR2_EXTERNAL_HI3559A_PATH/package/settings-qt/Config.in" source "$BR2_EXTERNAL_HI3559A_PATH/package/multivideoplayer/Config.in" source "$BR2_EXTERNAL_HI3559A_PATH/package/svpsample/Config.in" endmenu
-
添加编译项
cd output/Firefly_XXXXX make menuconfig 输入 ‘/’ 搜索 SETTINGS_QT_BUILD_CMDS 打开 SETTINGS_QT_BUILD_CMDS make savedefconfig
-
重新编译 rootfs