Skip to contentSkip to conversation

Add static/embedded wireless regulatory data

PATCH New Krzysztof Kozlowski 1 participant 4 messages Jul 5, 2018

lore
Share & tools
lore
#0 lore raw

v5 cover Add static/embedded wireless regulatory data

Hi,

Changes since v4:
1. Extend kernel_wireless_regdb.bbclass description (suggested by Khem Raj).
2. Use '-D' for install (suggested by Khem Raj).

Changes since v3:
1. Re-order patches, start with version bump.
2. Add patch 2/3 for new kernel (since v4.15 embedding regulatory data has changed).

Changes since v2:
1. Rebase on sumo.
2. Fix task order - run do_kernel_add_regdb task after do_configure.

Changes since v1:
1. Remove debugging echo.

Best regards,
Krzysztof

Krzysztof Kozlowski (3):
wireless-regdb: Bump version to latest upstream 2018.05.31
wireless-regdb: Add wireless-regdb-static package with static
regulatory data
kernel_wireless_regdb: Add class for embedding regulatory data into
older kernel

 .../classes/kernel_wireless_regdb.bbclass          | 20 +++++++++++
 .../wireless-regdb/wireless-regdb_2016.06.10.bb    | 20 -----------
 .../wireless-regdb/wireless-regdb_2018.05.31.bb    | 42 ++++++++++++++++++++++
 3 files changed, 62 insertions(+), 20 deletions(-)
 create mode 100644 meta-networking/classes/kernel_wireless_regdb.bbclass
 delete mode 100644 meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2016.06.10.bb
 create mode 100644 meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2018.05.31.bb
Signature · 1 line
2.14.1
#1 lore raw

PATCH v5 1/3 wireless-regdb: Bump version to latest upstream 2018.05.31

Bump the wireless-regdb recipe to use newest wireless regulatory database.

---
 .../{wireless-regdb_2016.06.10.bb => wireless-regdb_2018.05.31.bb}    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
 rename meta-networking/recipes-connectivity/wireless-regdb/{wireless-regdb_2016.06.10.bb => wireless-regdb_2018.05.31.bb} (82%)
meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2018.05.31.bb renamed from meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2016.06.10.bb +2 -2
similarity index 82%
rename from meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2016.06.10.bb
rename to meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2018.05.31.bb
index 64e9401e7a3c..8bb866ff1281 100644
@@ -5,8 +5,8 @@ LICENSE = "ISC"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=07c4f6dea3845b02a18dc00c8c87699c"
 
 SRC_URI = "https://www.kernel.org/pub/software/network/${BPN}/${BP}.tar.xz"
-SRC_URI[md5sum] = "d282cce92b6e692e8673e2bd97adf33b"
-SRC_URI[sha256sum] = "cfedf1c3521b3c8f32602f25ed796e96e687c3441a00e7c050fedf7fd4f1b8b7"
+SRC_URI[md5sum] = "0cbbdc21186c76cf58aba01b03f3dc5b"
+SRC_URI[sha256sum] = "e1dfbc3b97771373077f430c3c05082fae883145b37db5b2cfd12c56676fbe7b"
 
 inherit bin_package
 
Signature · 1 line
2.14.1
#2 lore raw

PATCH v5 2/3 wireless-regdb: Add wireless-regdb-static package with static regulatory data

In reply to Krzysztof Kozlowski

Small embedded systems might:
1. Want to get rid of daemons as much as possible (therefore be built without CRDA),
2. Not receive user-space incremental updates but an entire system upgrade (with kernel).

Linux kernel since v4.15 allows loading static regulatory data from /lib/firmware/regulatory.db.

Add additional package to wireless-regdb recipe which provides such static data.

---
 .../wireless-regdb/wireless-regdb_2018.05.31.bb             | 13 +++++++++++++
 1 file changed, 13 insertions(+)
meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2018.05.31.bb +13 -0
index 8bb866ff1281..2ae9e85427bc 100644
@@ -15,6 +15,19 @@ do_install() {
     install -d -m0755 ${D}${sysconfdir}/wireless-regdb/pubkeys
     install -m 0644 regulatory.bin ${D}${libdir}/crda/regulatory.bin
     install -m 0644 sforshee.key.pub.pem ${D}${sysconfdir}/wireless-regdb/pubkeys/sforshee.key.pub.pem
+
+    install -m 0644 -D regulatory.db ${D}${nonarch_base_libdir}/firmware/regulatory.db
+    install -m 0644 regulatory.db.p7s ${D}${nonarch_base_libdir}/firmware/regulatory.db.p7s
 }
 
+# Install static regulatory DB in /lib/firmware for kernel to load.
+# This requires Linux kernel >= v4.15.
+PACKAGES =+ "${PN}-static"
+RCONFLICTS_${PN} = "${PN}-static"
+
+FILES_${PN}-static = " \
+    ${nonarch_base_libdir}/firmware/regulatory.db \
+    ${nonarch_base_libdir}/firmware/regulatory.db.p7s \
+"
+
 RSUGGESTS_${PN} = "crda"
Signature · 1 line
2.14.1
#3 lore raw

PATCH v5 3/3 kernel_wireless_regdb: Add class for embedding regulatory data into older kernel

In reply to Krzysztof Kozlowski

Linux kernels before v4.15, allowed to be compiled with static regulatory database if it was put under net/wireless/db.txt.

Add kernel_wireless_regdb class which allows in such cases to embed the wireless regulatory database directly in the Linux kernel during build process.

Usage:
1. The class should be inherited by kernel recipe (e.g. in linux-yocto_%.bbappend).
2. For Linux kernels up to v4.14, build kernel with CONFIG_EXPERT and CONFIG_CFG80211_INTERNAL_REGDB.

---
 .../classes/kernel_wireless_regdb.bbclass            | 20 ++++++++++++++++++++
 .../wireless-regdb/wireless-regdb_2018.05.31.bb      |  9 +++++++++
 2 files changed, 29 insertions(+)
 create mode 100644 meta-networking/classes/kernel_wireless_regdb.bbclass
meta-networking/classes/kernel_wireless_regdb.bbclass new file +20 -0
new file mode 100644
index 000000000000..1238172bd4b7
@@ -0,0 +1,20 @@
+# Linux kernels before v4.15, allowed to be compiled with static
+# regulatory database if it was put under net/wireless/db.txt.
+#
+# This class copies the regulatory plaintext database to kernel sources before
+# compiling.
+#
+# Usage:
+# 1. The class should be inherited by kernel recipe (e.g. in
+#    linux-yocto_%.bbappend).
+# 2. For Linux kernels up to v4.14, build kernel with CONFIG_EXPERT and
+#    CONFIG_CFG80211_INTERNAL_REGDB.
+
+DEPENDS += "wireless-regdb-native"
+
+SRCTREECOVEREDTASKS += "do_kernel_add_regdb"
+do_kernel_add_regdb() {
+    cp ${STAGING_LIBDIR_NATIVE}/crda/db.txt ${S}/net/wireless/db.txt
+}
+do_kernel_add_regdb[dirs] = "${S}"
+addtask kernel_add_regdb before do_build after do_configure
meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2018.05.31.bb +9 -0
index 2ae9e85427bc..d1c8d567597b 100644
@@ -22,6 +22,7 @@ do_install() {
 
 # Install static regulatory DB in /lib/firmware for kernel to load.
 # This requires Linux kernel >= v4.15.
+# For kernel <= v4.14, inherit the kernel_wireless_regdb.bbclass in kernel's recipe.
 PACKAGES =+ "${PN}-static"
 RCONFLICTS_${PN} = "${PN}-static"
 
@@ -30,4 +31,12 @@ FILES_${PN}-static = " \
     ${nonarch_base_libdir}/firmware/regulatory.db.p7s \
 "
 
+# Native users might want to use the source of regulatory DB.
+# This is for example used by Linux kernel <= v4.14 and kernel_wireless_regdb.bbclass.
+do_install_append_class-native() {
+    install -m 0644 -D db.txt ${D}${libdir}/crda/db.txt
+}
+
 RSUGGESTS_${PN} = "crda"
+
+BBCLASSEXTEND = "native"
Signature · 1 line
2.14.1