开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/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
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程序。
转自:http://linux.chinaunix.net/techdoc/develop/2007/07/26/963763.shtml
从接触linux系统下编程,一直困扰着我一个问题,就是我的程序应该怎样运行。以前学习裸机程序和单片机程序的时候,不用考虑这一问题,写好的程序直接在上电的时候直接由启动代码运行我的main函数。可是在有操作系统的情况下,我编译好的程序怎样执行呢?总不能我每次要手动去执行啊~!郁闷了两年了,呵呵,从2010.12月到2011.1月,期间边学习linux下编程,边寻找这方面的资料,哎,貌似这种技术对人家很简单啊,百度上的很少,终于找到一篇,如下;
开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/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文件,编辑如下测试程序:#includeint 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程序。
这个给了我很大启发,我就顺着rc.local结合自己的板子来试验哈,我的是GT2440的板子,里面没有rc.local,但是发现有个rcS,原来这就是启动脚本,打开我的rcS如下: [root@GTStudio init.d]# cat /etc/init.d/rcS
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel ## Trap CTRL-C &c only in this shell so we can interrupt subprocesses.#
trap ":" INT QUIT TSTP/bin/hostname GTStudio
/bin/mount -n -t proc none /proc
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t usbfs none /proc/bus/usb
/bin/mount -t ramfs none /dev
echo /sbin/mdev > /proc/sys/kernel/hotplug/
sbin/mdev -s # mounting file system specified in /etc/fstab
mkdir -p /dev/pts
mkdir -p /dev/shm/bin/
mount -n -t devpts none /dev/pts -o mode=0622
/bin/mount -n -t tmpfs tmpfs /dev/shm
/bin/mount -n -t ramfs none /tmp
/bin/mount -n -t ramfs none /var
mkdir -p /var/empty
mkdir -p /var/log
mkdir -p /var/lock
mkdir -p /var/run
mkdir -p /var/tmp
/sbin/hwclock -s syslogd/etc/rc.d/init.d/netd start
echo " " > /dev/tty1
echo "Starting networking..." > /dev/tty1
sleep 1
etc/rc.d/init.d/httpd start
echo " " > /dev/tty1echo "Starting web server..." > /dev/tty1
sleep 1
/etc/rc.d/init.d/leds start
echo " " > /dev/tty1
echo "Starting leds service..." > /dev/tty1
echo " "
sleep 1
/sbin/ifconfig lo 127.0.0.1/etc/init.d/ifconfig-eth0 /
bin/qtopia &echo " " > /dev/tty1
echo "Starting Qtopia, please waiting..." > /dev/tty1
在这基础上我做了二个实验,第一个就是在usr/sbin下复制写好的openclose程序,在bin/etc/rc.d/init.d下编译脚本如下:#!/bin/sh
base=openclose# See how we were called.
case "$1" in start) /usr/bin/$base & ;; stop)
pid=`/bin/pidof $base`
if [ -n "$pid" ];
then kill -9 $pid
fi ;;
esacexit 0
刚开始以为这样就可以了,重启板子后,发现没有运行,研究了哈/etc/init.d和/etc/rc.d/init.d的区别和联系,发现还得再/etc/init.d/rcS的脚本里写进echo "Starting openclose" >/dev/tty1/etc/rc.d/init.d/openclose start 这样才能运行,同样如果输入/etc/rc.d/init.d/openclose
stop 则不能运行程序,我的理解是这etc/inir.d需要有指向etc/rc.d/init.d/openclose的语句,才能决定是否执行(start or stop)openclose里的指向程序(本实验室中base=openclose). 第二个实验就是尝试在etc/inir.d/rcS里直接运行我的程序,刚开始通过直接入 ./mns/nfs/writeread/arm-linux-gcc-4.3.3/writeread(我这里是通过nfs服务来运行我的程序的),发现不能运行,后来还是把writeread拷贝到usr/sbin里,这样通过./usr/sbin/writeread
开机就能直接运行 了。
分享到:
相关推荐
嵌入式Linux应用程序开发详解-第1 章 Linux 快速入门.pdf 嵌入式Linux应用程序开发详解-第2 章 Linux 基础命令.pdf 嵌入式Linux应用程序开发详解-第3 章 Linux 下的C 编程基础.pdf 嵌入式Linux应用程序开发详解-第4 ...
《嵌入式Linux应用程序开发详解》主要分为3个部分,包括Linux基础、搭建嵌入式Linux环境和嵌入式Linux的应用开发。Linux基础部分从Linux的安装过程、基本操作命令讲起,为Linux初学者能快速入门提供了保证。接着系统...
嵌入式Linux应用程序开发标准教程PPT嵌入式Linux应用程序开发标准教程PPT嵌入式Linux应用程序开发标准教程PPT嵌入式Linux应用程序开发标准教程PPT嵌入式Linux应用程序开发标准教程PPT
构建嵌入式linux开发环境和应用程序的编写
嵌入式Linux应用程序开发详解(完整版) 学习应用程序开发必备书籍
一步一步教你开发嵌入式linux应用程序,非常适合初学者学习
华清远见 经典资料 “黑色经典”之嵌入式Linux应用程序开发详解 很好的嵌入式Linux应用程序入门材料 值得下载 资源共享 一点都不贵 呵呵~~~~~~~~~~~
嵌入式linux应用程序开发期末考试题库及答案.doc
接着系统地讲解了嵌入式Linux的环境搭建,以及嵌入式Linux的I/O与文件系统的开发、进程控制开发、进程间通信开发、网络应用开发、基于中断的开发、设备驱动程序的开发以及嵌入式图形界面的开发等,并且还安排了丰富...
嵌入式Linux应用程序开发标准教程 配套视频教程,原版光盘
集成开发环境简称IDE,是用于开发软件的应用程序。Linux上有许多免费的IDE,例如Eclipse、NetBeans和Code::Blocks。这些IDE提供了代码编辑、调试和编译等功能,可以大大提高开发效率。 ## 版本控制 版本控制是开发...
《嵌入式Linux应用程序开发标准教程》主要分为3个部分,包括Linux基础、搭建嵌入式Linux环境和嵌入式Linux的应用开发。Linux基础部分从Linux基础、基本操作命令讲起,为Linux初学者能快速入门提供了保证。接着系统地...
1.1 嵌入式Linux基础 1.2 Linux安装 1.3 Linux文件及文件系统 1.4 实验内容——安装Linux操作系统 本章小结 思考与练习 第2章 Linux基础命令 2.1 Linux常用操作命令 2.2 Linux启动过程详解 2.3 ...
linux嵌入式开发qt,Linux环境下基于QT的WLAN管理信息系统,Linux下图形用户界面程序的开发与实现,QtEmbedded在嵌入式Linux系统中的应用
本文章详细分析Ubuntux下QT编写 linux嵌入式开发板的程序
第5 章 嵌入式Linux开发环境的搭建.pdf 第6 章 文件IO编程.pdf 第7 章 进程控制开发.pdf 第8 章 进程间通信.pdf 第9 章(多线程编程).pdf 第10 章(嵌入式Linux网络编程).pdf 第11 章(嵌入式Linux设备驱动开发).pdf 第...