2440 linux 如何在文件系统启动后自动运行我的程序?
最近在做一个基于三星2440的小软件,该软件的希望启动流程是:加电->内核启 动->文件系统启动->在文件系统启动最后,运行我的程序。 比如我一个简单的hello.c 代码: #include <stdio.h> int main(void) { printf("hello, world!\n"); } 通过arm-linux-gcc -o hello hello.c生成二进制文件hello后,在开机内核和文 件系统启动后,自动输出"hello world"。 我尝试着这么做(没成功): 在一个检测能正确运行的文件系统my_root的bin文件夹中加入二进制文件hello, 将metc目录下的inittab文件中“ttySAC0::askfirst:-/bin/sh” 改为 “ttySAC0::askfirst:-/bin/hello”,可是这样不行,也就是说屏幕没有输出我 希望的“hello,world”。本人是个菜鸟,希望老鸟们帮忙指点,谢谢。。
最佳答案
开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/usr/etc/rc.local文件中。有的开发板开机后自动运行图形界面程序,需要按住ctrl+c让开发板进入到linux的SHELL提示符界面。其实可通过注释掉rc.local文件中调用图形界面的命令,增加运行用户应用程序的命令,达到开机自动运行用户应用程序的目的。 下面以我做的实验为例,描述具体的实现步骤。该方法源于网络,我加以验证,稍做修改,此文相当于转载。 1.进入pc机的Linux 操作系统,在/nfs/usr/下通过mkdir lz 命令新建一个名为lz的文件夹,进入lz文件夹,通过mkdir hello新建一个hello文件夹用来存放我们将要编写的hello.c文件和编译生成的可执行文件。 2.在/nfs/usr/lz/hello下通过vi hello.c命令新建hello.c文件,编辑如下测试程序: #include <stdio.h> int main(){ printf("Hello,test arm-linux!\n"); return 0; } 完成编辑后通过:wq保存后退出。 3.主机通过如下命令交叉编译环境编译hello.c: #arm-linux-gcc –o hello hello.c 4.通过ls 命令可以看到在/nfs/usr/lz/hello/下已经生成了hello可执行文件,我们可以在开发板上通过./hello来测试自己编写的hello.c执行情况 5.修改rc.local文件,在文件的最后通过‘#’释掉启动图形界面的指令,增加执行用户应用程序hello的指令,具体实现如下: #export PATH=$QPEDIR/bin:$PATH #qtopia #/usr/qtopia/bin/qtopia /usr/lz/hello/./hello 注:前三行是注释掉启动图形界面,最后一行是添加的执行用户的hello测试程序。 6.重启开发板,通过vivi参数配置让开发板通过nfs挂载主机上的文件系统,这时我们就可以通过超级终端看到开发板已经运行了我们编写的hello程序。