基于嵌入式硬件平台的划片机视觉系统设计
作: (1)读取所有的配置寄存器值,包括PCIHID,PCIHSC,PCIHSSID等; (2)检查BAR(Backup Address Register)的范围并一一分配空间; (3)使能外部设备并激活总线。 以上配置都是在PCI图像采集模块的驱动中完成的,因为已经把驱动程序加载到了ARM Linux的内核中,所以系统启动之后,操作系统会自动配置PCI外部设备。 3 ARM Linux移植和设备驱动实现 3.1 Boot Loader的移植 Boot Loader是和硬件紧密连接的,系统是通过Boot Loader。来调用操作系统内核并最终运行操作系统。本系统采用了U-Boot(Universal Boot Loader)作为。Boot Loader,U-Boot相当于一个小型的Linux系统,其工作涉及到硬件系统的初始化、存储空间分配等,在设计过程中主要完成了以下工作,相关的程序编写根据U-Boot提供的例程来完成: (1)修改Makefile配置文件,添加针对目标板的编译命令行; (2)在CPU目录下建立arm940t目录,主要包括中断设置函数代码interrupts9c,系统入口函数start.S,CPU相关代码文件cpu.c以及串口初始化代码相关文件serial.c等; (3)在Board目录下建立S3C2510目录,主要包括FLASH初始化代码flash.c,连接器文件u-boot.1ds,内存分配代码MEMSetup.S等; (4)编写配置文件,即:include/configs/s3c25 l0.h,对寄存器的定义等系统配置,大部分工作是参考S3C25l0的数据手册来进行的; (5)编写flash.c文件,根据使用的AMD的NOR Flash来编写Flash的驱动,包括flash芯片的型号,打印信息,容量大小,flash擦除函数等; (6)修改SDRAM的大小,修改配置文件in-clude/configs/s3c25 10.h 中 的 #define PHYS _SDRAM_ SIZE值。其大小是根据实际应用中SDRAM的大小来确定; (7)修改串口参数文件serial.C。主要是设置串口波特率,波特率计算公式为:RUBRdivO=((int)(MCLK/16./(gd_>baudrate)+0.5)-1); (8)修改start.S文件,一个可执行的Image必须有一个入口点并且只能有一个唯一的全局入口,修改start.S中的.globl _start _start:使其放在Rom(flash)的0×0地址。编译U-Boot,通过Jtag口下载到目标板进行调试。 3.2 ARM Linux设备驱动编写 Linux的内核是由设备管理、进程管理、文件系统和内存管理一起组成,Linux设备驱动可以分为字符类设备,网络接口类设备,块类设备和其他非标准驱动。PCI设备被看作是字符型设备。每个PCI外设都由一个总线号、一个设备号和一个功能号来标示,共有3个访问空间,即I/O端口、内存空间和配置寄存器。PCI配置空间由256个字节组成,且每个设备功能都有一个配置空间,用于决定PCI器件的工作方式和映射到系统中的地址。 添加系统的PCI设备驱动主要步骤: (1)创建1个PCI设备,命令:mknod pci_dev c247 0,其中c表示字符设备,247表示主设备号,0代表次设备号。 (2)初始化外部设备,将函数pci_ dev_ init()添加到ARMlinux/linux/drivers/chal/mem.c文件的chr _dev_ init()中,chr _dev _init()将在系统启动时被调用,会完成设备驱动的初始化工作: (3)设备驱动文件pci__dev.c的编写。设备注册接口函数,中断处理函数等构成了PCI设备驱动主要代码。即file_operationgs根据S3C2510的PCI配置寄存器所给定的基址来读写数据。PCI定义的I/O空间是32位地址空间,内存和I/O可使用相同的配置接口。 (4)PCI设备的加载。ARMlinux不支持设备驱动的动态加载,因此需要把驱动编译到ARM Linux内核中,首先需修改makefile文件,添加下行:obj_$(CONFIG_ PCI_ DEV)+=pci _dev.o接着修改config.in, 添 加 :boolpci _dev installCONFIGPCI DEV,添加这行的目的是为了在配置目标板Linux系统内核时以便对这个设备进行选择。最后在目标系统的makefile中添加设备节点:pci _dev,C,247,0这样在配置Linux内核时就可以选择pci_dev install,然后进行编译,这样PCI设备驱动就加载到了ARM Linux系统中。 4 主控单元图像采集编程 内核针对数码摄像头等视频设备提供V4L函数接口,V4L提供针对视频设备进行基本的I/O操作的接口函数如:open、read、write、close,中断处理,内存映射及I/O通道的控制ioctl等,并定义在struct file_operations数据结构体中。当应用程序对设备进行诸如open、read、Write、close等系统调用操作时,内核将通过file_operation结构访问驱动程序提供的函数接口.具体的采集程序如下: PCI接口视频采集流程如图5所示。 V4L为视频采集图像提供两种方案①:read()直接读取,②:mmap()内存映射。read()通过内存缓冲区
划片机视觉系统S3C251 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)