Configure connection to wireless network
Step 1 - Add systemd as your service manager
To enable systemd as a service manager it has to be added to your
distribution level. Open golemos.conf in your distro folder and ensure that
systemd and wifi are added to your distro features.
DISTRO_FEATURES += " systemd wifi"
It is also recommended to add sysvinit as a considered distro feature.
DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
At the end add systemd as a init manager.
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
Step 2 - Add driver for wireless network card
Inside your core-packagegroup add following package to ensure that the
appropriate driver is installed.
linux-firmware-rpidistro-bcm43430
Step 3 - Add instructions to default systemd_%.bb
Inside recipes-core folder create bbappend file to original recipe and add
custom instructions.
mkdir -p ../meta-golemos/recipes-core/systemd/
touch ../meta-golemos/recipes-core/systemd/systemd_%.bbappend
PACKAGECONFIG_append = " networkd resolved"
This line will enable proper configuration of systemd.
Note
This step in not necessary but it will ensure that proper packages are installed on system.
Step 4 - Append instructions to systemd-conf_%.bb
In order to configure network devices, you have to create custom instructions,
which will be appended to original systemd-conf_%.bb recipe. Create custom
recipe in recipes-core folder.
mkdir -p ../meta-golemos/recipes-core/systemd-conf/files/
touch ../meta-golemos/recipes-core/systemd-conf/systemd-conf_%.bbappend
Inside this file place this instructions.
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += " \
file://wlan.network \
"
FILES_${PN} += " \
${sysconfdir}/systemd/network/wlan.network \
"
do_install_append() {
install -d ${D}${sysconfdir}/systemd/network
install -m 0644 ${WORKDIR}/wlan.network ${D}${sysconfdir}/systemd/network
}
Next step will be to create configuration file.
touch ../meta-golemos/recipes-core/systemd-conf/files/wlan.network
Place in it lines as follows.
[Match]
Name=wlan0
KernelCommandLine=!nfsroot
[Network]
DHCP=v4
[DHCPv4]
UseHostname=false
Step 5 - Enable WIFI
To the base package group inside connectivity section add package called
wpa-supplicant. This will ensure that it is installed on system. For
further configuration you have to create custom recipe.
Create recipe and appropriate folder for custom wpa-supplicant recipe.
mkdir -p ../meta-golemos/recipes-connectivity/wpa-supplicant/files/
touch ../meta-golemos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend
Inside this file place this instructions.
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://wpa_supplicant-nl80211-wlan0.conf"
SYSTEMD_AUTO_ENABLE = "enable"
SYSTEMD_SERVICE_${PN}_append = " wpa_supplicant-nl80211@wlan0.service "
do_install_append () {
install -d ${D}${sysconfdir}/wpa_supplicant/
install -D -m 600 ${WORKDIR}/wpa_supplicant-nl80211-wlan0.conf ${D}${sysconfdir}/wpa_supplicant/
install -d ${D}${sysconfdir}/systemd/system/multi-user.target.wants/
ln -s ${systemd_system_unitdir}/wpa_supplicant@.service ${D}${sysconfdir}/systemd/system/multi-user.target.wants/wpa_supplicant-nl80211@wlan0.service
}
Note
This configuration will auto enable wpa_supplicant on system boot. To
disable this delete line with link in do_install_append and change
enable to disable in SYSTEMD_AUTO_ENABLE variable.
If you are connected to the network you wish to connect device you can create configuration file by running
wpa_passphrase "YOUR_SSID" > ../meta-golemos/recipes-connectivity/wpa-supplicant/files/wpa_supplicant-nl80211-wlan0.conf
In other situations you can manually create file and place inside them this configuration lines.
touch ../meta-golemos/recipes-connectivity/wpa-supplicant/files/wpa_supplicant-nl80211-wlan0.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1
network={
ssid="Network SSID"
psk="Network PASSWORD"
proto=RSN
key_mgmt=WPA-PSK
}
Summary
After all this steps you can compile your image and test if your device is connected to desired wireless network. This configurations is for DHCP.
Your layer structure after this steps should look like this.
../meta-golemos
├── COPYING.MIT
├── README
├── conf
│ ├── bblayers.conf.sample
│ ├── conf-notes.txt
│ ├── distro
│ │ └── golemos.conf
│ ├── layer.conf
│ └── local.conf.sample
├── recipes-connectivity
│ └── wpa-supplicant
│ ├── files
│ │ └── wpa_supplicant-nl80211-wlan0.conf
│ └── wpa-supplicant_%.bbappend
├── recipes-core
│ ├── images
│ │ ├── datalogger-dev-image.bb
│ │ ├── datalogger-extended-image.bb
│ │ └── datalogger-image.bb
│ ├── packagegroups
│ │ ├── datalogger-base-packagegroup.bb
│ │ ├── datalogger-core-packagegroup.bb
│ │ ├── datalogger-dev-packagegroup.bb
│ │ └── datalogger-extended-packagegroup.bb
│ ├── systemd
│ │ └── systemd_%.bbappend
│ └── systemd-conf
│ ├── files
│ │ └── wlan.network
│ └── systemd-conf_%.bbappend
└── recipes-example
└── example
└── example_0.1.bb