基于嵌入式linux的流媒体传输系统
2019-07-12 22:57发布
生成海报
项目设计员姓名:朱炎顺
项目安排总体时间:一个月
嵌入式技术:按照PC机的特点,根据特定的应用需要,通过裁剪软硬件而组成的可以独立运行的系统的一门计算机技术。
流媒体的产生:随着Niternet宽带化的发展趋势,高速的实时传输已成为实现,传统的多媒体在网络上客户端必须把多媒体档全部下载完毕后,在客户端才能播放,而流媒体以流的形式进行数字媒体的传送,在客户端可以边下载边观赏媒体节目。
项目结构 服务器(流媒体服务器端)-------à客户端机(播放流媒体客户端)
技术和实验平台:
Linux构建(实验平台的搭建),网络编程,应用软件的移植,Qt图形界面的开发。
ARM --- Mini2410
PC机(windows 系统),linux虚拟平台,linux 系统RedHat 5,RedHat9
项目流程: 需求分析----概要设计------详细设计-----编程-----测试项目----修改完善
过程:
实验平台的搭建,bootloader的烧写,内核的烧写到flash,网络档系统的制作。
mplayer的移植,在linux x86上交叉编译mplayer,使得mplayer.能在ARM上运行。
服务器的搭建:搭建windows或linux 流媒体服务器,rtsp协议传输流媒体。
Qt图形界面的设计实现流媒体在客户端图形界面化操作和观赏。
Qt的移植。把在linux或window环境下开发出的QT应用程序移植的相应的嵌入式平台上。
实现嵌入式平台的流媒体播放,优化并改善传输性能和质量。
项目到今天终于结束了,回首这一个月,自己是那么的忙碌同时也是那么的艰难。一步一步的走过来,中间不知道遇上了多少困难,遇到困难,解决困难永远都是一件令人兴奋的事情。在这个项目当中付出了相当的汗水,同时也获得了不少的收获。使我从一个对嵌入乃至对计算机毫无了解的我磨砺成了对嵌入式有一定了解的我。做项目是在困难中寻找答案,提升自我。在IT技术上克服困难永远都是一件令人兴奋和快乐的事情。
项目第一步:实验平台的搭建
我们这个项目的实验平台是在EduKit-IV实验箱, ARM Mini2410上面。
配置实验箱:烧写BootLoader,内核到flash。
嵌入式linux系统在宿主机上编译后,会生产映像档。这个映像档一般来说需要烧写到flash中。如Noflash 或Nandflash ,一般来说,BootLoader具有擦写Flash的功能,也具有从宿主机上下载映像档的功能,因此我们一般应用BootLoader来固化内核和文件系统。
Linux 基本映像包含三部分:BootLoader,内核,档系统。其中BootLoader采用专门的硬件仿真器来固化。而内核和文件系统可以通过BootLoader来固化。
固化BootLoader ,安装好JTAG线,运行Flash Prammer for ARM软件。设置好软件参数。然后File>Open 选择vivi.cfg 随后选择vivi,点击program开始烧写vivi。
Vivi烧写成功后,就可以烧写内核和文件系统映像档了。
打开PC机的超级终端-,开启实验箱电源,同时按下空格键进入vivi的命令行。
“bon part 0”格式化flash,
固化内核 可以按照vivi的固化方法固化linux内核zImage映像
固化ramdisk,可以按照vivi 的固化方法固化linux的档系统映像
这样一个最基本的linux系统就固化成功了。可以设置vivi启动参数来设置启动方式。(出厂采用默认yaffs档系统启动方式)
启动ramdisk档系统
vivi>param ramdisk
vivi>param save
启动yaffs档系统
vivi>param reset //设置启动参数为进入yaffs档系统
vivi>param save
如果vivi启动的时候使用网络档系统,则vivi参数应设置:
首先开启服务器nfs
Service network start
Service nfs start
Ifconfig eth0 192.168.1.100
设置nfs服务器选项
系统->管理->服务器设置->NFS->添加
/home/rootfs 192.168.*.* 读/写
开启实验箱电源,同时按下空格键,进入vivi命令行
vivi>Param set linux_cmd_line”root=/dev/nfs
Nfsroot=192.168.1.100:/home/rootfs
Ip=192.168.1.200:192.168.1.100:192.168.1.1:255.255.255.0:EDUK4:eth0:off
Console=ttySAC1,11520 mem=64M init=/linuxrc noinitrd”
vivi>Param save
Vivi>boot
如果挂不上,param show 查看vivi启动参数
注意网络是否通
注意vivi的启动参数是否绝对正确
注意主机端服务是否已经开启,并设置好NFS的选项
注意修改rootfs里面的/etc/init.d/rcS档
一般来讲,rcS档里有设置目标板的ip,因此要主机端的ip要与之在同一网络端。
默认情况下,vivi是启动yaffs档系统,但是如果我们想要更换yaffs档系统怎么办呢?
首先让vivi进入ramdisk档系统:vivi>param ramdisk
vivi>boot 进入ramdik档系统
其次擦除原来的yaffs,
$flash_eraseall /dev/mtd3
将MTD3分区映射到/mnt目录
Mount –t yaffs /dev/mtdblock/3 /mnt
拷贝rootfs-eduk4-tsp-ys.gz到U盘到实验箱并插其到Usb界面
将U盘映射到/media目录
$Mount –t vfat /dev/ub/a/part1 /media
$tar xzvf rootfs-eduk4-tsp-ys.gz –C /mnt
Umount /mnt
Umount /media
Mini2410 内核开发
Vivi 的编译与固化,kernel 的编译与固化,如何编译busybox,制作跟档目录,以及搭建nfs档系统。
清除前面的配置信息
Make distclean
配置信息
Make menuconfig
Make
Make install
下载到flash
如果是用ubun tu 的超级终端minicom
用命令 load flash vivi x
如果是用windows的超级终端,用usb线下载
用命令 load flash vivi u
内核的编译与固化
内核是linux系统的核心,他与其他系统不同的是,linux系统允许用户根据需要对内核进行重新配置,增加或减少对某些特定设备的支持。
进入源代码
Make distclean
配置所需的功能
Make menuconfig
编译内核
Make zImage
编译驱动模块
Make modules
固化内核映像
Vivi>load flash kernel x
用usb线下载
Vivi>load flash kernel u
档系统的制作
Busybox 编译
Busybox 是一个集成了一百多个常用命令和工具的软件,大小在1M左右,
解压busybox
tar jxzv busybox-1.1.2.tar.bz2
Cp .config
Make Distclen
Make menuconfig
Make
Make install
生成_install 档夹
拷贝_install 目录档系统
档系统目录建立:可以用mkdir 命令一个一个的建立,也可以自己编写一个shell脚本档并执行来建立。
应该来说搭建根档系统是一件比较简单的事情,主要是要对档系统的结构要清楚。作为一个普通的作用的档系统,起主要作用的有一下目录:
Sbin 目录,存放系统管理的常用命令
Bin 目录,存放用户管理的常用命令
Lib 目录,存放应用程序运行所需的动态链接库,c库.
Opt/Qtopia 存放的是档系统图形界面应用程序和库
Etc 目录,存放档系统启动初始化的一些档。用户的一些的基本信息。特别重要的档就是init.d/rcS档
Usr 目录,主要用来存放用户的应用程序。
移植开发篇
移植就是把运行于一个平台的应用程序经过相应编译器编译使之可以在相应平台上一运行起来的过程。
交叉编译器:指在一个平台上用一个编译器编译应用程序能够在另外一个平台上运行的的编译器。
比如在linux 下面的编译器为:gcc 或 g++
但是在linux下的arm交叉编译器则为arm-linux-
交叉编译器一般会有多个版本,在开发时,要下载相应的版本安装。
交叉编译器的安装:
一、把交叉编译器源码包拷贝的linux的根目录
二、解包.tar zxvf arm-linux-gcc -4.3.2.tar.gz -C /
三、修改配置文件:/etc/profile 或/root/.bashrc
Vim /etc/profile
添加 pathmunge /usr/local/arm/4.3.2/bin
vim /root/.bashrc
添加 export PATH=/usr/local/arm/4.3.2/bin:$PATH
四、执行source /etc/profile 或 执行 source /root/.bashrc
五、查看交叉编译器的版本 arm-linux-gcc -v
Linux系统的构成 BootLoader Kernel 根文件系统
配置内核
X86 :make menuconfig
Arm: make menuconfig ARCH=arm
编译内核
X86:make bzImage
Arm:make uImage ARCH=arm CROSS_COMPILE=arm-linux-
根文件系统:是linux启动的第一个文件系统,没有根文件系统linux无法正常启动。
编译内核模块:(linux 2.6.29)
Make mudules ARCH=arm CROSS_COMPILE=arm-linux
安装内核模块
Make modules_install ARCH=arm INSTALL_MOD_PATH=/XX/rootfs
配置busybox
进入busybox目录
Make menuconfig
进入Busybox Setting->build Opions->选择"Build busybox as a static binary"静态链接库
Cross Compiler prefix(arm-linux)
Installation Option->
选择"Dont use/usr"该选项可以避免busybox被安装到宿主机的/usr目录下面,破坏宿主机系统。
Busybox installation Prefix(/xx/rootfs)
该选项表明编译后的位置
编译安装busybox
Make ARCH=arm CROSS_COMPILE=arm-linux-
Make install
把根文件系统制作成ramdisk文件系统
Genext2fs -b 8192 -d /xxx/rootfs ramdisk
Gzip -9 -f ramdisk
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮