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. .. code-block:: DISTRO_FEATURES += " systemd wifi" It is also recommended to add ``sysvinit`` as a considered distro feature. .. code-block:: DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit" At the end add ``systemd`` as a init manager. .. code-block:: 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. .. code-block:: 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. .. code-block:: mkdir -p ../meta-golemos/recipes-core/systemd/ touch ../meta-golemos/recipes-core/systemd/systemd_%.bbappend .. code-block:: 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. .. code-block:: 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. .. code-block:: 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. .. code-block:: touch ../meta-golemos/recipes-core/systemd-conf/files/wlan.network Place in it lines as follows. .. code-block:: [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. .. code-block:: 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. .. code-block:: 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 .. code-block:: 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. .. code-block:: touch ../meta-golemos/recipes-connectivity/wpa-supplicant/files/wpa_supplicant-nl80211-wlan0.conf .. code-block:: 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. .. code-block:: ../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