sdk版本
SDk: Hi3559AV100R001C02SPC040
linux交叉编译工具:aarch64-himix210-linux.tgz
liteos编译工具: gcc-arm-none-eabi-9-2019-q4.tgz
sdk安装
上述三个参考文档和脚本介绍,均安装在同一个目录下
root@ubuntu:/xxx/00_sdk# tree -L 2
.
├── cross_compile_tool
│ ├── aarch64-himix210-linux
│ └── gcc-arm-none-eabi-9-2019-q4-major
└── Hi3559AV100_SDK_V2.0.4.0
├── interdrv
├── mpp
├── open_source
├── osal
├── osdrv
├── package
├── platform
├── scripts
├── sdk.cleanup
├── sdk.unpack
└── vendor
13 directories, 2 files
root@ubuntu:/sdk/02_sd3403/04_355av100/00_sdk#
sdk编译
修改osdrv下的Makefile的属性,可编辑可保存,同时备份下。
修改 BOOT_MEDIA为emmc,保存后在该目录下执行 make all
静待编译,大概个把小时,看电脑配置
编译出错问题:
/sdk/02_sd3403/04_355av100/00_sdk/Hi3559AV100_SDK_V2.0.4.0/platform/liteos/liteos_user /sdk/02_sd3403/04_355av100/00_sdk/Hi3559AV100_SDK_V2.0.4.0/osdrv
make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
In file included from zconf.tab.c:2122:
confdata.c: In function ‘conf_write’:
confdata.c:326:22: error: ‘.sys_config.’ directive writing 12 bytes into a region of size between 1 and 4096 [-Werror=format-overflow=]
326 | sprintf(newname, "%s.sys_config.%d", dirname, getpid());
| ^~~~~~~~~~~~~~~~~~
In file included from /usr/include/stdio.h:867,
from zconf.tab.c:159:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:36:10: note: ‘__builtin___sprintf_chk’ output between 14 and 4119 bytes into a destination of size 4096
36 | return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 | __bos (__s), __fmt, __va_arg_pack ());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[4]: *** [Makefile:97: zconf.tab.o] Error 1
make[3]: *** [Makefile:53: extra/config/mconf] Error 2
make[2]: *** [Makefile:52: savemenuconfig] Error 2
make[1]: *** [Makefile:59: /sdk/02_sd3403/04_355av100/00_sdk/Hi3559AV100_SDK_V2.0.4.0/platform/liteos/liteos_user/platform/bsp/common/menuconfig.h] Error 2
make: *** [Makefile:480: hiliteos_a53] Error 2
上述问题是在编译liteos时出错的,网上的解决办法是去掉编译选项 -Werror 就可以解决。
找到liteos下的makefile,包含了一个mk文件,在该文件有定义-Werror的选项。去掉即可。
\platform\liteos\liteos_m7\tools\menuconfig\Rules.mk
Select the compiler needed to build binaries for your development system
HOSTCC=gcc
HOSTCFLAGS=-O2 -Wall -Werror
HOSTCXX=g++
HOSTCXXFLAGS=-O2 -Wall -Werror
只遇到上面这个问题,整个osdrv编译通过。
sdk编译问题
1 发现每次编译很多模块都clean和distclean,整个又重新来了一遍,消耗大量时间。若想某个模块不被重新编译或者想menuconfig后不被覆盖,可以进入该模块的顶层,里面有个Makefile文件,在这里面修改编译流程就可以。
2 编译生成的ext4文件系统为96M,在Makefile修改成8G,生成的ext4镜像也是8GB大小的,要是烧写的话非常耗时间,不方便。看生成脚本未指定大小,只是在dd的时候有指定,是不是在系统的时候指定下大小就行,这个只是猜想,需后续验证下是否可行。