首页 > 系统相关 >ARM Linux 系统设置开机自启动一个程序

ARM Linux 系统设置开机自启动一个程序

时间:2023-06-14 23:22:06浏览次数:50  
标签:ARM etc init Linux 自启动 buf hello

原文:https://blog.csdn.net/weixin_45157820/article/details/119906809

前言
在之前做项目的时候, 他是一个智能拨号模块, 是一个单独运行的程序, 在ARM开发板上每次重启之后, 需要自己再去手动运行一次, 这个时候我们想到既然他是智能拨号模块, 那就要实现一个全自动的, 也就是开机时让他自启动,

自启动设置
1. 在Linux 下编写一个hello.c(此程序需要在ARM上开机自启动)
hello.c如下:

#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>


int main (int argc, char **argv)
{
int fd = -1;
int rv = -1;
char buf[64];

memset(buf, 0, sizeof(buf));
strcpy(buf, "hello\n");

fd = open("hello.txt", O_RDWR|O_CREAT, 0600);

while(1)
{
rv = write(fd, buf, strlen(buf));
sleep(3);
}

return 0;
}

2. 使用交叉编译工具编译hello.c, 生成一个在ARM下运行的可执行文件
使用交叉编译工具, 生成hello, 可执行问文件, 可以看到不能直接运行, file命令查看文件, 可以看到是 ARM.


3. 将可执行文件拿到ARM开发板上, chmod a+x hello , 给执行权限
这里有俩种方法都可以将文件拿到ARM板上 , 一种是通过secure crt 远程登陆的rz和sz命令, 将文件拿到ARM板上, 一种可以通过tftp将可执行文件拿过去. 要注意拿过去的可执行文件没有权限, 使用chmod 命令给一个权限

我们先执行一下, 可以看到已经将hello写入 hello.txt中, 将hello.txt删除, 方便我们进行以下的测试


4. 打开开机启动文件(shell 脚本), 每个板子可能有不同的Linux内核, 故启动文件名称不一样
例如:
/etc/init.d/rcS
/etc/init.d/rc.local
/etc/profile
/usr/etc/rc.local
我的板子上是 “/etc/init.d/rcS” 这个文件名称

 

5. 在 /etc/init.d/rcS 文件中添加需要自启动程序(方案一)
即在shell中 执行一个可执行文件, 进入到绝对路径, ./可执行文件名称 即可, 例如:
cd /apps
./hello


5. 在 /etc/init.d/路径中添加一个shell脚本(方案二)
创建了init进程, init进程执行init.d解释/etc/inittab, 这个就会去执行/etc/init.d中有一个rcS的脚本, 这个脚本是for循环, 找到/etc/init.d中以S打头的至少俩个字符的脚本, 然后执行这个脚本;


这个时候我们创建一个s41_gsmd的shell脚本, 在里面写上需要自动启动的程序即可; (记得要chmod 给权限哦~)


进行重启设备验证
我们重启设备去查看一下, 通过ps aux 查看一下, 可以看到 hello 正在运行


已经将hello 写入到了hello.txt中, 已经完成了程序开机自启动
————————————————
版权声明:本文为CSDN博主「-&gt;小黑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45157820/article/details/119906809

标签:ARM,etc,init,Linux,自启动,buf,hello
From: https://www.cnblogs.com/bruce1992/p/17481614.html

相关文章

  • Linux(链接器的意义)
    (文章目录)前言本篇文章我们来讲解链接器的意义。一、链接器概念介绍链接器(Linker)是计算机编译器系统中的一个重要组成部分,它用于将编译后生成的目标模块(ObjectModule)链接在一起,生成可执行文件或动态链接库(DynamicLinkingLibrary)。链接器的主要任务是将符号(Symbol)引用解析......
  • 理解linux的IOWait
    看到许多Linux性能工程师将CPU使用的"IOWait"部分视为系统何时处于I/O瓶颈的标识。本文将解释为什么这种方法是不可靠的,以及你可以使用哪些更好的指标。从运行一个小实验开始——在系统上产生大量的I/O使用:sysbench--threads=8--time=0--max-requests=0fileio--file-nu......
  • pytest 执行脚本时,报(no name '/Users/**/PycharmProjects/interface_auto/test_case/
    触发场景:pytest执行脚本时,命名全部正确,但是直接报找不到执行函数解决方式:取掉init方法原因:测试框架在运行测试时会自动实例化测试类的对象,并且不会传递任何参数。如果您定义了__init__方法,测试框架将无法实例化您的测试类,从而导致测试无法运行。因此,为了确保测试类能够正......
  • audiolinux使用经验
    Forconfigurationmenutype"menu"Forpowerofftype"sudopoweroff"Forreboottype"sudoreboot"Forhttp://ip:5001|8088(hqplayer)|19999| HUITAKFUNG:文件共享:audiolinux/audiolinux0HUITAKFUNG:Hqplayer:audiolinux/......
  • Linux C 编程——互斥锁mutex
    1、多线程的问题引入多线程的最大的特点是资源的共享,但是,当多个线程同时去操作(同时去改变)一个临界资源时,会破坏临界资源。如利用多线程同时写一个文件:#include<stdio.h>#include<pthread.h>#include<malloc.h>constcharfilename[]="hello";void*thread(void*id){......
  • Linux C 编程——多线程
    线程是计算机中独立运行的最小单位,运行时占用很少的系统资源。与多进程相比,多进程具有多进程不具备的一些优点,其最重要的是:对于多线程来说,其能够比多进程更加节省资源。1、线程创建在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone()。该系统copy了一个和原......
  • linux 服务器安装anaconda3.5, 远程使用jupyter
    安装anaconda1.下载脚本wgethttps://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh2.运行安装向导,遇到许可证询问回答'yes'bashAnaconda3-5.2.0-Linux-x86_64.sh 默认位置安装就好,遇到询问就选‘yes’3.确认是否安装成功  conda--version如果没有继续.............
  • windows/mac/linux jupyter notebook 切换默认环境
    很多人跟我讲jupyternotebook都是运行在默认环境下,不好更改,但是我又喜欢创建虚拟环境,要切换到虚拟环境下运行,以下几招即可。终端下进行,windows版本/mac版本基本一样。1.查看所有环境  condaenvlist2.激活你要用的环境,activateXXX,我的虚拟环境为luo3.condainstallipyk......
  • Linux重启网卡报错Determining if ip address
    Linux重启网卡报错Determiningifipaddress问题环境:客户断电重启服务器后,网卡都配置了开机自启导致eth0和eth1冲突,关闭eth0网卡后,系统环境CentOS6.5,重启网卡报错。报错示例弹出界面eth1:Determiningifipaddressx.x.x.xisalreadyinusefordeviceeth1...[确定]原因......
  • OpenHarmony 如何切换输入法
    1、命令切换:默认已配置环境,hdc可用hdc_std.exeshellaastartability-aInputMethod-bcn.openharmony.inputmethodchoosedialog 2、代码切换:importinputMethodfrom'@ohos.inputmethod'...letsetting=inputMethod.getInputMethodSetting()setting.displayOptional......