嵌入式数字视频播放系统软件平台的构建

[10-10 20:38:44]   来源:http://www.88dzw.com  电子制作   阅读:8431

文章摘要:根据不同的开发板,flash的大小以及型号不同,内存的大小不一样,启动方式的不同等使得利用U-BOOT时需要做一些相应的修改,以适应用户自己的开发板,具体移植方法及常见问题可参见[3]。3.2 Linux内核的移植 bootloader初始化完系统硬件后,把Linux内核从外部存储介质中导入内存里,然后,就将控制权交给Linux内核,由内核来继续完成系统的引导工作。如果内核里没有支持用户所使用的开发板,那么用户就需要自己手工修改Linux的内核,做一些相关的移植工作,要关注的是对开发板的硬件外设部分的处理,包括内核对板子硬件基本信息的处理,板上硬件设备的初始化、中

嵌入式数字视频播放系统软件平台的构建,标签:电子小制作,http://www.88dzw.com

根据不同的开发板,flash的大小以及型号不同,内存的大小不一样,启动方式的不同等使得利用U-BOOT时需要做一些相应的修改,以适应用户自己的开发板,具体移植方法及常见问题可参见[3]

3.2 Linux内核的移植               

bootloader初始化完系统硬件后,把Linux内核从外部存储介质中导入内存里,然后,就将控制权交给Linux内核,由内核来继续完成系统的引导工作。

如果内核里没有支持用户所使用的开发板,那么用户就需要自己手工修改Linux的内核,做一些相关的移植工作,要关注的是对开发板的硬件外设部分的处理,包括内核对板子硬件基本信息的处理,板上硬件设备的初始化、中断的分配等。

开发板级别的Linux内核移植最方便的方法是利用内核里已有的且与用户使用的硬件平台最接近的开发板为模板,在此基础上再做修改。我们使用的开发板与IBM walnut开发板类似,主要的外设包括硬盘、USB设备等都是利用PCI总线接口转接(PCI转IDE,PCI转USB),所以内核的移植工作主要有两部分, 一为bootloader和内核之间板子硬件信息的传递,二为PCI外设的初始化。

3.2.1 U-BOOT与Linux内核的配合

U-BOOT在初始化完硬件设备后,把内核装入内存,然后程序指针跳转到内核所在位置处的同时,会传递一些参数给内核来使用,其中就包括有board_info数据结构,内容包括板子的CPU主频、SDRAM和flash大小、ip地址、MAC地址等,Linux会利用这些参数来初始化系统。但Linux内核与U-BOOT的开发并不是同一个组织,要修改Linux内核的相关部分来匹配U-BOOT传递过来的数据,对于我们所使用的PowerPC,U-BOOT是利用五个通用寄存器(r3,r4,r5,r6,r7)来传递参数,我们需要修改通过r3寄存器传递过来的board_info数据结构(定义在Linux内核里arch/ppc/platforms/cs2000.h),使之与U-BOOT源代码里u-boot-1.1.1/include/asm-ppc/u-boot.h里定义的bd_info数据结构内容一致,这样内核才不会对U-BOOT传递过来的board_info数据结构进行错误解读。

3.2.2 PCI外设初始化部分的修改

Linux内核初始化PCI部分的主要过程为:扫描整个PCI总线,找到连接在总线上的所有设备,根据各PCI设备配置空间寄存器的信息,给各PCI设备统筹分配I/O空间,memory空间,以及IRQ中断号。对于x86平台,这部分工作其实已经在BIOS部分做过,Linux内核只需调用BIOS生成的配置即可,但对于我们嵌入式Linux系统,没有BIOS,这部分工作Linux内核要自己做。而对于各个不同的开发板,需要补充到标准的PCI初始化代码里的内容有两部分,一为PCI设备配置空间寄存器的访问方式,另一为PCI中断的配置。

根据PCI的协议规范,访问某PCI设备配置空间的方法为先使能该设备的IDSEL管脚,才可以读写该设备的配置寄存器组。但PCI规范并没有定义IDSEL管脚的连接方法,所以根据各开发板PCI从设备的IDSEL管脚硬件连线方法的不同,访问PCI设备配置空间的方法也不同。

(图3-1)PCI设备IDSEL管脚的两种接法

如图3-1所示,对于一般接法的(a)图,PCI从设备的IDSEL管脚是通过一电阻串联到PCI总线的地址线AD[11-31]中某一根,这样可通过在访问PCI总线的地址期内往AD[11-31]这些地址线一个个的置高电平,如果读回来的配置寄存器数据有效,说明该地址线连了某设备的IDSEL,若无效,说明未连接。而我们开发板则采用了图3-1里面的(b)接法,把PCI从设备的IDSEL管脚与CPU的一个GPIO端口相连,这样就可以通过控制GPIO来灵活的控制PCI总线上某设备的使能或者失效。在我们这种硬件连接下,访问PCI从设备配置空间时,需要先置该设备IDSEL管脚所连接的GPIO为高,再读写配置寄存器组。所以,对于我们这种开发板,需要在一般的读取配置寄存器空间的源码里(arch/ppc/kernel/indirect_pci.c),读写配置寄存器之前,插入下列代码:

上一页  [1] [2] [3]  下一页


Tag:电子制作电子小制作维修教程知识 - 电子制作

《嵌入式数字视频播放系统软件平台的构建》相关文章