【FFH】Bearpi-HM-Micro开机自启动程序 原创 精华

Z·y
发布于 2022-11-11 22:51
浏览
2收藏

目录

1.前言

项目开发需要联网传输数据,每次开机都要事先运行WiFi程序。于是想办法能不能板子开机的时候就能自动启动运行WiFi程序,不需要每次都命令行输入。

2.开发例程

2.1准备工作

找到启动WiFi的程序,文件目录:/home/nebula/bearpi/bearpi-hm_micro_small/applications/BearPi/BearPi-HM_Micro/samples/communication/wpa_supplicant/src/wpa_sample.c

以下代码为主函数代码👇

int main(int argc, char *argv[])
{
    printf("------------------------\n");
    printf("------------------------\n");
    printf("------------------------\n");
    printf("--------test------------\n");
    printf("------------------------\n");
    printf("------------------------\n");
    printf("------------------------\n");

    g_wpaArgc = argc;
    for (int i = 0; i < g_wpaArgc; i++)
    {
        g_wpaArg[i] = argv[i];
    }
    sleep(30);
    g_wpaArgc = 5;
    g_wpaArg[0] = "-i";
    g_wpaArg[1] = "wlan0";
    g_wpaArg[2] = "-d";
    g_wpaArg[3] = "-c";
    g_wpaArg[4] = "/etc/wpa_supplicant.conf";

    int ret = pthread_create(&g_wpaThread, NULL, ThreadMain, NULL);
    if (ret != 0)
    {
        printf("[WpaSample]create thread failed error:%s.\n", strerror(ret));
        return 1;
    }
    pthread_join(g_wpaThread, NULL);
    return 0;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

依照官方执行WiFi程序的命令./bin/wpa_supplicant -i wlan0 -d -c /etc/wpa_supplicant.conf,把程序写死
特别注意:经过后期的教训终结,一定要 sleep(30),等待开发板初始化网卡才能连接
【FFH】Bearpi-HM-Micro开机自启动程序-鸿蒙开发者社区

2.2查找资料&确定方向

干货!OpenHarmony L1级开机启动项服务设置
从启动日志简单梳理OpenHarmony启动流程
虽然没有找到完全适合Micro的,但都是OpenHarmony的架构,大同小异。
【FFH】Bearpi-HM-Micro开机自启动程序-鸿蒙开发者社区
可以发现配置开机启动项是在代码根目录下的vender(内核)文件夹里配置的。找到含有类似init_config.cfg.的文件名。
具体在Bearpi-Micro的详细地址如下:vendor/bearpi/bearpi_hm_micro/init_configs/
【FFH】Bearpi-HM-Micro开机自启动程序-鸿蒙开发者社区
好了,问题来了,这两个除了名字不一样,内容一模一样的文件到底该改哪一个?
经过大量的试错(修改了八九次)发现只能修改init_bearpi_hm_micro.cfg这个文件

详细的配置如下👇

{
    "jobs" : [{
            "name" : "pre-init",
            "cmds" : [
                "mkdir /storage/data/log",
                "chmod 0755 /storage/data/log",
                "chmod 0777 /dev/hdf",
                "chown 4 4 /storage/data/log",
                "mkdir /storage/data/softbus",
                "mkdir /sdcard",
                "chmod 0777 /sdcard",
                
                "start foundation",
                "start bundle_daemon",
                "start appspawn",
                "start wms_server",
                "start shell"
            ]
       }, {
            "name" : "init",
            "cmds" : [
                "start apphilogcat",
                "start wpa_supplicant"
            ]
       }, {
            "name" : "post-init",
            "cmds" : [
                "chown 0 99 /dev/hdf",
                "chown 0 99 /dev/hdf/dev_mgr",
                "chown 0 99 /dev/hdf/hdfwifi",
                "chown 0 99 /dev/gpio",
                "chown 0 99 /dev/i2c-0",
                "chown 0 99 /dev/i2c-1",
                "chown 0 99 /dev/i2c-2",
                "chown 0 99 /dev/i2c-3",
                "chown 0 99 /dev/i2c-4",
                "chown 0 99 /dev/i2c-5",
                "chown 0 99 /dev/i2c-6",
                "chown 0 99 /dev/i2c-7",
                "chown 0 99 /dev/uartdev-0",
                "chown 0 99 /dev/uartdev-1",
                "chown 0 99 /dev/uartdev-2",
                "chown 0 99 /dev/uartdev-3",
                "chown 0 99 /dev/spidev0.0",
                "chown 0 99 /dev/spidev1.0",
                "chown 0 99 /dev/spidev2.0",
                "chown 0 99 /dev/spidev2.1"
         ]
        }
    ],
    "services" : [{
            "name" : "foundation",
            "path" : ["/bin/foundation"],
            "uid" : 7,
            "gid" : 7,
            "once" : 0,
            "importance" : 1,
            "caps" : [10, 11, 12, 13]
        }, {
            "name" : "shell",
            "path" : ["/bin/shell"],
            "uid" : 2,
            "gid" : 2,
            "once" : 0,
            "importance" : 0,
            "caps" : [4294967295]
        }, {
            "name" : "appspawn",
            "path" : ["/bin/appspawn"],
            "uid" : 1,
            "gid" : 1,
            "once" : 0,
            "importance" : 0,
            "caps" : [2, 6, 7, 8, 11, 23]
        }, {
            "name" : "apphilogcat",
            "path" : ["/bin/apphilogcat", "-L", "auto"],
            "uid" : 4,
            "gid" : 4,
            "once" : 1,
            "importance" : 0,
            "caps" : []
        }, {
            "name" : "wpa_supplicant",
            "path" : ["/bin/wpa_supplicant","-i","wlan0","-d","-c","/etc/wpa_supplicant.conf"],
            "uid" : 8,
            "gid" : 8,
            "once" : 0,
            "importance" : 0,
            "caps" : [0,1]
        },{
            "name" : "wms_server",
            "path" : ["/bin/wms_server"],
            "uid" : 0,
            "gid" : 0,
            "once" : 1,
            "importance" : 0,
            "caps" : []
        }, {
            "name" : "bundle_daemon",
            "path" : ["/bin/bundle_daemon"],
            "uid" : 8,
            "gid" : 8,
            "once" : 0,
            "importance" : 0,
            "caps" : [0, 1]
        }
    ]
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.

**在OpenHarmony 中init进程通过读取/etc/init.cfg,根据配置执行指定命令,或启动指定进程
**
添加的代码有:
【FFH】Bearpi-HM-Micro开机自启动程序-鸿蒙开发者社区【FFH】Bearpi-HM-Micro开机自启动程序-鸿蒙开发者社区
Init配置文件基于JSON格式,用来配置系统启动时必要的命令和服务。Init在系统启动时解析配置文件,并根据配置文件执行对应的命令,启动相应的服务。

3.效果

【FFH】Bearpi-HM-Micro开机自启动程序-鸿蒙开发者社区

4.总结

看似简单,实则配置文件的格式要求十分十分严谨,多一个逗号不行,少一个逗号也不行!!!
都是在不断的试错、尝试中总结的经验。
其实在OpenHarmony设备开发的官方文档引导启动配置文件中也有说到:
cfg文件是严格按照JSON格式编写的,当添加服务或命令未生效时,可以优先排查添加内容的格式是否正确/(ㄒoㄒ)/~~。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-11-17 15:49:01修改
4
收藏 2
回复
举报
4
2
2
2条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

有时往往一点点格式问题花费一下午的时间排查

回复
2022-11-14 10:22:19
诺舒华吃西瓜
诺舒华吃西瓜

开发学习的道路上总会遇到各种问题

回复
2022-11-14 14:16:51


回复
    相关推荐