今天在考虑如何尽快启动一个应用程序,播个开机音乐什么的。

最开始的启动流程是这样的,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下如何尽快播放开机音乐相关推荐

  1. 嵌入式linux音频播放器设计,基于嵌入式Linux下Madplay音频播放器设计论文.docx

    基于嵌入式Linux下Madplay音频播放器设计论文 滁州职业技术学院计算机应用技术专业毕业论文PAGE I 滁州职业技术学院信息工程系--2015届计算机应用专业毕业论文 姓 名: 周杰 班 级: ...

  2. mplayer - Linux下的电影播放器

    概要 mplayer [选项] [ 文件 | URL | 播放列表 | - ] mplayer [全局选项] 文件1 [特定选项] [文件2] [特定选项] mplayer [全局选项] {一组文件和 ...

  3. 嵌入式linux进行视频监控,嵌入式Linux下的视频监控解决方案

    原标题:嵌入式Linux下的视频监控解决方案 在嵌入式工控板上接一个摄像头进行视频监控,看起来比较容易实现,但往往是"理想很丰满.现实很骨感".历经千辛万苦效果却不是很理想,本文就 ...

  4. 浅谈Linux下的媒体播放器(转)

    浅谈Linux下的媒体播放器(转)[@more@]Linux开放实验室(Linux OpenLab)郝煜.季冰Linux开放实验室校园爱好者小组 陈强(农大).吴迪.雷凌.戴二红.刘志强(北科大)Li ...

  5. linux+家庭+媒体服务器,Linux下搭建可随时随地传输音乐的个人流媒体服务器

    原标题:Linux下搭建可随时随地传输音乐的个人流媒体服务器 mStream是一个免费的.开源的.跨平台的个人音乐流媒体服务器,它可以让你在所有设备之间同步和传输流媒体音乐.它由一个用NodeJS编写 ...

  6. 嵌入式Linux下基于FFmpeg的视频硬件编解码[图]

    转自:http://tech.c114.net/167/a674033.html 摘要: 对FFmpeg多媒体解决方案中的视频编解码流程进行研究.结合对S3C6410处理器视频硬件编解码方法的分析,阐 ...

  7. 嵌入式Linux下彩色LCD驱动的设计与实现

    嵌入式Linux下彩色LCD驱动的设计与实现 转载 摘要:本文介绍了如何在嵌入在开发彩色LCD显示驱动的方法,并对Linux中的显示驱动程序结构和框架作一介绍. 长期以来,在常见的掌上电脑(PDA)等 ...

  8. 嵌入式Linux下基于FFmpeg的视频硬件编解码

    嵌入式Linux下基于FFmpeg的视频硬件编解码[图] http://www.c114.net ( 2012/3/1 15:41 ) 摘要: 对FFmpeg多媒体解决方案中的视频编解码流程进行研究. ...

  9. 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误

    嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报  分类: 嵌入式(928)  一般察看函数运行时堆栈的 ...

最新文章

  1. codevs 2879 堆的判断
  2. OpenCV学习记录(一):使用haar分类器进行人脸识别
  3. 浏览器访问solr报错:HTTP Status 500 - {msg=SolrCore 'collection1' is not available due to init failure
  4. Android cocos2d-x开发(三)之创建Android工程和编译
  5. 2.3.6 操作系统之进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)
  6. H5+Mui文件配置 vue-resource基本使用方法
  7. import lombok 报错_Android上使用Lombok和set、get方法告别
  8. [渝粤教育] 西南科技大学 建筑制图 在线考试复习资料
  9. (JAVA)TreeSet
  10. 我这几年来是如何编写 Go HTTP 服务的(转载)
  11. 2.3.14 Python 函数进阶-生成器
  12. 项目组成和开发步骤——VB
  13. 百度地图离线调用(详细教程)
  14. sql 内连接,左连接,右连接,全连接
  15. 不要让自己的大脑变成别人思想的跑马场-叔本华
  16. zen cart产品页面伪静态后-c-.html,zencart .htaccess伪静态文件规则
  17. Boostrap nav和navbar的详细使用
  18. buct哥德巴赫猜想
  19. 隔离技术之MUX VLAN
  20. 厚物科技定制三屏加固便携机HW-8700TS

热门文章

  1. 网络推广离不开关键词的精准挖掘
  2. 制作网站设计项目进度表让用户充分了解网站制作进程
  3. Android性能优化面试题,与性能优化相关面试题 - 与IPC机制相关面试题 - 《Android面试宝典》 - 书栈网 · BookStack...
  4. graphviz linux教程,程序员绘图利器 — Graphviz
  5. 区块链带来的价值包括哪些_爱链社区干货:区块链技术为冷链物流带来的了那些价值?...
  6. ubuntu 12.04 php升级,在 Ubuntu 12.04 LTS 中将 PHP 从 5.3 升级到 5.5
  7. python实现火车票查询工具_Python 实现一个火车票查询的工具
  8. bootstraptable获取所有数据_一键获取oracle用户下所有表的表名与其数据量
  9. 初学者怎样看懂python代码_Python零基础入门-(如何让人读懂你的代码)文档注释
  10. ftp可以传输什么类型文件_使用FTP文件传输典型案例配置