用户工具

站点工具


jaysnote:hi3798cv200_android_compile

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

jaysnote:hi3798cv200_android_compile [2018/12/07 17:51]
jaylee 创建
jaysnote:hi3798cv200_android_compile [2021/06/22 23:14]
行 1: 行 1:
-# hi3798cv200 android compile  
- 
-* [sdk 百度云下载 密码:w11f](https://pan.baidu.com/s/1kcMvlGeNHi-aMNGyZPTVqA )   
- 
-* 开发环境搭建和初次编译参考`Android 解决方案 开发指南.pdf`- >`开发环境配置` 
- 
-* 烧写工具`HiTool-STB-3.1.35.zip` 会在成功编译镜像后自动拷贝到out文件夹。 
- 
-    ```bash 
-    $ sudo find / -name HiTool-STB* 
-    /home/jay/hi3798cv200/HiSTBAndroidV600R002C00SPC030/out/target/product/Hi3798CV200/HiTool-STB-3.1.35.zip 
-    ``` 
- 
-> **提示**:部分windows应用工具直接打包到了sdk,压缩成tar包。所以对于部分工具需要尝试在解压后linuxsdk 目录搜索。 
- 
-## sdk 目录结构 
- 
-```bash 
-$tree 
-├── abi 
-├── art 
-├── bionic 
-├── bootable 
-├── build 
-├── cts 
-├── dalvik 
-├── developers 
-├── development 
-├── device 
-├── docs 
-├── external 
-├── frameworks 
-├── hardware 
-├── install_notes_cn.txt                #开发文档 
-├── install_notes_en.txt 
-├── libcore 
-├── libnativehelper 
-├── Makefile 
-├── ndk 
-├── out 
-├── packages 
-├── pdk 
-├── prebuilts                           #部分依赖的工具,需要提前编译 
-├── sdk 
-├── system 
-└── toolss 
-``` 
- 
-## 初始化环境 
- 
-参考`ServerInstall.sh`进行初始化环境,主要是包含java 、python、依赖库、gcc安装,然而很多依赖版本过低,所以必须要添加 ubuntu12.04或者14.04源安装。 
- 
-当前 ubuntu 源已经放弃部分老版本的更新维护,所以没有办法直接降级到文章中的 bardy 08.04 源直接安装,对于java7的安装需要更改source源到到当前维护的最低版本precise、trusty等,即: 
- 
-```c 
-The following releases are also available which have been superseded by later point releases (the current point release is available on releases.ubuntu.com as usual): 
- 
-Ubuntu 12.04.4 LTS (Precise Pangolin) 
-Ubuntu 14.04.4 LTS (Trusty Tahr) 
-Ubuntu 16.04.4 LTS (Xenial Xerus) 
-Ubuntu 18.04 LTS (Bionic Beaver) 
-``` 
- 
-> **参考**:[Old Ubuntu Releases](http://old-releases.ubuntu.com/releases/) 
- 
-### java  
- 
-```bash 
-$sudo apt-get install openjdk-7-jre 
-``` 
- 
-> **警告**:不要尝试使用java8 否则后面会直接提示错误,参考[Troubleshotings/required java version is: "1.7.x"](#Troubleshotings/required java version is: "1.7.x") 
- 
-设置环境变量 
- 
-```bash 
-#~/.bashrc 
-export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64" 
-export PATH="/usr/lib/jvm/java-7-openjdk-amd64/bin":$PATH 
-``` 
- 
-### gcc 
- 
-交叉编译环境通过`arm-hisiv200-linux.tar.bz2`安装,解压后参考内根目录的安装脚本,主要包含建立软连接和配置环境变量。 
- 
-```bash 
-#cross.install 
-TOP_DIR=/home/jay/hi3798cv200/env_init 
-TOOL_DIR=$TOP_DIR/arm-hisiv200-linux 
-TAR_BIN_DIR=$TOOL_DIR/target/bin 
-BIN_FILES=$TOOL_DIR/bin/arm-hisiv200-linux-gnueabi-* 
-LN_FILE_NAME=arm-hisiv200-linux- 
-TOOLS_PKG="`dirname $0`/arm-hisiv200-linux.tar.bz2" 
- 
-mkdir -p $TAR_BIN_DIR 
-for armlinux in $BIN_FILES 
-do 
-        echo "ln $armlinux $TAR_BIN_DIR/$LN_FILE_NAME`basename $armlinux | cut -b 28-` -sv" 
-        ln $armlinux $TAR_BIN_DIR/$LN_FILE_NAME`basename $armlinux | cut -b 28-` -sv 
-done 
-``` 
- 
-配置环境变量 
- 
-```bash 
-export PATH=/home/jay/hi3798cv200/env_init/arm-hisiv200-linux/target/bin":$PATH 
-``` 
- 
-## 烧写固件 
- 
-* `HiBurn 工具使用指南.pdf` 
- 
-### sch 
- 
-uboot 烧写原理:HiBurn工具在开始烧写后,首选与bootrom 进行交互,工具DDR参数传送到传到bootrom,为uboot 下载阶段 5%处,然后初始化 DDR,再把uboot 传 输到DDR中,uboot 下载阶段 100%处表示传输完毕,再从 DDR启动uboot,uboot 启 动完成后,工具开始与uboot 进行交互,发送烧写命令,将 DDR中的uboot 烧 到 Flash对应地址中。  
-其他镜像分区烧写原理:其他镜像分区,如kernel ,rootfs 等分区,工具默认采用网口 传输的方式,客户可选  烧和非裸烧两种方式进行烧写,裸烧即为在按分区烧写或 按Emmc 烧写中勾选uboot 进行烧写,此时 uboot 会被烧写到Flash中,非裸烧即为不 勾选uboot,仅勾选其他分区进行烧写,此时需要保证当前单板上已经存在 uboot,烧 写时工具会启动uboot,与其交互,通过向 uboot 发送TFTP命令与Write命令,完成 烧写。 
- 
-### do 
- 
-常规操作,通过串口烧写fastboot,通过tftp烧写其他分区镜像。对于目标烧写设备的静态ip地址信息需要手动指定后通过串口烧写。 
- 
-![网络配置](images/network_settings.png) 
- 
-成功烧写fastboot过后可以通过串口连接打印环境变量printenv确定静态ip已经正确配置,通过ping 确定已经在同一网络。 
- 
-## Troubleshootings 
- 
-### apt update failed 
- 
-```bash 
-jay@mxj-build:~/hi3798cv200/env_init$ sudo ./ServerInstall.sh  
-E: Unable to locate package mingw32 
-E: Package 'uboot-mkimage' has no installation candidate 
-E: Package 'ia32-libs' has no installation candidate 
-E: Package 'gcc-4.4' has no installation candidate 
-E: Package 'g++-4.4' has no installation candidate 
-E: Unable to locate package g++-4.4-multilib 
-E: Couldn't find any package by glob 'g++-4.4-multilib' 
-E: Couldn't find any package by regex 'g++-4.4-multilib' 
-E: Unable to locate package gcc-4.4-multilib 
-E: Couldn't find any package by glob 'gcc-4.4-multilib' 
-E: Couldn't find any package by regex 'gcc-4.4-multilib' 
-Please re-login system to make new settings take effect 
-``` 
- 
-直接通过apt-get 安装如下依赖库和软件包提示找不到源,尝试添加老版本发布源,也不能正常下载,剔除不能正常安装的源,其他的参考[env/gcc](#env/gcc) 安装。 
- 
-```bash 
-$sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev x11proto-core-dev  libx11-dev libreadline6-dev libgl1-mesa-glx libgl1-mesa-dev g++-multilib mingw32 tofrodos  python-markdown libxml2-utils xsltproc zlib1g-dev xsltproc   gettext  lib32ncurses5-dev libtool autoconf 
- 
-$sudo apt-get install uboot-mkimage ia32-libs gcc-4.4 g++-4.4 g++-4.4-multilib gcc-4.4-multilib 
-``` 
- 
- ```bash 
-$sudo apt-get install u-boot-tools 
- ``` 
- 
-### gcc not found 
- 
-参考[env/gcc](#env/gcc) 安装并且确定已经正确配置环境变量。 
- 
-### required java version is: "1.7.x" 
- 
-```bash 
-Your version is: openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-0ubuntu0.16.04.1-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode). 
-The required version is: "1.7.x" 
-  
-Please follow the machine setup instructions at 
-``` 
- 
-参考[init env/java](#init env/java) 安装openjdk-7-jre,同时不支持java1.8.0以上版本, 
- 
-### policy_scan.cpp' failed 
- 
-``` 
-ost C: libpcre_32 <= external/pcre/dist/pcre_globals.c 
-build/core/binary.mk:576: recipe for target 'out/host/linux-x86/obj32/EXECUTABLES/checkpolicy_intermediates/policy_scan.cpp' failed 
-``` 
- 
-https://www.jianshu.com/p/df547248650d 
- 
-`checkpolicy`用于检测SELinux策略(SELinux policy)的工具,源码位于sdk `external/checkpolicy/`,里面`*.l`和`.y`源文件需要通过`flex`和`bision`解释器翻译为`*.c`源码再通过gcc编译。 
- 
-```bash 
-$tree external/checkpolicy/ 
-external/checkpolicy/ 
-├── Android.mk 
-├── ChangeLog 
-├── checkmodule.8 
-├── checkmodule.c 
-├── checkpolicy.8 
-├── checkpolicy.c 
-├── checkpolicy.h 
-├── COPYING 
-├── Makefile 
-├── module_compiler.c 
-├── module_compiler.h 
-├── parse_util.c 
-├── parse_util.h 
-├── policy_define.c 
-├── policy_define.h 
-├── policy_parse.y 
-├── policy_scan.l 
-├── queue.c 
-├── queue.h 
-├── test 
-│   ├── dismod.c 
-│   ├── dispol.c 
-│   └── Makefile 
-└── VERSION 
-``` 
- 
-对于sdk的已经原装了bison和flex。这里之所以报错是因为版本flex版本过低。 
- 
-```bash 
-./prebuilts/misc/linux-x86/ 
-├── analyzer 
-├── bison 
-├── ccache 
-├── flex 
-├── protobuf 
-└── yasm 
-``` 
- 
-这里直接安装 flex和bison,然后软链接到sdk目录。 
- 
-``` 
-$sudo apt-get install flex bison 
-``` 
- 
-```bash 
-$~/hi3798cv200/HiSTBAndroidV600R002C00SPC030/prebuilts/misc/linux-x86/flex$ ls -al 
-total 3328 
-lrwxrwxrwx 1 jay jay      13 Dec  6 13:55 flex-2.5.39 -> /usr/bin/flex 
--rwxr-xr-x 1 jay jay 1473304 Apr  1  2016 flex-2.5.39.bak 
-``` 
- 
- 
- 
-### serve_image.c compiled failed 
- 
-```bash 
-serve_image.c: In function ‘main’: 
-serve_image.c:32:18: error: storage size of ‘hints’ isn’t known 
-serve_image.c:94:19: error: ‘AI_ADDRCONFIG’ undeclared (first use in this function) 
-serve_image.c:94:19: note: each undeclared identifier is reported only once for each function it appears in 
-serve_image.c:99:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat] 
-``` 
- 
- 
- 
-```bash 
-$find ./ -name "mtd-utils-1.5.0*" 
-./device/hisilicon/bigfish/sdk/third_party/open_source/mtd-utils-1.5.0.tar.bz2 
-./out/target/product/Hi3798CV200/obj/TOOLS_OBJ/mtd-utils/tmp/mtd-utils-1.5.0 
-``` 
- 
-如上目录保存了`mtd-utils-1.5.0.tar.bz2` 会在编译过程解压编译,直接在ubuntu16.04 上面编译会因为兼容导致报错,软件包通过如下Makefile 配置。所以这里可以修改配置和替换包的方式直接更新为`mtd-utils-2.0.0` 
- 
-```bash 
-$ rgrep  "mtd-utils-1.5.0" -n --color -I -C2 ./ 
-./device/hisilicon/bigfish/sdk/tools/linux/utils/mtd-utils/Makefile-14-STRIP          := strip 
-./device/hisilicon/bigfish/sdk/tools/linux/utils/mtd-utils/Makefile:16:MTD_UTILS      := mtd-utils-1.5.0 
-``` 
- 
-需要注意的是,默认`mtd-utils-2.0.0`通过cmake编译,需要cmake configure,这里直接选择修改`/usr/include/netdb.h`在includde头文件之后定义宏,使其失效。 
- 
-```bash 
-$vi /usr/include/netdb.h 
- 
-#define __USE_XOPEN2K  0 
-``` 
- 
-> **注意**:定义__USE_XOPEN2K 值为0是使其之后所有的条件编译失效,所以要尽量选择在#include头文件之后,变值被覆盖。 
- 
-### unsupported reloc 43  
- 
-```c 
-out/host/linux-x86/obj32/EXECUTABLES/third_party_libvpx_libvpx_obj_int_extract_arm_host_gyp_intermediates/third_party/libvpx/source/libvpx/build/make/obj_int_extract.o: unsupported reloc 43 against global symbol stderr 
-prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6//x86_64-linux/bin/ld: error: out/host/linux-x86/obj32/EXECUTABLES/third_party_libvpx_libvpx_obj_int_extract_arm_host_gyp_intermediates/third_party/libvpx/source/libvpx/build/make/obj_int_extract.o: unsupported reloc 43  
-``` 
- 
-`ld`版本过低。https://www.cnblogs.com/blowing-in-the-wind/p/6518076.html 
- 
-```bash 
-$cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld 
-``` 
  
jaysnote/hi3798cv200_android_compile.txt · 最后更改: 2021/06/22 23:14 (外部编辑)