ARM技术论坛
直播中

h1654155275.5741

7年用户 1012经验值
私信 关注
[问答]

怎样去完成ARM Linux开机自启动一个程序的设置呢

前言
在之前做项目的时候, 他是一个智能拨号模块, 是一个单独运行的程序, 在arm开发板上每次重启之后, 需要自己再去手动运行一次, 这个时候我们想到既然他是智能拨号模块, 那就要实现一个全自动的, 也就是开机时让他自启动,
自启动设置
1. 在Linux 下编写一个hello.c(此程序需要在ARM上开机自启动)
hello.c如下:
#include
#include
#include
#include
int main (int argc, char **argv)
{
    int     fd = -1;
    int     rv = -1;
    char    buf[64];
    memset(buf, 0, sizeof(buf));
    strcpy(buf, "hellon");
    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.
1.jpg
3. 将可执行文件拿到ARM开发板上, chmod a+x hello , 给执行权限
这里有俩种方法都可以将文件拿到arm板上 , 一种是通过secure crt 远程登陆的rz和sz命令, 将文件拿到ARM板上, 一种可以通过tftp将可执行文件拿过去. 要注意拿过去的可执行文件没有权限, 使用chmod 命令给一个权限
1.jpg
我们先执行一下, 可以看到已经将hello写入 hello.txt中, 将hello.txt删除, 方便我们进行以下的测试
1.jpg
4. 打开开机启动文件(shell 脚本), 每个板子可能有不同的Linux内核, 故启动文件名称不一样
例如:
/etc/init.d/rcS
/etc/init.d/rc.local
/etc/profile
/usr/etc/rc.local
我的板子上是 “/etc/init.d/rcS” 这个文件名称
1.jpg
5. 在 /etc/init.d/rcS 文件中添加需要自启动程序(方案一)
即在shell中 执行一个可执行文件, 进入到绝对路径, ./可执行文件名称 即可, 例如:
cd /apps
./hello
1.jpg
5. 在 /etc/init.d/路径中添加一个shell脚本(方案二)
创建了init进程, init进程执行init.d解释/etc/inittab, 这个就会去执行/etc/init.d中有一个rcS的脚本, 这个脚本是for循环, 找到/etc/init.d中以S打头的至少俩个字符的脚本, 然后执行这个脚本;
1.jpg
这个时候我们创建一个s41_gsmd的shell脚本, 在里面写上需要自动启动的程序即可; (记得要chmod 给权限哦~)
1.jpg
进行重启设备验证
我们重启设备去查看一下, 通过ps aux 查看一下, 可以看到 hello 正在运行
1.jpg
1.jpg
已经将hello 写入到了hello.txt中, 已经完成了程序开机自启动
这样就完成了一个ARM Linux 开机自启动一个程序的设置了。

原作者:->小黑

更多回帖

发帖
×
20
完善资料,
赚取积分