# 2023毕设记录之基于Linux的QT嵌入式网络视频监控系统 **Repository Path**: indecisive/Linux_QT ## Basic Information - **Project Name**: 2023毕设记录之基于Linux的QT嵌入式网络视频监控系统 - **Description**: 本仓库介绍了基于Linux的QT嵌入式网络视频监控系统的设计与实现,硬件平台为核心芯片为S3C6410的TE6410开发板,操作系统选用的Linux3.0.1版本,Qt版本为Qt5.14.2,摄像头前端为UVC免驱摄像头。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 10 - **Forks**: 2 - **Created**: 2023-06-04 - **Last Updated**: 2025-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 2023毕设记录之基于Linux的QT嵌入式网络视频监控系统 #### 项目介绍 本仓库介绍了基于Linux的QT嵌入式网络视频监控系统的设计与实现,硬件平台为核心芯片为S3C6410的TE6410开发板,虚拟机选用为Vmware16.2.0虚拟机,Ubuntu18.04操作系统,移植到开发板的Linux操作系统选用的Linux3.0.1版本,Qt版本为Qt5.14.2,摄像头前端为UVC免驱摄像头。 #### 简介 本文章将介绍:1.视频监控系统的总体框架设计方案;2. 交叉编译环境的搭建;3.Linux操作系统的分析与移植过程;4.网络视频监控系统的实现 #### 1.视频监控系统的总体框架设计方案 系统的核心设计理念在于将视频前端与嵌入式网络服务器融为一体。摄像头进行视频数据采集后,将数据通过内部总线传输到系统服务端,服务端再对视频数据进行压缩存储等处理之后,经服务端的web服务器,将视频数据信息传输至网络上,用户端就能使用访问互联网来获取视频信息。 ![系统设计方案](image1.png) #### 2. 交叉编译环境的搭建 在嵌入式Linux开发中,对ARM平台进行开发时,一般采用交叉编译的方式。因为系统架构的不同,比如在x86下的Ubuntu系统生成的文件,无法在windows平台和arm平台上执行,因此,有必要使用目标平台的交叉编译工具包来编译程序,以使其适应目标平台的系统结构。所谓交叉编译是在系统架构不同的两个平台上进行的,通常是指在资源富余和性能较好的PC宿主机上,通过交叉编译工具链去编译目标机程序的过程。 下面介绍交叉编译器的具体安装过程:宿主机采用Vmware16.2.0虚拟机, Ubuntu18.04操作系统,到首先输入命令sudo -s进入root模式,然后将官方提供的 arm-linux-gcc-4.3.2.tgz压缩包拷贝到虚拟机的/forlinx目录下,在终端中输入命令mkdir/usr/local/arm 创建新的目录。在终端中输入命令tar zxvf arm-linux-gcc-4.3.2.tgz -C /forlinx。为了我们可以更方便的执行编译程序,我们需要将交叉编译的路径添加到环境变量中。 在终端中执行:gedit /etc/profile,进入修改文档界面,在最下面添加如下内容: ``` export PATH=/usr/local/arm/4.3.2/bin:$PATH export TOOLCHAIN=/usr/local/arm/4.3.2 export TB_CC_PREFIX=arm-linux- export PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi ``` 保存,退出。 重新启动系统之后,在虚拟机终端键入:/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc -v或者arm-linux-gcc -v,便可以在终端中得到编译器的版本信息,如图所示: ![交叉编译环境的搭建](image2.png) 如此表明交叉编译器安装成功。 #### 3. Linux操作系统的分析与移植过程 ##### 3.1 Linux的启动过程 Linux的启动过程可分为四个主要的过程,第一步系统引导程序的运行,在这个模块里,专用的引导程序将对部分核心设备进行初始化操作,并且为操作系统的后续运行创造出合适的环境;第二步,Linux系统将会在第一步中创建的环境下进行启动,Linux启动将会带出CPU的初始化、系统定时器的启动等操作,同时还会进行页表的初始化;第三步便是对我们所移植的文件系统进行挂载,这一步是为了保证Linux可以正常的运行;第四步便是系统启动后的检测,Linux将会查询是否存在正确可用的文件系统,若存在,则Linux将会对文件系统进行挂载操作,此时用户便可以进行正常的文件管理操作动作,Linux系统可稳定工作;若无文件系统,Linux系统将会崩溃。引导系统作用在稳定引导Linux操作系统运行,文件系统保证Linux系统可以稳定的文件管理操作。 ![Linux操作系统启动过程](image3.png) ##### 3.2 Linux操作系统移植过程 首先我们需要准备三份文件,分别为编译好的Linux操作系统映像文件、根文件系统、uboot源文件(这三个文件一般开发板提供的资料包中都有,至于这三个文件具体是如何生成的,有机会另述文章分析)如图所示。一张至少2G的SD卡,读卡器。 ![移植所需三大软件](image4.png) 1.将SD卡用读卡器插上电脑,实现将SD格式化为FAT32格式; 2.使用SD_Writer烧写工具将mmc_ram256.bin(或者mmc_ram128.bin 根据开发板而定)烧写到SD卡,如图所示; ![烧写1](image5.png) 3.将上述的三个文件复制粘贴到SD卡中,然后将SD卡插入开发板,将开发板切换到以SD卡启动模式,即以引脚00011111,如图所示 ![SD卡启动模式](image6.png) 4.将开发板插上电,然后用串口线和电脑相连接,电脑上打开串口调试工具(具体串口调试工具的使用方法不再赘述),打开开发板,可见电脑上的串口调试工具会出现很多信息,便进入了Linux操作系统的移植过程,烧写完成后,蜂鸣器会发出滴滴的提示声; 5.弹出SD卡,将开发板切换至nand flash启动模式,即以引脚00011001,如图所示 ![nand flash启动模式](image7.png) 6.稍等片刻后开发板上便会出现图形界面,跟随操作系统的用户引导,便可进入操作系统,如图所示 ![Linux操作系统主界面](image8.jpg) #### 4. 网络视频监控系统的实现 ##### 4.1 摄像头图像采集本地显示 当我们移植完操作系统后,便可以进行本地视屏显示的测试,我们首先将USB摄像头(罗技270摄像头)插到开发板上,接着使用开发板提供的luvcview开源项目进行测试: 1.把 luvcview可执行文件拷贝到开发板的 /mnt 目录下,在串口调试工具中执行 ``` ./luvcview -d /dev/video2 -f jpg -s 800x600 ``` 在LCD屏幕上即可看到采集到的图像。如图所示。 ![输入图片说明](image9.png) 2.补充: ``` -d 指定摄像头的设备节点 -f 指定摄像头传给系统的数据格式,-jpg代表为 mjpeg 码流,另外还有 -yuv 这样传给系统的数据yuv422格式的码流。 -s 指定摄像头采集的分辨率为 800x600 查看您的摄像头支持的分辨率: ./luvcview -d /dev/video2 -L ``` ##### 4.2 网络视频监控的实现(Qt界面搭建采用的是开源项目,见目录) 1.将Video_Server中的文件打包移动到PC机的虚拟机中去,之后将Makefile修改如下: ``` CC := arm-linux-gcc //编译器的执行路径 src := $(wildcard *.c) objs := $(patsubst %.c, %.o, $(src)) target := Video_Server $(target): $(objs) $(CC) $^ -lpthread -o $@ dep_files := $(foreach f, $(objs), .$(f).d) dep_files := $(wildcard $(dep_files)) ifneq ($(dep_files), ) include $(dep_files) endif %.o: %.c $(CC) -Wp,-MD,.$@.d -c $< -o $@ //下面的删除了,不然一直报错,如今未解决,但删除并不影响运行 ``` 2.在文件目录下执行make,得到Video_Server可执行文件; 3.将可执行文件移动到开发板的 /mnt 目录下; 4.使用QT Creater打开Video_Client工程文件,run,可得到如下界面 ![QT界面](image10.png) 5.下面我们需要做的就是将开发板通过网线插上房间的路由器,并且电脑也连接到这个路由器,使其二者处于同一局域网下,并且将UVC摄像头与开发板相连接; 6.在串口调试工具上输入 udhcpc -i eth0 以动态获取IP地址; 7.在串口调试工具上进入开发板的 /mnt 目录下,执行 ./Video_Server -d /dev/video0 以获取设备端口号; 8.在客户端界面填写正确的ip地址和端口号,选择正确的通讯协议后,点击连接,便可获取视频信息; ![视频采集图像](image11.png) 网络视频监控系统已完成!!! #### 总结 从开年来的三月份开始,我就陆陆续续的展开对这个项目的着手设计了,首先通过对类似的硕士论文的大量阅读从而对整体的框架思路有了一个大致的理解与思考,之后去学校实验室借到了6410的开发板便开始实际操作,万事开头难,一开始我并没有开发板的资料,然后去b站、CSDN上都找了类似的资料,但始终不是与我这个项目所配对的,再后来去开发板的官网终于下载到了资料,跟着资料一步一步做,但是实际开发总是和说明书不同的,就单单那个交叉编译环境的搭建几个小小的步骤整整耗费了我一整晚,中间环节总会出现各种各样的问题,例如环境配置问题、文件目录不匹配、操作系统版本不统一等等。再然后就是对于摄像头的选择,开始想用ov9650摄像头,但是碍于这种摄像头第一现货在京东上比较贵,其次在操作系统上需要驱动程序的安装支持,最后放弃了而选择使用UVC免驱摄像头,我买了两个摄像头分别是罗技270的摄像头和另外一个UVC免驱摄像头。随之便是Qt开源项目的使用,关于make那个步骤其实困扰了我很久,一开始make的时候总是报错,查了大量的资料发现有可能是Makefile中关于缩进的问题,我也做了一些改正,但是始终无法运行,最后还是把报错的直接删除,因为那个部分应该是关于内存释放的部分,删除了并无大碍。五月初有好几天天天熬夜写论文,改设计,但是最终毕业设计终于还是如约完成,在此期间我深刻的体会到了书面知识和动手实践完全是两个层次,纸上得来终觉浅,绝知此事要躬行;学术研究也容不得半点马虎。希望以后在嵌入式开发研究的道路上能够精益求精,越走越远,同时在此也为我的毕业设计画上一个圆满的句号。