1. CubieBoard 开发板系统安装

首先,下载相关资料,包括系统镜像、Win32DiskImager、SecureCRT等,下载页面见附录。然后将系统镜像解压出来,通过以下工具或方法写到TF卡中。 法1:使用Win32DiskImager工具安装; 法2:使用DD命令恢复,比如:

dd if= cubieboard2-linux3.3-SD-card-image of=/dev/sdX

在执行上述命令前需要将TF卡挂载到linux系统上,并且明确TF卡到底是哪个盘(fdisk -l)。 取出TF,安装到机器上,然后按照要求运行。 系统安装完成后,接下来就需要配置开发环境了。 (1)安装USB2TTL驱动;(2)启动cb,查看串口端口,配置串口相关参数,在端口设置选项卡中设置速率为“115200”;(3)打开SecureCRT,配置相关参数。

2. 一般V4L2的采集过程

(1). 打开视频设备

int fd = open("/dev/video0",O_RDWR);

(2). 设定属性及采集方式

属性查询:ioctl的VIDIOC_QUERYCAP选项是用来检查内核设备是否和规范兼容,也可以顺便看看这些设备所能够支持的函数和I/O方法,一举两得。

struct v4l2_capability cap;
if(-1 == ioctl(fd,VIDIOC_QUERYCAP,&cap))
{
        printf("VIDIOC_QUERYCAP failure!n");
        return -1;
}

所有的V4l2驱动都必须支持VIDIOC_QUERYCAP方法,应用程序都应该在打开设备之后调用该方法。 (3). 检查当前视频设备支持的标准和设置视频捕获格式

struct v4l2_format fmt;

(4). 分配内存

VideoBuffer *buffers = calloc(req.count, sizeof(*buffers));

(5). 启动开始采集

ioctl(fd,VIDIOC_QUERYBUF,&buf);
ioctl(fd, VIDIOC_QBUF, &buf)
ioctl(fd,VIDIOC_STREAMON,&type);
ioctl(fd,VIDIOC_DQBUF, &buf);

(6). 处理采集数据

if(-1 == ioctl(fd,VIDIOC_DQBUF, &buf))
{
        printf("can't dqbufn");
        return -1;
}
imageProcess(buffers[buf.index].start);

3. 交叉编译

对于CubieBoard,其程序既可以使用交叉编译器,也可以使用系统自带的gcc编译器,而且在板子上需要任何软件(比如emacs、tftpd、ssh等)均可以通过使用apt-get命令在线安装,但是前提是开发板事先已经连接互联网。 在ubuntu下安装交叉编译器最方便的做法是使用如下命令:

sudo apt-get install gcc-arm-linux-gnueabihf

由于本程序使用了jpeglib图像处理库,故需要在板子上安装该库(apt-get install libjpeg-dev)。编译命令如下所示:

gcc capture.c -ljpeg -o capture

参考链接:
http://linux-sunxi.org/Cubieboard/FirstSteps
http://cubieboard.org/2012/11/15/install-ubuntu-with-berryboot/
http://linux-sunxi.org/Cubieboard2_wheezy_image
http://www.berryterminal.com/doku.php/berryboot_a10
http://linuxtv.org/downloads/v4l-dvb-apis/capture-example.html
http://www.twam.info/linux/v4l2grab-grabbing-jpegs-from-v4l2-devices

所需资料:
http://dl.linux-sunxi.org/users/hramrach/cubieboard2-linux3.3-SD-card-image/
https://launchpad.net/win32-image-writer/