freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于嵌入式linux的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的研究與設(shè)計(jì)畢業(yè)論文(參考版)

2025-06-30 20:16本頁(yè)面
  

【正文】 int ret。 打開設(shè)備后,調(diào)用ioctl函數(shù)初始化V4L2設(shè)備參數(shù)。 return 1。在Linux操作系統(tǒng)中,系統(tǒng)里的全部硬件設(shè)備都被看作文件,視頻采集外設(shè)也同樣是,當(dāng)系統(tǒng)內(nèi)核發(fā)現(xiàn)到有攝像頭等視頻設(shè)備時(shí),就會(huì)把它的驅(qū)動(dòng)程序注冊(cè)到內(nèi)核,一般情況下攝像頭等視頻設(shè)備在內(nèi)核中的主設(shè)備號(hào)是81,一般在文件系統(tǒng)里的視頻采集節(jié)點(diǎn)是/dev/video0,因此首先調(diào)用系統(tǒng)函數(shù)open( )來(lái)打開視頻設(shè)備,如下:int fd。input and output queues 視頻采集程序的實(shí)現(xiàn) 。最后,應(yīng)用程序?qū)⑻幚硗陻?shù)據(jù)的幀緩沖區(qū)重新放入視頻采集輸入隊(duì)列,這樣可以循環(huán)采集。驅(qū)動(dòng)程序接下來(lái)采集下一幀數(shù)據(jù),放入第二個(gè)幀緩沖區(qū),同樣幀緩沖區(qū)存滿下一幀數(shù)據(jù)后,被放入視頻采集輸出隊(duì)列。應(yīng)用程序需要將上述幀緩沖區(qū)在視頻采集輸入隊(duì)列排隊(duì)(VIDIOC_QBUF),然后可啟動(dòng)視頻采集。mand在進(jìn)行V4L2開發(fā)過(guò)程中,一般會(huì)用到以下的命令標(biāo)志符,這些函數(shù)原型一般定義在include/linux/。structure結(jié)構(gòu)體功能描述struct v4l2_requestbuffers rb向驅(qū)動(dòng)申請(qǐng)幀緩沖的請(qǐng)求,里面包含申請(qǐng)的個(gè)數(shù),對(duì)應(yīng)命令VIDIOC_REQBUFSstruct v4l2_capability cap設(shè)備功能的基本信息,比如是否是視頻輸入設(shè)備,對(duì)應(yīng)命令VIDIOC_QUERYCAPstruct v4l2_input input視頻輸入struct v4l2_standard std視頻的制式,對(duì)應(yīng)命令VIDIOC_QUERYSTDstruct v4l2_format fmt幀的格式,比如寬度,高度等struct v4l2_buffer buf代表驅(qū)動(dòng)中的一幀,對(duì)應(yīng)命令VIDIOC_QUERYBUFstruct v4l2_std_id stdid視頻制式,例如:V4L2_STD_PALstruct v4l2_queryctrl query查詢的控制struct v4l2_control control具體控制的值2.ioctl命令。 API函數(shù)常用結(jié)構(gòu)體Table 可以用下面的一些常用的函數(shù)對(duì)V4L2進(jìn)行操作和訪問(wèn),這些函數(shù)均可在應(yīng)用程序中直接調(diào)用。雖然V4L2驅(qū)動(dòng)程序包含了一個(gè)V4L應(yīng)用程序的兼容模式,但實(shí)際上,可能并不完全支持,因此有可能原來(lái)能被Linux找到的設(shè)備,在使用V4L2后就無(wú)法被識(shí)別了。V4L2采用的是二層的體系構(gòu)架,上層是關(guān)于V4L2的應(yīng)用程序所使用的API接口,下層是視頻采集設(shè)備的驅(qū)動(dòng)程序,一般的學(xué)習(xí)和研究的目標(biāo)是關(guān)于第一層的應(yīng)用程序編程,使用V4L2的API接口可用來(lái)控制視頻設(shè)備,完成相應(yīng)的操作和功能。近些年V4L2被廣泛的使用在嵌入式視頻圖像監(jiān)控程序中。例如,當(dāng)應(yīng)用程序?qū)υO(shè)備文件執(zhí)行寫操作時(shí),Linux內(nèi)核將通過(guò)調(diào)用 file_operations結(jié)構(gòu)中的write函數(shù)來(lái)實(shí)現(xiàn)。在結(jié)構(gòu)體struct file_operations中,定義了對(duì)中斷的處理實(shí)現(xiàn),內(nèi)存映射功能以及對(duì)I/O通道的控制接口函數(shù)ioctl命令的實(shí)現(xiàn)等。Video4Linux(簡(jiǎn)稱V4L)是Linux操作系統(tǒng)中關(guān)于視頻設(shè)備、音頻設(shè)備的內(nèi)核驅(qū)動(dòng),它為視頻設(shè)備和音頻設(shè)備的應(yīng)用程序編程提供一系列API,用戶只需調(diào)用它提供的API即可實(shí)現(xiàn)對(duì)這些設(shè)備的操作和控制。系統(tǒng)軟件平臺(tái)的成功建立,為本課題后面的視頻采集和傳輸打下了結(jié)實(shí)基礎(chǔ)。首先介紹了Bootloader的基本概念,對(duì)Uboot的整體結(jié)構(gòu)和啟動(dòng)過(guò)程進(jìn)行了詳細(xì)的分析,根據(jù)本系統(tǒng)所選擇的硬件對(duì)Uboot進(jìn)行了移植,并且根據(jù)S3C2440A處理器啟動(dòng)后內(nèi)存映射特性,增加了Uboot對(duì)NAND Flash操作的支持,提出了一種能自動(dòng)識(shí)別NOR Flash和NAND Flash啟動(dòng)的Uboot的方法。至此,一個(gè)最基本的嵌入式根文件系統(tǒng)就制作完成了。 使用mkyaffs2image工具將根文件系統(tǒng)生成映像文件:mkyaffs2image rootfs , flash中的根文件系統(tǒng)區(qū)。 (6)創(chuàng)建etc/fstab文件。 (2)在etc/ (3)etc/inittab文件:仿照Busybox的examples/inittab文件,在etc/目錄下創(chuàng)建一個(gè)inittab文件。 init進(jìn)程根據(jù)/etc/inittab文件來(lái)創(chuàng)建其他的子進(jìn)程,比如調(diào)用腳本文件配置IP地址,掛載其他的文件系統(tǒng),最后啟動(dòng)shell等。 編譯busybox到指定目錄:cd /study /mini2440 /make CONFIG_PREFIX=/study/mini2440/rootfs install,即會(huì)在rootfs目錄下會(huì)生成目錄bin、sbin、usr和文件linuxrc的內(nèi)容。 配置busybox,這里只關(guān)心改動(dòng)的地方。3.編譯和安裝Busybox[31]。2.建立動(dòng)態(tài)的鏈接庫(kù)。 進(jìn)入study/mini2440,創(chuàng)建一個(gè)shell的腳本用于構(gòu)建根文件系統(tǒng)的各個(gè)目錄。opt給主機(jī)額外安裝軟件所擺放的目錄。 根文件系統(tǒng)目錄結(jié)構(gòu)Table The structure of root file 構(gòu)建嵌入式根文件系統(tǒng) 現(xiàn)在大部分開發(fā)板都可以支持yaffs2文件系統(tǒng),它是專門針對(duì)嵌入式設(shè)備,特別是使用Nand flash作為存儲(chǔ)器的嵌入式設(shè)備而創(chuàng)建的一種文件系統(tǒng),早先的yaffs僅支持小頁(yè)(512byte/page)的Nand flash,使用yaffs2就可以支持大頁(yè)的 Nand flash。39。 選擇Device driversMultimedia devicesVideo capture adaptersV4L USB devices選項(xiàng),選中USB Video Class (UVC)。 Linux內(nèi)核的Yaffs2配置 Linux kernel configuration about Yaffs23.配置內(nèi)核使其支持USB攝像頭驅(qū)動(dòng) 本文采用的是UVC驅(qū)動(dòng)USB攝像頭,UVC是一種視頻設(shè)備的技術(shù)規(guī)范,全稱為USB Video Class,這是一個(gè)為 USB視頻設(shè)備提供驅(qū)動(dòng)的開源項(xiàng)目[28]。2.選擇內(nèi)核支持Yaffs2文件系統(tǒng)。configuration of Linux1. 選擇System Type S3C2440 Machines選項(xiàng)。 ,因此可以參考系統(tǒng)已有配置信息進(jìn)行定制。 并將其解壓,得到y(tǒng)affs2源代碼,然后進(jìn)入yaffs2源代碼目錄執(zhí)行:cd yaffs2 ./ c /study/mini2440/ ,可以看到已經(jīng)多了一個(gè)yaffs2目錄。 //添加platform_add_devices(mini2440_devices,ARRAY_SIZE(mini2440_devices))。 = amp。mini2440_fb_info)。static struct s3c2410_platform_nand mini2440_nand_info = { .tacls = 20, .twrph0 = 60, .twrph1 = 20, .nr_sets = ARRAY_SIZE(mini2440_nand_sets), .sets = mini2440_nand_sets, .ignore_unset_ecc = 1, }。 Flash的分區(qū)信息,具體內(nèi)容如下: static struct mtd_partition mini2440_default_nand_part[] = {[0] = {//bootloader所在的分區(qū),對(duì)應(yīng)/dev/mtdblock0 .name = Uboot, .size = 0x00060000, .offset = 0, },[1] = { //uboot的參數(shù)區(qū) .name = param, .offset = 0x00060000, .size = 0x00020000, //不會(huì)影響系統(tǒng)啟動(dòng),對(duì)應(yīng)/dev/mtdblock1 },[2] = { //內(nèi)核所在的分區(qū),大小為 5M,對(duì)應(yīng)/dev/mtdblock2 .name = Kernel, .offset = 0x00080000, .size = 0x00500000, },[3] = {//文件系統(tǒng)分區(qū),主要用來(lái)存放yaffs2文件系統(tǒng)內(nèi)容對(duì)應(yīng)/dev/mtdblock3 .name = root, .offset = 0x00580000, .size = 1024 * 1024 * 1024, }, [4] = {//此區(qū)域代表了整片的nand flash,主要是預(yù)留使用 .name = nand, .offset = 0x00000000, .size = 1024 * 1024 * 1024, }}。除此之外,還要在mini2440_machine_init(void)函數(shù)中,把smdk_machine_init()函數(shù)調(diào)用注釋掉,因?yàn)楹竺姹疚膶⒕帉懽约旱某跏蓟瘮?shù),不需要調(diào)用原來(lái)的smdk2440。 void __init smdk2440_map_io(void)函數(shù)中,把其中的16934400(代表原SMDK2440目標(biāo)板上的晶振是 )改為mini2440開發(fā)板上實(shí)際使用的12000000(代表 mini2440 開發(fā)板上的晶振12MHz,)。 將/study/mini2440/,因?yàn)镸ini2440和smdk2440的結(jié)構(gòu)最為相似,上面的外圍電路也很相似,所以在其基礎(chǔ)上進(jìn)行修改移植。define MACH_TYPE_Q2440 1997 define MACH_TYPE_2440 1998 define MACH_TYPE_MINI2440 1999 在study/mini2440/。在文件/study/mini2440/。大約在182行,修改成下面的代碼,使其平臺(tái)是ARM平臺(tái),交叉編譯是armlinuxexport KBUILD_BUILDHOST := $(SUBARCH)ARCH ?= arm CROSS_COMPILE ?= armlinux 3.修改機(jī)器碼。cd study/mini2440 tar zxvf 2.修改Makefile文件。block diagram of theLinux操作系統(tǒng)內(nèi)核的功能框圖如圖 。實(shí)現(xiàn)代碼如下:/* recovery */ldr r0, =(0xdeadbeef)ldr r1, =( (428)|(34)|(32) )str r0, [r1] Linux內(nèi)核的移植與定制在對(duì)嵌入式Linux內(nèi)核進(jìn)行移植和定制之前首先介紹一下一般的Linux操作系統(tǒng)的內(nèi)核組成。boot_from_norFlash啟動(dòng)boot_from_nand cmp*//*如果是0則是從 NANDr0, [r1]r1, 0x3c /*讀取0x0000003c位置開始的四個(gè)字節(jié)str movr1, = ((428)|(34)|(32)) 實(shí)現(xiàn)代碼如下:check_nand_nor: ,全局中斷向量之后的“.balignl 16,0xdeadbeef”作為檢測(cè)數(shù)據(jù)。在cpu/arm920t/:……/*設(shè)置UBoot在RAM中的起始位置*/ldr r0, = UBOOT_RAM_BASE/*NANDFlash的起始位置*/mov r1, 0x0/*UBoot的長(zhǎng)度,128KB*/mov r2, 0x20000/*nand_read_ll(),實(shí)現(xiàn)從Nand flash中把UBoot搬運(yùn)到RAM中*/bl nand_read_ll/*返回值為0,搬運(yùn)成功*/tst r0, 0x0/*檢測(cè)RAM中前4KB的內(nèi)容與NANDFlash前4KB是否相同*/beq ok_nand_read …… 自動(dòng)識(shí)別FLASH的實(shí)現(xiàn)根據(jù)S3C2440啟動(dòng)后內(nèi)存映射圖可知,無(wú)論是從NOR Flash啟動(dòng)還是從NAND Flash啟動(dòng),其4K的內(nèi)部SRAM都被映射到了0x40000000,而在NAND Flash啟動(dòng)的時(shí)候,這塊內(nèi)存同時(shí)還被映射到了0x00000000處。UBoot的一般大小都超過(guò)100K,遠(yuǎn)大于4K,所以實(shí)現(xiàn)從NAND啟動(dòng)的原理就是讓前4K代碼完成基本初始化,重要的是把NAND Flash中的UBoot代碼復(fù)制SDRAM中,從而跳到SDRAM中去執(zhí)行[25]。三星公司的S3C2440自帶NAND Flash控制器,寄存器的地址是從nGCS4的地址開始。本文采用的開發(fā)板上同時(shí)配有Nor Flash和Nand Flash,因此本文給出一種可以自動(dòng)識(shí)別這兩種Flash并且同時(shí)支持在這兩種Flash中啟動(dòng)的方案。 Flash/Nor Flash啟動(dòng)的Uboot實(shí)現(xiàn) 啟動(dòng)加載程序是嵌入式系統(tǒng)上電后最先執(zhí)行起來(lái)的一部分代碼?,F(xiàn)在編譯uboot。配置主要通過(guò)宏定義來(lái)完成。修改源文件/board/smdk2410/,參考具體開發(fā)板原理圖和數(shù)據(jù)手冊(cè)來(lái)設(shè)置值。其中波特率設(shè)置需要特別注意,因?yàn)樵创a中通過(guò)函數(shù)get_PCLK( )讀取S3C2440A的主頻,本課題使用主頻為400MHz,由于S3C2410和S3C2440A的UART差別不大,所以cpu/arm
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1