基于arm的linux多媒体播放器mplayer的设计与实现_毕业设计(编辑修改稿)内容摘要:
在挂载 U 盘之前可以通过 fdisk –l 命令查看 U 盘的名称 ,如图 5 所示 图 5 fdisk –l 命令查看 U 盘 9 安装步骤如下 ① mkdir /mnt /usb /*若有该目录,则可以不必创建 */ ② mount –t vfat /dev/sdb1 /mnt/usb /* 挂载 U 盘 */ ③ cd /mnt/usb/Linux /* 进入 U 盘的 Linux 安装目录 */ ④ ./Install /* 执行开发环境自动安装脚本 */ 当开发环境安装完毕后,会在根目录下生成一个目录 /2410RP_linux : /* 该目录中包含以下目录 */ CDROM:该目录中包括光盘中的所有内容。 Experiment_Key:该目录中包含了所有 S3C2410RP 目标板所使用的 实验代码。 JFLASH_vivi :该目录中包含了所有可以下载并烧写到 S3C2410RP 目标板上运行的内核和文件系统。 kernel :该目录中包含了嵌入式 Linux 操作系统的源码,在此目录中可以重新定制编译内核。 Qt:该目录中包含了嵌入式图形化界面应用程序开发所需要的软件安装包。 root :该目录包含了 2410RP 的文件系统。 vivi :该目录是 BootLoader 的源码目录,在此目录中重新编译 vivi。 注意在安装中如果报错 ―找不到 /2410RP_linux/CDROM/root‖进入 /2410RP_linux文件夹后把所有文件夹的名字都改成大写字母就能通过,错误的原因可能是系统在复制 U 盘中文件时 误 把大写 文件名 变成了小写。 安装成功后用 armv4lunknownlinuxgcc –v 命令即可查看 gcc 版本信息,如图 6 图 6 armv4lunknownlinuxgcc 版本信息 (二) armlinuxgcc 编译器的安装 在这之后我又安装 armlinuxgcc 版本,因为开发版自带的编译器版本太低,后面编 译 mplayer 时会报错 ,新编译器安装在 /usr/local/arm/ 10 ① 下载 (有 ) ② 解压在 /usr/local 中 ③ 修改环境 export PATH=/usr/local/arm/:$PATH 安装成功后用 arm linuxgcc –v 命令即可查看 gcc 版本信息,如图 7 图 7 arm linuxgcc 版本信息 配置 mini mini 是一个通信终端程序, 通过 mini 可以设置、监控串口工作状态,接受、显示串口收到的信息,并且在主机和开发板之间传递数据和控制指令,实现通过主机调试开发板的目的。 在 PC 终端输入命令 : mini –s 进行配置。 port /dev/ttyS1 baudrate 115200 minit mreset rtscts No 它表示端口为 /dev/ttyS1,波特率为 115200、停止位 1 位、无奇偶验证位、无数据流控制 ,如图 8 所示。 图 8 mini 设置界面 11 注意这里的 ttyS1, 首先由于笔记本 电脑没有串口,我这里用的是 usb 转串口线,在 win7 系统下已经把 usb 转换为串口信息,所以在虚拟机中不能用 ttyUSB0,用了会报错。 其次 ―S‖一定要大写, 如果 是小写系统 因 无法识别而报错。 最后 ttyS0 对应COM1 口, ttyS1 对应 COM2 口以此类推,如果使用 ttyS0 系统报错,可以尝试 ttyS1和 ttyS2。 配置 NFS 服务 NFS ( Network File System)指网络文件系统,是 Linux 系统中经常使用的一种服务, NFS 是一个 RPC service ,很像 windows 中的文件共享服务。 它的设计是为了在不同的系统间使用 , 所以它的通讯协议设计与主机及作业系统无关。 当使用者想用远端档案时只要用 mount就可把 remote 档案系统挂接在自己的档案系统之下,使得远端的档案在使用上和 local 的档案没两样。 图 9 setup 图形化设置界面 12 在 NFS 服务中,宿主机( Servers)是被挂载( mount)端,为了远端客户机( Clients )(如: S3C2410RP 目标板)可以访问宿主 PC 机的文件,我们需要配置宿 主机两方面内容: ① 打开 NFS 服务, ② 允许 ―指定用户 ‖访问宿主 PC 机。 a) 在终端输入 ―steup‖进入图形化设置界面 ,如图 9 所示。 b) 在 System services 选项中使用空格键选中 NFS服务去掉 ipchains 和 iptables服务。 c) 在 Firewall configuration选项中选择 No firewall 关掉防火墙,注意这里 RedHat有一个小 BUG,就是无论选择哪个等级的防火墙,下次进来时防火墙等级还是 HIGH。 不用管它,只要选择 No firewall 系统就已经关闭了防火墙,尽管下次进来时 还是 HIGH。 如图 10 所示 d) 在 exports 文件写入以下命令允许 ―指定用户 ‖ 访问宿主 PC 机 /.* ( rw,insecure,no_root_squash,no_all_squash) e)设置主机 IP 和开发板 IP,开发板 IP 在 mini 中设置。 图 10 设置防火墙 13 连接完网线和串口线之后就可以实现开发板和主机的通信了,在这之前可以使用PING 命令来检测是否通畅。 如果 PING 不通,可能是以下原因: 1,开发板和主机不在同一网段 , 使用 ifconfig eth0 *.*.*.* up 命令。 2,主机防火墙开启了。 3,看主机是否能 ping 通其他计算机。 4, linux 虚拟机设置为桥接。 卡 ,如果存在多网卡,一定要将其他网卡关闭。 这里的第 4 条和 5 条我都遇到了, VM 虚拟机中网络连接方式默认为 NAT, 要把它改成 BRIDGE。 由于笔记本的网卡被开发板占用,我一直在用无线网上网查资料解决问题,最终才知道恰恰是要关闭无线网才能解决问题。 编译 Bootloader Bootloader 是一段小程序,它在系统上电开始时执行,初 始化硬件设备准备好软件环境,最后调用操作系统内核。 由于 Bootloadr 需要直接操作硬件,所以它严重依赖于硬件,而且依据所引导的操作系统不同,也有不同的选择。 Bootloader 的启动过程分为单阶段和多阶段两种。 往往多阶段 Bootloader 能提供更为复杂的功能和更好的移植性。 从固态存储设备上启动的 Bootloader 大多都是两阶段的。 第一阶段用汇编代码来实现;第二阶段用 C 语言来实现。 (一) VIVI 简介 Vivi 是韩国 mizi 公司开发的 bootloader, 适用于 ARM9 处理器。 Vivi 有 两种工作模式:启动加载模式和下载模式 【 5】。 启动加载模式可以在一段时间后(这个时间可更改)自行启动 linux 内核,这时 vivi 的默认模式。 在下载模式下, vivi 为用户提供一个命令行接口,通过接口可以使用 vivi 提供的一些命令,见下表 1: 命令 功能 Load 把二进制文件载入 Flash 或 RAM Part 操作 MTD 分区信息。 显示、增加、删除、复位、保存 MTD Param 设置参数 Boot 启动系统 Flash 管理 Flash,如删除 Flash 的数据 表 1 vivi 常用命令 14 (二) vivi 代码分析 vivi 的代码包括 arch , init , lib, drivers 和 include 等几个目录,共 200 多条文件。 Vivi 主要包括下面几个目录: arch:此目录包括了所有 vivi 支持的目标板的子目录,例如 s3c2410 目录。 drivers:其中包括了引导内核需要的设备的驱动程序( MTD 和串口)。 MTD 目录下分 map、 nand 和 nor 三个目录。 init : 这个目录只有 和 两个文件。 和普通的 C 程序一样, vivi 将从 main 函数开始执行。 lib :一些平台公共的接口代码,比如 里的 udelay()和 mdelay()。 include :头文件的公共目录,其中的 定义了这块处理器的一些寄存器。 Platform/ 定义了与开发板相关的资源配置参数,我们往往只需要修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。 图 11 vivi 的启动过程 15 (三) vivi 的运行 vivi 的运行分为两个阶段 ,如图 11 所示 : vivi 的第一阶段 完成含依赖于 CPU 的体系结构硬件初始化的代码,包括禁止中 断 、 初 始 化 串 口 、 复 制 自 身 到 RAM 等。 相 关 代 码 集 中 在 (\vivi\arch\s3c2410 目录下 ); vivi 的第二阶段是从 main ()函数开始,同一般的 C 语言程序一样,该函数在 /init/ 文件中,包括打印 vivi 版本、时钟初始化和 IO 口初始化、内存初始化、堆栈初始化、 MTD 设备初始化、私有数据和内置命令初始化。 (四 ) vivi 的编译 VIVI 默认是在文件夹 /2410RP_linux/vivi 中,如果是第一次编译,需要输入下列 2 条命令: ① cd /2410RP_linux/vivi/ ② make clean ③ make 如果 vivi 工程没有问题,会生成的二进制文件 vivi, 保存在 /2410RP_linux/vivi 文件夹下以供后面烧写。 编译 Linux 内核 内核移植主要是指操作系统从一种硬件平台转移到另一种硬件平台上运行。 对于嵌入式系统来说,有各种体系结构的处理器平台,使用的外围硬件 也不一样。 嵌入式 Linux 严重依赖于具体硬件,所以只要硬件平台有略微差别,也需要做一些移植的工作。 Linux 内核在 PC 上以文件的形式存在(保存成磁盘文件形式),就是所谓的 ―映像文件 ‖。 Linux 内核映像文件最终是要烧录到目标板的 flash 中。 Linux 内核映像文件有两种:一种是非压缩版本,叫 Image;另一种是它的压缩版本,叫 zImage。 zImage 是 Image 经过压缩形成的,所以它的大小比 Image 小。 为了能使用 zImage 这个压缩版本,必须在它的开头加上解压缩的代码,将 zImage 解压缩之 后才能执行,因此它的执行速度比 Image 要慢 【 6】。 但考虑到嵌入式系统的存储空容量一般都比较小,内核要常驻内存,采用 zImage 可以占用较少的存储空间, 16 因此牺牲一点性能上的代价也是值得的,所以一般嵌入式系统均采用压缩的内核映像文件,即 zImage。 为了达到生成 文件,要分为下面两步: 配置; 编译。 配置内核有多种方式,我们选用一种操作性比较好的图形界面,执行 make menuconfig 命令可以进入,通过此部分,我们可以方便的选择,决定哪些部分被加载并编译入 LINUX内核,哪些部分 被编译为模块,哪些部分不用。 配置完成后,执行 make zImage 命令,编译后 得到 文件,保存在 /2410RP_linux/kernel/arch/arm/boot 下面 make clean 后第一次使用 make zImage 命令,会占用相当长的时间。 宿主机会根据 文 件 对 系 统 进 行 编 译 【 7 】。 首 先 使 用 交 叉 编 译 器( armv4lunknowngcc )把各个文件夹下用过的 .c 文件编译为二进制的目标文件,其次用链接器 (armv4lunknown ld)把这些 目标文件连接到一起;最后压缩,就得到了内核的镜像文件 zImag。基于arm的linux多媒体播放器mplayer的设计与实现_毕业设计(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。