{"id":1573,"date":"2021-05-09T08:24:49","date_gmt":"2021-05-09T06:24:49","guid":{"rendered":"http:\/\/www.fabienm.eu\/wordpress\/?p=1573"},"modified":"2021-06-05T07:44:32","modified_gmt":"2021-06-05T05:44:32","slug":"zephyr-sur-longan-nano","status":"publish","type":"post","link":"http:\/\/www.fabienm.eu\/wordpress\/2021\/05\/09\/zephyr-sur-longan-nano\/","title":{"rendered":"Zephyr sur Longan Nano"},"content":{"rendered":"\n<p><a href=\"https:\/\/www.zephyrproject.org\/\" data-type=\"URL\" data-id=\"https:\/\/www.zephyrproject.org\/\">Zephyr<\/a> est un syst\u00e8me d&rsquo;exploitation temps r\u00e9el pour microcontr\u00f4leur.  Parler d&rsquo;OS peut parfois faire r\u00e9agir puisqu&rsquo;il n&rsquo;y a pas vraiment de noyau (kernel) et que tout est compil\u00e9 en un seul firmware que l&rsquo;on t\u00e9l\u00e9charge dans la m\u00e9moire  du micro.<\/p>\n\n\n\n<p>Ce n&rsquo;est pas le seul <strong>RTOS<\/strong> existant pour microcontr\u00f4leur. Il a le gros avantage cependant d&rsquo;\u00eatre soutenu par la fondation Linux. Les deux grandes forces de ce syst\u00e8me sont sa documentation et le support de nombreux protocoles r\u00e9seaux (avec ou sans fils).<\/p>\n\n\n\n<p>C&rsquo;est le parfait OS \u00e0 tester sur le <strong>GD32VF<\/strong> de gigadevice. Cependant, le portage n&rsquo;est pas termin\u00e9. Le processeur n\u2019appara\u00eet donc pas dans la documentation officielle. Le seul tutoriel (en japonais) que j&rsquo;ai trouv\u00e9 se trouve <a href=\"https:\/\/github.com\/soburi\/zephyr_porting_gd32v\">l\u00e0.<\/a> J&rsquo;en ai fait une traduction semi-automatique<a href=\"https:\/\/github.com\/Martoni\/zephyr_porting_gd32v\/tree\/french_version\"> ici<\/a>.<\/p>\n\n\n\n<p>La version de Zephyr patch\u00e9 correspondante se trouve<a href=\"https:\/\/github.com\/soburi\/zephyr\/tree\/longan_nano_tutorial\"> ici.<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Essayons ici d&rsquo;appliquer ce tutoriel.<\/h3>\n\n\n\n<p>On v\u00e9rifiera sur l<a href=\"https:\/\/docs.zephyrproject.org\/latest\/getting_started\/index.html\">e site officiel que nous<\/a> avons bien install\u00e9 toutes les d\u00e9pendances sur notre machine.<\/p>\n\n\n\n<p>Zephyr a besoin d&rsquo;un outils python nomm\u00e9 <strong>west<\/strong>, c&rsquo;est un projet <a href=\"https:\/\/github.com\/zephyrproject-rtos\/west\">\u00e0 part <\/a>mais qui reste dans le giron de Zephyr.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs \">$ python -m pip install west\n$ west init ~\/zephyrproject \n$ cd ~\/zephyrproject west update\n$ python -m pip install -r ~\/zephyrproject\/zephyr\/scripts\/requirements.txt<\/code><\/span><\/pre>\n\n\n<p id=\"block-58f58abb-aa77-4f26-89f8-1e122b9482f1\">On supprime le git officiel de zephyr t\u00e9l\u00e9charg\u00e9 avec <strong>west<\/strong> Puis puis on clone le fork <strong>Zephyr<\/strong> de <strong>Soburi<\/strong>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php \">$ rm -rf zephyr\n$ git <span class=\"hljs-keyword\">clone<\/span> https:<span class=\"hljs-comment\">\/\/github.com\/soburi\/zephyr.git<\/span>\n$ cd zephyr\n$ git checkout longan_nano_2_5_0<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p id=\"block-530b6770-289d-45f6-aa93-4c6271665e1b\">Notez la branche <code>remotes\/origin\/longan_nano<\/code>_2_5_0 qui contient le travail de portage sur la longan_nano.<\/p>\n\n\n\n<p>On installe le SDK (attention ~1Go)<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php \">$ cd ~\/zephyrproject\n$ wget https:<span class=\"hljs-comment\">\/\/github.com\/zephyrproject-rtos\/sdk-ng\/releases\/download\/v0.12.4\/zephyr-sdk-0.12.4-x86_64-linux-setup.run<\/span>\n$ chmod +x zephyr-sdk<span class=\"hljs-number\">-0.12<\/span><span class=\"hljs-number\">.4<\/span>-x86_64-linux-setup.run\n$ .\/zephyr-sdk<span class=\"hljs-number\">-0.12<\/span><span class=\"hljs-number\">.4<\/span>-x86_64-linux-setup.run -- -d ~\/zephyr-sdk<span class=\"hljs-number\">-0.12<\/span><span class=\"hljs-number\">.4<\/span>\n$ export ZEPHYR_SDK_INSTALL_DIR=~\/zephyr-sdk<span class=\"hljs-number\">-0.12<\/span><span class=\"hljs-number\">.4<\/span>\/<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Manque plus qu&rsquo;\u00e0 mettre \u00e0 jour avec le nouveau zephyr (de soburi) patch\u00e9 :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs \">$ cd ~\/zephyrproject\n$ west update<\/code><\/span><\/pre>\n\n\n<p>Puis nous pouvons compiler le hello world :<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript \">$ cd ~<span class=\"hljs-regexp\">\/zephyrproject\/<\/span>zephyr\/\n$ west build -p auto -b sipeed_longan_nano samples\/basic\/blinky\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Flashage sur la longan nano<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Avec le jtag<\/h3>\n\n\n\n<p>Si tout s&rsquo;est bien pass\u00e9 on doit pouvoir maintenant flasher le binaire sur la carte. J&rsquo;utilise pour cela l&rsquo;adaptateur <a href=\"http:\/\/www.fabienm.eu\/wordpress\/?p=1528\" data-type=\"URL\" data-id=\"http:\/\/www.fabienm.eu\/wordpress\/?p=1528\">jtag de sipeed<\/a>.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs \">$ pip3 install pyelftools<\/code><\/span><\/pre>\n\n\n<p>Pour le moment j&rsquo;ai pas encore r\u00e9ussi. Mais \u00e7a doit pouvoir se faire puisque \u00e7a marche avec <a href=\"http:\/\/www.fabienm.eu\/wordpress\/?p=1528\" data-type=\"URL\" data-id=\"http:\/\/www.fabienm.eu\/wordpress\/?p=1528\">openocd<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Avec l&rsquo;usb par dfu-util<\/h3>\n\n\n\n<p>Pour avoir un fonctionnement correct il faut utiliser une version \u00e0 jour du git du projet :<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php \">$ cd ~\/zephyrproject\n$ git <span class=\"hljs-keyword\">clone<\/span> git:<span class=\"hljs-comment\">\/\/git.code.sf.net\/p\/dfu-util\/dfu-util<\/span>\n$ cd dfu-util\n$ .\/autogen.sh \n$ .\/configure\n$ make\n$ sudo make install<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>J&rsquo;ai suivi les conseils <a href=\"http:\/\/www.fabienm.eu\/wordpress\/?p=1336#comment-5649\" data-type=\"URL\" data-id=\"http:\/\/www.fabienm.eu\/wordpress\/?p=1336#comment-5649\">d&rsquo;un lecteur<\/a>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php \">$ git <span class=\"hljs-keyword\">clone<\/span> https:<span class=\"hljs-comment\">\/\/github.com\/riscv-mcu\/gd32-dfu-utils.git<\/span>\n$ .\/autogen.sh\n$ .\/configure\n$ make\n$ sudo make install\n$ dfu-util -V\n dfu-util <span class=\"hljs-number\">0.10<\/span>-dev\n Copyright <span class=\"hljs-number\">2005<\/span><span class=\"hljs-number\">-2009<\/span> Weston Schmidt, Harald Welte <span class=\"hljs-keyword\">and<\/span> OpenMoko Inc.\n Copyright <span class=\"hljs-number\">2010<\/span><span class=\"hljs-number\">-2021<\/span> Tormod Volden <span class=\"hljs-keyword\">and<\/span> Stefan Schmidt\n This program is Free Software <span class=\"hljs-keyword\">and<\/span> has ABSOLUTELY NO WARRANTY\n Please report bugs to http:<span class=\"hljs-comment\">\/\/sourceforge.net\/p\/dfu-util\/tickets\/<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Puis, pour t\u00e9l\u00e9charger le binaire, taper la commande :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs \">$ dfu-util -d,28e9:0189 -s 0x8000000:leave -a 0 -D build\/zephyr\/zephyr.bin\ndfu-util 0.10-dev\n Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.\n Copyright 2010-2021 Tormod Volden and Stefan Schmidt\n This program is Free Software and has ABSOLUTELY NO WARRANTY\n Please report bugs to http:\/\/sourceforge.net\/p\/dfu-util\/tickets\/\n dfu-util: Warning: Invalid DFU suffix signature\n dfu-util: A valid DFU suffix will be required in a future dfu-util release\n Opening DFU capable USB device\u2026\n Device ID 28e9:0189\n Device DFU version 011a\n Claiming USB DFU Interface\u2026\n Setting Alternate Interface #0 \u2026\n Determining device status\u2026\n DFU state(2) = dfuIDLE, status(0) = No error condition is present\n DFU mode device DFU version 011a\n Device returned transfer size 2048\n DfuSe interface name: \"Internal Flash  \"\n Found GD32VF103, which reports a bad page size and count for its internal memory.\n Fixed layout based on part number: page size 1024, count 128.\n Downloading element to address = 0x08000000, size = 19308\n Erase       &#91;=========================] 100%        19308 bytes\n Erase    done.\n Download    &#91;=========================] 100%        19308 bytes\n Download done.\n File downloaded successfully<\/code><\/span><\/pre>\n\n\n<p>Qui t\u00e9l\u00e9charge bien le binaire visiblement, et fait clignoter la led.<\/p>\n\n\n\n<p>Pour s&rsquo;assurer que c&rsquo;est bien notre programme qui clignote, on peut changer la couleur de clignotement en modifiant la ligne suivante dans le fichier <code>samples\/basic\/blinky\/src\/main.c<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php \"><span class=\"hljs-comment\"># Ligne 16:<\/span>\n- define LED0_NODE DT_ALIAS(led0)\n+ define LED0_NODE DT_ALIAS(led1)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Et relancer la compilation avec west:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs \">$ west build -p auto -b longan_nano samples\/basic\/blinky\n&#91;3\/9] Linking C executable zephyr\/zephyr_prebuilt.elf\n &#91;9\/9] Linking C executable zephyr\/zephyr.elf\n Memory region         Used Size  Region Size  %age Used\n              ROM:       19308 B       128 KB     14.73%\n              RAM:        4740 B        32 KB     14.47%\n         IDT_LIST:          0 GB         2 KB      0.00%<\/code><\/span><\/pre>\n\n\n<p>Puis ret\u00e9l\u00e9charger pour voir la led verte clignoter.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Utilisation de la toolchain Platformio<\/h3>\n\n\n\n<p>La toolchain se trouve <a href=\"https:\/\/github.com\/riscv-mcu\/riscv-gnu-toolchain?utm_source=platformio.org&amp;utm_medium=docs\">ici<\/a>. <\/p>\n\n\n\n<p>Le sdk nuclei <a href=\"https:\/\/doc.nucleisys.com\/nuclei_sdk\/index.html\">se trouve ici<\/a> et peut \u00eatre t\u00e9l\u00e9charg\u00e9 <a href=\"https:\/\/nucleisys.com\/download.php\">l\u00e0<\/a>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript \"><span class=\"hljs-keyword\">export<\/span> ZEPHYR_TOOLCHAIN_VARIANT=cross-compile\n<span class=\"hljs-keyword\">export<\/span> CROSS_COMPILE=<span class=\"hljs-regexp\">\/home\/<\/span>fabien\/zephyrproject\/nuclei\/gcc\/bin\/riscv-nuclei-elf-<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zephyr est un syst\u00e8me d&rsquo;exploitation temps r\u00e9el pour microcontr\u00f4leur. Parler d&rsquo;OS peut parfois faire r\u00e9agir puisqu&rsquo;il n&rsquo;y a pas vraiment de noyau (kernel) et que tout est compil\u00e9 en un seul firmware que l&rsquo;on t\u00e9l\u00e9charge dans la m\u00e9moire du micro. &hellip; <a href=\"http:\/\/www.fabienm.eu\/wordpress\/2021\/05\/09\/zephyr-sur-longan-nano\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[220,219,218,242],"class_list":["post-1573","post","type-post","status-publish","format-standard","hentry","category-non-classe","tag-gd32vf","tag-longan_nano","tag-riscv","tag-zephyr"],"_links":{"self":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/1573","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/comments?post=1573"}],"version-history":[{"count":28,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/1573\/revisions"}],"predecessor-version":[{"id":1635,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/1573\/revisions\/1635"}],"wp:attachment":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/media?parent=1573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/categories?post=1573"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/tags?post=1573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}