目前为止的内容,大部份都是和驱动相关的。即使有部份下层代码长春linux培训,也只是为了测试驱动是否ok而编撰的。事实上,作为嵌入式设备,它本身似乎就是为了实现某个专有功能而设计的。而这种下层应用中,有很大一部份,我们是希望弄成开机启动、长期运行的。
其实,所有那些开机启动的程序最好有一个脚本管理上去,例如我们之前说的auto.sh。明天,我们就来瞧瞧,一般这个开机脚本上面通常都有什么内容,你们来一起剖析下。
1、示例脚本
#echo "begin to run script"
#run server
/usr/sbin/vsftpd &
/home/ftp/busybox telnetd -l /bin/sh &
#mount sd
mount /dev/mmcblk0p1 /mnt
# run lcd backlight
echo 34 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio34/direction
echo 1 > /sys/class/gpio/gpio34/value
#sleep for a while
sleep 1
# add some variable definition
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
#run demo programe
/bin/ts_test &
#end of script
#echo "finish script executing"
这个脚本其实内容不多,而且很具有代表性,实际开发中遇见的情形,在脚本中都有彰显。下边来一起看下。
2、脚本剖析
首先第一行和最后一行都是一个echo句子linux删除文件夹,即使我们暂时早已注释掉了,而且还是很有用的,非常是剖析调试的时侯。它的作用主要有两个,第一,就是确认脚本有没有被执行;第二,确认脚本有没有执行结束。假如希望查找中间的某一段内容有没有被执行到,还可以添加新的echo句子。
runserver这个部份,主要是启动相关的服务器程序。这儿主要启动了两个server,一个是ftp,一个是telnet。实际生产当中,还有可能会开启一个http程序,这个依照自己的需求而定。
接着就是mountsd。这句脚本也是很典型的。实际产品中,有一部份软件或则称之为固件是烧入在spinorflash或则spinandflash,而顾客在使用的时侯还须要插入自己的sd卡,这个时侯就可以把sd卡mount到指定的目录里面,便捷继续读取上面的文件和数据。
runlcdbacklight。这几句作用是为了打开lcd的背光,配合旁边的demo程序使用。在我们自己实际的产品中,好多时侯,每完成一个步骤,就须要照亮一盏灯,或则更换灯的颜色,这都是很普遍的。等所有的初始化流程都结束了,就须要把所有的灯照亮,或则变换成某一种安全的颜色,例如红色。
sleep,也就是等待。有些程序初始化话比较慢,非常是和其他设备沟通,或则自身有一部份机械装置的时侯嵌入式linux驱动程序实战开发,这个sleep是少不了的。由于和电子、软件比上去,机械部份要慢得多。
export句子嵌入式linux驱动程序实战开发,这儿主要是降低环境变量。有一些程序会须要设置一些额外的环境变量,例如LD_LIBRARY_PATH、PATH这样的,不然程序难以运行。所以用export添加必要的环境变量也是非常有必要的。
rundemoprogram,此时就是添加产品须要启动的服务器程序了。须要长时间运行的程序,就在最后添加一个&,只运行一次的程序,就不须要添加这个&,稍稍注意一下。假如须要运行的程序比较多,互相之间存在依赖关系,可以适当地添加sleep,不过这样比较影响系统启动地速率,有利有弊。这儿的服务器程序或应用程序,和之前的ftp、telnet还是不同的,前面那部份通常都是通用的开源代码,而如今这部份就是和产品、业务相关的私有代码了。
最后一个echo之前早已说过了,就是告知当前脚本全部执行完毕,一般在并口调试的时侯会比较注意。时间长了,这一行和开头的那一行基本就被注释掉了,看多了也认为麻烦。
3、其他
实际启动的时侯,为了推动运行,就会除去uboot的等待时间,不过这部份因人而异。前面这部份脚本看着简单,虽然东西还挺多的,属于小而全的那个。你们可以把它置于自己的产品中,就可以渐渐构筑自己的嵌入式应用作品了。