跳到主要内容

源码编译

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