嵌入式linux下如何尽快播放开机音乐
今天在考虑如何尽快启动一个应用程序,播个开机音乐什么的。
最开始的启动流程是这样的,bootloader 启动kernel,kernel跑完挂载文件系统,
然后会执行/init,而这个init 是指向busybox的一个软链接,
busybox做一些事情后,会解析/etc/inittab , 其中调用/etc/init.d/rcS 脚本,
rcS脚本里面再调用其他脚本,做一些开网络之类的功能,全部做完大概五秒多,打印出了“/ #”
此处简化下,暂且认为rcS脚本是这样的吧
#!/bin/sh /etc/init.d/zqbNetwork start
这个应用程序呢,暂且叫做 zqbMusic 吧,是用来放音乐的,此处想放点开机提示音,所以我们有个音乐文件,叫kaiji.wav
调用一下 ./zqbMusic kaiji.wav 就播放了。大概一秒的音乐。
那么问题就是,如何尽快播放这个开机提示音乐。
先来个简单粗暴,直接加到rcS脚本后面,
#!/bin/sh /etc/init.d/zqbNetwork start./zqbMusic kaiji.wav
那么就在五秒多的时候,开始播放,播放完毕六秒多,打印出了"/ #",这样就比较不好了,我“/ #”之后还要启动其他应用程序呢,放音乐直接延迟了其他事情一秒多。
那么,是不是可以并行呢,考虑了一下,开网络是要时间的,放音乐也要时间,那把一个放到后台去,不要等,应该快些吧。于是改成
#!/bin/sh ./zqbMusic kaiji.wav &/etc/init.d/zqbNetwork start
后面加上 & ,就是后台执行了,也就是另一个进程了。恩,今天想到并行,搜了一下才发现这么简单,加个 & 就可以了,好东西。
这么做了之后,好一些了,五秒多就可以听到声音了,打印“/ #”的时间也在五秒多(比原来慢一些,毕竟多跑了个线程抢资源)
这个时候,忍不住就要想,能不能再往前提,我干脆提到跟init并行,不改文件系统的话,这就是用户空间的极限了吧,一进来就开始播音乐
于是修改掉kernel的CMDLINE,把里面的init=/init 改成 init=/zqbinit,重新编译内核
然后就写个zqbinit.sh,大概是这样
#!/bin/sh ./zqbMusic kaiji.wav & exec init
搞定,丢到文件系统,烧到板子启动,结果报错了,是一个什么permission denied,具体当时没存下来,大概就是说我没有权限执行 init(实际上是busybox)
尝试了chmod 各种加权限,还是报错,暂时不知道为什么,算了干脆用C试试
于是用C写个很简单的程序,fork一个子进程,子进程去execlp调用zqbMusic,父进程则execlp 调用原本的init
大概是这样
#include <stdio.h> #include <unistd.h> #include <stdlib.h>int main(int argc, char **argv) {pid_t pid;if(pid = fork()) {execlp("./init", "init", NULL);exit(0);}execlp("./zqbMusic", "zqbMusic", "./kaiji.wav",NULL);return 0; }
搞好Makefile,编译出zqbinit,放进去,这回可以用了
结果是,音乐在四秒多就开始播了,原本的init也能正常执行下去最终到达控制台,打印出“/ #”。
不过播放音乐这个进程,抢资源还是比较多,打印“/ #”的时间比没播音乐的情况,延迟了七八百毫秒。但总比串行执行,延迟一秒多,要好些。
而且这么看来,其他应用程序,也不是非得等到“/ #”之后调用,跟这个音乐一起并行嘛,再开个进程,也是个方法。至于到底要不要这么做,那就是另说了,毕竟进程多了切来切去也挺耗资源的。
那能不能再提前?想了下,如果在刚刚那个调用init 的父进程中,来个sleep之类的,主动让资源给zqbMusic,或者有什么小动作提一下优先级,那就是当之无愧的用户空间第一快了。
再提前?再提前就要到内核里面去了,唔,在驱动初始化完毕之后,补一个initcall,就用来放音乐,理论上似乎也是可以的,就是有点别扭。
再提前?把驱动移植到uboot中,没进内核就可以先放开机音乐了,也是一个办法。
再提前,那就太难度了,不如不要放音乐了,弄个蜂鸣器,开机滴一下(突然有种电磁炉即视感……),这个电路应该就能解决吧,绝对快。
本文链接:http://www.cnblogs.com/zqb-all/p/6012087.html
转载于:https://www.cnblogs.com/zqb-all/p/6012087.html
嵌入式linux下如何尽快播放开机音乐相关推荐
- 嵌入式linux音频播放器设计,基于嵌入式Linux下Madplay音频播放器设计论文.docx
基于嵌入式Linux下Madplay音频播放器设计论文 滁州职业技术学院计算机应用技术专业毕业论文PAGE I 滁州职业技术学院信息工程系--2015届计算机应用专业毕业论文 姓 名: 周杰 班 级: ...
- mplayer - Linux下的电影播放器
概要 mplayer [选项] [ 文件 | URL | 播放列表 | - ] mplayer [全局选项] 文件1 [特定选项] [文件2] [特定选项] mplayer [全局选项] {一组文件和 ...
- 嵌入式linux进行视频监控,嵌入式Linux下的视频监控解决方案
原标题:嵌入式Linux下的视频监控解决方案 在嵌入式工控板上接一个摄像头进行视频监控,看起来比较容易实现,但往往是"理想很丰满.现实很骨感".历经千辛万苦效果却不是很理想,本文就 ...
- 浅谈Linux下的媒体播放器(转)
浅谈Linux下的媒体播放器(转)[@more@]Linux开放实验室(Linux OpenLab)郝煜.季冰Linux开放实验室校园爱好者小组 陈强(农大).吴迪.雷凌.戴二红.刘志强(北科大)Li ...
- linux+家庭+媒体服务器,Linux下搭建可随时随地传输音乐的个人流媒体服务器
原标题:Linux下搭建可随时随地传输音乐的个人流媒体服务器 mStream是一个免费的.开源的.跨平台的个人音乐流媒体服务器,它可以让你在所有设备之间同步和传输流媒体音乐.它由一个用NodeJS编写 ...
- 嵌入式Linux下基于FFmpeg的视频硬件编解码[图]
转自:http://tech.c114.net/167/a674033.html 摘要: 对FFmpeg多媒体解决方案中的视频编解码流程进行研究.结合对S3C6410处理器视频硬件编解码方法的分析,阐 ...
- 嵌入式Linux下彩色LCD驱动的设计与实现
嵌入式Linux下彩色LCD驱动的设计与实现 转载 摘要:本文介绍了如何在嵌入在开发彩色LCD显示驱动的方法,并对Linux中的显示驱动程序结构和框架作一介绍. 长期以来,在常见的掌上电脑(PDA)等 ...
- 嵌入式Linux下基于FFmpeg的视频硬件编解码
嵌入式Linux下基于FFmpeg的视频硬件编解码[图] http://www.c114.net ( 2012/3/1 15:41 ) 摘要: 对FFmpeg多媒体解决方案中的视频编解码流程进行研究. ...
- 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误
嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报 分类: 嵌入式(928) 一般察看函数运行时堆栈的 ...
最新文章
- codevs 2879 堆的判断
- OpenCV学习记录(一):使用haar分类器进行人脸识别
- 浏览器访问solr报错:HTTP Status 500 - {msg=SolrCore 'collection1' is not available due to init failure
- Android cocos2d-x开发(三)之创建Android工程和编译
- 2.3.6 操作系统之进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)
- H5+Mui文件配置 vue-resource基本使用方法
- import lombok 报错_Android上使用Lombok和set、get方法告别
- [渝粤教育] 西南科技大学 建筑制图 在线考试复习资料
- (JAVA)TreeSet
- 我这几年来是如何编写 Go HTTP 服务的(转载)
- 2.3.14 Python 函数进阶-生成器
- 项目组成和开发步骤——VB
- 百度地图离线调用(详细教程)
- sql 内连接,左连接,右连接,全连接
- 不要让自己的大脑变成别人思想的跑马场-叔本华
- zen cart产品页面伪静态后-c-.html,zencart .htaccess伪静态文件规则
- Boostrap nav和navbar的详细使用
- buct哥德巴赫猜想
- 隔离技术之MUX VLAN
- 厚物科技定制三屏加固便携机HW-8700TS
热门文章
- 网络推广离不开关键词的精准挖掘
- 制作网站设计项目进度表让用户充分了解网站制作进程
- Android性能优化面试题,与性能优化相关面试题 - 与IPC机制相关面试题 - 《Android面试宝典》 - 书栈网 · BookStack...
- graphviz linux教程,程序员绘图利器 — Graphviz
- 区块链带来的价值包括哪些_爱链社区干货:区块链技术为冷链物流带来的了那些价值?...
- ubuntu 12.04 php升级,在 Ubuntu 12.04 LTS 中将 PHP 从 5.3 升级到 5.5
- python实现火车票查询工具_Python 实现一个火车票查询的工具
- bootstraptable获取所有数据_一键获取oracle用户下所有表的表名与其数据量
- 初学者怎样看懂python代码_Python零基础入门-(如何让人读懂你的代码)文档注释
- ftp可以传输什么类型文件_使用FTP文件传输典型案例配置