目录
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
依照官方执行WiFi程序的命令./bin/wpa_supplicant -i wlan0 -d -c /etc/wpa_supplicant.conf,把程序写死
特别注意:经过后期的教训终结,一定要 sleep(30),等待开发板初始化网卡才能连接。

2.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]
}
]
}
- 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,根据配置执行指定命令,或启动指定进程
**
添加的代码有:


Init配置文件基于JSON格式,用来配置系统启动时必要的命令和服务。Init在系统启动时解析配置文件,并根据配置文件执行对应的命令,启动相应的服务。
3.效果

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