其实还挺忙的,但是这篇文章总结的内容我大概弄了两天,所以还是要总结一下,感觉都比较琐碎,但是免得下次又要重新做一部分的工作浪费精力。
一般网上大部分的教程可能都是教用一台Windows的电脑做客户机,一台Linux的虚拟机,然后连上板子。我直接把Windows的那台机省了,因为我本身也不太习惯用windows做开发环境,使用windows的教程主要是因为可以用ScureCRT这个工具,而Linux上有类似的工具,就是minicom,都是串口工具,下文会提到。
不知道什么是NFS服务器?请自行百科吧,百科如果都看不懂,那估计还是那句老话,估计后面的你也不用看了,可以在底下点个赞然后关闭网页了谢谢。
一般嵌入式的开发都会用到这个东西,因为板子的环境比较封闭,资源比较有限,很难在板上直接开发和调试,所以会使用另一台配置好开发环境的电脑做开发,然后把开发好的文件拷贝到挂载的文件夹中,挂载的文件夹其实就是板子的文件夹共享了。
Ubuntu下使用如下命令安装NFS服务器
sudo apt-get install nfs-kernel-server #root用户可以不用sudo
然后需要配置一下:
vim /etc/exports #NFS最主要的配置文件
#在最下面加上一行
/home/luoyun/nfs *(rw,sync,no_root_squash,no_subtree_check)
#星号签名的文件夹是用来挂载的文件夹,*星号表示同一网段内的所有客户端可以访问。
因为需要挂载,所以每个客户端都需要有IP,这时候我们把网线插上板子,你会发现对应的IP是不会自动分配的,所以要自己手动设置。设置方法如下:
ifconfig eth0 192.168.1.120 #IP根据你的实际内网段填写即可。
minicom也是需要安装的,直接sudo apt-get install minicom就好,然后运行sodu minicom -s进行配置,我们的板子是用USB口连到电脑上的,所以对应的串口一般会是ttyUSB0,如果你的USB还有其他设备,那么可能会是ttyUSB1之类的。然后设置波特率115200,8,1,无流控。
上一点说道的手动设置IP也是要在通过minicom登陆板子后在板子串口上设置的。
继续呆在板子串口里,然后设置挂载文件夹:
mount -t nfs -o nolock 192.168.1.101:/home/luoyun/nfs /opt #假设开发机的IP是192.168.1.101
意思就是把板子的/opt文件夹挂载到开发机的nfs文件夹上。
假设你已经有了海思的SDK,如果没有的话,那就自己找找呗。文件比较大,我也不方便上传。
执行./sdk.unpack,主要执行权限。
为了后续编译不出低级问题,如果开发系统是Ubuntu的话,建议修改默认dash为bash, 命令行执行sudo dpkg-reconfigure dash,然后选择no即可。
编译osdrv主要会出现几个问题,需要一一对应处理:
1. “arm-hisiv100nptl-linux-gcc:command not found”,出现这个问题主要还没有安装海思的编译器和设置环境变量的问题,最好切换到root用户,然后执行osdrv/toolchain里面的cross.instal, 然后再执行source /etc/profile确认环境变量。理论上如果不用root用户操作,可以把/etc/profile中最后一行$PATH的命令复制到命令行执行一遍就可以,不过好像当前情况下一直不成功。
2. 解决了第一个问题之后,很可能会出现第二个问题: ”mkimage:command not found",一开始知道了这个命令ubuntu是不自带的之后,别人发了个mkimage的执行文件给我,我直接拷贝到系统中用,结果我设置好权限之后还是用不了,然后果断放弃,直接安装这个命令,安装方法 sudo apt-get install u-boot-tools.
然后就编译通过了。
如果1.6第一个问题中你用了root操作,并且乖乖的安装了编译器,那么估计是不需要用到在命令行执行$PATH的,但是在这一步,这个工作还确实是省不了了。因为如果不把这个执行了,环境变量没有设置好,无法编译其他文件的。
FFMPEG是PJSIP能支持视频传输或者通话的最重要的依赖库,所以要编译了这个,然后再编译PJSIP才可以有视频的功能。
一定要记住的是编译任何依赖库都要是用arm或海思的编译器编译,才能给后续的程序使用,最后给板子使用,不然只是在电脑编译了是没有用的。
编译命令参考:
./configure --enable-cross-compile --arch=arm --target-os=linux --enable-static --disable-shared --cc=arm-hisiv100nptl-linux-gcc --enable-libx264 --enable-gpl --disable-network --enable-pthreads --enable-small --disable-parsers --disable-debug
如果有需要,可以先编译一下x264,如果没有编译x264,那--enable-libx264也可以删掉。
如果提醒有strip相关的问题,可以用--disable-stripping不使用strip去掉库信息。
最后一步,其实不难,先执行如下命令
./configure --with-ffmpeg=/usr/local/lib --host=arm-hisiv100nptl-linux-
然后修改pjproject2-4/pjmedia/include/pjmedia的config.h, 把#define PJMEDIA_HAS_VIDEO 和#define PJMEDIA_HAS_FFMPEG的0改成1.
保守一点的话,还可以在pjlib/pj/include/config_site.h中写入#define PJMEDIA_HAS_VIDEO 1(官网上的标准配置是需要写这个的)。
最后执行make dep && make。
编译通过后,把可执行文件拷贝到/home/luoyun/nfs那个挂载了的文件夹上即可。
转载请注明出处:http://blog.csdn.net/luoyun614/article/details/46526645
----------------------------------------------------------------------------------------------------------
P.S 组织了一个计算机视觉的开发者交流微信群,目标是汇集计算机视觉和图像处理的开发者分享开发经验,共同探讨技术,有兴趣入群的可以加我微信(WeChat: LaurenLuoYun),请注明“姓名-公司/学校-技术方向”,谢谢。