从放弃到入门[二]:海思Hi3516EV200SDK初体验
11840 打赏
codinglab 2020-09-07 14:43:14

从放弃到入门[二] 海思Hi3516EV200 SDK初体验

1.编译环境:Ubuntu20.04

2.编译链:arm-himix100-linux

3.环境依赖:

sudo apt-get install make libc6:i386 lib32z1 lib32stdc++6 zlib1g-dev libncurses5-dev ncurses-term libncursesw5-dev g++ texinfo texlive gawk libssl-dev openssl bc u-boot-tools libuuid1:i386 gperf bison zlib1g-dev liblzo2-dev uuid-dev pkg-config

4.SDK版本:

Hi3516EV200R001C01SPC011

5.编译准备:

先执行脚本:sdk.unpack 给SDK解包

由于开源工具的整改,SDK对于部分开源工具不在提供源码包,所以我们需要自行下载处理。需要处理的源码包在SDK包的osdrv下面的readme都有说明。为了偷懒,写了一个简单的补丁脚本来处理这些。

这里有些和osdrv下readme有差异的地方会在后面说明原由。

6.编译:

在osdrv下进行整包编译:

make OSDRV_CROSS=arm-himix100-linux CHIP=hi3516ev200 all

在ubuntu14.04中可以直接编译过,但是在18.04和20.04中可能会遇到以下错误。

错误一:

fseeko.c: In function 'rpl_fseeko':`

`fseeko.c:110:4: error: #error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib."`

 `110 |  #error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib."`

   `|  ^~~~~`

 `CC    printf-args.o`

 `CC    printf.o`

`make[5]: *** [Makefile:1696: fseeko.o] Error 1`

`make[5]: *** Waiting for unfinished jobs....`

 `CC    printf-parse.o`

`fseterr.c: In function 'fseterr':`

`fseterr.c:78:3: error: #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib."`

  `78 | #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib."`

   `|  ^~~~~

解决方法:

修改:osdrv/tools/pc/hi_gzip/Makefile:

pushd gzip-1.8;patch -p1 < ../hi_gzip.patch;./configure;make -j12;popd

改为:

pushd gzip-1.8;patch -p1 < ../hi_gzip.patch;sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c;echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h;./configure;make -j12;popd

错误二:

mksquashfs.c: In function ‘create_inode’:`

`mksquashfs.c:987:24: error: called object ‘major’ is not a function or function pointer`

 `987 |  unsigned int major = major(buf->st_rdev);`

   `|            ^~~~~`

`mksquashfs.c:987:16: note: declared here`

 `987 |  unsigned int major = major(buf->st_rdev);`

   `|        ^~~~~`

`mksquashfs.c:988:24: error: called object ‘minor’ is not a function or function pointer`

 `988 |  unsigned int minor = minor(buf->st_rdev);`

   `|            ^~~~~`

`mksquashfs.c:988:16: note: declared here`

 `988 |  unsigned int minor = minor(buf->st_rdev);`

   `|        ^~~~~`

`mksquashfs.c:1011:24: error: called object ‘major’ is not a function or function pointer`

 `1011 |  unsigned int major = major(buf->st_rdev);`

x   `|            ^~~~~`

`mksquashfs.c:1011:16: note: declared here`

 `1011 |  unsigned int major = major(buf->st_rdev);`

   `|        ^~~~~`

`mksquashfs.c:1012:24: error: called object ‘minor’ is not a function or function pointer`

 `1012 |  unsigned int minor = minor(buf->st_rdev);`

   `|            ^~~~~`

`mksquashfs.c:1012:16: note: declared here`

 `1012 |  unsigned int minor = minor(buf->st_rdev);

解决方法:

修改: osdrv/tools/pc/squashfs4.3/Makefile

SQUASHFS    := squashfs4.3

改为:

SQUASHFS    := squashfs4.4

这里就是脚本补丁和readme中有差异的地方,为了解决这个错误,我们使用了squashfs4.4而不是squashfs4.3

经过以上两个修改,在ubuntu20.04上就可以完成了SDK的整包编译了。

7.建议:

重复编译过程中很可能出现以下情况。原因是因为重复打补丁,因此建议如果编译失败时,再次进行编译前建议进行make clean一下,这样就不会出现下面这种情况了。当然,在出现这个情况时也可以选择跳过,小A就是一路Enter下来的。

8.End

以上就是小A初次编译SDK的体验,总的来说比即将停产的上一代SoC 3518EV200系列的SDK编译起来要顺畅的多。

另外,其实对于遇到的错误,我们可以根据实际情况进行选择修改相应的Makefile进行编译忽略,比如当你不使用squashfs的时候就没有必要来编译生产这个工具。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
评论
4个
时间排序
内容存在敏感词
    0 条记录 第 0 /
    相关专栏
    打赏作者
    易百纳技术社区
    codinglab
    您的支持将鼓励我继续创作!
    打赏金额:
    ¥1 易百纳技术社区
    ¥5 易百纳技术社区
    ¥10 易百纳技术社区
    ¥50 易百纳技术社区
    ¥100 易百纳技术社区
    支付方式:
    微信支付
    支付宝支付
    易百纳技术社区 微信支付
    易百纳技术社区
    打赏成功!

    感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

    举报反馈

    举报类型

    • 内容涉黄/赌/毒
    • 内容侵权/抄袭
    • 政治相关
    • 涉嫌广告
    • 侮辱谩骂
    • 其他

    详细说明

    审核成功

    发布时间设置
    发布时间:
    是否关联周任务-专栏模块

    审核失败

    失败原因
    备注
    Loading...
    易百纳技术社区
    确定要删除此文章、专栏、评论吗?
    确定
    取消
    易百纳技术社区
    易百纳技术社区
    在专栏模块发布专栏,可获得其他E友的打赏
    易百纳技术社区
    回答悬赏问答,被题主采纳后即可获得悬赏金
    易百纳技术社区
    在上传资料时,有价值的资料可设置为付费资源
    易百纳技术社区
    达到一定金额,收益即可提现~
    收益也可用来充值ebc,下载资料、兑换礼品更容易
    易百纳技术社区
    活动规则
    • 1.周任务为周期性任务,每周周一00:00刷新,上周完成的任务不会累计到本周,本周需要从头开始任务,当前任务完成后才可以完成下一个任务
    • 2.发布的专栏与资料需要与平台的板块有相关性,禁止注水,专栏/资料任务以审核通过的篇数为准,专栏需为原创文章且首次在社区发布
    • 3.任务完成后,现金奖励直接打款到微信账户;EBC/收益将自动发放到个人账户,可前往“我的钱包”查看;其他奖励请联系客服兑换
    易百纳技术社区
    升级提醒
    升级

    恭喜您的社区称号由 升级为 “社区游民”

    同时为了感谢您对社区的支持,我们将送出xxx礼品一份, 记得领取哦~

    升级提醒
    易百纳技术社区