源码编译

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 交叉编译器:
1. 文档工具包,拷贝出` aarch64-himix100-linux.tgz`
2. 解压` tar -xvf aarch64-himix100-linux.tgz`
3. 安装交叉编译工具` sudo ./aarch64-himix100-linux.install`

安装 arm-none-eabi 交叉编译器:
1. 文档工具包,拷贝出` gcc-arm-none-eabi-4_9-2015q3.tgz
2. 解压` tar -xvf gcc-arm-none-eabi-4_9-2015q3.tgz`
3. 安装交叉编译工具` sudo ./gcc-arm-none-eabi-4_9-2015q3.install`

PS:

官方使用Ubuntu 18.04安装编译验证成功。如选择其他 Linux 操作系统推荐使用较新版本。

SDK 编译

下面所有步骤如没有特殊说明都是在 SDK 的根目录下进行

非异构

  1. ./build.sh prepare Firefly3559A4G-multi-core_defconfig 配置 SDK 配置

  2. ./build.sh osdrv 编译海思原始 SDK

  3. ./build.sh mpp_sample 编译 mpp sample

  4. ./build.sh mali_ko 编译 Mali

  5. 进入 Hi3559AV100_SDK/drv/interdrv make 编译外设驱动

  6. ./build.sh rootfs hi3559a_smp_defconfig 配置 Buildroot 配置

  7. ./build.sh rootfs 编译 Buildroot SDK

  8. ./build.sh sd 生成 SD 卡固件

  9. output/Firefly-3559A4G_linux/images/sd 固件

异构

  1. ./build.sh prepare Firefly3559A4G-big-little_defconfig 配置 SDK 配置

  2. ./build.sh osdrv 编译海思原始 SDK

  3. ./build.sh mpp_sample 编译 mpp sample

  4. ./build.sh mali_ko 编译 Mali

  5. cd Hi3559AV100_SDK/drv/interdrv; make;cd - 编译外设驱动

  6. ./build.sh liteos_a53 编译 liteos sample

  7. ./build.sh rootfs hi3559a_smp_defconfig 配置 Buildroot 配置

  8. ./build.sh rootfs 编译 Buildroot SDK

  9. ./build.sh sd 生成 SD 卡固件

  10. output/Firefly-3559A4G_linux/images/sd 固件

PS:

  1. 格式化 SD 卡后,sd 目录下所有文件拷贝到 SD 卡中,SD 升级卡制作完成。

  2. 编译重构某个模块可以使用 rebuild 来完成,如:

    1. 编译 kernel: ./build.sh kernel-hisilicon-rebuild;./build.sh hiatf-rebuild

    2. 编译 u-boot: ./build.sh u-boot-rebuild

  3. 关于 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); \
	)
endef

define 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"
    endmenu

    source "$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