调试程序的时候,总是插拔sd卡很不方便,想到用tftp或者nfs,两者相比较而言,nfs比tftp更加有优势,将宿主机的一个目录挂载到板子上,直接在宿主机上修改程序,板子上即可生效。故采用nfs的形式,zedboard加电,启动进入内核,打开串口,这里对于串口怎么配置可以查看前面的博客点击打开链接,输入如下的命令查看zedboard上运行的linux内核是否支持nfs:
cat /proc/filesystems如果里面没有发现nfs支持项,则我们需要对内核重新进行编译。使用下面的命令下载Xlinx维护的基于zedboard的Linux内核:
git clone https://github.com/Digilent/linux-digilent下载完成后,进入Linux源码目录,执行下面的命令:
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- digilent_zed_defconfig先执行官方的默认配置选项。执行如下的命令:
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- menuconfig出现配置界面后,按照如下的步骤进行配置,这个地方不可多选,否则内核启动时候,会出现文件系统无法正确挂载等等的问题:
File systems ---> [*] Network File Systems ---> <*> NFS client support <*> NFS client support for NFS version 2 <*> NFS client support for NFS version 3 [*] Root file system on NFS <*> NFS server support [*] NFS server support for NFS version 3选好后,保存退出。然后进行内核的编译工作,执行如下命令:
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-经过一段时间后,编译完成,拔出sd卡,更新下内核镜像文件,然后再将sd卡插入,启动后可以发现,内核已经支持了nfs。
将mjpeg-streamer移植到zedboard上时候,它依赖一个叫libjpeg的库文件,所以编译mjpg-streamer之前需要对此库文件进行编译。具体操作如下:
1、libtools工具
下载地址:http://mirrors.ustc.edu.cn/gnu/libtool/,下载libtools-2.2.10.tar.gz
解压缩后,执行./configure make make install
2、jpeg库的移植
首先下载jpeg库源代码,下载地址: http://www.ijg.org/files/,下载jpegsrc.v6b.tar.gz。
解压缩文件,将/libtool-2.4.2/libltdl/config目录下的config.guess config.sub这两个文件拷贝到jpeg源代码的解压缩目录下。然后配置
./configure CC=arm-xilinx-linux-gnueabi-gcc --host=arm-unknown-linux –prefix=../mjpg-streamer/jpeg-6b --enable-shared --enable-static然后执行make,编译完成后,在此目录下创建以下几个目录:
mkdir -p bin include lib man然后执行make install,就将编译好的文件安装到这几个目录中。然后在mjpg-streamer的目录下新建jpeg-lib文件夹,将这几个文件夹拷贝到jpeg-lib下。
进入mjpg-streamer目录下,修改几个Makefile文件,这里需要注意的是修改plugins/input_uvc目录下的Makefile文件,需要修改以下几处。
首先在此makefile文件中添加头文件与库文件的定义,在文件开始处,如下所示:
############################################################### # # Purpose: Makefile for "M-JPEG Streamer" # Author.: Tom Stoeveken (TST) # Version: 0.3 # License: GPL # ############################################################### CC = arm-xilinx-linux-gnueabi-gcc INCLUDE=../../jpeg-lib/include LIB=../../jpeg-lib/lib然后需要修改的两处为:
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I$(INCLUDE)
nput_uvc.so: $(OTHER_HEADERS) input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(CC) $(CFLAGS) -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS) -L$(LIB)至此,此目录下的修改完成,然后退到上一级目录,修改各个目录下的Makefile文件,主要是修改编译器,如下所示:
CC = arm-xilinx-linux-gnueabi-gcc所有的修改完成后,回到mjpg-streamer源代码目录下,执行make,就可生成可以在zedboard上运行的程序。
为了避免出现启动摄像头传输数据出现缺少jpeg库的问题,参照前面的博客更新zedboard文件系统,我们拷贝jpeg-lib目录下lib库中所有文件到根文件系统中的lib目录下。然后在板子上测试webcamera即可不会出现错误。