标题:
基于数字电视系统的嵌入式linux操作系统实现02
[打印本页]
作者:
samwalton
时间:
2013-8-1 07:11
标题:
基于数字电视系统的嵌入式linux操作系统实现02
为了驱动PCF8584接口设备,需要对模块进行初始化。在通常的linux系统中,设备驱动在运行时载入和初始化,而在嵌入式linux系统中,设备驱动将在启动阶段被加载和初始化。4个模块的初始化程序被存储在“.init”段的“_init”处,由“do_initcalls()”函数在启动时调用执行。控制数据从接口模块开始,依次经内核模块、算法模块、适配器模块传送。接口模块接收应用程序的请求(open, write, read, ioctl),调用内核模块的接口程序(master_send(), master_receive(),transfer()),同时传递参数。内核模块将从地址、标记位、信息长度等数据传送到算法模块。算法模块检查I2C总线的状态和从地址,设置PCF8584的控制寄存器。最后,适配器模块从被映射到外部总线的地址空间中读写数据。
5.系统构建
为了移植linux操作系统,我们首先在主机端安装一个交叉开发环境,然后在供
测试
的目标板上安装一个
测试
环境,测试好后,再移植到数字电视系统上。
5.1安装交叉开发环境
在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常需要在强大的pc机上建立一个用于目标机的交叉编译环境。这是一套编译器、连接器和libc库等组成的开发环境。图6描述了交叉开发环境的安装过程。
要制作二进制linux映像文件,首先应制作二进制连接器、汇编器和其它目标工具。然后,用 make menuconfig配置内核,此时在内核目录中将生成include/linux/version.h 和 include/linux/autoconf.h 文件。注意,由于数字电视系统的MCU只支持大端存储器格式,所以,应在内核库中做相应修改。第三步是制作交叉编译器(gcc)和c库(glibc)。由于两者是相互依赖的关系,可以先制作一个不带glibc的gcc,然后用交叉编译器创建一个glibc,再重新编译这个带glibc的gcc。第四步,由于移植好的linux运行在只读存储器中,所以需要安装用于制作二进制文件系统映像的工具(genromfs),和一个用于将elf格式(通用文件格式)转换为flt格式(扁平格式)的工具。
5.2开发环境
系统开发环境包括测试板的SNDS100TM(Samsung)、用于远程调试的JEENITM (Jtag EmbeddedICE Ethernet Interface)、数字电视机主板等。表1列出了开发环境的各个部分。
表1 开发环境
组成部分 功能
测试板
三星 s3c4510B (
arm
7TDMI),16M字节的SDRAM, 1M字节的flashROM, LED, RJ45连接器. 网络应用开发板
数字电视主板 三星s3c4500(
arm
7TDMI),16M字节的SDRAM, 8M字节的flashROM, pcf8584, SPU (LG electronics),32M字节SDRAM. 数字处理模块
JEENITM EPI, 两个硬件断点,以太网主机接口,内部的
arm
710A高速缓冲存储器 远端调试环境
软件
gcc-2.95.3, glibc-2.1.3, binutils-2.12, genromfs-0.5.1, elf2flt, gdb-5.0, ADS(
arm
TM Developer Suite),evaluation ver. 1.1 交叉开发和调试的工具
在主机中制作一个二进制的linux内核映像,将其通过串口线传送到开发板上。利用JEENI来安装远端调试环境。由于flash ROM中的boot块被保护,不能修改,因此我们需要将它与数字电视主板分开,在flash ROM中烧入一个bootloader后再安装到主板上。
通过这一实验,可以通过PCF8584控制音频输出。也就是说,I2C总线的从设备将数字信号转换为音频输出信号。最终,我们可以听到蜂鸣声,也可以通过数字示波器来检测I2C总线信号。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0