华为海思HI3518E方案视频编解码传输

  • 将SDK包拷贝到linux开发环境下并解压

  • 参见“Hi3518EV20X/Hi3516CV200 SDK 安装以及升级使用说明.txt”文档初步部署环境

  • 遇到问题:交叉变异工具链安装成功并导出环境变量,但仍无法运行

    原因:ubuntu20.04默认不支持32位软件,需要安装32位兼容库

    解决:使用aptitude方式安装

    1. sudo apt-get install aptitude
    2. sudo aptitude install lib32ncurses5-dev
    3. sudo aptitude install lib32z1
  • 遇到问题:提示“arm-hisiv300-linux-gcc :command not found”

  • 安装了32位库后使用“arm-hisiv300-linux-gcc -v”测试交叉编译工具链能够成功打印出版本信息,但是执行“sudo make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all”时仍然提示找“arm-hisiv300-linux-gcc command not found“

    原因:“arm-hisiv300-linux-gcc -v”是在当前用户执行,而“sudo make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all”是在超级用户下执行,海思将交叉编译工具链导出环境变量脚本添加到“/etc/profile”文件末尾,通过命令“source /etc/profile”使得当前用户交叉编译工具链路径导出到环境变量了但是超级用户没有导出。

    解决:切换到root用户下先执行命令“source /etc/profile”再编译

  • 遇到问题:jffs2_tool相关编译报错

    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd.a(libmtd.o): in function `dev_node2num':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd.c:444: undefined reference to `major'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd.c:445: undefined reference to `minor'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd.a(libmtd.o): in function `mtd_probe_node':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd.c:1390: undefined reference to `major'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd.c:1391: undefined reference to `minor'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd.a(libmtd_legacy.o): in function `legacy_get_dev_info':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd_legacy.c:254: undefined reference to `major'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd_legacy.c:255: undefined reference to `minor'
    collect2: error: ld returned 1 exit status
    make[2]: *** [common.mk:71:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/flash_erase] 错误 1
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0”
    make[1]: *** [Makefile:46:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool”
    make: *** [Makefile:207:hipctools] 错误 2

    原因:libmtd.c没包含头文件

    解决:使用man手册查寻major、minor。修改libmtd.c,添加头文件“#include <sys/sysmacros.h>”

    再次编译,报错:

    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd.a(libmtd_legacy.o): in function `legacy_get_dev_info':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd_legacy.c:254: undefined reference to `major'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/lib/libmtd_legacy.c:255: undefined reference to `minor'
    collect2: error: ld returned 1 exit status
    make[2]: *** [common.mk:71:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/flash_erase] 错误 1
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0”
    make[1]: *** [Makefile:46:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool”
    make: *** [Makefile:207:hipctools] 错误 2

    原因:跟上面一样没包含头文件

    解决:修改libmtd_legacy.c,添加头文件“#include <sys/sysmacros.h>”

    再次编译,报错:

    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.o: in function `interpret_table_entry':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.c:468: undefined reference to `makedev'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.c:504: undefined reference to `makedev'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.c:511: undefined reference to `makedev'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.o: in function `write_special_file':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.c:945: undefined reference to `major'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.c:945: undefined reference to `minor'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.o: in function `recursive_populate_directory':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.c:1264: undefined reference to `minor'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.c:1264: undefined reference to `major'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.c:1274: undefined reference to `minor'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2.c:1274: undefined reference to `major'
    collect2: error: ld returned 1 exit status
    make[2]: *** [common.mk:71:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.jffs2] 错误 1
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0”
    make[1]: *** [Makefile:46:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool”
    make: *** [Makefile:207:hipctools] 错误 2

    原因:跟上面一样没包含头文件

    解决:修改mkfs.jffs2c,添加头文件“#include <sys/sysmacros.h>”

    再次编译,报错:

    serve_image.c: In function ‘main’:
    serve_image.c:32:18: error: storage size of ‘hints’ isn’t known
      32 |  struct addrinfo hints;
          |                  ^~~~~
    serve_image.c:94:19: error: ‘AI_ADDRCONFIG’ undeclared (first use in this function)
      94 |  hints.ai_flags = AI_ADDRCONFIG;
          |                   ^~~~~~~~~~~~~
    serve_image.c:94:19: note: each undeclared identifier is reported only once for each function it appears in
    serve_image.c:97:8: warning: implicit declaration of function ‘getaddrinfo’ [-Wimplicit-function-declaration]
      97 |  ret = getaddrinfo(argv[1], argv[2], &hints, &ai);
          |        ^~~~~~~~~~~
    serve_image.c:99:40: warning: implicit declaration of function ‘gai_strerror’; did you mean ‘strerror’? [-Wimplicit-function-declaration]
      99 |   fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret));
          |                                        ^~~~~~~~~~~~
          |                                        strerror
    serve_image.c:99:34: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=]
      99 |   fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret));
          |                                 ~^     ~~~~~~~~~~~~~~~~~
          |                                  |     |
          |                                  |     int
          |                                  char *
          |                                 %d
    serve_image.c:103:35: error: dereferencing pointer to incomplete type ‘struct addrinfo’
      103 |  for (runp = ai; runp; runp = runp->ai_next) {
          |                                   ^~
    make[2]: *** [common.mk:83:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/serve_image.o] 错误 1
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0”
    make[1]: *** [Makefile:46:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool”
    make: *** [Makefile:207:hipctools] 错误 2

    原因:这个问题是网上找到答案的,究其原因,在于ubuntu操作系统版本太高,而SDK使用的mtd-utils版本太低导致

    解决:思路有两个,一个是换一个高版本的mtd-utils,前面花那么多时间不是浪费了,果断换下一种方案,打开"/usr/include/netdb.h"文件,注释掉563行的“#ifdef __USE_XOPEN2K”和679行的“# endif ”[这里#endif花了好长时间才找到]

    再次编译,还报错:

    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/jffs2reader.o: in function `printdir':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/jffs2reader.c:358: undefined reference to `minor'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/jffs2reader.c:358: undefined reference to `major'
    collect2: error: ld returned 1 exit status
    make[2]: *** [common.mk:71:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/jffs2reader] 错误 1
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0”
    make[1]: *** [Makefile:46:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool”
    make: *** [Makefile:207:hipctools] 错误 2

    原因:问题还是头文件没包含

    解决:修改jffs2reader.c,添加头文件“#include <sys/sysmacros.h>”

    再次编译,继续报错:

    In file included from mkfs.ubifs/devtable.c:47:
    mkfs.ubifs/devtable.c:240:10: error: called object ‘major’ is not a function or function pointer
      240 |    name, major(nh_elt->dev), minor(nh_elt->dev));
          |          ^~~~~
    mkfs.ubifs/mkfs.ubifs.h:78:54: note: in definition of macro ‘dbg_msg’
      78 |  printf("mkfs.ubifs: %s: " fmt "\n", __FUNCTION__, ##__VA_ARGS__); \
          |                                                      ^~~~~~~~~~~
    mkfs.ubifs/devtable.c:134:46: note: declared here
      134 |  unsigned int mode = 0755, uid = 0, gid = 0, major = 0, minor = 0;
          |                                              ^~~~~
    In file included from mkfs.ubifs/devtable.c:47:
    mkfs.ubifs/devtable.c:240:30: error: called object ‘minor’ is not a function or function pointer
      240 |    name, major(nh_elt->dev), minor(nh_elt->dev));
          |                              ^~~~~
    mkfs.ubifs/mkfs.ubifs.h:78:54: note: in definition of macro ‘dbg_msg’
      78 |  printf("mkfs.ubifs: %s: " fmt "\n", __FUNCTION__, ##__VA_ARGS__); \
          |                                                      ^~~~~~~~~~~
    mkfs.ubifs/devtable.c:134:57: note: declared here
      134 |  unsigned int mode = 0755, uid = 0, gid = 0, major = 0, minor = 0;
          |                                                         ^~~~~
    In file included from mkfs.ubifs/devtable.c:47:
    mkfs.ubifs/devtable.c:277:16: error: called object ‘major’ is not a function or function pointer
      277 |            nm, major(nh_elt->dev), minor(nh_elt->dev));
          |                ^~~~~
    mkfs.ubifs/mkfs.ubifs.h:78:54: note: in definition of macro ‘dbg_msg’
      78 |  printf("mkfs.ubifs: %s: " fmt "\n", __FUNCTION__, ##__VA_ARGS__); \
          |                                                      ^~~~~~~~~~~
    mkfs.ubifs/devtable.c:134:46: note: declared here
      134 |  unsigned int mode = 0755, uid = 0, gid = 0, major = 0, minor = 0;
          |                                              ^~~~~
    In file included from mkfs.ubifs/devtable.c:47:
    mkfs.ubifs/devtable.c:277:36: error: called object ‘minor’ is not a function or function pointer
      277 |            nm, major(nh_elt->dev), minor(nh_elt->dev));
          |                                    ^~~~~
    mkfs.ubifs/mkfs.ubifs.h:78:54: note: in definition of macro ‘dbg_msg’
      78 |  printf("mkfs.ubifs: %s: " fmt "\n", __FUNCTION__, ##__VA_ARGS__); \
          |                                                      ^~~~~~~~~~~
    mkfs.ubifs/devtable.c:134:57: note: declared here
      134 |  unsigned int mode = 0755, uid = 0, gid = 0, major = 0, minor = 0;
          |                                                         ^~~~~
    make[2]: *** [common.mk:83:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.ubifs/devtable.o] 错误 1
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0”
    make[1]: *** [Makefile:46:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool”
    make: *** [Makefile:207:hipctools] 错误 2

    原因:问题还是头文件没包含

    解决:修改devtable.c,添加头文件“#include <sys/sysmacros.h>”

    再次编译,依旧报错:

    mkfs.ubifs/hashtable/hashtable_itr.c:42:1: error: redefinition of ‘hashtable_iterator_key’
      42 | hashtable_iterator_key(struct hashtable_itr *i)
          | ^~~~~~~~~~~~~~~~~~~~~~
    In file included from mkfs.ubifs/hashtable/hashtable_itr.c:5:
    mkfs.ubifs/hashtable/hashtable_itr.h:32:1: note: previous definition of ‘hashtable_iterator_key’ was here
      32 | hashtable_iterator_key(struct hashtable_itr *i)
          | ^~~~~~~~~~~~~~~~~~~~~~
    mkfs.ubifs/hashtable/hashtable_itr.c:46:1: error: redefinition of ‘hashtable_iterator_value’
      46 | hashtable_iterator_value(struct hashtable_itr *i)
          | ^~~~~~~~~~~~~~~~~~~~~~~~
    In file included from mkfs.ubifs/hashtable/hashtable_itr.c:5:
    mkfs.ubifs/hashtable/hashtable_itr.h:41:1: note: previous definition of ‘hashtable_iterator_value’ was here
      41 | hashtable_iterator_value(struct hashtable_itr *i)
          | ^~~~~~~~~~~~~~~~~~~~~~~~
    make[2]: *** [common.mk:83:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.ubifs/hashtable/hashtable_itr.o] 错误 1
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0”
    make[1]: *** [Makefile:46:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool”
    make: *** [Makefile:207:hipctools] 错误 2

    原因:hashtable_iterator_key函数和hashtable_iterator_value函数重复定义

    解决:修改hashtable_itr.h文件,改为:void * hashtable_iterator_key(struct hashtable_itr *i); void * hashtable_iterator_value(struct hashtable_itr *i);

    再次编译,继续报错,快要崩溃了:

    ubi-utils/libubi.c: In function ‘vol_node2nums’:
    ubi-utils/libubi.c:385:10: error: called object ‘major’ is not a function or function pointer
      385 |  major = major(st.st_rdev);
          |          ^~~~~
    ubi-utils/libubi.c:373:13: note: declared here
      373 |  int i, fd, major, minor;
          |             ^~~~~
    ubi-utils/libubi.c:386:10: error: called object ‘minor’ is not a function or function pointer
      386 |  minor = minor(st.st_rdev);
          |          ^~~~~
    ubi-utils/libubi.c:373:20: note: declared here
      373 |  int i, fd, major, minor;
          |                    ^~~~~
    ubi-utils/libubi.c: In function ‘dev_node2num’:
    ubi-utils/libubi.c:451:10: error: called object ‘major’ is not a function or function pointer
      451 |  major = major(st.st_rdev);
          |          ^~~~~
    ubi-utils/libubi.c:441:9: note: declared here
      441 |  int i, major, minor;
          |         ^~~~~
    ubi-utils/libubi.c:452:10: error: called object ‘minor’ is not a function or function pointer
      452 |  minor = minor(st.st_rdev);
          |          ^~~~~
    ubi-utils/libubi.c:441:16: note: declared here
      441 |  int i, major, minor;
          |                ^~~~~
    ubi-utils/libubi.c: In function ‘mtd_node_to_num’:
    ubi-utils/libubi.c:760:10: error: called object ‘major’ is not a function or function pointer
      760 |  major = major(sb.st_rdev);
          |          ^~~~~
    ubi-utils/libubi.c:748:6: note: declared here
      748 |  int major, minor;
          |      ^~~~~
    ubi-utils/libubi.c:761:10: error: called object ‘minor’ is not a function or function pointer
      761 |  minor = minor(sb.st_rdev);
          |          ^~~~~
    ubi-utils/libubi.c:748:13: note: declared here
      748 |  int major, minor;
          |             ^~~~~
    ubi-utils/libubi.c: In function ‘ubi_probe_node’:
    ubi-utils/libubi.c:869:10: error: called object ‘major’ is not a function or function pointer
      869 |  major = major(st.st_rdev);
          |          ^~~~~
    ubi-utils/libubi.c:856:13: note: declared here
      856 |  int i, fd, major, minor;
          |             ^~~~~
    ubi-utils/libubi.c:870:10: error: called object ‘minor’ is not a function or function pointer
      870 |  minor = minor(st.st_rdev);
          |          ^~~~~
    ubi-utils/libubi.c:856:20: note: declared here
      856 |  int i, fd, major, minor;
          |                    ^~~~~
    make[2]: *** [common.mk:83:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/ubi-utils/libubi.o] 错误 1
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0”
    make[1]: *** [Makefile:46:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool”
    make: *** [Makefile:207:hipctools] 错误 2

    原因:问题还是头文件没包含

    解决:修改libubi.c,添加头文件“#include <sys/sysmacros.h>”

    再次编译,继续报错,快要崩溃了:

    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.ubifs/mkfs.ubifs.o: in function `add_dev_inode':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.ubifs/mkfs.ubifs.c:1143: undefined reference to `minor'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.ubifs/mkfs.ubifs.c:1143: undefined reference to `major'
    /usr/bin/ld: /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.ubifs/mkfs.ubifs.c:1143: undefined reference to `makedev'
    collect2: error: ld returned 1 exit status
    make[2]: *** [common.mk:71:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0/mkfs.ubifs/mkfs.ubifs] 错误 1
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.0”
    make[1]: *** [Makefile:46:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/jffs2_tool”
    make: *** [Makefile:207:hipctools] 错误 2

    原因:问题还是头文件没包含

    解决:修改mkfs.ubifs.c,添加头文件“#include <sys/sysmacros.h>”

  • 这回mtd-utils相关编译终于OK了,接下来又是cramfs_tool编译报错了,先把改好的mtd-utils-1.5.0压缩成mtd-utils-1.5.0.tar.bz2替换掉原来的,防止clean时删除

    继续报错:

    /usr/bin/ld: misc-utils/lslocks.o: in function `get_dev_inode':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/cramfs_tool/tmp/util-linux-2.22-rc2/misc-utils/lslocks.c:223: undefined reference to `makedev'
    /usr/bin/ld: misc-utils/lslocks.o: in function `get_fallback_filename':
    /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/cramfs_tool/tmp/util-linux-2.22-rc2/misc-utils/lslocks.c:142: undefined reference to `makedev'
    collect2: error: ld returned 1 exit status
    make[4]: *** [Makefile:4438:lslocks] 错误 1
    make[4]: *** 正在等待未完成的任务....
      CCLD   raw
    make[4]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/cramfs_tool/tmp/util-linux-2.22-rc2”
    make[3]: *** [Makefile:9528:all-recursive] 错误 1
    make[3]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/cramfs_tool/tmp/util-linux-2.22-rc2”
    make[2]: *** [Makefile:3356:all] 错误 2
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/cramfs_tool/tmp/util-linux-2.22-rc2”
    make[1]: *** [Makefile:39:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/cramfs_tool/tmp/sbin/mkfs.cramfs] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/cramfs_tool”
    make: *** [Makefile:212:hipctools] 错误 2

    原因:问题还是头文件没包含

    解决:修改lslocks.c,添加头文件“#include <sys/sysmacros.h>”

    squashfs4.2编译报错:

    mksquashfs.c: In function ‘create_inode’:
    mksquashfs.c:1354:24: error: called object ‘major’ is not a function or function pointer
    1354 |   unsigned int major = major(buf->st_rdev);
          |                        ^~~~~
    mksquashfs.c:1354:16: note: declared here
    1354 |   unsigned int major = major(buf->st_rdev);
          |                ^~~~~
    mksquashfs.c:1355:24: error: called object ‘minor’ is not a function or function pointer
    1355 |   unsigned int minor = minor(buf->st_rdev);
          |                        ^~~~~
    mksquashfs.c:1355:16: note: declared here
    1355 |   unsigned int minor = minor(buf->st_rdev);
          |                ^~~~~
    mksquashfs.c:1378:24: error: called object ‘major’ is not a function or function pointer
    1378 |   unsigned int major = major(buf->st_rdev);
          |                        ^~~~~
    mksquashfs.c:1378:16: note: declared here
    1378 |   unsigned int major = major(buf->st_rdev);
          |                ^~~~~
    mksquashfs.c:1379:24: error: called object ‘minor’ is not a function or function pointer
    1379 |   unsigned int minor = minor(buf->st_rdev);
          |                        ^~~~~
    mksquashfs.c:1379:16: note: declared here
    1379 |   unsigned int minor = minor(buf->st_rdev);
          |                ^~~~~
    unsquashfs.c: In function ‘create_inode’:
    unsquashfs.c:936:7: warning: implicit declaration of function ‘makedev’ [-Wimplicit-function-declaration]
      936 |       makedev((i->data >> 8) & 0xff,
          |       ^~~~~~~
    mksquashfs.c: In function ‘dir_scan2’:
    mksquashfs.c:3778:17: warning: implicit declaration of function ‘makedev’ [-Wimplicit-function-declaration]
    3778 |   buf.st_rdev = makedev(pseudo_ent->dev->major,
          |                 ^~~~~~~
    make[2]: *** [<内置>:mksquashfs.o] 错误 1
    make[2]: *** 正在等待未完成的任务....
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/squashfs4.2/tmp/squashfs4.2”
    make[1]: *** [Makefile:38:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/squashfs4.2/tmp/bin/mksquashfs] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/squashfs4.2”
    make: *** [Makefile:216:hipctools] 错误 2

    原因:问题还是头文件没包含

    解决:修改mksquashfs.c,添加头文件“#include <sys/sysmacros.h>”

    继续报错:

    /usr/bin/ld: unsquashfs.o: in function `create_inode':
    unsquashfs.c:(.text+0x2071): undefined reference to `makedev'
    collect2: error: ld returned 1 exit status
    make[2]: *** [Makefile:233:unsquashfs] 错误 1
    make[2]: *** 正在等待未完成的任务....
    make[2]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/squashfs4.2/tmp/squashfs4.2”
    make[1]: *** [Makefile:38:/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/squashfs4.2/tmp/bin/mksquashfs] 错误 2
    make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/tools/pc/squashfs4.2”
    make: *** [Makefile:216:hipctools] 错误 2

    原因:问题还是头文件没包含、

    解决:修改unsquashfs..c,添加头文件“#include <sys/sysmacros.h>”

  • 终于全编译OK了,把有改动的打包一下,防止被clean。这个SDK做得可真垃圾,折磨人

  • 烧录

    • 先确定映像文件到16M的SPI Flash

    • 分区

      bootkernelroorfs
      1M3M12M
    • 烧录工具:HiTool【参考“HiTool工具平台 使用指南.pdf”和“HiBurn 工具使用指南.pdf”】

  • 烧写成功后连接超级终端,重上电后提示"can't get kernel image!"

    查看HiTool工具提示信息中kernel烧录地址为0x81000000,使用“printenv”命令查看环境变量中bootm启动地址是0x82000000,只要将环境变量中的地址改为bootm启动地址改为0x81000000【SDK包中这个文档(Hi3518EV20X/Hi3516CV200 SDK 安装以及升级使用说明.txt)是错误的,或者说跟Hitool工具不匹配】

    // 正确的bootcmd和bootargs对应的设置命令:
    setenv bootcmd 'sf probe 0;sf read 0x81000000 0x100000 0x300000;bootm 0x81000000'
    setenv bootargs mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs)
  • 搭建tftp服务器,参考“Hi3518EV20X/Hi3516CV200 SDK 安装以及升级使用说明.txt”,使用tftp方式重新烧写uboot、kernel、rootfs

  • 参考“Hi3518EV20X/Hi3516CV200 SDK 安装以及升级使用说明.txt”第5章,测试功能:网络配置、nfs、telnet。telnet时发现没有初始密码,使用“passwd"命令设置初始root密码。

    ~ # passwd
    Changing password for root
    New password:
    Retype password:
    Password for root changed by root

    注意:设置完初始密码后,需要额外执行“telnetd&”命令方可telnet成功

  • mpp部署

    • 在开发板系统根目录下创建mpp文件夹

    • nfs方式传输文件:将服务器ubuntu中mpp目录下的ko和lib两个文件夹复制到nfs文件夹中通过nfs方式将ko和lib两个文件夹及其内容复制到开发板中,其它文件均可以通过nfs方式传输,开发板根系统中/mpp/lib文件夹下*.a文件可以删除,.a为静态链接库,.so为动态链接库。开发版中的*.a文件没有任何作用

    • 使用vi命令打开开发板系统“/etc/profile”,1.添加mpp/lib库路径到环境变量,2.网路配置

      # 改动处1:添加mpp中lib路径
      LD_LIBRARY_PATH="/usr/local/lib:/usr/lib:/mpp/lib" 
      
      # 改动处2:在末尾追加网络配置
      ifconfig eth0 192.168.1.10
      ifconfig lo 127.0.0.1
      
      # 改动处3:加载ko
      cd /mpp/ko
      ./load3518e -a -sensor ar0130 -osmem 32 -total 64
      cd /
      
      # 改动处4:挂载nfs(只在开发阶段添加,nfs服务器ip:192.168.1.141,路径:/home/thin-wind/nfs。如果挂载失败手动再执行一遍该指令)
      mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 192.168.1.141:/home/thin-wind/nfs /mnt
    • 测试:ubuntu中进入mpp/vio目录,执行“make”命令,会编译生成一个名为“sample_vio”的可执行程序,通过nfs方式传到开发板中,执行“ ./sample_vio 0 1”,如果程序运行没有报错,说明mpp环境部署成功

  • 学习了解YUV相关知识

  • 测试了一下sample_venc,需要根据开发板硬件选择修改“Makefile.param”中的“CHIP_ID”和“SENSOR_TYPE”,然后make生成的程序才能在开发板中正确运行

  • 先仔细阅读一下“HiMPP IPC V2.0 媒体处理软件开发参考.pdf”各章节的概括部分,再来分析示例代码

  • sample_venc VI部分源码分析

  • sample_venc VPASS部分源码分析

  • sample_venc VENC部分源码分析

  • RTP传输

    • ORTP库源码下载:https://github.com/dmonakhov/ortp

    • 将下载好的放入ubuntu开发环境下解压。

    • 注意ORTP库源码不支持h.264格式,需要做个简单修改

      /* 在avprofile.c中的av_profile_init函数中增加如下一行代码 */
      rtp_profile_set_payload(profile,96,&payload_type_h264);
    • 执行:./autogen.sh

      + rm -rf config.cache autom4te.cache
      + libtoolize --copy --force
      ./autogen.sh: 行 36: libtoolize:未找到命令
      + aclocal
      ./autogen.sh: 行 37: aclocal:未找到命令
      + autoheader
      ./autogen.sh: 行 38: autoheader:未找到命令
      + automake --force-missing --add-missing --copy
      ./autogen.sh: 行 39: automake:未找到命令
      + autoconf
      ./autogen.sh: 行 40: autoconf:未找到命令
    • 原因:缺少相关库

    • 解决:

      # 如果找不到下库可以先执行:sudu apt-get update
      sudo apt-get install libtool
      sudo apt-get install m4
      sudo apt-get install automake
    • 执行:./configure --prefix=/tmp/ortp --host=arm-hisiv300-linux

      --prefix:安装位置
      --host:交叉编译工具链
    • 执行:make && make install

    • 进入“/tmp/ortp”目录,查看该目录下生成了“include”和“lib”文件夹

    • 先替换修改过后的“sample_comm_venc.c”,之后再分析源码,先部署环境[sample_comm_venc.c文件上传到“/doc/”目录下]

    • 从“sample_comm_venc.c“中包含的头文件中看出跟ortp库相关的头文件需要部署的位置是:Hi3518E_SDK_V1.0.3.0/mpp/include,所以使用cp命令将/tmp/ortp/include/ortp整个文件夹复制到Hi3518E_SDK_V1.0.3.0/mpp/include目录下

    • 修改“sample_venc.c”,将main函数中s32ChnNum通道数直接赋值为1,只测一路通道

    • 进入“Hi3518E_SDK_V1.0.3.0/mpp/sample/venc”目录下,修改Makefile文件,然后执行make命令

      # -lxxx : 链接libxxx.so   -Lxxx : 指定链接路径
      $(TARGET):%:%.o $(COMM_OBJ)
        $(CC) $(CFLAGS) -lpthread -lm -lortp -o $@ $^ $(MPI_LIBS) $(AUDIO_LIBA) $(SENSOR_LIBS) -L/tmp/ortp/lib
    • 将生成的sample_venc elf可执行程序通过nfs传到开发板系统中

    • “./sample_venc 0”执行程序后提示:./sample_venc: can't load library 'libortp.so.9',说明开发板中ortp环境没有搭建

    • 解决:将ubuntu“/tmp/ortp/lib/”目录下的文件通过nfs方式全部复制到开发板“/mpp/lib/”目录下

    • 然后通过命令“./sample_venc 0”就可以运行程序了

    • 打开VLC播放器,点击“媒体”->“打开文件”,选择“demo.sdp”,windows系统IP要设置为:192.168.1.20就可以观看开发板通过ortp传出的视频了["demo.sdp"文件上传到“/doc/”目录下]

    • rtpsend.c发送示例简单分析并解读新版sample_venc.c中进行rtp发送的代码

  • isp的firmware分析

    // 从sample_venc.c的main函数入口开始
    SAMPLE_COMM_VI_StartVi
        SAMPLE_COMM_VI_StartIspAndVi
        	SAMPLE_COMM_ISP_Init
            sensor_register_callback 
              cmos_init_sensor_exp_function /* 绑定isp/sensor/xxx_cmos.c中相关函数 */
    
            // 3a注册,封装起来了,无法深入追踪
            HI_MPI_AE_Register 
            HI_MPI_AWB_Register
            HI_MPI_AF_Register
    • 如果自己的项目摄像头型号mpp已适配,则只需要关注xxx_cmos.c和xxx_sensor_ctl.c的局部微小修改
    • 可以通过IIC向控制摄像头发送指令调节摄像头也可以调用isp相关api控制soc的算法达到目的
    • 如果实际项目使用mpp暂未适配的sensor,那就要搜索关键字“SENSOR_TYPE“,参考添加自己的sensor到这套体系中去,还要根据自己的sensor,实现自己的xxx_cmos.c和xxx_sensor_ctl.c
    • 在实际开发过程中,可以寻求供应商的技术支持
    • 修改isp部分代码后要查看ko和lib文件夹下相关库是否需要更新到开发板中
  • 解决了一下虚拟机ubuntu20.04重启登录后黑屏的问题【使用lightdm桌面】

  • USB WIFI STA模式驱动移植

    • 将USB WIFI的SDK包复制到ubuntu中并解压

    • 确认USB的VID和PID

    • 查找config.mk文件中wpa_supplicant是否支持(如果不支持则改为支持)

    • 详细阅读Makefile文件,增加PLATFORM = HI_3518E平台的支持,1.内核源码树路径设置:LINUX_SRC = //linux内核源码根目录 2.交叉工具链路径设置:CROSS_COMPILE = //交叉编译工具链前缀

    • 确定好以上步骤后,进入这个SDK包根目录,使用“make”命令,结果报错:

      编译中断。
      make[2]: *** [scripts/Makefile.build:308:/home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.o] 错误 1
      make[1]: *** [Makefile:1365:_module_/home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux] 错误 2
      make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/opensource/kernel/linux-3.4.y”
      make: *** [Makefile:402:LINUX] 错误 2
      root@ubuntu:/home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913# make
      make -C tools
      make[1]: 进入目录“/home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/tools”
      gcc -g bin2h.c -o bin2h
      make[1]: 离开目录“/home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/tools”
      /home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/tools/bin2h
      cp -f os/linux/Makefile.6 /home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/Makefile
      make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- -C  /home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/opensource/kernel/linux-3.4.y SUBDIRS=/home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux modules
      make[1]: 进入目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/opensource/kernel/linux-3.4.y”
        CC [M]  /home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.o
      /home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c:28:23: 致命错误: rt_config.h:没有那个文件或目录
       #include "rt_config.h"
                             ^
      编译中断。
      make[2]: *** [scripts/Makefile.build:308:/home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.o] 错误 1
      make[1]: *** [Makefile:1365:_module_/home/thin-wind/samba_share/Study/doc/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux] 错误 2
      make[1]: 离开目录“/home/thin-wind/samba_share/Hi3518E_SDK_V1.0.3.0/osdrv/opensource/kernel/linux-3.4.y”
      make: *** [Makefile:402:LINUX] 错误 2
      root@ubuntu:/home/thin-wind/samba_share/
      • 原因:找不到rt_config.h文件,然而我们到源码include目录下发下该文件已存在
      • 解决:/os/linux/config.mk也要添加对HI_3518E平台的支持【WFLAGS += -I$(RT28xx_DIR)/include:指定头文件位置】
    • 以上的修改可以搜索关键字“HI_3518E”查看所有修改处

    • 将编译生成的“mt7601Usta.ko”文件通过nfs方式传到开发板中,复制到/mpp/ko/目录下,修改/etc/profile文件,增加指令:insmod mt7601Usta.ko,这样每次开机便会自动装载mt7601Usta.ko驱动

  • WIFI网络配置

    • 发现开发板缺少wpa_supplicant工具,接下来需要移植wpa_supplicant工具
  • wpa_supplicant工具移植

    • 下载wpa_supplicant源码并复制到ubuntu环境下解压,我使用的是当前最新版本2.9

    • 进入wpa_supplicant目录下,找到Makefile文件并修改适配当前开发环境,添加:CC = arm-hisiv300-linux-gcc,make后提示:

      Building wpa_supplicant requires a configuration file
      (.config). See README for more instructions. You can
      run "cp defconfig .config" to create an example
      configuration.
      make: *** [Makefile:67:verify_config] 错误 1
      • 原因及解决:缺少.config文件,按照提示,执行命令:cp defconfig .config
    • 再次make,提示错误:

      ../src/common/dpp.c:12:30: 致命错误: openssl/opensslv.h:没有那个文件或目录
      #include <openssl/opensslv.h>
                                    ^
      编译中断。
      make: *** [Makefile:1992:../src/common/dpp.o] 错误 1
      • 原因:缺少openssl库
    • openssl库移植

      • 下载openssl复制到ubuntu环境下解压

      • 查找解压后的根目录,发现没有Makefile文件,阅读README.md,参考“INSTALL.md”,要先执行命令:./config,这个命令执行过后才会生存Makefile文件

      • 但是这里./config 需要哪些参数我也不知道,百度搜索openssl交叉编译,找到以下解决方法:

        ./config no-asm shared no-async --prefix=$(pwd)/install_dir --cross-compile-prefix=arm-hisiv300-linux-
        
        # 参数说明
        # no-asm:  在交叉编译过程中不使用汇编代码代码加速编译过程;
        # shared: 生成动态连接库。
        # no-async: 交叉编译工具链没有提供GNU C的ucontext库
        # --prefix=: 安装路径
        # --cross-compile-prefix=: 交叉编译工具
      • make后报错:

        arm-hisiv300-linux-gcc: error: unrecognized command line option '-m64'
        make[1]: *** [Makefile:4210: apps/lib/libapps-lib-app_libctx.o] Error 1
        make[1]: Leaving directory '/home/thin-wind/samba_share/Study/doc/wpa_supplicant/openssl-3.0.0'
        make: *** [Makefile:3188:build_sw] 错误 2
      • 原因及解决:"-m64"是x86平台的编译选项,交叉编译工具链不支持,打开Makefile,删除里面所有的"-m64"

      • 再次make,这次是源码bn_dh.c错误,懒得改源码了,阅读我wpa_supplicant的README,发现其测试使用的是1.0.1或1.0.2,干脆下载1.0.2版本试试吧

      • 解压openssl1.0.2版本源码并进入根目录

      • 配置:./config no-asm shared no-async --prefix=$(pwd)/install_dir --cross-compile-prefix=arm-hisiv300-linux-

      • 此时make后报错和上次的一样,打开Makefile,删除里面所有的"-m64"

      • 这次make和make install均成功执行,进入install_dir目录下,发现有include、lib这两个文件夹,接下来需要这两个文件夹路径

    • 修改wpa_supplicant的Makefile

      # -L : 指定lib路径     -I : 指定头文件路径
      CC=arm-hisiv300-linux-gcc -L/home/thin-wind/samba_share/Study/doc/wpa_supplicant/openssl-1.0.2/install_dir/lib
      
      CFLAGS = -MMD -O2 -Wall -g -I/home/thin-wind/samba_share/Study/doc/wpa_supplicant/openssl-1.0.2/install_dir/include
      
      LIBS = -L/home/thin-wind/samba_share/Study/doc/wpa_supplicant/openssl-1.0.2/install_dir/lib
    • make后报错:

      dbus/dbus_dict_helpers.c:10:10: fatal error: dbus/dbus.h: 没有那个文件或目录
        10 | #include <dbus/dbus.h>
            |          ^~~~~~~~~~~~~
      compilation terminated.
      make: *** [Makefile:1992:dbus/dbus_dict_helpers.o] 错误 1
      • 原因及解决:当前环境缺少dbus库

      • 解决办法1:打开wpa_supplicant下的.config文件,搜索dbus关键字,将相关处注释掉,一共找到以下两处:

        # CONFIG_CTRL_IFACE_DBUS_NEW=y
        # CONFIG_CTRL_IFACE_DBUS_INTRO=y
      • 解决办法2:安装debus库,注意要是交叉编译

    • 再次make后,产生新的问题:

      ../src/drivers/driver_nl80211.c:17:10: fatal error: netlink/genl/genl.h: 没有那个文件或目录
        17 | #include <netlink/genl/genl.h>
            |          ^~~~~~~~~~~~~~~~~~~~~
      compilation terminated.
      make: *** [Makefile:1992:../src/drivers/driver_nl80211.o] 错误 1
      • 原因:缺少libnl库

      • 解决办法1:打开wpa_supplicant下的.config文件,搜索nl80211关键字,将相关处注释掉,一共找到以下1处需要注释的地方:

        # 这么改有个问题就是当使用NL80211时该驱动异常
        # CONFIG_DRIVER_NL80211=y
      • 解决办法2:安装libnl库,注意要是交叉编译

    • 再次make,居然报源码编译错误:

      /usr/bin/ld: 当搜索用于 /home/thin-wind/samba_share/Study/doc/wpa_supplicant/openssl-1.0.2/install_dir/lib/libssl.so 时跳过不兼容的 -lssl
      /usr/bin/ld: 当搜索用于 /home/thin-wind/samba_share/Study/doc/wpa_supplicant/openssl-1.0.2/install_dir/lib/libssl.a 时跳过不兼容的 -lssl
      /usr/bin/ld: 当搜索用于 /home/thin-wind/samba_share/Study/doc/wpa_supplicant/openssl-1.0.2/install_dir/lib/libcrypto.so 时跳过不兼容的 -lcrypto
      /usr/bin/ld: 当搜索用于 /home/thin-wind/samba_share/Study/doc/wpa_supplicant/openssl-1.0.2/install_dir/lib/libcrypto.a 时跳过不兼容的 -lcrypto
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `openssl_tls_cert_event':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2247: undefined reference to `sk_num'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2252: undefined reference to `sk_value'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2282: undefined reference to `sk_pop_free'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `openssl_cert_tod':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2183: undefined reference to `sk_value'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2180: undefined reference to `sk_num'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `openssl_tls_cert_event':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2282: undefined reference to `sk_pop_free'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2282: undefined reference to `sk_pop_free'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `tls_match_suffix_helper':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2011: undefined reference to `sk_num'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2012: undefined reference to `sk_value'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2024: undefined reference to `sk_pop_free'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2028: undefined reference to `sk_pop_free'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2028: undefined reference to `sk_pop_free'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `tls_match_altsubject_component':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1692: undefined reference to `sk_value'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1691: undefined reference to `sk_num'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1700: undefined reference to `sk_pop_free'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `tls_verify_cb':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2404: undefined reference to `sk_num'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2415: undefined reference to `sk_pop_free'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `tls_match_altsubject_component':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1700: undefined reference to `sk_pop_free'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `tls_verify_cb':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:2408: undefined reference to `sk_value'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `openssl_connection_handshake':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:4304: undefined reference to `SSL_state'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `ocsp_resp_cb':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:4743: undefined reference to `sk_new_null'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:4747: undefined reference to `sk_push'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:4757: undefined reference to `sk_push'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:4752: undefined reference to `sk_free'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:4768: undefined reference to `sk_pop_free'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `tls_deinit':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1130: undefined reference to `ENGINE_cleanup'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1132: undefined reference to `CRYPTO_cleanup_all_ex_data'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1134: undefined reference to `ERR_free_strings'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1135: undefined reference to `EVP_cleanup'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `tls_init':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:993: undefined reference to `SSL_load_error_strings'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:994: undefined reference to `SSL_library_init'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1024: undefined reference to `SSLv23_method'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1072: undefined reference to `SSL_SESSION_get_ex_new_index'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `tls_parse_pkcs12':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:3363: undefined reference to `sk_pop'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:3382: undefined reference to `sk_pop_free'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `tls_connection_established':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:1638: undefined reference to `SSL_state'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `openssl_debug_dump_certificates':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:5192: undefined reference to `sk_num'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:5193: undefined reference to `sk_value'
      /usr/bin/ld: ../src/crypto/tls_openssl.o: in function `tls_get_library_version':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/tls_openssl.c:5446: undefined reference to `SSLeay_version'
      /usr/bin/ld: ../src/common/dpp.o: in function `dpp_process_signed_connector':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/common/dpp.c:5680: undefined reference to `EVP_MD_CTX_create'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/common/dpp.c:5708: undefined reference to `EVP_MD_CTX_destroy'
      /usr/bin/ld: ../src/common/dpp.o: in function `dpp_build_conf_obj_dpp':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/common/dpp.c:4695: undefined reference to `EVP_MD_CTX_create'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/common/dpp.c:4780: undefined reference to `EVP_MD_CTX_destroy'
      /usr/bin/ld: ../src/ap/hostapd.o: in function `hostapd_free_hapd_data':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/ap/hostapd.c:442: undefined reference to `auth_sae_process_commit'
      /usr/bin/ld: ../src/ap/sta_info.o: in function `ap_free_sta':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/ap/sta_info.c:270: undefined reference to `sae_clear_retransmit_timer'
      /usr/bin/ld: ../src/ap/ieee802_11_vht.o: in function `hostapd_eid_txpower_envelope':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/ap/ieee802_11_vht.c:273: undefined reference to `hostapd_is_dfs_required'
      /usr/bin/ld: ../src/crypto/crypto_openssl.o: in function `EVP_MD_CTX_free':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/crypto_openssl.c:78: undefined reference to `EVP_MD_CTX_cleanup'
      /usr/bin/ld: ../src/crypto/crypto_openssl.o: in function `EVP_MD_CTX_new':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/crypto_openssl.c:69: undefined reference to `EVP_MD_CTX_init'
      /usr/bin/ld: ../src/crypto/crypto_openssl.o: in function `HMAC_CTX_free':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/crypto_openssl.c:58: undefined reference to `HMAC_CTX_cleanup'
      /usr/bin/ld: ../src/crypto/crypto_openssl.o: in function `HMAC_CTX_new':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/crypto_openssl.c:49: undefined reference to `HMAC_CTX_init'
      /usr/bin/ld: ../src/crypto/crypto_openssl.o: in function `get_group5_prime':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/crypto_openssl.c:91: undefined reference to `get_rfc3526_prime_1536'
      /usr/bin/ld: /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/crypto_openssl.c:91: undefined reference to `get_rfc3526_prime_1536'
      /usr/bin/ld: ../src/crypto/crypto_openssl.o: in function `HMAC_CTX_new':
      /home/thin-wind/samba_share/Study/doc/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant/../src/crypto/crypto_openssl.c:49: undefined reference to `HMAC_CTX_init'
      collect2: error: ld returned 1 exit status
      make: *** [Makefile:1905:wpa_supplicant] 错误 1
      • 这个问题始终都解决不掉,算了,放弃了,不用最新新版本了,新版本遇到问题网上都搜索不到答案
    • 下载跟搜索的博客相同版本的openssl版本0.98za,wpa_supplicant版本2.5

      • 将两个压缩包分别解压, 将wpa_supplicant-2.5/patches/openssl-0.9.8za-tls-extensions.patch复制到openssl-0.9.8za/目录下

      • openssl:

        • 在openssl-0.9.8za/目录下运行命令:patch -p1 < openssl-0.9.8za-tls-extensions.patch

        • 修改Makefile

          # 安装位置
          INSTALLTOP=/tmp/ssl_install
          OPENSSLDIR=/tmp/ssl_install
          
          # 交叉编译工具链
          CC= arm-hisiv300-linux-gcc
          AR= arm-hisiv300-linux-ar $(ARFLAGS) r
          ARD=arm-hisiv300-linux-ar $(ARFLAGS) d
          RANLIB= arm-hisiv300-linux-ranlib
        • make & make install,报错:

          Expected text after =item, not a number
          Expected text after =item, not a number
          Expected text after =item, not a number
          Expected text after =item, not a number
          • 原因及解决:OpenSSL 与 perl版本不兼容, 解决办法:sudo rm -f /usr/bin/pod2man
        • 再次 make & make install,成功,查看/tmp/ssl_install/目录下已经产生安装后的文件了

      • wpa_supplicant:

        • 安装完openssl,接下来看是安装wpa_supplicant,进入wpa_supplicant-2.5/wpa_supplicant/目录下

        • 执行命令:cp defconfig .config

        • 修改 .config

          CC=arm-hisiv300-linux-gcc -L/tmp/ssl_install/lib
          CFLAGS+=-I /tmp/ssl_install/include
          LIBS+=-L/tmp/ssl_install/lib
        • make,报错:

          ../src/drivers/driver_nl80211.c:17:31: 致命错误: netlink/genl/genl.h:没有那个文件或目录
          #include <netlink/genl/genl.h>
                                        ^
          编译中断。
          make: *** [Makefile:1758:../src/drivers/driver_nl80211.o] 错误 1
          • 这个问题之前有解决方法了
        • 解决掉上个问题后再次make,生成wpa_supplicant和wpa_cli,整个移植成功完成

    • 将wpa_supplicant和wpa_cli文件通过nfs方式copy到开发板中的,然后放到开发板根文件系统的/usr/bin目录下

    • 断电重启后wpa_supplicant工具就可以使用了,下面进行wifi配置

  • WIFI网络配置

    • 将usb wifi的SDK包DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/下的RT2870STA.dat文件通过nfs方式copy到开发板中,并将其放在开发板的/etc/Wireless/RT2870STA/目录下(Wireless和RT2870STA文件夹需要自己创建)

      /etc/Wireless/RT2870STA/RT2870STA.dat
    • 创建/etc/wpa_supplicant.conf文件,其内容如下:

      ctrl_interface=/var/run/wpa_supplicant
      
      network={
              key_mgmt=WPA-PSK
              ssid="303"
              psk="66668888"
      }

      说明:

      • key_mgmt:加密方式
      • ssid:wifi名称
      • psk:wifi密码
    • 连接wifi

      • 先确保wifi驱动装载成功以及wifi网络配置ok

      • 开启无线网卡(网卡名正常默认有ra和wlan两种):

        ifconfig ra0 up
      • 连接无线网络:

        wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0
      • 查看连接状态:

        wpa_cli -i ra0 status
      • 手动配置IP:

        ifconfig ra0 192.168.1.89
      • 配置网关:

        route add default gw 192.168.1.1 dev ra0
      • ping网关:

        ping -I 192.168.1.89 192.168.1.1
        • -I :指定网卡,192.168.1.89是上面设置的无线网卡IP
      • ping外网IP:

        ping -I 192.168.1.89 8.8.8.8
      • 配置DNS:

        • 创建/etc/resolv.conf文件,内容如下:
          nameserver 198.168.1.1
          说明:
          • 198.168.1.1即为网关地址即可
      • ping域名:

        ping -I 192.168.1.89 www.baidu.com
        • 如果没有设置DNS,则域名是无法ping通的
      • /etc/network/interfaces

        auto lo
        iface lo inet loopback
        
        auto eth0
        iface eth0 inet static
        address 192.168.1.10
        netmask 255.255.255.0
        gateway 192.168.1.1
        
        auto ra0
        iface ra0 inet static
        address 192.168.1.89
        netmask 255.255.255.0
        gateway 192.168.1.1
        • 本来IP配置可以放在/etc/network/interfaces中的,但开发板根文件系统没有这个文件,且自己创建后网卡设置依旧不起作用
      • 做个wifi连接脚本来实现上述wifi配网步骤,内容如下:

        #!/bin/sh
        
        ifconfig eth0 down
        ifconfig ra0 up
        wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0
        wpa_cli -i ra0 status
        ifconfig ra0 192.168.1.89
        route add default gw 192.168.1.1 dev ra0
        • 实测发现如果不关闭有线eth0的话无线ra0容易出问题
      • 使用DHCP方式自动获取IP和DNS:

        #!/bin/sh
        
        ifconfig eth0 down
        ifconfig ra0 up
        wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0
        udhcpc -i ra0
        • 出现问题:无法ping通网关,使用ifconfig命令发现ra0的IP并没有被设置

        • 解决问题:将busybox源码目录下的/examples/udhcp/simple.script文件通过nfs方式传输到开发板/usr/share/udhcpc/目录下,并重命名为default.script,注意可执行权限

        • 一定要先执行指令:wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 连接wifi成功后再执行命令:udhcpc -i ra0

  • 纯wifi无线调试环境搭建

    • ubuntu、windows、开发板三者都做STA,并连接同一AP(就是连上同一个wifi)

    • 确保上述wifi配置环境成功部署到开发板中,在/etc/profile文件中添加wifi配网命令[添加在mount挂在前面]

      ifconfig eth0 down
      ifconfig ra0 up
      wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0
      udhcpc -i ra0
    • 点击虚拟机“编辑”->“虚拟网络编辑器”,选择“桥接模式”,桥接至windows电脑的无线无线网卡上

    • 确保ubuntu中ip跟开发板mount挂载的主机IP一致

    • 重启开发板,成功挂载ubuntu的nfs

  • wifi sta模式ortp传输实验

    • 参考之前的rtp传输实验,修改sample_comm_venc.c中的LOCAL_HOST_IP,将其改为windows连接的wifi的ip

    • 重新编译,生成sample_venc程序,放到nfs目录下

    • 打开VLC播放器,点击“媒体”->“打开文件”,选择“demo.sdp”[将demo.sdp中的IP改为windows连接的wifi的ip]

    • 在开发板中执行该程序:./sample_venc 0

  • USB WIFI AP模式驱动移植

    • 参考“USB WIFI STA模式驱动移植”,AP模式不需要wpa_supplicant工具移植

    • /etc/Wireless/RT2870AP/RT2870AP.dat中需要的改动处:SSID、AuthMode、EncrypType、WPASK

      说明

      SSID:wifi名称,例:SSID=testap
      AuthMode:AP认证模式,例:AuthMode=WPA2PSK
      EncrypType:加密方式,例:EncrypType=TKIP;AES
      WPAPSK:密码,例:WPAPSK=12345678
    • 修sample_comm_venc.c,可通过读取IP_CONFIG文件获取远端IP,解决电脑重启后自动分配的IP改变而造成开发板视频码流无法传输到PC端VLC播放器的问题

  • 新增rtsp传输h.264码流代码,更多rtsp学习可参考个人Module仓库的rtsperver分支[https://gitee.com/source-c/Module/tree/rtspServer/]

  • 新增OSD叠加显示示例代码【sample_osd】,这块主要是熟悉海思API

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值