基于Linux的广告机系统.docx
《基于Linux的广告机系统.docx》由会员分享,可在线阅读,更多相关《基于Linux的广告机系统.docx(98页珍藏版)》请在冰豆网上搜索。
基于Linux的广告机系统
基于Linux的广告机系统
摘要
一般来说,广告系统,被称为广告系统是在网络信息技术时代的飞速发展中产生的新类型的网络多媒体信息发布系统。
在这个系统的基础上,用户可以发布公开显示终端上公开的信息内容以各种不同的方式。
目前,数字化,网络化,信息化的多媒体网络广告机,但它已成为一大亮点,在媒体市场中,广告机的单机版和单一媒体发布的形式,可满足日益增长的市场需求它没有。
研究多种媒体形式,多功能的交互式网络广告机。
在这篇文章中,使用了大多数Linux系统的支持的开源软件和工具集,使用Linux的嵌入式系统设计,成本低,声音功能的性能优良,具有灵活的网络分销网络建立媒体广告机系统。
关键词:
广告机;Linux嵌入式系统设计;网络信息技术时代
AdvertisingMachineSystemBasedonLinux
Abstract
Generallyspeaking,anadvertisingsystem,calledanadvertisingsystem,isanewtypeofnetworkmultimediainformationdistributionsystemthathasbeenproducedintherapiddevelopmentoftheeraofnetworkinformationtechnology.Onthebasisofthissystem,userscanpublishtheinformationcontentdisclosedonthepublicdisplayterminalinvariousways.Atpresent,digital,networked,andinformation-basedmultimedianetworkadvertisingmachines,butithasbecomeahighlight.Inthemediamarket,thestand-aloneversionofadvertisingmachinesandtheformofsinglemediareleasecanmeetthegrowingmarketdemand.Studymultiplemediaforms,multi-functionalinteractivenetworkadvertisingmachine.Inthisarticle,IusetheopensourcesoftwareandtoolsetsupportedbymostLinuxsystems,useLinuxembeddedsystemdesign,lowcost,excellentsoundfunctionperformance,andhaveaflexiblenetworkdistributionnetworktoestablishamediaadvertisingmachinesystem.
Keywords:
advertisingmachine;Linuxembeddedsystemdesign;Aneraofnetworkinformationtechnology
一、前言
广告机,通常被称为国外数字标牌,作为媒体推广新的,但动态的方式,它走的是人的眼睛快速的步伐。
现在不难发现,银行,写字楼,地铁,街道和公共交通工具在我们身边,越来越多的地方都出现了类似的电视,不停地滚动和播放不同的内容信息的产品,这种新的媒体技术通过特定的平该广播的经济,商业和娱乐信息到特定的一群人显示设备是广告机的典型组成部分。
本文提出了一种基于Linux的广告机系统,其特点是事实,没有必要连接其他的事情,需要进行更新,以改变视频,图片,字幕的内容等等。
(一)本设计的目的、意义及应达到的技术要求
随着电子技术,多媒体技术和网络技术的飞速发展,引擎广告作为一种产品,似乎是“第五大媒体”的传统报刊,广播,电视和互联网之后。
我仍然在研究和有关广告机新开始思考的早期阶段。
由于它是基于市场上的新产品,广告机逐渐被人们所认可,用户不时,所以我们有理由相信,在不久的将来,会有广告是更加人性化和整个生命所接受更多的机会。
广告机系统的基本功能:
1、可播放丰富的电子资源,包括视频、图片、文本。
2、实现图片切换
3、实现图片切换为视频
4、实现视频与音频的同步。
(二)本设计在国内外的发展概况及存在的问题
[文献21]在全球网络的时代,网络广告代表广告发展的新趋势。
普及和互联网的发展提供了企业一个全新的广告传播的工具。
在线广告将成为国内外广告业同行竞争的领域。
研究现状和在线广告在中国的发展趋势,将提供前瞻性的网络广告在中国的发展理论预测和指导。
本文分析了来自中国的网络和在线广告的基础知识,中国的网络广告发展的现状和存在的问题,并预测中国网络广告的发展趋势:
随着中国企业和网民接受网络广告的增加,将会有一个在线广告前所未有的发展机遇;中国的网络技术的发展,将带来网络广告更强的技术保障;网络法律和广告法的逐步完善将使得网络广告一个合法的轨道运行;该评价方法更加科学;互联网已成为“第四大媒体”的传统报纸,广播,电视媒体之后。
网络广告的四大媒体中所占的份额将逐步增加,并有望成为第一种类型的广告...。
文献[22]介绍了在基于μCOS-Ⅱ嵌入式操作系统上设计数字音频播放器的方法,实现在该播放器上对歌曲音频文件的存储、播放、选择、暂停、倒退等功能。
从中了解到嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linx操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识,硬件部件的使用及编程,U-Boot、Iiux内核的分析、配置和移植,根文件系统的构造,内核调试技术,驱动程序编写及移植,GUI系统的移植,应用程序调试技术。
文章的系统论述对设计思想产生很大影响。
(三)本设计应解决的主要问题
1、Linux编译环境的搭建,如何配置标准的编译器;
2、uboot的应用,启动加载器是一个系统必须有的一部分,必须掌握如何应用;
3、模块的编译,了解如何往内核中加载模块;
4、LED屏的显示,如何让LED屏显示相应的图片或者视频;
5、实现视频与音频的同步。
二、本设计
1.系统概括
如图1所示,整个系统被粗略地划分为三个部分:
广告机监控终端,服务器控制中心,以及广告机显示终端。
监视终端通过Web浏览器控制页面由管理员接收该控制命令输入,并提交表单通过网络路由服务器控制中心。
服务器控制中心根据提交的监控终端,以启动相应的插座服务过程中,建立与所述显影板插座监控服务进程的网络通信,以及同时发送相应的控制命令和信息的不同形式类别调用相应的CGI程序。
广告机的显示终端解析相应的控制命令和信息来控制的显示终端设备上的媒体信息的播放模式。
广告机监控终端和服务器控制中心的设备为普通PC机。
广告机显示终端采用的是粤嵌嵌入式GEC6818开发板。
该开发板的处理器是三星Cortex-A53系列高性能八核处理器S5P6818,最高主频高达1.4GHz,可应用于嵌入式Linux和Andriod等操作系统的驱动、应用开发。
开发板留有丰富的外设,支持千兆以太网、板载LVDS接口、MIPI接口、USB接口等。
该芯片支持MPEG-2/H.264/AVS的高清和标清解码的输出,视频输出支持PAL/NTSC/480p/576p/720p/1080i。
同时,GEC6818是一个有着丰富的外围设备和强大媒体能力的嵌入式平台,可以灵活地选择多种LCD或者其他显示设备,作为广告机信息发布节点的媒体播放设备。
1.1交叉编译器
编译程序的时候,就是把程序编译成可以被机器识别的文件,实际上就是把代码编译成CPU可以识别的指令,不同的CPU,指令集就不同。
在linux系统中编译出来的程序,无法直接放到exynos4412的芯片中去运行
因此需要安装一个可以在linux中编译,并且编译后的文件可以在exynos4412芯片中运行的编译器
这种在两个CPU之间进行转换的编译器称之为交叉编译器,效果就是linux系统编译的东西可以在exynos4412的芯片中运行
源码包:
arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
移植过程:
把源码包放到共享目录下,并且复制到linux系统中的tools目录,然后解压
命令:
sudopasswdroot
输入密码123456,再重复输入两次123456这个密码
那么就修改超级用户密码为123456了
su
输入密码123456
mkdir/tools/
cp/mnt/hgfs/share/arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz/tools/
cd/tools
tarxfarm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
echoexportPATH=$PATH:
/tools/opt/FriendlyARM/toolschain/4.5.1/bin>>~/.bashrc
关闭终端,从新打开
su
输入密码123456
arm-linux-gcc-v
如果显示:
gccversion4.5.1(SourceryG++Lite2010.09-50)
表示成功安装
1.2uboot
uboot是属于bootloader的其中一种,开源并且比较通用的一种
在嵌入式中,bootloader又称之为启动加载器,是一个系统必须有的部分,主要负责初始化最基本的硬件(最重要的是启动外扩内存),然后把内核复制到外扩内存中,并且引导内核启动
只要能完成初始化硬件,搬运内核并且引导内核启动的,都可以称之为bootloader
uboot中主要就是初始化内存,然后通过内存操作来搬运内核,并且引导其启动
常用mmc命令族来实现这些功能
除此之外还可以从网络上下载需要的内核,文件系统等
源码包:
uboot_tiny4412-sdk1506.tar
进入超级用户权限:
命令:
sudopasswdroot(如果前面已经执行过了,可以不用再执行)
输入密码123456,再重复输入两次123456这个密码
那么就修改超级用户密码为123456了
移植过程:
把源码包放到共享目录下,并且复制到linux系统中的work目录,然后解压
命令:
su
输入密码123456
mkdir/work/
cd/work/
cp/mnt/hgfs/share/uboot_tiny4412-sdk1506.tar.bz2./
tarxfuboot_tiny4412-sdk1506.tar.bz2
cduboot_tiny4412-sdk1506/
makeclean
makedistclean
maketiny4412_config
make-j16
最终出现以下内容代表成功:
arm-linux-objcopy--gap-fill=0xff-Obinaryu-bootu-boot.bin
1.3移植内核
内核是整个系统的功能的实现
内核源码是大量的.c和.h文件组成
最终会被编译成一个大型的.bin文件,也就是一个可执行程序
在板子上搭建一个操作系统,需要移植一个内核
移植步骤:
命令:
su
如果需要输入密码,则输入123456(前提是执行过sudopasswdroot)
cp/mnt/hgfs/share/linux-3.5.buildok.tar.gz/work/
把内核源码复制到work下
cd/work
tarxflinux-3.5.buildok.tar.gz
解压内核源码包
cdlinux-3.5
makeclean
makedistclean
cptiny4412_linux_defconfig.config
makemenuconfig(保证窗口足够大.这个命令需要窗口大小足够才可以执行成功)
在内核配置菜单中,选择
SystemType--->
[]SupportTrustZone-enabledTrustedExecutionEnvironment
使用上下左右键移动,回车键确定,空格键操作
make-j16
开始编译,注意,一定要关闭上面的SupportTrustZone-enabledTrustedExecutionEnvironment选项
1.4文件系统制作
文件系统用户管理一个系统的磁盘,给应用程序提供运行环境等等
文件系统都是通过源码包制作的
源码包:
busybox-1.17.2-20101120.tgz
制作步骤:
su
输入密码123456(前提是执行过sudopasswdroot)
cd/work/
cp/mnt/hgfs/share/busybox-1.17.2-20101120.tgz./
tarxfbusybox-1.17.2-20101120.tgz
cdbusybox-1.17.2
makeclean
makedistclean
makemenuconfig
需要配置的都在选项BusyboxSettings中
BusyboxSettings--->
BuildOptions--->
[*]Buildsharedlibbusybox这个选项要修改为*
CrossCompilerprefix(NEW)交叉编译器arm-linux-
InstallationOptions--->
(./_install)BusyBoxinstallationprefix(NEW)修改为/work/root_nfs/
保存退出
make&&makeinstall
cd/work/root_nfs/
mkdirlibdevetc/init.dhomeprocsysroottmpvar-p
往lib中放入需要用到的动态库
cp/tools/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib/*./lib/-rfd
cp/tools/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/*./lib-rfd
创建两个设备节点文件
cd/work/root_nfs/dev
mknodnullc13
mknodconsolec51
处理配置文件
cd/work/root_nfs/etc/
cp/etc/passwd/work/root_nfs/etc-rf
把passwd中的所有bash改为sh
cp/etc/group/work/root_nfs/etc-rf
cp/etc/fstab/work/root_nfs/etc-rf
viminittab,在文档中添加以下内容
:
:
sysinit:
/etc/init.d/rcS
console:
:
askfirst:
-/bin/sh
:
:
ctrlaltdel:
/sbin/reboot
:
:
shutdown:
/bin/umount-a-r
vimprofile,在文档中添加以下内容
USER="`id-un`"
LOGNAME=$USER
PS1="[\u@\h\w]#"
PATH=$PATH
HOSTNAME=`/bin/hostname`
exportUSERLOGNAMEPS1PATH
cdinit.d
vimrcS
输入以下内容
#!
/bin/sh
mount-a
mkdir/dev/pts
mount-tdevpts/dev/pts
echo/sbin/mdev>/proc/sys/kernel/hotplug
mdev-s
/bin/hostnamexyd
chmod777rcS
1.5文件系统挂载
一个系统组成:
bootloader+内核+文件系统
ubootlinux-3.5内核ext4
接下来只需要让文件系统和内核直接进行连接
就是把文件系统挂载到内核上
文件系统的挂载比较常见的方式:
一个是网络挂载一个是本地挂载
一般在研发过程中,linux的文件系统,基本都是使用的网络挂载,原因在于研发过程中需要经常修改文件系统中的东西,或者修改内核中的东西,网络挂载的方式,让这些修改变得很轻松
如果是本地挂载,需要往文件系统中发送文件,相对会麻烦很多,本地挂载一般是在产品研发成功,可以出成品,不需要再去修改文件系统或者内核的时候,把文件系统挂载到本地存储芯片中
网络挂载文件系统
下面所有操作都是在超级用户权限下执行的,通过su命令进入
挂载步骤:
下载nfs服务器
确保ubuntu系统可以正常上网
点击系统右下角的网络适配器,选择设置
选择NAT模式
在终端中执行命令
apt-getinstallnfs-server
关闭防火墙
ufwdisable
设置文件系统所在路径为开放路径
vim/etc/exports
在最后一行加入
/work/root_nfs/*(rw,sync,no_subtree_check,no_root_squash)
屏蔽掉上一行
#/opt/target*(rw,sync,no_subtree_check)
保存退出
exportfs-rv
显示exporting*:
/work/root_nfs/代表路径生效
设置网卡为物理网卡
菜单栏中"编辑"----虚拟网络编辑器
点击系统右下角的网络适配器,选择设置
选择桥接模式
启动nfs服务器
servicenfs-kernel-serverrestart
servicenfs-kernel-serverrestart执行两次
设置IP地址,子网掩码,网关等
第四步填入IP地址,子网掩码,网关,分别为
192.168.10.106255.255.255.0192.168.10.1
保存退出
点击网络连接按钮,选择刚刚配置好的网络连接
启动开发板。
在CRT工具中进入uboot操作界面,输入命令printenv可以看到环境变量
其中bootargs是需要操作的变量
输入以下内容:
setbootargsnoinitrdroot=/dev/nfsnfsroot=192.168.10.106:
/work/root_nfs/ip=192.168.10.161:
192.168.10.106:
192.168.10.1:
255.255.255.0:
:
eth0:
offinit=/linuxrcconsole=ttySAC0lcd=S702
再输入save,回车,接上网线
右手边有个复位按键,按下即可进入文件系统中,当CRT工具中,内核加载停止的时候
如果回车能够出现[root@xyd/]#,代表文件系统挂载成功,至此开发环境搭建成功
注意:
如果停下的时候,回车没有反应
可能出现问题的地方:
1.网线是否连接
2.nfs服务器是否开启,执行两次servicenfs-kernel-serverrestart
3.网卡没有使用物理网卡,并且设置桥接模式,IP地址没有设置好
4.没有声明文件系统路径/work/root_nfs/*(rw,sync,no_subtree_check,no_root_squash)
5.uboot的bootargs环境变量修改出错
2.模块编程
2.1驱动的编程方式
在linux系统中,比较明显的分为驱动层和应用层
应用层在编程的时候,是不需要去关注物理设备的具体情况,比如型号,品牌等等
只需要操作由驱动层提供的设备节点文件即可,操作方式就是文件操作
驱动层的编程跟平常的编程不太一样
驱动层编好的代码是不需要去执行的
驱动层的编程方式是模块编程,这是内核层编程的基本语法
应用程序编程,程序是从main函数开始,到exit结束,在这个过程中,应用程序是一直在运行的
模块编程目的是为了往内核加载一个模块,模块被加载之后,内核就支持这个模块的功能了,在加载的时候,
运行模块加载函数,把模块的配置操作完成之后,模块不会在执行其他任何操作
如果模块不再需要的时候,就要把模块给卸载掉,卸载的时候,会从内核把模块清除,相关的配置
会被清理掉
模块的操作:
模块是内核层的代码,只对内核进行操作
模块的基本操作就是加载,卸载
加载:
让内核支持这个模块的功能
卸载:
让这个模块功能从内核中清除掉
模块编写跟应用层是不一样的
应用层
#include
intmain(void)
{
printf(“helloworld\n”);
return0;
}
驱动层
#include
#include
module_init(xxx_init);//入口函数声明
module_exit(xxx_exit);//出口函数声明
MODULE_LICENSE(“GPL”);//开源许可协议
2.2模块编译
把上面写好的C文件编译为模块
不能直接使用arm-linux-gcc来进行编译,因为这个编译器只是用来编译应用程序的
内核模块的编译一般是没有一个固定的编译器的
但是内核源码提供了模块编译的功能,想要编译,就需要借助于内核源码
编好之后,会生成.ko的后缀的文件,这是可以往内核加载的模块
使用内核源码进行编译,需要以下的一个Makefile
vimMakefile
把表格里的内容输入进去
FILE=module
obj-m=$(FILE).o
KDIR=/work/linux-3.5/
all:
make-C$(KDIR)M=$(PWD)modules
clean:
@rm*.o.tmp_versions.*cmd**.mod**symvers*cmd**order-rf
module对应要编译的.c文件,如果.c文件为module.c,那么这里就填上module
如果.c文件为hello.c,那么就要填上hello,必须得是C文件才可以编译
另外要注意,在make前是一个tab键的缩进,@rm前也是一个tab键
2.3加载/卸载模块
以module.ko为例,把module.ko放到开发板的文件系统中
在CRT工具中运行起来系统,输入下面的命令来加载或者卸载即可
模块加载使用的命令是:
insmodmodule.ko
模块卸载使用的命令是:
rmmodmodule
查看已经加载的模块:
lsmod
第一次卸载前先执行命令
mkdir/lib/modules/3.5.0-F