{"id":6252,"date":"2026-06-09T13:12:53","date_gmt":"2026-06-09T12:12:53","guid":{"rendered":"https:\/\/pmortensen.eu\/world2\/?p=6252"},"modified":"2026-06-22T14:35:42","modified_gmt":"2026-06-22T13:35:42","slug":"hello-world-for-zmk-the-latest-version","status":"publish","type":"post","link":"https:\/\/pmortensen.eu\/world2\/2026\/06\/09\/hello-world-for-zmk-the-latest-version\/","title":{"rendered":"Hello, World! for ZMK, the latest version"},"content":{"rendered":"<p><!-- T H E   B E G I N N I N G . . .   Marker for editing in WordPress: qqqq --><\/p>\n<p>The short version: After setting up <a href=\"https:\/\/github.com\/zmkfirmware\/zmk\">ZMK<\/a>, for example, with the <em>completely linear<\/em> pastable command lines provided below, use &#8220;<strong><em>west build -b planck\/\/zmk<\/em><\/strong>&#8221; instead of &#8220;<strong><em>west build -b planck_rev6<\/em><\/strong>&#8221; to build the sample keyboard firmware (to test that building actually works). The official documentation is out of date.<\/p>\n<h2>Introduction<\/h2>\n<p>Presuming the build environment is set up for building ZMK keyboard firmware (see below for complete instructions for a non-<a href=\"https:\/\/en.wikipedia.org\/wiki\/Docker_%28software%29\">Docker<\/a> and non-<a href=\"https:\/\/en.wikipedia.org\/wiki\/GitHub#GitHub_Actions\">GitHub Actions<\/a> approach), the step <a href=\"https:\/\/zmk.dev\/docs\/development\/local-toolchain\/build-flash#building\">in the official documentation<\/a> for building the firmware for a sample keyboard is:<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\nwest build -b planck_rev6\r\n<\/pre>\n<p>Or if repeating (for example, after trying building keyboard firmware for some other keyboard, probably due to <a href=\"https:\/\/en.wikipedia.org\/wiki\/CMake\">CMake<\/a>isms; &#8216;-p&#8217; is <a href=\"https:\/\/pmortensen.eu\/world2\/2026\/06\/09\/hello-world-for-zmk-the-latest-version#Appendix_B_west_gory_details\">an alias of &#8211;pristine<\/a> (two ASCII dashes, not as rendered here). See also <a href=\"https:\/\/zmk.dev\/docs\/development\/local-toolchain\/build-flash#pristine-building\"><em>Pristine Building<\/em><\/a>):<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\nwest build -p -b planck_rev6\r\n<\/pre>\n<p>It is also in a previous blog post, <a href=\"https:\/\/pmortensen.eu\/world2\/2025\/03\/10\/customising-the-zmk-based-keychron-b6-pro-keyboard-without-the-via-clone\/\"><em>Customising the ZMK-based Keychron B6 Pro keyboard without the Via clone<\/em><\/a>. And <strong><em>it worked at that time<\/em><\/strong>, with the current version of the main ZMK project at that time<!--, XXXXX TBD: FILL IN--> (about 2025-03-10).<\/p>\n<p>But this results in a build error (only the essential part is shown here; see <a href=\"https:\/\/pmortensen.eu\/world2\/2026\/06\/09\/hello-world-for-zmk-the-latest-version#Appendix_A_Full_build_error_output\">Appendix A<\/a> for the full transcript, including the full error message):<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\nInvalid BOARD;\r\n<\/pre>\n<p>Realising &#8220;planck_rev6&#8221; has been both moved and renamed, from <em>\/app\/boards\/arm\/planck<\/em> to <em>\/app\/boards\/olkb\/planck<\/em> (the official documentation is clearly out of date), the build command would seem to be:<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\nwest build -p -b planck\r\n<\/pre>\n<p>It does get further, but it also fails (only the essential part is shown here; see <a href=\"https:\/\/pmortensen.eu\/world2\/2026\/06\/09\/hello-world-for-zmk-the-latest-version#Appendix_A_Full_build_error_output\">Appendix A<\/a> for the full transcript, including the full error message):<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\n#error &quot;NUM_IRQ_PRIO_BITS and __NVIC_PRIO_BITS are not set to the same value&quot;\r\n<\/pre>\n<p>See <a href=\"https:\/\/pmortensen.eu\/world2\/2026\/06\/09\/hello-world-for-zmk-the-latest-version#Appendix_A_Full_build_error_output\">Appendix A<\/a> for the full error output.<\/p>\n<h2 id=\"Solution_for_the_Planck_keyboard\">The solution<\/h2>\n<p>The correct command line for building the sample keyboard is:<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\nwest build -p -b planck\/\/zmk\r\n<\/pre>\n<p>This is impossible to guess, but it is hinted at in an official ZMK blog post:<\/p>\n<ol>\n<li><a href=\"https:\/\/zmk.dev\/blog\/2025\/12\/09\/zephyr-4-1#board-revisions\"><em>Zephyr 4.1 Update<\/em><\/a> (2025-12-09)<\/li>\n<\/ol>\n<p>Section <em>Board Revisions<\/em> has:<\/p>\n<ol>\n<li><em>&#8220;planck_rev6 -> planck\/\/zmk&#8221;<\/em><\/li>\n<\/ol>\n<p>The &#8220;\/\/zmk&#8221; probably means <a href=\"https:\/\/github.com\/zmkfirmware\/zmk\/pull\/3145\">something along the lines<\/a> of &#8220;variants&#8221; (whatever that is in this context). <a href=\"https:\/\/zmk.dev\/blog\/2025\/12\/09\/zephyr-4-1#zmk-board-variant\">And<\/a> <em>&#8220;&#8230;all board definitions found in the ZMK tree now must be used with a <strong>zmk<\/strong> variant&#8221;<\/em>. The empty content in &#8220;\/\/&#8221; seems to be some kind of shorthand (it could <a href=\"https:\/\/zmk.dev\/blog\/2025\/12\/09\/zephyr-4-1#zmk-board-variant\">apparently be explicit<\/a> &#8211; <em>&#8220;&#8230;only one <a href=\"https:\/\/en.wikipedia.org\/wiki\/System_on_a_chip\">SoC<\/a> on the board<\/a>&#8220;<\/em>).<\/p>\n<p>Or maybe it is just <a href=\"https:\/\/github.com\/zmkfirmware\/zmk\/tree\/main\/app\/boards\/olkb\/planck\/planck.zmk.yml#L2\">a pure naming convention<\/a> used by the ZMK project?? That is, without any bearing on building the keyboard, meaning to Zephyr, etc., except using that exact string?<\/p>\n<p>Result (slightly formatted):<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\nMemory region   Used Size  Region Size  %age Used\r\n-------------------------------------------------\r\n       FLASH:     47624 B       256 KB     18.17%\r\n         RAM:     11736 B        40 KB     28.65%\r\n         CCM:        0 GB         8 KB      0.00%\r\n    IDT_LIST:        0 GB        32 KB      0.00%\r\n\r\nGenerating files from \/home\/embo\/main_ZMK\/app\/build\/zephyr\/zmk.elf\r\nfor board: planck\r\n<\/pre>\n<p>And in the file system:<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\n975388 Jun  4 05:33 \/home\/embo\/main_ZMK\/app\/build\/zephyr\/zephyr_pre0.elf\r\n974604 Jun  4 05:33 \/home\/embo\/main_ZMK\/app\/build\/zephyr\/zmk.elf\r\n<\/pre>\n<p>Here is <a href=\"https:\/\/pmortensen.eu\/temp2\/Transcript_of_new_ZMK_setup_2026-06-09.txt\">a transcript<\/a>.<\/p>\n<h2>Installing ZMK, using completely linear command lines<\/h2>\n<p>Below are the (linear) command lines to set up the main ZMK project on a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Debian\">Debian<\/a>-like system (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Linux_Mint#LMDE\">LMDE<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Linux_Mint\">Linux Mint<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ubuntu_%28operating_system%29\">Ubuntu<\/a>, Debian itself, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Lubuntu\">Lubuntu<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Kubuntu\">Kubuntu<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Xubuntu\">Xubuntu<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/CrunchBang_Linux#BunsenLabs\">BunsenLabs<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Linux_Lite\">Linux Lite<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Windows_Subsystem_for_Linux\">WSL<\/a>, etc.), and compile the keyboard firmware for a sample keyboard.<\/p>\n<p>It was (repeatedly) tested on <a href=\"https:\/\/blog.linuxmint.com\/?p=4924\">LMDE&nbsp;7<\/a> (Gigi) with ZMK version 26246D (2026-05-30), branch &#8216;main&#8217;. It took about 25&nbsp;minutes on my system using a <a href=\"https:\/\/en.wikipedia.org\/wiki\/4G\">4G<\/a> connection (LTE. On the order of 30&nbsp;Mbit\/s).<\/p>\n<p>Every step has a &#8216;cd&#8217; (when required), so it can easily be resumed if something goes wrong (without having to think about what the current folder for that step is supposed to be). That is, it is independent of the current directory.<\/p>\n<p><strong><em>Warning<\/em><\/strong>: Note that with &#8220;&#8211;assume-yes&#8221; (&#8220;-y&#8221; = &#8220;&#8211;yes&#8221; = &#8220;&#8211;assume-yes&#8221;) for &#8216;sudo apt upgrade&#8217; and &#8216;apt install&#8217;, the  upgrade and installation of the ZMK prerequisites becomes <strong><em>unconditional<\/em><\/strong> (so that pasting all the lines after &#8220;sudo ls > \/dev\/null&#8221; can become one single step). For a more cautious approach, remove the two &#8220;&#8211;assume-yes&#8221;s and upgrade and install the prerequisites as separate steps.<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\n# Based on the official ZMK install instructions\r\n# (for &quot;native&quot; building):\r\n#\r\n#   &lt;https:\/\/zmk.dev\/docs\/development\/local-toolchain\/setup\/native&gt;\r\n#\r\n# Prime sudo. Though only required for\r\n# installing the dependencies, etc.\r\n#\r\nsudo ls &gt; \/dev\/null\r\n\r\n# &lt;https:\/\/docs.zephyrproject.org\/3.5.0\/develop\/getting_started\/index.html#select-and-update-os&gt;\r\nsudo apt update\r\n\r\n# Note: This will upgrade packages which may be \r\n#       completely unrelated to the ZMK build,\r\n#       for example, package 'dotnet-sdk-10.0' \r\n#\r\nsudo apt-get --assume-yes upgrade \r\n\r\n# Install the required dependencies:\r\nsudo apt-get --assume-yes install --no-install-recommends \r\n  git cmake ninja-build gperf \\\r\n  ccache dfu-util device-tree-compiler wget \\\r\n  python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \\\r\n  make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1\r\n\r\n\r\ncd $HOME\r\necho ; echo &quot;Start cloning: $(date +%FT%T_%N_ns)&quot; ; echo\r\ngit clone https:\/\/github.com\/zmkfirmware\/zmk.git  main_ZMK\r\necho ; echo &quot;End cloning:   $(date +%FT%T_%N_ns)&quot; ; echo\r\n\r\n\r\npython3 -m venv ~\/.main_ZMK_environment4\r\nsource ~\/.main_ZMK_environment4\/bin\/activate\r\n\r\n\r\ncd $HOME\/main_ZMK\r\ngit status   # Confirm Git branch &quot;main&quot;\r\n\r\n\r\n# Install 'west'\r\n    cd $HOME\/main_ZMK\r\n    pip install west\r\n\r\n\r\n# Initialise the application and update\r\n# to fetch modules, including Zephyr:\r\n    cd $HOME\/main_ZMK\r\n    echo ; echo &quot;Start 'west init &amp; update': $(date +%FT%T_%N_ns)&quot; ; echo\r\n    west init -l app\/           # Current directory at the top of the\r\n                                # cloned repository is assumed\r\n    #cd $HOME\r\n    #west init $HOME\/main_ZMK  # Zephyr. Absolute. Without &quot;\/app&quot;\r\n    #cd $HOME\/main_ZMK\r\n\r\n    west update\r\n    echo ; echo &quot;End 'west init&amp; update':   $(date +%FT%T_%N_ns)&quot; ; echo\r\n\r\n\r\n# Export a Zephyr CMake package. This allows CMake to\r\n# automatically load boilerplate code required for\r\n# building Zephyr applications.\r\ncd $HOME\/main_ZMK\r\nwest zephyr-export\r\n\r\n\r\ncd $HOME\/main_ZMK\r\nwest packages pip --install\r\n\r\n\r\n# It takes a lot of time!\r\n#\r\n# '\/zephyr' is critical...\r\n#\r\n# But on LMDE 6, it failed due to a\r\n# requirement of Python 3.12... It\r\n# apparently only has 3.11.2...\r\n#\r\n# LMDE 7: Python 3.13.5\r\n#\r\n# Starts by downloading the Zyphyr SDK v. 1.0.1\r\n# compressed tar ball (70 MB).\r\n#\r\n# And installs things like (downloading 45 - 145 MB\r\n# for each):\r\n#\r\n#   'arm-zephyr-eabi'    GNU toolchain.\r\n#   'riscv64-zephyr-elf' GNU toolchain.\r\n#\r\ncd $HOME\/main_ZMK\/zephyr\r\necho ; echo &quot;Start 'west sdk install': $(date +%FT%T_%N_ns)&quot; ; echo\r\nwest sdk install\r\necho ; echo &quot;End 'west sdk install':   $(date +%FT%T_%N_ns)&quot; ; echo\r\n\r\n# Exit the virtual Python environment\r\ndeactivate\r\n\r\n\r\n# #####################################\r\n#\r\n# Build\r\n#\r\n# Start state:\r\n#\r\n#   A new terminal window, thus activating the\r\n#   virtual Python environment is required\r\n#\r\n#   '-p' to erase the memory of a previous\r\n#   build, e.g, 'rtl87x2g_evb_a', if any\r\n#\r\nsource ~\/.main_ZMK_environment4\/bin\/activate\r\ncd $HOME\/main_ZMK\/app\r\n\r\n#   -- Zephyr version: 4.1.0 (\/home\/embo\/main_ZMK\/zephyr), build: 58a5874a446a\r\n#   [187\/187] Linking C executable zephyr\/zmk.elf\r\n#\r\n#   Memory region         Used Size  Region Size  %age Used\r\n#              FLASH:       47624 B       256 KB     18.17%\r\n#                RAM:       11736 B        40 KB     28.65%\r\n#                CCM:          0 GB         8 KB      0.00%\r\n#           IDT_LIST:          0 GB        32 KB      0.00%\r\n#   Generating files from \/home\/embo\/main_ZMK\/app\/build\/zephyr\/zmk.elf for board: planck\r\n#\r\necho ; echo &quot;Start 'west build': $(date +%FT%T_%N_ns)&quot; ; echo\r\nwest build -p -b planck\/\/zmk\r\necho ; echo &quot;End 'west build':   $(date +%FT%T_%N_ns)&quot; ; echo\r\n\r\nfind $HOME\/main_ZMK\/app | grep elf | xargs ls -l\r\n\r\n  # 975388 Jun  4 05:33 \/home\/embo\/main_ZMK\/app\/build\/zephyr\/zephyr_pre0.elf\r\n  # 974604 Jun  4 05:33 \/home\/embo\/main_ZMK\/app\/build\/zephyr\/zmk.elf\r\n\r\n\r\n# Exit the virtual Python environment\r\ndeactivate\r\n\r\n\r\n# Extra (is here, because it may or may not block\r\n#        with prompts, 'less' paging, etc.):\r\n# \r\n# Check ZMK version. For example, FF09F2 (2026-06-08)\r\ngit -C $HOME\/main_ZMK status # 'On branch main'\r\ngit -C $HOME\/main_ZMK log -1\r\n<\/pre>\n<h2>Conclusion<\/h2>\n<p>This was prompted by <a href=\"https:\/\/www.reddit.com\/r\/Keychron\/comments\/1tnm8pl\/comment\/onvaa7y\/\">trying to compile<\/a> the firmware for a Keychron <a href=\"https:\/\/www.keychron.com\/products\/keychron-v6-ultra-8k-wireless-custom-mechanical-keyboard\">V6&nbsp;Ultra&nbsp;8K<\/a> keyboard, the <strong><em>first step being using the main ZMK project<\/em><\/strong>, including compiling keyboard firmware for a sample keyboard (to demonstrate setting it all up actual works for a particular version on a particular version of a (Linux) system), before addressing the added complexity of Keychron&#8217;s fork.<\/p>\n<p>For the current version of the main ZMK project, Python 3.12 may or may not be required, and thus <a href=\"https:\/\/blog.linuxmint.com\/?p=4570\">LMDE&nbsp;6<\/a> would be too old, with its Python 3.11.2. But reverting to an older version of ZMK and\/or using Keychron&#8217;s fork (which may be based on an older version of ZMK), it may be possible to use some older Linux systems.<\/p>\n<h2>References<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.zephyrproject.org\/4.1.0\/glossary.html\">Zephyr glossary<\/a>. For example, <a href=\"https:\/\/docs.zephyrproject.org\/4.1.0\/glossary.html#term-board\">board<\/a>. But not &#8220;shield&#8221; (claimed to be a Zephyr concept in the ZMK documentation); here is <a href=\"https:\/\/docs.zephyrproject.org\/4.1.0\/boards\/index.html#shields\">a list of shields<\/a> in the Zephyr documentation<\/li>\n<\/ul>\n<h2 id=\"Appendix_A_Full_build_error_output\">Appendix A: Full transcript for the two build errors<\/h2>\n<h3>&#8216;planck_rev6&#8217;<\/h3>\n<p>For building with &#8216;west build -p -b planck_rev6&#8217;:<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\n(.main_ZMK_environment4) embo@emboLMDE7:~\/main_ZMK\/app$ west build -p -b planck_rev6\r\n\r\n-- west build: making build dir \/home\/embo\/main_ZMK\/app\/build pristine\r\n-- west build: generating a build system\r\nLoading Zephyr default modules (Zephyr base).\r\n-- Application: \/home\/embo\/main_ZMK\/app\r\n-- CMake version: 3.31.6\r\n-- Found Python3: \/home\/embo\/.main_ZMK_environment4\/bin\/python3 (found suitable version &quot;3.13.5&quot;, minimum required is &quot;3.10&quot;) found components: Interpreter\r\n-- Cache files will be written to: \/home\/embo\/.cache\/zephyr\r\n-- Zephyr version: 4.1.0 (\/home\/embo\/main_ZMK\/zephyr)\r\n-- Found west (found suitable version &quot;1.5.0&quot;, minimum required is &quot;0.14.0&quot;)\r\nNo board named 'planck_rev6' found.\r\n\r\nPlease choose one of the following boards:\r\n\r\nproton_c\r\nmikoto\r\nnrfmicro\r\npuchi_ble\r\nnrf52840_m2\r\npillbug\r\nnice_nano\r\nbluemicro840\r\nferris\r\ntofu65\r\nbdn9\r\ns40nc\r\nnice60\r\npreonic\r\nplanck\r\nadv360pro_left\r\nadv360pro_right\r\nbt60_hs\r\nbt60\r\nbt75\r\nbt65\r\nglove80_rh\r\nglove80_lh\r\ncorneish_zen_left\r\ncorneish_zen_right\r\nparticle_xenon\r\nparticle_boron\r\nnrf52_blenano2\r\nnrf51_blenano\r\nparticle_argon\r\ninnblue21\r\ninnblue22\r\nsgrm\r\nmt8195\r\nmt8188\r\nmt8196\r\nmt8186\r\nblueclover_plt_demo_v2\r\narduino_opta\r\narduino_nicla_sense_me\r\narduino_giga_r1\r\narduino_zero\r\narduino_nicla_vision\r\narduino_mkrzero\r\narduino_nano_33_ble\r\narduino_nano_33_iot\r\narduino_portenta_h7\r\narduino_due\r\narduino_uno_r4_minima\r\narduino_uno_r4_wifi\r\n96b_carbon\r\n96b_stm32_sensor_mez\r\n96b_meerkat96\r\n96b_argonkey\r\n96b_neonkey\r\n96b_wistrio\r\n96b_avenger96\r\n96b_nitrogen\r\n96b_aerocore2\r\nstm32f3_seco_d23\r\nholyiot_yj16019\r\ntitanium_ti60_f225\r\nmec15xxevb_assy6853\r\nev11l78a\r\nmec1501modular_assy6885\r\nmec172xevb_assy6906\r\nm2gl025_miv\r\nmpfs_icicle\r\nmec172xmodular_assy6930\r\nadafruit_trinket_m0\r\nadafruit_metro_rp2040\r\nnrf52_adafruit_feather\r\nadafruit_feather_stm32f405\r\nadafruit_feather_nrf52840\r\nadafruit_grand_central_m4_express\r\nadafruit_itsybitsy_m4_express\r\nadafruit_itsybitsy\r\nadafruit_feather_m0_basic_proto\r\nadafruit_kb2040\r\nadafruit_qt_py_esp32s3\r\nadafruit_qt_py_rp2040\r\nadafruit_feather_m0_lora\r\nadafruit_feather_m4_express\r\nadafruit_macropad_rp2040\r\nsam4l_wm400_cape\r\nesp32c3_042_oled\r\nacn52832\r\nnrf51dk\r\nnrf9161dk\r\nthingy52\r\nnrf7002dk\r\nnrf52dk\r\nnrf9131ek\r\nnrf54l15dk\r\nnrf9280pdk\r\nnrf51dongle\r\nnrf54l20pdk\r\nnrf5340dk\r\nnrf54h20dk\r\nnrf52833dk\r\nnrf52840dk\r\nnrf9160dk\r\nnrf5340_audio_dk\r\nthingy53\r\nnrf54l09pdk\r\nnrf21540dk\r\nnrf52840dongle\r\nnrf9151dk\r\nsegger_trb_stm32f407\r\nip_k66f\r\nnative_posix\r\nnrf52_bsim\r\nnrf5340bsim\r\nnrf54l15bsim\r\nnative_sim\r\nm5stack_atom_lite\r\nm5stack_atoms3\r\nm5stack_stamps3\r\nm5stickc_plus\r\nm5stack_core2\r\nstamp_c3\r\nm5stack_atoms3_lite\r\nm5stack_cores3\r\naltera_max10\r\narty_a7\r\nzybo\r\nfaze\r\nlegend\r\nimx93_evk\r\nfrdm_mcxc444\r\nlpcxpresso11u68\r\ntwr_ke18f\r\nlpcxpresso55s06\r\nlpcxpresso51u68\r\nmimxrt1064_evk\r\nfrdm_mcxw72\r\nlpcxpresso55s69\r\nlpcxpresso54114\r\ntwr_kv58f220m\r\nlpcxpresso55s28\r\nmimxrt685_evk\r\nmimxrt1180_evk\r\nfrdm_rw612\r\nmimxrt1062_fmurt6\r\nmimxrt1020_evk\r\nmimxrt1170_evk\r\nfrdm_mcxa156\r\nmimxrt1040_evk\r\nfrdm_k64f\r\nmimxrt595_evk\r\nimx8mp_evk\r\nimx8qxp_mek\r\nimx8ulp_evk\r\nfrdm_k22f\r\nrd_rw612_bga\r\nusb_kw24d512\r\nfrdm_ke17z\r\nfrdm_mcxn236\r\nmimxrt1050_evk\r\nhexiwear\r\nfrdm_ke17z512\r\nmr_canhubk3\r\nfrdm_mcxn947\r\nlpcxpresso55s16\r\nfrdm_kw41z\r\nimx91_evk\r\nfrdm_mcxc242\r\nlpcxpresso55s36\r\nfrdm_kl25z\r\nucans32k1sic\r\nvmu_rt1170\r\nmcxw72_evk\r\nimx8mq_evk\r\nmimxrt1024_evk\r\nmimxrt1160_evk\r\nimx8mm_evk\r\nrddrone_fmuk66\r\nfrdm_ke15z\r\nfrdm_mcxw71\r\nmimxrt1015_evk\r\ns32z2xxdc2\r\nimx8qm_mek\r\nfrdm_k82f\r\nmimxrt1010_evk\r\nimx95_evk\r\nmimxrt700_evk\r\nmimxrt1060_evk\r\nimx8mn_evk\r\nls1046ardb\r\nttgo_t8c3\r\nttgo_lora32\r\nttgo_t8s3\r\nttgo_t7v1_5\r\nnrf52832_mdk\r\nnrf52840_mdk_usb_dongle\r\nnrf52840_mdk\r\nda14695_dk_usb\r\nek_ra2l1\r\nrzt2m_starter_kit\r\nek_ra4w1\r\nrcar_salvator_xs\r\nek_ra4m1\r\nek_ra6e2\r\nek_ra6m4\r\nda1469x_dk_pro\r\nfpb_ra6e2\r\nmck_ra8t1\r\nek_ra6m2\r\nek_ra4m3\r\nrcar_h3ulcb\r\nek_ra6m5\r\nek_ra4e2\r\nek_ra4l1\r\nfpb_ra6e1\r\nek_ra8m1\r\nek_ra4m2\r\nek_ra2a1\r\nrcar_salvator_x\r\nrcar_spider_s4\r\nek_ra8d1\r\nfpb_ra4e1\r\nek_ra6m3\r\nrzg3s_smarc\r\nvoice_ra4e1\r\nek_ra6m1\r\nnrf52840_blip\r\nnrf52840_papyr\r\nbbc_microbit\r\nbbc_microbit_v2\r\nesp32s2_lolin_mini\r\nkincony_kc868_a32\r\nwalter\r\napollo3_evb\r\napollo4p_evb\r\napollo4p_blue_kxr_evb\r\napollo3p_evb\r\nast1030_evb\r\nstm32_min_dev\r\nesp32c3_supermini\r\nserpente\r\nicev_wireless\r\nstm32f030_demo\r\npromicro_nrf52840\r\nstm32f103_mini\r\ncandlelight\r\nstm32f401_mini\r\ncandlelightfd\r\nblack_f407ve\r\ncanbardo\r\nneorv32\r\nblack_f407zg_pro\r\nrpi_pico\r\nrpi_4b\r\nrpi_5\r\nrpi_pico2\r\nboardsource_blok\r\nsparkfun_pro_micro_rp2040\r\nnrf52_sparkfun\r\nsparkfun_thing_plus_matter_mgm240p\r\nsparkfun_thing_plus\r\nmicromod\r\nsparkfun_red_v_things_plus\r\nnrf52_vbluno52\r\nnrf51_vbluno51\r\nacrn\r\nacrn_ehl_crb\r\nadp_xc7k\r\nxenvm\r\nv2m_beetle\r\nv2m_musca_b1\r\nfvp_baser_aemv8r\r\nmps2\r\nmps3\r\nfvp_base_revc_2xaemv8a\r\nv2m_musca_s1\r\noctopus_io_board\r\noctopus_som\r\nodroid_go\r\nswan_r5\r\nslwrb4104a\r\nslwrb4321a\r\nslwrb4170a\r\nxg23_rb4210a\r\nxg24_rb4187c\r\nslwrb4255a\r\nsiwx917_rb4338a\r\nxg29_rb4412a\r\nslwrb4161a\r\nslwrb4180a\r\nslwrb4250b\r\nefm32wg_stk3800\r\nslstk3701a\r\nslstk3401a\r\nslstk3400a\r\nslstk3402a\r\nsltb009a\r\nsim3u1xx_dk\r\nxg24_dk2601b\r\nsltb010a\r\nsltb004a\r\nxg27_dk2602a\r\nxg24_ek2703a\r\nrts5912_evb\r\nmm_feather\r\nmm_swiftio\r\ncircuitdojo_feather\r\nwe_ophelia1ev\r\nwe_orthosie1ev\r\nwe_oceanus1ev\r\nwe_proteus2ev\r\nwe_proteus3ev\r\nganymed_bob\r\ncontextualelectronics_abc\r\nlora_e5_mini\r\nxiao_esp32s3\r\nlora_e5_dev_board\r\nxiao_esp32c6\r\nxiao_esp32c3\r\nxiao_ble\r\nseeeduino_xiao\r\nwio_terminal\r\nxiao_rp2040\r\nxiao_mg24\r\nvisionfive2\r\npandora_stm32l475\r\nblackpill_f401ce\r\nweact_stm32g431_core\r\nweact_stm32h5_core\r\nmini_stm32h743\r\nusb2canfdv1\r\nmini_stm32h7b0\r\nblackpill_f411ce\r\nblackpill_f401cc\r\nweact_stm32f405_core\r\nsam_v71_xult\r\nsam4e_xpro\r\nsam_e70_xplained\r\nsam4s_xplained\r\nsam4l_ek\r\nsamr21_xpro\r\nsamc21n_xpro\r\nsame54_xpro\r\nsamd20_xpro\r\nsamr34_xpro\r\nsamd21_xpro\r\nsaml21_xpro\r\ngr716a_mini\r\ngeneric_leon3\r\nlitex_vexriscv\r\nqomu\r\nquick_feather\r\nronoth_lodev\r\nebyte_e73_tbb\r\nmercury_xu\r\nesp32s2_franzininho\r\nphyboard_lyra\r\nphyboard_electra\r\nphyboard_polis\r\nphyboard_pollux\r\nreel_board\r\nphyboard_nash\r\nscobc_module1\r\nbytesensi_l\r\nintel_ish_5_4_1\r\nintel_ish_5_6_0\r\nintel_ish_5_8_0\r\nniosv_m\r\nintel_adsp\r\nintel_rpl_p_crb\r\nintel_rpl_s_crb\r\nintel_ehl_crb\r\nniosv_g\r\nintel_adl_crb\r\nintel_adl_rvp\r\ncyclonev_socdk\r\nintel_socfpga_agilex_socdk\r\nintel_socfpga_agilex5_socdk\r\nesp32s3_luatos_core\r\nesp32c3_luatos_core\r\ncc1352r_sensortag\r\ncc3220sf_launchxl\r\nmsp_exp432p401r_launchxl\r\ncc26x2r1_launchxl\r\ncc3235sf_launchxl\r\nsk_am62\r\nlp_em_cc2340r5\r\ncc1352p7_lp\r\ncc1352p1_launchxl\r\ncc1352r1_launchxl\r\nhsdk\r\nemsdp\r\nhsdk4xd\r\nem_starterkit\r\niotdk\r\nnsim_arc_v\r\nnsim\r\nrak11720\r\nrak4631\r\nrak5010\r\nrak3172\r\nrm1xx_dvk\r\nbl654_dvk\r\nbl654_usb\r\nbt610\r\nmg100\r\nbl652_dvk\r\npinnacle_100_dvk\r\nbt510\r\nbl653_dvk\r\nbl5340_dvk\r\nbl654_sensor_board\r\nucan\r\npan1783_evb\r\npan1783a_evb\r\npan1783a_pa_evb\r\npan1781_evb\r\npan1782_evb\r\npan1770_evb\r\npan1780_evb\r\npanb511evb\r\nolimex_stm32_e407\r\nolimex_lora_stm32wl_devkit\r\nolimex_stm32_p405\r\nolimex_esp32_evb\r\nolimex_stm32_h405\r\nolimex_stm32_h103\r\nolimex_stm32_h407\r\nolimexino_stm32\r\nnpcx4m8f_evb\r\nnumaker_pfm_m467\r\nnpcm400_evb\r\nnpcx9m6f_evb\r\nnumaker_pfm_m487\r\nnumaker_m2l31ki\r\nnpcx7m6fb_evb\r\nch32v003evt\r\nfk750m1_vbt6\r\nfk7b0m1_vbt6\r\ncroxel_cx1825\r\nubx_bmd330eval\r\nubx_bmd345eval\r\nubx_evkninab1\r\nubx_bmd380eval\r\nubx_evkninab4\r\nubx_bmd340eval\r\nubx_evkannab1\r\nubx_evkninab3\r\nubx_bmd300eval\r\nubx_bmd360eval\r\nactinius_icarus_som_dk\r\nactinius_icarus\r\nactinius_icarus_som\r\nactinius_icarus_bee\r\nruuvi_ruuvitag\r\nbeagley_ai\r\nbeaglebone_ai64\r\nbeagleconnect_freedom\r\nbeagleplay\r\nbeaglev_fire\r\nverdin_imx8mm\r\ncolibri_imx7d\r\nverdin_imx8mp\r\nctcc\r\nmks_canable_v20\r\nacp_6_0_adsp\r\nkv260_r5\r\nmikroe_stm32_m4_clicker\r\nmikroe_clicker_2\r\nmikroe_mini_m4_for_stm32\r\nmikroe_clicker_ra4m1\r\ngoogle_icetower\r\ngoogle_quincy\r\ngoogle_dragonclaw\r\ngoogle_twinkie_v2\r\nyd_esp32\r\nyd_stm32h750vb\r\ncy8ckit_062_ble\r\ncy8ckit_062_wifi_bt\r\nup_squared_pro_7000\r\nup_squared\r\nbcm958402m2\r\nbcm958401m2\r\npinetime_devkit0\r\nesp32_devkitc_wrover\r\nesp8684_devkitm\r\nesp32c3_devkitm\r\nesp32_devkitc_wroom\r\nesp32s3_eye\r\nesp32c6_devkitc\r\nesp_wrover_kit\r\nesp32s2_devkitc\r\nesp32s2_saola\r\nesp32s3_devkitm\r\nesp32_ethernet_kit\r\nesp32c3_devkitc\r\nesp32c3_rust\r\nesp32s3_devkitc\r\nrv32m1_vega\r\nmax32672evkit\r\nmax32662evkit\r\nadi_sdp_k1\r\nmax32655fthr\r\nmax32650evkit\r\nmax32670evkit\r\nmax32666fthr\r\nadi_eval_adin1110ebz\r\nmax32690fthr\r\nmax32690evkit\r\nmax32672fthr\r\nad_swiot1l_sl\r\nmax32655evkit\r\nmax32660evsys\r\nmax32675evkit\r\nmax78000evkit\r\nadi_eval_adin2111ebz\r\nmax32666evkit\r\nmax78002evkit\r\nmax78000fthr\r\napard32690\r\nmax32650fthr\r\nmax32680evkit\r\nnucleo_f070rb\r\nnucleo_f031k6\r\nnucleo_f207zg\r\nstm32f411e_disco\r\nstm32h745i_disco\r\nnucleo_l152re\r\nstm32h7s78_dk\r\nstm32f429i_disc1\r\nstm32h747i_disco\r\nnucleo_l031k6\r\nnucleo_f303re\r\nnucleo_l4a6zg\r\nb_u585i_iot02a\r\nnucleo_f302r8\r\nstm32f4_disco\r\nstm32h573i_dk\r\nnucleo_l433rc_p\r\nnucleo_f411re\r\nnucleo_f072rb\r\nsteval_fcu001v1\r\nnucleo_f446ze\r\nsensortile_box\r\nstm32l476g_disco\r\nstm32f469i_disco\r\nb_l072z_lrwan1\r\nsensortile_box_pro\r\nstm32f072_eval\r\nnucleo_h7a3zi_q\r\nnucleo_g070rb\r\nb_l4s5i_iot01a\r\nstm32f3_disco\r\nstm32l562e_dk\r\nnucleo_wb07cc\r\nnucleo_f091rc\r\nstm32373c_eval\r\nnucleo_wb55rg\r\nnucleo_wl55jc\r\nnucleo_h7s3l8\r\nnucleo_u575zi_q\r\nstm32f412g_disco\r\nstm32f0_disco\r\nnucleo_wb05kz\r\nnucleo_h563zi\r\nnucleo_c031c6\r\nnucleo_f334r8\r\nnucleo_f103rb\r\nstm32g0316_disco\r\nnucleo_f722ze\r\nstm32u083c_dk\r\nnucleo_f429zi\r\nnucleo_c071rb\r\nnucleo_f746zg\r\nnucleo_h753zi\r\nnucleo_l053r8\r\nnucleo_h745zi_q\r\nnucleo_wba55cg\r\nstm32l1_disco\r\nstm32l152c_disco\r\nnucleo_g0b1re\r\nstm32f7508_dk\r\nnucleo_f401re\r\nstm32wb5mmg\r\nnucleo_l011k4\r\nstm32f746g_disco\r\nsteval_stwinbx1\r\nnucleo_l412rb_p\r\nnucleo_l452re\r\nnucleo_h503rb\r\nnucleo_l476rg\r\nstm32wb5mm_dk\r\nstm32f723e_disco\r\nnucleo_h743zi\r\nnucleo_wba52cg\r\nnucleo_f756zg\r\nstm32h735g_disco\r\nb_g474e_dpow1\r\ndisco_l475_iot1\r\nnucleo_l432kc\r\nnucleo_f410rb\r\nnucleo_l073rz\r\nnucleo_f413zh\r\nnucleo_h723zg\r\nnucleo_g431rb\r\nstm32f072b_disco\r\nnucleo_g431kb\r\nnucleo_g071rb\r\nnucleo_h533re\r\nnucleo_l4r5zi\r\nnucleo_g031k8\r\nnucleo_u031r8\r\nnucleo_n657x0_q\r\nnucleo_l496zg\r\nstm32l4r9i_disco\r\nstm32vl_disco\r\nnucleo_f030r8\r\nstm32f413h_disco\r\nnucleo_wb09ke\r\nstm3210c_eval\r\nnucleo_l552ze_q\r\nstm32h7b3i_dk\r\nnucleo_h755zi_q\r\nnucleo_f042k6\r\nnucleo_u5a5zj_q\r\nstm32g081b_eval\r\nnucleo_f303k8\r\nstm32mp157c_dk2\r\nstm32f769i_disco\r\nstm32c0116_dk\r\nnucleo_f446re\r\nnucleo_u083rc\r\nstm32u5a9j_dk\r\nnucleo_g474re\r\nstm32h750b_dk\r\nstm32n6570_dk\r\nst25dv_mb1283_disco\r\nnucleo_f412zg\r\nnucleo_f767zi\r\nstm32g071b_disco\r\nstm32l496g_disco\r\nopentitan_earlgrey\r\nraytac_mdbt53v_db_40\r\nraytac_mdbt50q_db_40\r\nraytac_mdbt53_db_40\r\nraytac_mdbt50q_db_33\r\nit8xxx2_evb\r\nit82xx2_evb\r\nhifive_unleashed\r\nhifive_unmatched\r\nhifive1\r\nlongan_nano\r\ntlsr9518adk80d\r\ngd32e103v_eval\r\ngd32f450v_start\r\ngd32f350r_eval\r\ngd32vf103v_eval\r\ngd32f470i_eval\r\ngd32a503v_eval\r\ngd32f450z_eval\r\ngd32vf103c_starter\r\ngd32f450i_eval\r\ngd32f403z_eval\r\ngd32f407v_start\r\ngd32e507v_start\r\ngd32l233r_eval\r\ngd32e507z_eval\r\ndecawave_dwm1001_dev\r\ndecawave_dwm3001cdk\r\nrp2040_zero\r\nwaveshare_open103z\r\nnrf51_ble400\r\nesp32s3_touch_lcd_1_28\r\nmyra_sip_baseboard\r\nriscv32_virtual\r\ncortex_r8_virtual\r\nkb1200_evb\r\nroc_rk3568_pc\r\nkhadas_edge2\r\nkhadas_edgev\r\ndegu_evk\r\ndragino_nbsn95\r\ndragino_lsn50\r\nqemu_riscv32_xip\r\nqemu_cortex_m0\r\nqemu_leon3\r\nqemu_cortex_m3\r\nqemu_malta\r\nqemu_nios2\r\nqemu_riscv32e\r\nqemu_kvm_arm64\r\nqemu_cortex_a9\r\nqemu_riscv64\r\nqemu_arc\r\nqemu_riscv32\r\nqemu_x86\r\nqemu_x86_lakemont\r\nqemu_x86_64\r\nqemu_x86_tiny\r\nqemu_cortex_a53\r\nqemu_cortex_r5\r\nqemu_xtensa\r\nxt-sim\r\nw5500_evb_pico\r\nrobokit1\r\npico_pi\r\nlinum\r\nudoo_neo_full\r\nwarp7\r\naz3166_iotdevkit\r\nteensy40\r\nteensy41\r\nxmc47_relax_kit\r\ncy8ckit_062s4\r\ncy8cproto_062_4343w\r\ncy8cproto_063_ble\r\nxmc45_relax_kit\r\ncy8ckit_062s2_ai\r\ncyw920829m2evk_02\r\nheltec_wireless_stick_lite_v3\r\nheltec_wifi_lora32_v2\r\nCMake Error at \/home\/embo\/main_ZMK\/zephyr\/cmake\/modules\/boards.cmake:228 (message):\r\n  Invalid BOARD; see above.\r\nCall Stack (most recent call first):\r\n  \/home\/embo\/main_ZMK\/zephyr\/cmake\/modules\/zephyr_default.cmake:134 (include)\r\n  \/home\/embo\/main_ZMK\/zephyr\/share\/zephyr-package\/cmake\/ZephyrConfig.cmake:66 (include)\r\n  \/home\/embo\/main_ZMK\/zephyr\/share\/zephyr-package\/cmake\/ZephyrConfig.cmake:92 (include_boilerplate)\r\n  CMakeLists.txt:9 (find_package)\r\n\r\n\r\n-- Configuring incomplete, errors occurred!\r\nFATAL ERROR: command exited with status 1: \/usr\/bin\/cmake -DWEST_PYTHON=\/home\/embo\/.main_ZMK_environment4\/bin\/python3 -B\/home\/embo\/main_ZMK\/app\/build -GNinja -DBOARD=planck_rev6 -S\/home\/embo\/main_ZMK\/app\r\n<\/pre>\n<h3>&#8216;planck&#8217;<\/h3>\n<p>For building with &#8216;west build -p -b planck&#8217;:<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\n(.main_ZMK_environment4) embo@emboLMDE7:~\/main_ZMK\/app$ west build -p -b planck\r\n\r\n-- west build: generating a build system\r\nLoading Zephyr default modules (Zephyr base).\r\n-- Application: \/home\/embo\/main_ZMK\/app\r\n-- CMake version: 3.31.6\r\n-- Found Python3: \/home\/embo\/.main_ZMK_environment4\/bin\/python3 (found suitable version &quot;3.13.5&quot;, minimum required is &quot;3.10&quot;) found components: Interpreter\r\n-- Cache files will be written to: \/home\/embo\/.cache\/zephyr\r\n-- Zephyr version: 4.1.0 (\/home\/embo\/main_ZMK\/zephyr)\r\n-- Found west (found suitable version &quot;1.5.0&quot;, minimum required is &quot;0.14.0&quot;)\r\n-- Board: planck, Revision: 6.0.0, qualifiers: stm32f303xc\r\nChecking \/home\/embo\/main_ZMK\/app\/module\r\nChecking \/home\/embo\/main_ZMK\/app\r\nfound \/home\/embo\/main_ZMK\/app\r\nplanck_stm32f303xc for _stm32f303xc for planck with version 6.0.0\r\n-- Using keymap file: \/home\/embo\/main_ZMK\/app\/boards\/olkb\/planck\/planck.keymap\r\nChecking \/home\/embo\/main_ZMK\/zephyr\r\n-- ZEPHYR_TOOLCHAIN_VARIANT not set, trying to locate Zephyr SDK\r\n-- Found host-tools: zephyr 0.17.0 (\/home\/embo\/zephyr-sdk-0.17.0)\r\n-- Found toolchain: zephyr 0.17.0 (\/home\/embo\/zephyr-sdk-0.17.0)\r\n-- Found Dtc: \/home\/embo\/zephyr-sdk-0.17.0\/sysroots\/x86_64-pokysdk-linux\/usr\/bin\/dtc (found suitable version &quot;1.6.0&quot;, minimum required is &quot;1.4.6&quot;)\r\n-- Found BOARD.dts: \/home\/embo\/main_ZMK\/zephyr\/boards\/common\/stub.dts\r\n-- Found devicetree overlay: \/home\/embo\/main_ZMK\/app\/boards\/olkb\/planck\/planck.keymap\r\n-- Generated zephyr.dts: \/home\/embo\/main_ZMK\/app\/build\/zephyr\/zephyr.dts\r\n-- Generated pickled edt: \/home\/embo\/main_ZMK\/app\/build\/zephyr\/edt.pickle\r\n-- Generated devicetree_generated.h: \/home\/embo\/main_ZMK\/app\/build\/zephyr\/include\/generated\/zephyr\/devicetree_generated.h\r\n-- Including generated dts.cmake file: \/home\/embo\/main_ZMK\/app\/build\/zephyr\/dts.cmake\r\n\r\nwarning: Deprecated symbol KSCAN is enabled.\r\n\r\nParsing \/home\/embo\/main_ZMK\/app\/Kconfig\r\nLoaded configuration '\/home\/embo\/main_ZMK\/app\/prj.conf'\r\nConfiguration saved to '\/home\/embo\/main_ZMK\/app\/build\/zephyr\/.config'\r\nKconfig header saved to '\/home\/embo\/main_ZMK\/app\/build\/zephyr\/include\/generated\/zephyr\/autoconf.h'\r\n-- Found GnuLd: \/home\/embo\/zephyr-sdk-0.17.0\/arm-zephyr-eabi\/arm-zephyr-eabi\/bin\/ld.bfd (found version &quot;2.38&quot;)\r\n-- The C compiler identification is GNU 12.2.0\r\n-- The CXX compiler identification is GNU 12.2.0\r\n-- The ASM compiler identification is GNU\r\n-- Found assembler: \/home\/embo\/zephyr-sdk-0.17.0\/arm-zephyr-eabi\/bin\/arm-zephyr-eabi-gcc\r\n-- Using ccache: \/usr\/bin\/ccache\r\nCMake Warning at \/home\/embo\/main_ZMK\/zephyr\/CMakeLists.txt:1011 (message):\r\n  No SOURCES given to Zephyr library: drivers__kscan\r\n\r\n  Excluding target from build.\r\n\r\n\r\n-- Configuring done (6.3s)\r\n-- Generating done (0.1s)\r\n-- Build files have been written to: \/home\/embo\/main_ZMK\/app\/build\r\n-- west build: building application\r\n[1\/158] Preparing syscall dependency handling\r\n\r\n[3\/158] Generating include\/generated\/zephyr\/version.h\r\n-- Zephyr version: 4.1.0 (\/home\/embo\/main_ZMK\/zephyr), build: 58a5874a446a\r\n[10\/158] Building C object zephyr\/CMakeFiles\/offsets.dir\/arch\/arm\/core\/offsets\/offsets.c.obj\r\nFAILED: zephyr\/CMakeFiles\/offsets.dir\/arch\/arm\/core\/offsets\/offsets.c.obj\r\nccache \/home\/embo\/zephyr-sdk-0.17.0\/arm-zephyr-eabi\/bin\/arm-zephyr-eabi-gcc -DCORE_CM4 -DHSE_VALUE=8000000 -DKERNEL -DK_HEAP_MEM_POOL_SIZE=0 -DPICOLIBC_DOUBLE_PRINTF_SCANF -DSTM32F303xC -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER -D__LINUX_ERRNO_EXTENSIONS__ -D__PROGRAM_START -D__ZEPHYR__=1 -I\/home\/embo\/main_ZMK\/zephyr\/kernel\/include -I\/home\/embo\/main_ZMK\/zephyr\/arch\/arm\/include -I\/home\/embo\/main_ZMK\/app\/build\/zephyr\/include\/generated\/zephyr -I\/home\/embo\/main_ZMK\/zephyr\/include -I\/home\/embo\/main_ZMK\/app\/build\/zephyr\/include\/generated -I\/home\/embo\/main_ZMK\/zephyr\/soc\/st\/stm32 -I\/home\/embo\/main_ZMK\/zephyr\/soc\/st\/stm32\/common\/. -I\/home\/embo\/main_ZMK\/zephyr\/drivers -I\/home\/embo\/main_ZMK\/zephyr\/soc\/st\/stm32\/stm32f3x\/. -I\/home\/embo\/main_ZMK\/modules\/hal\/stm32\/stm32cube\/stm32f3xx\/soc -I\/home\/embo\/main_ZMK\/modules\/hal\/stm32\/stm32cube\/stm32f3xx\/drivers\/include -I\/home\/embo\/main_ZMK\/modules\/hal\/stm32\/stm32cube\/common_ll\/include -I\/home\/embo\/main_ZMK\/modules\/hal\/cmsis\/CMSIS\/Core\/Include -I\/home\/embo\/main_ZMK\/zephyr\/modules\/cmsis\/. -I\/home\/embo\/main_ZMK\/app\/module\/include -isystem \/home\/embo\/main_ZMK\/zephyr\/lib\/libc\/common\/include -fno-strict-aliasing -Os -imacros \/home\/embo\/main_ZMK\/app\/build\/zephyr\/include\/generated\/zephyr\/autoconf.h -fno-common -g -gdwarf-4 -fdiagnostics-color=always -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mfp16-format=ieee -mtp=soft --sysroot=\/home\/embo\/zephyr-sdk-0.17.0\/arm-zephyr-eabi\/arm-zephyr-eabi -imacros \/home\/embo\/main_ZMK\/zephyr\/include\/zephyr\/toolchain\/zephyr_stdint.h -Wall -Wformat -Wformat-security -Wno-format-zero-length -Wdouble-promotion -Wno-pointer-sign -Wpointer-arith -Wexpansion-to-defined -Wno-unused-but-set-variable -Werror=implicit-int -fno-pic -fno-pie -fno-asynchronous-unwind-tables -ftls-model=local-exec -fno-reorder-functions --param=min-pagesize=0 -fno-defer-pop -fmacro-prefix-map=\/home\/embo\/main_ZMK\/app=CMAKE_SOURCE_DIR -fmacro-prefix-map=\/home\/embo\/main_ZMK\/zephyr=ZEPHYR_BASE -fmacro-prefix-map=\/home\/embo\/main_ZMK=WEST_TOPDIR -ffunction-sections -fdata-sections -specs=picolibc.specs -std=c99 -Wfatal-errors -fno-lto -MD -MT zephyr\/CMakeFiles\/offsets.dir\/arch\/arm\/core\/offsets\/offsets.c.obj -MF zephyr\/CMakeFiles\/offsets.dir\/arch\/arm\/core\/offsets\/offsets.c.obj.d -o zephyr\/CMakeFiles\/offsets.dir\/arch\/arm\/core\/offsets\/offsets.c.obj -c \/home\/embo\/main_ZMK\/zephyr\/arch\/arm\/core\/offsets\/offsets.c\r\nIn file included from \/home\/embo\/main_ZMK\/zephyr\/modules\/cmsis\/.\/cmsis_core.h:10,\r\n                 from \/home\/embo\/main_ZMK\/zephyr\/include\/zephyr\/arch\/arm\/asm_inline_gcc.h:24,\r\n                 from \/home\/embo\/main_ZMK\/zephyr\/include\/zephyr\/arch\/arm\/asm_inline.h:18,\r\n                 from \/home\/embo\/main_ZMK\/zephyr\/include\/zephyr\/arch\/arm\/arch.h:30,\r\n                 from \/home\/embo\/main_ZMK\/zephyr\/include\/zephyr\/arch\/cpu.h:19,\r\n                 from \/home\/embo\/main_ZMK\/zephyr\/include\/zephyr\/kernel_includes.h:36,\r\n                 from \/home\/embo\/main_ZMK\/zephyr\/include\/zephyr\/kernel.h:17,\r\n                 from \/home\/embo\/main_ZMK\/zephyr\/arch\/arm\/core\/offsets\/offsets_aarch32.c:28,\r\n                 from \/home\/embo\/main_ZMK\/zephyr\/arch\/arm\/core\/offsets\/offsets.c:9:\r\n\/home\/embo\/main_ZMK\/zephyr\/modules\/cmsis\/.\/cmsis_core_m.h:27:2: error: #error &quot;NUM_IRQ_PRIO_BITS and __NVIC_PRIO_BITS are not set to the same value&quot;\r\n   27 | #error &quot;NUM_IRQ_PRIO_BITS and __NVIC_PRIO_BITS are not set to the same value&quot;\r\n      |  ^~~~~\r\ncompilation terminated due to -Wfatal-errors.\r\nninja: build stopped: subcommand failed.\r\nFATAL ERROR: command exited with status 1: \/usr\/bin\/cmake --build \/home\/embo\/main_ZMK\/app\/build\r\n<\/pre>\n<h2 id=\"Appendix_B_west_gory_details\">Appendix B: &#8216;west&#8217; information<\/h2>\n<p>The name <a href=\"https:\/\/docs.zephyrproject.org\/latest\/develop\/west\/build-flash-debug.html#building-west-build\">west<\/a> is allegedly after <a href=\"https:\/\/en.wikipedia.org\/wiki\/Zephyrus\">Zephyrus<\/a>, from which Zephyr got its name, the Greek god of the <a href=\"https:\/\/en.wikipedia.org\/wiki\/West_wind#Mythology_and_literature\">west wind<\/a> (a very poor choice in the search engine era).<\/p>\n<p>Output of &#8216;west build -h&#8217; on the command line (slightly edited for readability):<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\nUsage:\r\n\r\n  west build\r\n    [-h]\r\n    [-b BOARD[@REV]]]\r\n    [-d BUILD_DIR]\r\n    [-S SNIPPET]\r\n    [--shield SHIELD]\r\n    [-t TARGET]\r\n    [-p {auto, always, never}]\r\n    [-c]\r\n    [--cmake-only]\r\n    [-n]\r\n    [-o BUILD_OPT] [-f]\r\n    [--sysbuild | --no-sysbuild]\r\n    [--domain DOMAIN]\r\n    [--extra-conf FILE.conf]\r\n    [--extra-dtc-overlay FILE.overlay]\r\n    [source_dir]\r\n    -- [cmake_opt [cmake_opt ...]]\r\n\r\nConvenience wrapper for building Zephyr applications.\r\n\r\nIf the build directory is not given, the\r\ndefault is build, unless the 'build.dir-fmt'\r\nconfiguration variable is set. The current\r\ndirectory is checked after that. If either\r\nis a Zephyr build directory, it is used.\r\n\r\nPositional arguments:\r\n\r\n  source_dir  Application source directory\r\n\r\n  cmake_opt   Extra options to pass to CMake;\r\n              implies -c (these must come\r\n              after &quot;--&quot; as shown above)\r\n\r\nOptions:\r\n\r\n  -h, --help         Show this help message and exit.\r\n\r\n  -b, --board BOARD  Board to build for with\r\n                     optional board revision.\r\n\r\n  -d, --build-dir BUILD_DIR\r\n\r\n                     Build directory to create or use.\r\n\r\n  -f, --force        Ignore any errors and try to proceed.\r\n\r\n  --sysbuild         Create multi domain build system.\r\n\r\n  --no-sysbuild      Do not create multi domain\r\n                     build system (default).\r\n\r\nCMake and build tool:\r\n\r\n  -c, --cmake          Force a CMake run.\r\n\r\n  --cmake-only         Just run CMake; don't build (implies -c).\r\n\r\n  --domain DOMAIN      Execute build tool (Make or Ninja)\r\n                       only for the given domain.\r\n\r\n  -t, --target TARGET  Run build system target\r\n                       TARGET (try &quot;-t usage&quot;).\r\n\r\n  -T, --test-item TEST_ITEM\r\n\r\n                       Build based on test data in\r\n                       'testcase.yaml' or 'sample.yaml'.\r\n                       If the source directory is not\r\n                       used, an argument has to be\r\n                       defined as SOURCE_PATH\/TEST_NAME.\r\n\r\n                       E.g. samples\/hello_world\/sample.basic.helloworld.\r\n                       If the source directory is passed\r\n                       then &quot;TEST_NAME&quot; is enough.\r\n\r\n  -o, --build-opt BUILD_OPT\r\n\r\n                       Options to pass to the build tool\r\n                       (Make or Ninja); it may be given\r\n                       more than once.\r\n\r\n  -n, --just-print, --dry-run, --recon\r\n\r\n                       Just print build commands;\r\n                       don't run them.\r\n\r\n  -S, --snippet SNIPPET\r\n\r\n                      Add the argument to SNIPPET; it may\r\n                      be given multiple times. It forces\r\n                      CMake to run again if given. Do not\r\n                      use this option with manually\r\n                      specified -DSNIPPET... CMake arguments:\r\n                      the results are undefined\r\n\r\n  --shield SHIELD     Add the argument to SHIELD; it may\r\n                      be given multiple times. It forces\r\n                      CMake to run again if given. Do\r\n                      not use this option with manually\r\n                      specified -DSHIELD... CMake arguments:\r\n                      the results are undefined\r\n\r\n  --extra-conf EXTRA_CONF_FILE\r\n\r\n                      Add the argument to EXTRA_CONF_FILE;\r\n                      it may be given multiple times. It\r\n                      forces CMake to run again if given.\r\n                      Do not use this option with manually\r\n                      specified -DEXTRA_CONF_FILE... CMake\r\n                      arguments: the results are undefined\r\n\r\n  --extra-dtc-overlay EXTRA_DTC_OVERLAY_FILE\r\n\r\n                      Add the argument to EXTRA_DTC_OVERLAY_FILE;\r\n                      it may be given multiple times. It\r\n                      forces CMake to run again if given.\r\n                      Do not use this option with manually\r\n                      specified -DEXTRA_DTC_OVERLAY_FILE...\r\n                      CMake arguments: the results are\r\n                      undefined\r\n\r\nPristine builds:\r\n\r\n  A &quot;pristine&quot; build directory is empty.\r\n\r\n  The -p option controls whether the build directory\r\n  is made pristine before the build is done. A bare\r\n  '--pristine' with no value is the same as\r\n  --pristine=always.\r\n\r\n  Setting --pristine=auto uses heuristics to\r\n  guess if a pristine build may be necessary.\r\n\r\n  -p, --pristine [{auto,always,never}]\r\n\r\n                    Pristine build folder setting\r\n<\/pre>\n<p>Forward reference for <a href=\"https:\/\/pmortensen.eu\/world2\/2026\/06\/22\/compiling-and-flashing-firmware-for-the-keychron-v8-ultra-8k-incl-setting-up-a-local-zmk-environment-from-scratch\/\">building the Keychron Ultras<\/a>.<\/p>\n<p><!-- T H E   E N D . . .   Marker for editing in WordPress: pppp --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The short version: After setting up ZMK, for example, with the completely linear pastable command lines provided below, use &#8220;west build -b planck\/\/zmk&#8221; instead of &#8220;west build -b planck_rev6&#8221; to build the sample keyboard firmware (to test that building actually &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/pmortensen.eu\/world2\/2026\/06\/09\/hello-world-for-zmk-the-latest-version\/\"> <span class=\"screen-reader-text\">Hello, World! for ZMK, the latest version<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,43,23,28,26,16,40],"tags":[],"_links":{"self":[{"href":"https:\/\/pmortensen.eu\/world2\/wp-json\/wp\/v2\/posts\/6252"}],"collection":[{"href":"https:\/\/pmortensen.eu\/world2\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pmortensen.eu\/world2\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pmortensen.eu\/world2\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pmortensen.eu\/world2\/wp-json\/wp\/v2\/comments?post=6252"}],"version-history":[{"count":78,"href":"https:\/\/pmortensen.eu\/world2\/wp-json\/wp\/v2\/posts\/6252\/revisions"}],"predecessor-version":[{"id":6488,"href":"https:\/\/pmortensen.eu\/world2\/wp-json\/wp\/v2\/posts\/6252\/revisions\/6488"}],"wp:attachment":[{"href":"https:\/\/pmortensen.eu\/world2\/wp-json\/wp\/v2\/media?parent=6252"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pmortensen.eu\/world2\/wp-json\/wp\/v2\/categories?post=6252"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pmortensen.eu\/world2\/wp-json\/wp\/v2\/tags?post=6252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}