版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录,第1页,一、 概述,第2页,一、 概述,第3页,一、 达芬奇简介项目资源,第4页,芯片:DM6446 评估板:DVEVM 内核:MontaVista Linux 主机:Redhat Linux 仿真器:XDS510 USB 软件:CCS3.2 工具链:Codec Engine 1.02 C64x+:DSP内核,执行算法 ARM926EJS:ARM内核,主控整个系统 VPSS:由VPFE和VPBE组成 VICP:视频图象协处理器,一、 达芬奇简介项目资源,第5页,DM6446,一、 达芬奇简介项目资源,第6页,DM6446,一、 达芬奇简介项目资源,第7页,DSP Core,内核:C64x
2、升级到C64x+ 指令集:新增ADDSUB2,MAX2,MIN2, DDOTP4,CMPY,DPACK2等指令 片内RAM:L1和L2是各自独立的,而C64x内核中, L1是包含在L2中的 DMA:IDMA+EDMA,支持3D传输,QDMA成为 EDMA的一部分,PaRAM长度增加为8个字长,一、 达芬奇简介项目资源,第8页,ARM Core,内核:ARM926EJS 主存:32bit,DDR2400 EMIF:Nor Flash,NandFlash ATA:HDD,Compact Flash SDIO:MMC,SD USB:USB 2.0 Full Speed 480Mbps EMAC:10
3、/100Mbps Ethernet MACARM,一、 达芬奇简介项目资源,第9页,VPSS,VPSS:Video Process SubSystem VPFE:Video Process FrontEnd CCDC:用于视频和图象的采集,可以直接和CMOS 或者CCD传感器模组相连 H:直方图统计 3A:自动曝光,自动白平衡,自动聚焦 Preview:快视预览 Resizer:1/4x4x的缩放倍数,实现ZOOM,一、 达芬奇简介项目资源,第10页,VPSS,VPSS:Video Process SubSystem VPFE:Video Process FrontEnd CCDC:用于视频和
4、图象的采集,可以直接和CMOS 或者CCD传感器模组相连 H:直方图统计 3A:自动曝光,自动白平衡,自动聚焦 Preview:快视预览 Resizer:1/4x4x的缩放倍数,实现ZOOM VPBE:Video Process BackEnd OSD:用于制作菜单 DAC:4路DAC输出,支持CVBS格式和SVideo格式 数字视频输出:支持816bit YUV格式和24bit RGB格式,一、 达芬奇简介项目资源,第11页,评估板:DVEVM,评估板:DVEVM 附带摄像头,模拟屏,红外遥控器,评估板各种接口十分齐全 DVEVM上有三个可编程器件 做为软硬件协同开发的分界平台 快速评估软件
5、和算法的性能,一、 达芬奇简介项目资源,第12页,评估板:DVEVM,一、 达芬奇简介项目资源,第13页,内核:MontaVista Linux,MontaVistaLinux Pro 内核 文件系统 工具链 DVEVM包含三个组件的评估版 集成开发环境DevRocket(MontaVista DevRocket图形开发环境 ) DVSDK包含四个组件的企业版,一、 达芬奇简介项目资源,第14页,主机配置,TFTP Server NFS Server Minicom 安装的时候禁用防火墙和SELinux,一、 达芬奇简介项目资源,第15页,仿真器:XDS560 PCI,算法开发流程中的Emul
6、ator 算法的功能验证必须通过仿真器和目标板进行,一般的, Simulator验证通过的代码,Emulator大都正确 底层开发使用,调试硬件,烧写Flash,一、 达芬奇简介项目资源,第16页,软件:CCS3.2,老版本的CCS不支持C64x+的内核 老版本的CCS不支持更高版本的BIOS 我们推荐使用的CCS版本: Code Composer Studio Version 相关的组件有: DSP BIOS Code Generate Tools XDC ToolsCCS,一、 达芬奇简介项目资源,第17页,工具链:Codec Engine 1.02,Codec Engi
7、ne简称CE CE是什么? CE能干什么? CE由什么组成? CE怎么使用? 没有CE能不能开发算法?,一、 达芬奇简介项目资源,第18页,工具链:Codec Engine 1.02,CE是TI提供的一个软件架构 应用软件通过CE提供的接口调用算法 CE同时支持单核模式和双核模式 CE可以实现双核通信 CE由dsplink,cmem,fc,xdais四个组件和一组VISA的例程构成 没有CE,也可以实现双核系统的开发,一、 达芬奇简介项目资源,第19页,工具链:Codec Engine 1.02,一、 达芬奇简介项目资源,第20页,工具链:Codec Engine 1.02,一、 达芬奇简介项
8、目资源,第21页,工具链:Codec Engine 1.02,一、 达芬奇简介项目资源,第22页,工具链:Codec Engine 1.02,一、 达芬奇简介项目资源,第23页,工具链:Codec Engine 1.02,一、 达芬奇简介项目资源,第24页,工具链:Codec Engine 1.02,一、 达芬奇简介项目资源,第25页,工具链:Codec Engine 1.02,一、 达芬奇简介项目资源,第26页,工具链:Codec Engine 1.02,一、 达芬奇简介项目资源,第27页,工具链:Codec Engine 1.02,一、 达芬奇简介项目资源,第28页,工具链:Codec E
9、ngine 1.02,一、 达芬奇简介项目资源,第29页,工具链:Codec Engine 1.02,一、 达芬奇简介完整设计流程,第30页,获取算法C模型 获取测试序列 VC或GCC下编译算法C模型,并且根据测试序 列生成输 出标准序列 算法C模型的优化 移植到CCS下 算法DSP模型的优化,一、 达芬奇简介完整设计流程,第31页,获取算法C模型 获取测试序列 VC或GCC下编译算法C模型,并且根据测试序 列生成输 出标准序列 算法C模型的优化 移植到CCS下 算法DSP模型的优化 CCS下用Simulator进行仿真 CCS下用Emulator进行功能验证 Linux下用CE工具链进行算法
10、封装 Linux下用DVEVM进行算法功能验证 Linux下进行算法可重入的功能验证 Linux下制作算法演示Demo,一、 达芬奇简介完整工具链,第32页,DSP BIOS Code Generate Tools XDC Tools Framework Component Cmem DSPLink XDAIS Codec Engine,二、程序架构,第33页,三、应用程序设计,第34页,程序包含6个单独的POSIX线程,其中,video,display,capture,audio线程由main线程在其变为 control线程之前创建。 在程序执行起来之后,一共有5个单独的 线程在运行。,三、
11、应用程序设计-目录,第35页,三、应用程序设计优先级说明,第36页,三、应用程序设计优先级说明,第37页,除了main和control线程之外的线程都配置为优先的且优先策略是(SCHED_FIFO)。SCHED_FIFO(先进先出)策略按线程在执行前在列表上存在的时间对列表上的线程进行排序。处于列表首位的线程通常为在列表上存在时间最长的线程,而处于末尾的线程在列表上存在的时间最短。此策略允许一个线程一直运行,直到具有较高优先级的另一个线程已准备好运行,或者直到当前线程自动阻止。如果此线程被占据,它就继续处于其线程优先级列表的首位;如果此线程阻止,当它再次成为一个可运行的线程时,将被添加到此线程
12、所在的优先级列表的末尾。在本工程中, video,capture,display,audio线程分享最高优先级,而control线程具有最低优先级。,三、应用程序设计线程初始化清理同步说明,第38页,线程的初始化和清理同步在本程序中使POSIX条件量来完成。这个在main线程中初始化。在Rendezvous 模块中: typedef struct Rendezvous_Obj int count; pthread_mutex_t mutex; pthread_cond_t cond; Rendezvous_Obj;,用count来表示线程的总数,每初始化完一个线程的时候都使count减1表明本
13、线程初始化完毕且等待其他线程。为了避免冲突,使用互斥量来保护对count的操作。,三、应用程序设计线程初始化清理同步说明,第39页,static inline void Rendezvous_meet(Rendezvous_Handle hRv) pthread_mutex_lock( 当所有线程都初始化完毕后,所有线程同时解锁并开始执行各自的主循环。对于线程完成后的清理工作也类似。这种对缓存共享的方法就不会出现一个线程对缓存操作没有完成的情况下被其他线程访问。,三、应用程序设计Main线程,第40页,Main线程主要的任务是执行必要初始化工作,接收命令行参数并传递给其他线程。如图所示,一开始
14、要检测视频标准,这个是在板子上的拨码开关S3第10个开关,通过FBDev显示设备驱动的FBIO_GETSTD ioctl来得到。令行传递语法参数来设置线程环境。Codec Engine和它的TraceUtil模块初始化来跟踪。Pause模块用来处理过程中的暂停,Rendezvous模块用来同步线程的初始化和清理。最后,控制线程control thread)ctrlThrFxn()被调用,主要main线程变成control线程。,三、应用程序设计Control 线程,第41页,控制线程负责用户接口:红外、OSD显示菜单、OSD显示jpeg图片及jpeg压缩。控制线程也负责更新和显示OSD菜单。在
15、达芬奇平台上,OSD窗口(/dev/fb/0)在视频显示(/dev/fb/3)窗口的前端。而控制显示OSD窗口透明度的是使用属性窗口(/dev/fb/2)。在属性窗口中,每个像素的透明度由一个元组(4bit)和它的值(0-7)来控制。控制线程就可以通过函数setOsdTransparency()来设置OSD窗口的透明度。 Control线程的优先级最低,三、应用程序设计Video线程,第42页,该线程是算法的核心线程,完成检测目标的任务。Video线程接收来自采集线程的每一帧缓冲区,完成目标检测后把缓冲区交给display线程的显示设备(VPSS后端)来显示。,三、应用程序设计Video线程,
16、第43页,如图10所示,video 线程的初始化主要完成: 创建Codec Engine实例(Engine_open())。这个函数返回一个句 柄,算法实例化时使用这个句柄。 创建算法用vdieoEncodeAlgCreate()。该函数调用了CCS下编写的算法,在工具链(后边详细叙述)封装好目标识别算法后,vdieoEncodeAlgCreate()函数中创建算法实例。该实例由VIDENC_create()调用。hEncode = VIDENC_create(hEngine, encoderName, 其中的参数params包含了采集视频的一些参数。 算法使用的数据暂存区和显示使用的暂存区使
17、用Memeory_contigAlloc()函数来申请。 Capture线程使用CAP_BUFFERS个暂存区来采集数据并暂存。先使用Memeory_contigAlloc()函数来申请内存,然后把它们发送给capture线程来采集FifoUtil_put()。 当video线程完成初始化后,就使用Rendezvous模块跟其它几个线程同步。故而,只有当所有线程都完成初始化后,video线程才会进入主循环。,三、应用程序设计Display线程,第44页,单独的显示线程的目的是为了增加把处理和显示分开,它主要负责把完成算法后的帧复制到FBDev显示设备的缓冲区。它允许DSP处理和显示同步。该线程
18、开始执行是通过初始化FBDev显示设备驱动(在initDisplayDevice()函数中)。在这个函数中,显示的分辨率(D1)和每像素比特数(16)通过FBIOPUT_VSCREENINFO ioctl设置。在设置之前,三个缓冲区通过mmap()函数使它们用户空间有效。这些缓冲区初始化为黑色,因为视频不一定是满的D1分辨率。然后一个Rszcopy工作要创建。Rszcopy模块使用VPSS resizer模块来图像从源拷贝到目的地而不占用CPU时间。 当display线程完成初始化后,就使用Rendezvous模块跟其它几个线程同步。故而,只有当所有线程都完成初始化后,display线程才会进
19、入主循环。,三、应用程序设计Capture线程,第45页,程序里可以在算法之前使用VPSS resizer模块来除去交错现象(blog详述)。为了让移除交错现象和DSP处理同步,使用单独的capture线程。在video线程处理算法之前,由capture线程来移除交错现象。首先,由于平滑模块因为插值的原因需要更多的垂直行数(EXTRA_ROWS),所以采集的行数就增加了。可是如果大于480(NTSC)或者576(PAL)是不可能的,因为480和576是最大高度,因而最定上的几行一般在D1显示屏上不可见。视频采集设备通过initCaptureDevice()函数初始化。这里的视频采集设备是Vid
20、eo 4 Linux2 (v4l2)设备驱动。在这个函数里,用户选择输入接头,可以用VIDIOC_S_INPUT ioctl来设置。同时视频采集设备的能力可以通过VIDIOC_QUERYCAP ioctl来改正。,三、应用程序设计Capture线程,第46页,标准视频(NTSC或PAL)通过采集设备被自动检测。这里格 式设置为D1分辨率,并且通知采集设备用VIDIOC_S_FMT ioctl把两场合成一帧(V4L2_FIELD_INTERLACED)。然 后通过VIDIOC_S_CROP ioctl,采集设备驱动就被设置为裁 剪D1格式的图片为用户通过命令行输入的分辨率。 之后,通过VIDIO
21、C_REQBUFS ioctl在采集设备驱动里分配 三个视频采集缓冲区,然后通过mmap()这些缓冲区就被映射 到用户处理空间。最后使用VIDIOC_STREAMON ioctl来启 动采集。,三、应用程序设计Audio线程,第47页,该线程的任务是在某些情况下发出声音。在程序中,声音 是通过读取语音文件,之后把读取的数据发送到声音设备 驱动。读取声音文件是通过 fd = open (“data/alertsound.wav”,O_RDWR)完成,把 读到的数据放到inputBuffer 中 (m=(int) read(fd, inputBuffer, blksize);) 把读到的数据写入声
22、音设备 write(outputFd, outputBuffer, blksize)即可。 是否发出声音通过gblGetAudioPlay()来判断。,三、应用程序设计线程间交互,第48页,在开始主循环前,display线程占先视频缓冲区。这保证当主循环开始的时候,所有的显示缓冲区被display线程占用。结果就是,DSP的处理可以跟复制到显示帧缓冲同步工作,并且系统可以从偶尔的耗时的帧恢复。帧被算法检测后,随后就放到显示缓冲区,并通过FifoUtil_put()发送到显示线程。Display线程的占用通过Rendezvous来同步。,三、应用程序设计线程间交互,第49页,Capture线程的
23、主循环在一帧数据从采集设备中出列时开始,出列使用VIDIOC_DQBUF ioctl,目的是video线程中的缓冲区,它使用FifoUtil_get()。采集帧缓存然后根据命令行来选择是否在把目的缓冲发送到video线程前除去交错现象。Capture线程然后把采集视频缓存通过VIDIOC_QBUF ioctl返回给采集设备驱动。,三、应用程序设计线程间交互,第50页,Video线程从capture线程接收到一帧数据并通过FifoUtil_get()从display线程得到显示缓存。采集的帧缓存通过VIDENC_process()让DSP处理,然后把这个缓存用FifoUtil_put()返回给c
24、apture线程。经过处理后的缓存就通过FifoUtol_put()被发送到display线程来显示。,三、应用程序设计线程间交互,第51页,Display线程通过FifoUtil_get()接收到处理过的数据,并使用VPSS resizer模块和Rszcopy_execute()把它复制到FBDev显示设备驱动帧缓存。当display线程完成复制缓存,它通过FBIOPAN_DISPLAY ioctl在垂直同步信号来时使新的帧缓存为新的显示缓存。然后就的带下一个垂直同步信号(FBIO_WAITFORVSYNC ioctl)。当display线程完成这些,video线程就可以处理下一帧了,这样就
25、使得ARM和DSP能充分利用。,四、工具链的建立,第52页,工具链是指的Linux下对程序的编译环境。在这里通过codec_engine_1_02examplescodecs 下的videnc_copy工程封装CCS下调试好的程序并生成videnc_copy.a64P,再通过codec_engine_1_02examplesserversvideo_copy工程把videnc_copy.a64P封装成all.x64P。最后通过应用程序encodedecode工程调用all.x64P。,四、工具链的建立步骤,第53页,四、工具链的建立步骤,第54页,五、Jpeg压缩与解压缩,第55页,六、视频格
26、式转换,第56页,六、视频格式转换格式介绍,第57页,六、视频格式转换格式介绍,第58页,六、视频格式转换格式介绍,第59页,六、视频格式转换格式介绍,第60页,七、达芬奇OSD,第61页,七、达芬奇OSD,第62页,七、达芬奇OSD菜单建立,第63页,根据要求的菜单样式,使用一个链表把整个菜单连接起来,在遥控器的控制通过OSD绘制当前的菜单。对任何一个菜单项来说,都有一个链表节点对应。链表的结构如下: typedef struct node Int btindex; struct node *llink,*rlink,*ulink,*dlink,*mlink; keynode;,八、插值算法
27、,第64页,工程中用到了三种插值算法,分别是最近邻域法、线性 插值法和双立方插值算法。其中最近邻法速度最快效果 最差,线性插值法综合效果居中,双立方插值算法效果 最好但是速度最慢。这三种算法的使用要根据算法消耗 时间和效果之间取得平衡。,八、插值算法最近邻域法,第65页,最临近插值的思想很简单。对于通过反向变换得到的一 个浮点坐标,对其进行简单的取整,得到一个整数型坐 标,这个整数型坐标对应的像素值就是目的像素的 像 素值,也就是说,取浮点坐标最邻近的左上角点对应的 像素值。可见,最邻近插值简单且直观,但得到的图像 质量不高。,八、插值算法双线性内插值,第66页,对于一个目的像素,设置坐标通过
28、反向变换得到的浮点坐标为 (i+u,j+v),其中i、j均为非负整数,u、v为0,1)区间的浮点数,则 这个像 素得值 f(i+u,j+v) 可由原图像中坐标为 (i,j)、(i+1,j)、 (i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即: f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1),其中f(i,j)表示源图像(i,j)处的的像素值,以此类推。这就是双线性 内插值法。双线性内插值法计算量大,但缩放后图像质量高,不 会出现像素值不连续的的情况。由于双线性插值具有低
29、通滤波器 的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上 变得模糊。,八、插值算法双三次插值算法,第67页,双立方插值算法是在水平、垂直和对角线方向对像素取样,然后使用总 颜色的加权平均值建立新像素,它是三者中运算速度最慢,但效果最佳 的一种。,公式如:,九、Interlaced Artifacts,第68页,NTSC/PAL标准定义后,一个视频帧分成奇偶两场,每一场采集奇偶行。 之后两场合并形成一帧。NTSC标准,视频帧的采集速率是30f/s,两场之 间的开始时间是16.67ms。PAL标准对应的间隔是20ms。当有快速运动 的物体在场景中时,这样的解决方法导致了隔行扫描伪像。隔行
30、扫描包 含对图像的两次扫描,一次扫描捕获偶数行,另一次扫描捕获奇数行。 两次捕获以很小时差分隔开,然后再合在一起形成一个完整的帧。在合 并这两部分时,可能会形成隔行扫描伪信号。例如,矩形框的垂直边缘 将导致锯齿效应。在不同时间捕获一个运动视频目标而产生的这种伪信 号被称为隔行扫描伪像。,公式如:,隔行伪像不仅降低视觉效果,而且含有高频噪声,它们是逐行扫描编码器的 一个挑战。,九、Interlaced Artifacts,第69页,如何解决隔行扫描这个缺点? 一个简单的办法就是把原始图像中奇场去除,并重新插 值得到。这个方法的一个缺点是移除奇场导致数据量丢 失,但是确很容易做到。,输入的图像帧数
31、据设置为4:2:2隔行扫描格式如下图。输入的视频格式 是NTSC SD或者720*576每帧。输出格式一致。,UYVY隔行扫描数据格式,九、Interlaced Artifacts,第70页,基本的想法是丢弃所有奇场的数据并插值它们,de-interlace,九、Interlaced Artifacts,第71页,使用达芬奇的Resize功能完成,VPSS resizer 是达芬奇上的一个硬件,执行多相滤波来完成图像缩放。 它可以完成1/4X到4X的缩放功能。它可以完成隔行扫描的Y/Cb/Cr 4:2:2 数据或者单独的一个颜色平面,如灰度数据,单独的RGB8:8:8数据或者 Y/Cb/Cr数
32、据。 如果使用4:2:2隔行扫描格式(由UYVY格式构成)的输入帧,分辨率为每帧 720480像素(NTSC SD)。在去隔行处理中,缩放器首先被告知输入帧 的宽度为724像素,而非实际的720像素。这是由于为准确实现1:1的缩放, DM6446处理器的水平输入大小必须被调节为720+delta,delta由缩放器中 的公式计算求得。接着,缩放器获知间距是实际间距的两倍宽,这样它就可 以把第一组两个水平扫描行当作一个来接收。这使得缩放器可以在偶数行上 实现1:1的水平缩放,并将奇数行丢弃(右上角)。输入和输出在垂直方向上 尺寸分别被设定为244和480,因此缩放器执行1:2的垂直放大以插入被丢
33、弃 的奇数行。然后缩放器被告知输出帧的宽度是720像素,输出间距是 1440720+(3602)字节,从而形成一个输出帧。,十、Boot,第72页,Stand alone需要的工作,1.使用ramdisk,烧写到nor flash,文件格式ext2,2. Nor boot + nand file system,十、Bootuboot,第73页,U-boot,在目标板上先运行一个程序(程序在Flash中),通过这个程序以 某种交互的方式从HOST将IMAGE下载到RAM中。如通过串口、 USB接口、网络接口等方式。这种方式就是bootloader的方式。,十、Bootu-boot,第74页,烧写
34、u-Boot,The flashwriter.out file should be running in TI Code Composer Studio (CCS) Software Required - U-Boot image (e.g. file “u-boot.bin”) File “flashwriter.out” in “Flash Write” directory in your software disk - Code Composer Studio (CCS) version or newer - DaVinci EVM compatible emulato
35、r driver for CCS Serial terminal application such as HyperTerminal, TeraTerm for MSWindows and Minicom or C-Kermit for Linux.,十、Bootu-boot,第75页,烧写u-Boot,需要的硬件准备: - JTAG Emulator connected to DaVinci EVM - Connect included RS323 serial cable to “COM1” port of the PC workstation and “UART0” port of th
36、e EVM. The terminal emulation software setup is 57600 baud, 8-bit data, no parity, one stop bit and no flow control - Inspect jumper J4 labeled “CS2 SELECT” and make sure “FLASH” is selected - Make sure the red S3 switch DIP position 1 and 2 are both set to OFF,十、Bootu-boot,第76页,烧写u-Boot,烧写指令: 1) St
37、art CCS and load flashwriter.out: Open the ARM-side CCS debugger. From the menu, click on File-Load Program and open the flashwriter.out image as in the following figure:,十、Bootu-boot,第77页,烧写u-Boot,烧写指令: 2) Load u-boot: - Run flashwriter.out by either clicking Debug-Run or hit the F5 key. A dialog b
38、ox will show to ask for the u-boot filename. - Enter the local Windows path to the u-boot file, such as “c:tempu-boot.bin”. It will now ask you for a second parameter, the offset. Enter 0 and press return.,The process may take several minutes. To verify, heres CCS screen after successful completion:
39、,十、Bootu-boot,第78页,烧写u-Boot,十、Bootu-boot,第79页,烧写u-Boot,3 ) Verify that U-Boot is working,You can now turn off the board and remove the JTAG cable. Make sure a RS232 cable is attached from the board to COM1 of a PC with a terminal emulation program such as Microsoft WindowsXP HyperTerminal or Tera Te
40、rm. The terminal application settings should be set for 57600 baud rate, 8-bit data, one stop bit, no parity and no flow control. Make sure that the board is not turned on. Set the red switch in the middle of the board (S3) to 10111 11110 (1=ON, 0=OFF), check to make sure J4 is selecting FLASH and t
41、urn on the board. You should now be greeted with a u-boot prompt on your serial terminal console as below.,十、Bootu-boot,第80页,烧写u-Boot,3 ) Verify that U-Boot is working,十、Boot编译内核,第81页,编译内核,使用:host $ make ARCH=arm CROSS_COMPILE= arm_v5t_le- davinci_dm644x_defconfig命令可还原默认配置。 使用make menuconfig、host $
42、make ARCH=arm CROSS_COMPILE =arm_v5t_le- xconfig或者host $ make ARCH=arm CROSS_COMPILE =arm_v5t_le- gconfig来进行驱动配置。 注:resizer驱动的位置在device drivers-character devices中。 用root用户进行内核编译:host$ make ARCH=arm CROSS_COMPILE =arm_v5t_le- uImage,可生成uImage文件,其文件路径为: home/avs/workdir/lsp/ti_davinci/arch/arm/boot/uI
43、mage将其拷贝到主机的 /tftpboot目录下,并使用chmod a+r /tftpboot/uImage命令修改其权限。,十、Boot编译内核,第82页,编译一个支持NAND的新内核步骤如下:,1、转到linux内核所在目录(LSP): cd /opt/mv_pro_4.0/montavista/pro/devkit/lsp/ti-davinci/ 加载linux内核配置工具:make ARCH=arm CROSS_COMPILE =arm_v5t_le- xconfig 2、在这个图形工具中,可以配置需要的内核驱动。比如我们不需要 硬盘支持,那就在Device Drivers中, 3、
44、选择“ATA/ATAPI/MFM/RLL Support”,不选择主框,把该选项去掉 就使得系统不包含硬盘支持而选择支持NAND。如图:,十、Boot编译内核,第83页,十、Boot编译内核,第84页,4、在Memory Technology Devices (MTD)选项中,找到NAND Flash DeviceDrivers选项。,十、Boot编译内核,第85页,5、保证NAND Flash Device的选项是一个对号而不是一个点,同时选择Bootloader upgrade on NAND Device,十、Boot编译内核,第86页,6、在root用户下编译新内核:make ARCH
45、=arm CROSS_COMPILE=arm_v5t_le- uImage,十、Boot 创建文件系统,第87页,文件系统类型: Linux支持的文件系统为数众多,如ext2、 vfat、proc、nfs、iso9660 等,在嵌入式领域中有 Romfs、Cramfs、jffs、jffs2 等。,十、创建文件系统 RAM disk,第88页,Ramdisk就是将内存的一部分分配为一个分区并作为硬盘来使 用。对于系统运行时不断使用的程序,将它们放在Ramdisk中将 加快计算机的操作,如大数据量的网络服务器、无盘工作站等。 一个初始化好的RAM disk 依赖于bootloader(u-boot
46、)在启动 时把它从非易失性存储器(如NOR flash)下载到易失性存储器 中(如DDR)。在RAM disk中的文件系统是一个初始化的RAM 文件系统,或者initrd。这个文件系统可以挂载为跟文件系统并且 应用程序可以从它这里执行。 为了节省时间,可以使用DVEVM提供的RAM disk。它在 /opt/mv_pro_4.0/montavista/pro/devkit/arm/v5t_le/images下。在 这里,RAM disk文件是ramdisk.gz(大约2.1MB)。运行时,占用 DDR大约6.3MB。,十、创建文件系统 RAM disk,第89页,创建Ramdisk步骤: 1、
47、进入/mnt工作目录,建立需要的目录 $mkdir rdmnt / 新ramdisk挂载的目录$mkdir rdimg / 产生的镜像文件的目录$mkdir rdold / ramdisk旧文件目录$mkdir rdold/tmp / 挂载旧ramdisk的目录 2、挂载旧的ramdisk $mount -o loop rdold/ramdiskrdold/tmp 3、建立新的ramdisk,并初始化 $dd if=/dev/zero of=rdimg/ramdisk.img bs=1k count=15360 / 建立了一个15M的ramdisk镜像文件,并用/dev/zero设备初始化 4
48、、为镜像文件建立文件系统 $mke2fs -F -v -m0 rdimg/ramdisk.img 5、挂载新的ramdisk,如果有文件ramdisk.gz 先解压 $mount -o loop rdimg/ramdisk.img rdmnt 6、拷贝需要的文件进入新的ramdisk $cp -av rdold/tmp/* rdmnt,十、创建文件系统 RAM disk,第90页,6、拷贝需要的文件进入新的ramdisk $cp -av rdold/tmp/* rdmnt 7、卸载旧的ramdisk $umount rdold/tmp 8、卸载新的ramdisk $umount rdmnt 9
49、、把新的ramdisk制成压缩包 $gzip -9 rdimg/ramdisk.img ramdisk.gz 在此ramdisk.gz即为新建立的ramdisk镜像,十、创建文件系统 RAM disk,第91页,6、拷贝需要的文件进入新的ramdisk $cp -av rdold/tmp/* rdmnt 7、卸载旧的ramdisk $umount rdold/tmp 8、卸载新的ramdisk $umount rdmnt 9、把新的ramdisk制成压缩包 $gzip -9 rdimg/ramdisk.img ramdisk.gz 在此ramdisk.gz即为新建立的ramdisk镜像,十、创
50、建文件系统 制作jffs2镜像,第92页,JFFS2 是瑞典Axis 公司开发的一种基于Flash 的日志文件系统。它也 是可压缩的,但压缩比不及Cramfs的高。但是,它相比于Cramfs的 明显优势是可读写。另外JFFS2具有碎片收集功能,并提供崩溃/ 掉电 安全保护,所有这些特点使它成为目前Flash 设备上最流行的文件系 统格式。它的缺点是当文件系统已满或接近满时,JFFS2运行会变 慢, 这是因为碎片收集的问题。,十、创建文件系统 制作jffs2镜像,第93页,制作jffs2镜像步骤:,mkfs.jffs2 r filename o image.img -eraseblock =0
51、x8000 -pagesize=0 x0200 pad=0 x1400000 实际用到了: mkfs.jffs2 r ram1 o image.img -e 0 x8000 -s 0 x0200,十、boot 方式,第94页,方案一:使用ramdisk,烧写到nor flash,文件格式ext2 方案二:Nor boot + nand file system,十、boot 方式方案一,第95页,说明:跳线选择12连通其它都不连接,Copy the kernel image in /tftpboot directory:host $ cp workdir/lsp/ti-davinci/arch/
52、arm/boot/uImage /tftpboot Copy the initial RAM disk file system in /tftpboot directory: host $ cp /mnt/def_cd/ramdisk.gz /tftpboot/ Download the Linux kernel via TFTP: DVEVM # setenv serverip DVEVM # setenv bootfile uImage DVEVM # dhcp Download the RAM disk file system via TFTP: DVEVM # tftp 0 x8500
53、0000 ramdisk.gz Determine the location in flash to store image: EVM # flinfo,十、boot 方式方案一,第96页,Erase the flash: DVEVM # protect off 0 x2050000 +0 x2FBCA3 Copy from RAM into flash: DVEVM # cp.b 0 x80700000 0 x2050000 0 xc9224 DVEVM # cp.b 0 x85000000 0 x2119224 0 x232a7f Protect the flash from writin
54、g: DVEVM # protect on 0 x2050000 +0 x2FBCA3 9. Set the U-Boot Command and Linux Kernel Command Line: DVEVM # setenv bootargs console=ttyS0,115200n8 ip=dhcp root=/dev/ram0 rw initrd=0 x85000000,6M DVEVM# setenv bootcmd cp.b 0 x2119224 0 x85000000 0 x232a7f; bootm 0 x20500000 10. Now, the system is re
55、ady to boot, so save the u-boot environment variable: DVEVM # saveenv DVEVM # boot,十、boot 方式方案一,第97页,Linux现在就可以从flash上启动,并且根文件系统被挂载到 /dev/ram0上。在16MNOR flash存储器上,u-boot、root file system和压缩的RAM disk如表分布。,十、boot 方式方案二,第98页,Nor boot + nand file system 1、硬件环境 :跳线要正确 2、软件环境 内核路径:主机上的/home/wangxw/montavis
56、ta/pro/devkit/lsp/ti-davinci下 encodedecoded程序 相应的程序和工具: 自启动文件系统映像:jffs2_auto.img 3、内核配置,十、boot 方式方案二,第99页,DHCP配置 支持自启动的内核需要关闭DHCP相关选项,以实现在内核启动时不自动发出 DHCP请求,选项如图所示:,十、boot 方式方案二,第100页,NFS配置 支持JFFS2文件系统自启动的内核,需要关闭NFS相关选项,选项如下图所示:,如果需要打开NFS,选项如下图所示:,十、boot 方式方案二,第101页,4、文件系统,网络配置 修改/etc/network/interfa
57、ces脚本,如下,设置的IP地址为 auto eth0 iface eth0 inet static address netmask network #optional broadcast 55 #optional gateway 9,十、boot 方式方案二,第102页,移植encodedecoded可执行环境到jffs2文件系统中:,建立/opt/demo文件夹 添加/opt/demo 需要的文件all.x64P, data文件
58、夹(alertsound.wav),dsplinkk.ko,loadmodules.sh, unloadmodules.sh,cmemk.ko,davinci_rsz_driver.ko encodedecoded,文件(附测试文件:loopbackCombo.x64P, videoloopd) 建立一个startmy.sh文件,内容如下: #! /bin/sh # script to start my program:encodedecoded echo Start encodedecode program. LD_LIBRARY_PATH=/opt/demo mount -t vfat /dev/sda1 /mnt/usb cd /opt/demo ./loadmodules.sh ./encodedecoded,十、boot 方式方案二,第103页,把startmy.sh文件复制到cp startmy.sh/mnt/def_cd/ram0/etc/init.d 修改属性:chmod+x/mnt/def_cd/ram0/etc/init.d/startmy.sh 为该文件建立链接host$cd/mnt/def_cd/ram0/etc/rc.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 股骨颈骨折切开复位内固定术后护理查房
- 企业信息收集与整合分析工具
- 企业预算编制及管理模板
- 科技创新成果保护与使用责任承诺书8篇
- 公司运营综合方案及市场分析报告
- 合规创新行动承诺书5篇
- 培训成果确保承诺书6篇
- 山东省菏泽市名校2026届初三下期5月月考英语试题试卷含解析
- 2026年江苏省徐州市泉山区中考模拟金典卷英语试题(十)试题含解析
- 公共关系危机管理方案制定指南
- 2026广西北海市从“五方面人员”中选拔乡镇领导班子成员25人考试备考题库及答案解析
- 2026杭州市市级机关事业单位编外招聘148人笔试参考题库及答案解析
- 2026年春季贵州人民版(2024)六年级下册综合实践活动《小学毕业留念》教学课件
- 湖北省襄阳市2026届高三下学期3月一模统一调研测试数学试题
- 第4课《坚持才会有收获》课件
- 2026年春季安全教育班会记录表(19周):开学安全第一课-启航安全守护新学期
- 2025年黄山职业技术学院单招职业技能测试题库附答案解析
- Kaizen-快速改善周课件
- 初中八年级物理双向细目表
- 绿色建造-绿色施工
- 临沧市凤庆县大摆田水库工程环境影响报告书报批版
评论
0/150
提交评论