让Pluto SDR完全脱机执行任务——实现开机运行特定脚本/程序

在我之前的关于交叉编译的文章中,讨论了如何使用Linaro工具链在Ubuntu主机上编译能在Pluto SDR的arm核上运行的可执行程序,但仅仅这样还不足,因为想要让Pluto SDR执行某个特定任务,首先需要在主机交叉编译,然后通过scp命令传送到Pluto SDR上,然后通过ssh进入到Pluto SDR的Linux系统中手动执行,才完成了一次(半)脱机运行,这并不优雅。
本文讲解一种可以让Pluto SDR完全独立于主机,自行运行程序的方法,无需重新编译固件,只需要一次设置,之后每次上电,自动执行。

A hook in init.d

根据官方固件repo的#74 issue,自v0.36起,Pluto SDR固件自带自启运行脚本的能力,在/etc/init.d/下有一个S98autorun文件,其内容如下:

#!/bin/sh
#
# Script to check for and run user-supplied /mnt/jffs2/autorun.sh
#

case "$1" in
  start)
	if test -f /mnt/jffs2/autorun.sh; then
		source /mnt/jffs2/autorun.sh
	fi
	;;
  stop)
	;;
  restart|reload)
	;;
  *)
	echo "Usage: $0 {start|stop|restart}"
	exit 1
esac

exit $?

这个文件指明,每次上电启动后,都会检查/mnt/jffs2/目录下有没有autorun.sh文件,如果有,则执行之。换句话说,每次Pluto SDR上电开机后都会执行一次/mnt/jffs2/autorun.sh,如果往这个脚本文件中输入自己想要执行的操作,则每次上电都可以自动执行。

简单测试

接下来进行一个简单的测试,首先确保/root目录下都有什么文件,在这里我的/root路径下没有任何文件:

$ pwd
/root
$ ls

然后编写autorun.sh脚本:

vi /mnt/jffs2/autorun.sh
# 按下i进入插入模式开始编辑,输入如下内容,即在/root目录创建一个名为foobar和123的空文件
touch /root/foobar
touch /root/123
# 然后按下ESC,输入:wq回车保存退出

这样开机自启脚本就写好了,接下来拔插电源,等待开机后进入Pluto SDR的Linux系统,查看/root目录下是否多出了刚刚规定的文件:

$ pwd
/root
$ ls
123     foobar

文件持久化存储

理所当然能想到,如果autorun.sh脚本中规定开机自动执行某个交叉编译后的可运行程序,就可以实现上电即执行,完成某些自定义的脱机应用。但是还有个痛点是,Pluto SDR的Linux每次重启后似乎任何添加和改动的文件都会恢复到初始状态,例如如果你在/root文件夹下新建了一个文件,那么重启后这个文件就会消失,那应该如何让我的程序在Pluto SDR上持久化存储呢?
答案很简单,就是刚刚开机自启脚本所在的目录/mnt/jffs2,这个在挂载目录下的jffs2文件系统就可以实现文件的持久化存储,如果将自己的可执行程序放到这个目录下,哪怕重启文件也还会在,这样就实现了文件持久化存储,也能够实现一些更加自由的应用。

你可能感兴趣的:(matlab,开发语言,经验分享,linux,笔记)