`
king_tt
  • 浏览: 2290516 次
  • 性别: Icon_minigender_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文件,编辑如下测试程序:
#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 开机就能直接运行 了。

分享到:
评论

相关推荐

    Arm-linux 自定义开机启动程序,避开从桌面启动

    在Arm-Linux平台上进行嵌入式开发时,经常会遇到需要自定义开机启动程序的需求。例如,当开发者希望在启动时直接运行自己开发的Qt界面程序,而不是先启动系统桌面环境再手动打开程序。这样做不仅可以提高启动效率,...

    基于Qt的开机自启动(二)(Linux)

    在Linux系统中,实现基于Qt的应用程序开机自启动是一个实用且常见的需求,特别是在开发桌面应用时,用户希望软件能够在每次开机后自动运行。Qt是一个功能强大的C++图形用户界面库,它提供了丰富的API来帮助开发者...

    嵌入式资料——嵌入式 Linux 应用程序开发详解

    ### 嵌入式Linux应用程序开发详解 #### 1. 嵌入式Linux基础知识概览 嵌入式Linux作为一种广泛应用于嵌入式系统的开源操作系统,近年来得到了迅猛的发展。随着技术的进步,越来越多的企业和个人选择使用嵌入式Linux...

    关于嵌入式开发技术导读

    嵌入式系统是一种特殊的计算机系统,其特点是将操作系统、应用程序与硬件紧密集成,使得应用软件与硬件几乎一体化,类似于计算机开机时自检的BIOS系统。嵌入式系统因其实时性强、体积小巧、高效自动化以及快速响应等...

    ARM + LINUX 嵌入式系统技术路线

    综上所述,ARM + Linux嵌入式系统的开发涉及到一系列复杂的步骤和技术点,从开发环境的准备到BootLoader的选择,再到内核和应用程序的开发,每一步都需要仔细规划和实现。掌握这些技术和方法对于从事嵌入式开发工作...

    Micro2440开机自动运行自编QT4图像处理程序

    在嵌入式开发领域,特别是在基于Linux系统的设备上,实现系统启动时自动运行特定的应用程序是一项常见的需求。例如,在Micro2440开发板上,为了能够使用户自编写的QT4图像处理程序在系统启动后自动运行,就需要进行...

    嵌入式驱动程序开发环境

    - **设置开机自动登录为root用户**: Ubuntu默认情况下不允许root用户直接登录,需要通过一系列步骤来实现这一功能。首先,需要使用`sudosu`命令切换到root用户权限模式,接着修改`/etc/lightdm/lightdm.conf`文件,...

    如何实现Linux操作系统的自动登录

    开机自动登录Linux,并自动运行XWindow应用程序,有其特殊的应用背景,如基于Linux平台的监控...本文以Redhat7.2为平台,结合Linux启动过程,介绍了如何避免身份验证自动登录,并直接进入X Window自动运行应用程序。

    嵌入式linux外设接口硬件测试代码

    在嵌入式Linux系统中,硬件接口的测试是系统开发不可或缺的一部分,它能够确保设备的稳定运行,减少因硬件问题导致的系统故障。通过详尽的测试代码和实践,开发者可以更自信地将产品推向市场,满足用户对可靠性和...

    猪哥的嵌入式linux公房菜

    ARMLinux开机后自动运行特定程序的方法** - **配置文件**:修改rc.local等文件。 - **启动脚本**:编写并放置在适当位置。 **3. ARM下GCC交叉编译器的制作** - **配置工具链**:选择合适的工具链版本。 - **编译...

    PW2440嵌入式主板使用手册V1.2

    8.11 应用程序在 WinCE 启动后自动运行 8.12 WinCE 配置文件中的路径 8.13 WinCE 字库与内核分离设置 8.14 向 WinCE 的注册表添加其他注册表文件 8.15 WinCE 内核 NK.nb0 大小设置 8.16 WinCE 中如何编译生成 NK.nb0...

    基于ARM的Qt_E应用程序开发的改进与实现.pdf

    这意味着需要在系统启动时自动加载和运行应用程序,而无需人工干预。这可能涉及修改系统的启动脚本、配置文件或者在系统启动过程中嵌入特定的启动逻辑,以确保应用程序能够在系统完全启动后立即运行。 ### 开发环境...

    嵌入式linux驱动开发教程---学习.zip

    在嵌入式Linux系统中,驱动程序是连接硬件与操作系统之间的桥梁,它们使得操作系统能够管理和控制硬件设备。这篇教程——“嵌入式Linux驱动开发教程”将深入探讨这个主题,帮助开发者掌握驱动程序的设计和实现。 一...

    迅为出品---iTOP-4412开发板之Linux实验手册-ARM开发板资料.pdf

    《迅为出品---iTOP-4412开发板之Linux实验手册》是一份专门针对iTOP-4412开发板用户编写的Linux操作系统下的应用程序开发与实验指南。该手册详细介绍了Linux操作系统下进行编程实验的步骤、代码和分析,非常适合初学...

    嵌入式Linux和MiniGUI学习笔记.pdf

    **2.3.2 交叉编译的共享库**:针对嵌入式开发,这部分介绍了如何构建适用于目标平台的共享库,并确保它们能在目标平台上正确运行。 #### 第3章 Linux下的串口使用 **3.1 Linux下的串口设备** 这部分介绍了Linux...

    11级测控嵌入式linux开发基础复习大纲.pdf

    【嵌入式Linux开发基础】复习大纲主要涵盖了嵌入式系统、ARM处理器、Linux系统、命令、编程基础、构建嵌入式Linux平台、驱动程序设计和文件I/O编程等多个方面,旨在帮助学生全面掌握嵌入式Linux开发的核心技能。...

    linux内核启动过程

    ### Linux内核启动过程 #### 一、引言 Linux作为一个免费开源的Unix类操作系统,在全球...此外,对Linux内核启动过程的理解也是将其应用于嵌入式系统的基础之一,有助于进一步推动Linux在嵌入式领域的应用和发展。

Global site tag (gtag.js) - Google Analytics