Bearpi-HM-Micro开机自启动程序
source link: https://www.51cto.com/article/722672.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
项目开发需要联网传输数据,每次开机都要事先运行WiFi程序。于是想办法能不能板子开机的时候就能自动启动运行WiFi程序,不需要每次都命令行输入。
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;
}
依照官方执行WiFi程序的命令./bin/wpa_supplicant -i wlan0 -d -c /etc/wpa_supplicant.conf,把程序写死
特别注意:经过后期的教训终结,一定要 sleep(30),等待开发板初始化网卡才能连接。
(2)查找资料&确定方向
干货!openharmony L1级开机启动项服务设置从启动日志简单梳理Openharmony启动流程。
虽然没有找到完全适合Micro的,但都是OpenHarmony的架构,大同小异。
可以发现配置开机启动项是在代码根目录下的vender(内核)文件夹里配置的。找到含有类似init_config.cfg.的文件名。
具体在Bearpi-Micro的详细地址如下:vendor/bearpi/bearpi_hm_micro/init_configs/。
好了,问题来了,这两个除了名字不一样,内容一模一样的文件到底该改哪一个?
经过大量的试错(修改了八九次)发现只能修改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]
}
]
}
在OpenHarmony 中init进程通过读取/etc/init.cfg,根据配置执行指定命令,或启动指定进程。
添加的代码有:
Init配置文件基于JSON格式,用来配置系统启动时必要的命令和服务。Init在系统启动时解析配置文件,并根据配置文件执行对应的命令,启动相应的服务。
看似简单,实则配置文件的格式要求十分十分严谨,多一个逗号不行,少一个逗号也不行!!!
都是在不断的试错、尝试中总结的经验。
其实在OpenHarmony设备开发的官方文档引导启动配置文件中也有说到:
cfg文件是严格按照JSON格式编写的,当添加服务或命令未生效时,可以优先排查添加内容的格式是否正确/(ㄒoㄒ)/~~。
Recommend
-
86
1.BIOS开机自检2.读取MBR:主引导记录(Master Boot Record)3.GRUB:(Grand Unified BootLoader)多系统启动程序4.Kernel:加载内核5.Init:启动init进程6.Runlevel:运行级别参考链接:https://www.thegeekstuff.com/2011/02/linux-boot-process/
-
62
1、刚开始ha日志报umail_postgresql启动不了,发现/etc/init.d/目录下这个服务文件都没有,成为临时文件了。于是以为在/etc/ha.d/haresources文件中去掉这个服务就可以。备注:/etc/ha.d/haresources原本中有kkmail_nginx kkmail_mysqld kkmail_app kkmail_postgre...
-
54
Mac OSX 的稳定性一向不错,不论是用于跑基于 XCode 的 CI,还是用于做简单的 HomeLab 使用,都能满足需求。 但是在日程使用中,难免出现系统维护需要重启、应用遇到问题崩溃退出运行,这个时候,就不得不引用进...
-
43
在做前端项目时,需要将 Web 项目打包成 Win 应用,使用 Electron 相关技术。这个系列是整理 Electron 学习中遇到的问题和常见知识点,留做记录方便后续复习。 本篇介绍: Electron 系统托盘实现 Electron...
-
5
开机启动并隐藏 cmd 窗口程序在后台运行 - winsw 使用教程发表2020-05-04更新2020-08-01字数837预计阅读时长5分阅读次数117windowsWindows 下手动添加开机启动的方式一般是创...
-
2
设置Ubuntu程序开机启动 2013/08/13 00:02 | Comments 以前...
-
6
【FFH】BearPi-HM Micro 南向研究——GPIO驱动分析 原创 精华 【FFH】BearPi-HM Micro 南向研究——GPIO驱动分析 BearPi-HM Micro开发板板载高性能的工业级...
-
2
#冲刺创作新星#【FFH】Bearpi-Micro深入解析通过JS应用控制LED灯 原创 精华 最近跑了一遍Bearpi-Micro编写点亮LED灯程序的Demo,深入了解了如何在开发板上运行一个控制LED...
-
1
项目开发需要联网传输数据,每次开机都要事先运行WiFi程序。于是想办法能不能板子开机的时候就能自动启动运行WiFi程序,不需要每次都命令行输入。 2.开发例程 2.1准备工作 找到启动WiFi的程序,文件目录:/home/nebula/bea...
-
2
海鲜市场捡垃圾 – BearPi HM Nano 海鲜市场捡垃圾 – BearPi HM Nano...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK