<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://www.baszerr.eu/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>BaSzErr - blog:2012:07:31</title>
        <description></description>
        <link>https://www.baszerr.eu/</link>
        <lastBuildDate>Wed, 06 May 2026 09:35:04 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://www.baszerr.eu/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
            <title>BaSzErr</title>
            <link>https://www.baszerr.eu/</link>
        </image>
        <item>
            <title>1</title>
            <link>https://www.baszerr.eu/doku.php?id=blog:2012:07:31:1</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;custom_c_c_apps_for_openwrt&quot;&gt;2012.07.31 - custom C/C++ apps for OpenWRT&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.baszerr.eu/lib/exe/detail.php?id=blog%3A2012%3A07%3A31%3A1&amp;amp;media=blog:2012:07:31:tplink.jpg&quot; class=&quot;media&quot; title=&quot;blog:2012:07:31:tplink.jpg&quot;&gt;&lt;img src=&quot;https://www.baszerr.eu/lib/exe/fetch.php?w=200&amp;amp;tok=93ebf4&amp;amp;media=blog:2012:07:31:tplink.jpg&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;TP-Link WR703N - board view&quot; alt=&quot;TP-Link WR703N - board view&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;
some time ago i &lt;a href=&quot;https://www.baszerr.eu/doku.php?id=blog:2012:01:19:1&quot; class=&quot;wikilink1&quot; title=&quot;blog:2012:01:19:1&quot; data-wiki-id=&quot;blog:2012:01:19:1&quot;&gt;wrote about nice TP-Link&amp;#039;s WR703 router&lt;/a&gt;, that happened to be feature rich and low priced. currently i&amp;#039;m playing around with it, while creating a new project (details to be released soon). &lt;a href=&quot;http://www.openwrt.org&quot; class=&quot;urlextern&quot; title=&quot;http://www.openwrt.org&quot; rel=&quot;ugc nofollow&quot;&gt;OpenWRT&lt;/a&gt; does &lt;a href=&quot;http://wiki.openwrt.org/toh/tp-link/tl-wr703n&quot; class=&quot;urlextern&quot; title=&quot;http://wiki.openwrt.org/toh/tp-link/tl-wr703n&quot; rel=&quot;ugc nofollow&quot;&gt;support this device&lt;/a&gt;, so new firmware installation was fast. the only problem was that the router&amp;#039;s original firmware had only &lt;a href=&quot;https://en.wikipedia.org/wiki/Chinese&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/Chinese&quot;&gt;Chinese&lt;/a&gt; language support – you need to know where to click. fortunately page names are in english, so by highlighting the link you can find proper menu.
&lt;/p&gt;

&lt;p&gt;
after installation one may now want to create own software. this is a bit tricky. there is ready-to-go openwrt&amp;#039;s image, but there are “but(t)s”… there are also different solutions available, for &lt;a href=&quot;https://en.wikipedia.org/wiki/MIPS (architecture)&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/MIPS (architecture)&quot;&gt;MIPS&lt;/a&gt;. since it took my about a day before it all started to work i&amp;#039;ll present the working solution, with the example, so that you can start faster.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2012.07.31 - custom C\/C++ apps for OpenWRT&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;custom_c_c_apps_for_openwrt&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-1101&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;emdebian&quot;&gt;EmDebian&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/GNU Compilers Collection&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/GNU Compilers Collection&quot;&gt;GCC&lt;/a&gt; supports MIPS. this is good. first thing i&amp;#039;ve tried was &lt;a href=&quot;http://www.emdebian.org&quot; class=&quot;urlextern&quot; title=&quot;http://www.emdebian.org&quot; rel=&quot;ugc nofollow&quot;&gt;EmDebian&lt;/a&gt;. nice, cool, easy to start… but this is a solution for devices with bigger drives – minimal system image is about 80-90MB. since this device has 4MB flash, you can skip this toolchain this time…
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;EmDebian&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;emdebian&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1102-1454&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;openwrt_tools&quot;&gt;OpenWRT tools&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.baszerr.eu/lib/exe/detail.php?id=blog%3A2012%3A07%3A31%3A1&amp;amp;media=blog:2012:07:31:openwrt-logo.png&quot; class=&quot;media&quot; title=&quot;blog:2012:07:31:openwrt-logo.png&quot;&gt;&lt;img src=&quot;https://www.baszerr.eu/lib/exe/fetch.php?w=300&amp;amp;tok=1023bd&amp;amp;media=blog:2012:07:31:openwrt-logo.png&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;OpenWRT&quot; alt=&quot;OpenWRT&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;
so we&amp;#039;re back to OpenWRT&amp;#039;s solutions. there are available, already compiled packages for linux: &lt;a href=&quot;http://downloads.openwrt.org/backfire/10.03.1/ar71xx/OpenWrt-SDK-ar71xx-for-Linux-i686-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2&quot; class=&quot;urlextern&quot; title=&quot;http://downloads.openwrt.org/backfire/10.03.1/ar71xx/OpenWrt-SDK-ar71xx-for-Linux-i686-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2&quot; rel=&quot;ugc nofollow&quot;&gt;SDK&lt;/a&gt;, &lt;a href=&quot;http://downloads.openwrt.org/backfire/10.03.1/ar71xx/OpenWrt-ImageBuilder-ar71xx-for-Linux-i686.tar.bz2&quot; class=&quot;urlextern&quot; title=&quot;http://downloads.openwrt.org/backfire/10.03.1/ar71xx/OpenWrt-ImageBuilder-ar71xx-for-Linux-i686.tar.bz2&quot; rel=&quot;ugc nofollow&quot;&gt;ImageBuilder&lt;/a&gt;, &lt;a href=&quot;http://downloads.openwrt.org/backfire/10.03.1/ar71xx/OpenWrt-Toolchain-ar71xx-for-mips_r2-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2&quot; class=&quot;urlextern&quot; title=&quot;http://downloads.openwrt.org/backfire/10.03.1/ar71xx/OpenWrt-Toolchain-ar71xx-for-mips_r2-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2&quot; rel=&quot;ugc nofollow&quot;&gt;Toolchain&lt;/a&gt;. though they are heavy (1G total), they are neat… if you happen to have 32-bit &lt;a href=&quot;https://en.wikipedia.org/wiki/x86&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/x86&quot;&gt;x86&lt;/a&gt; machine (alt. VM). if you happen to have &lt;a href=&quot;https://en.wikipedia.org/wiki/amd64&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/amd64&quot;&gt;amd64&lt;/a&gt; (as most ppl nowadays do, including myself) you&amp;#039;re out of luck and need to compile stuff by our own.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;OpenWRT tools&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;openwrt_tools&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1455-2273&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;installation_and_building&quot;&gt;installation and building&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
in theory all of this is described on the net, but it&amp;#039;s kind of tricky, since most of the times documents are not up to date. some of them are plain wrong or nasty hacks that will work for owner&amp;#039;s machine, with one version of toolchain only, etc. what i wanted is to present you with the working solution. so lets start…
&lt;/p&gt;

&lt;p&gt;
first step is to download current version from OpenWRT&amp;#039;s &lt;a href=&quot;https://en.wikipedia.org/wiki/subversion&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/subversion&quot;&gt;SVN&lt;/a&gt; repository:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;svn co svn://svn.openwrt.org/openwrt/trunk openwrt-trunk
cd openwrt-trunk&lt;/pre&gt;

&lt;p&gt;
now you need to download/update packages and prepare them for the installation:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;./scripts/feeds update -a
./scripts/feeds install -a&lt;/pre&gt;

&lt;p&gt;
this will take a while and will download some data from the net – be patient. having this done it is a time for the configuration of what you want to build. if you have compiled linux&amp;#039;s kernel before, you&amp;#039;ll find this step very convenient:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;make menuconfig&lt;/pre&gt;

&lt;p&gt;
the most important thing here is to select your platform (“Target System” option) – TP-Link WR703 is “Atheros AR7xxx/AR9xxx”. since we&amp;#039;ll be building for &lt;a href=&quot;https://en.wikipedia.org/wiki/C (programming language&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/C (programming language&quot;&gt;C&lt;/a&gt; &lt;strong&gt;and&lt;/strong&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/C++&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/C++&quot;&gt;C++&lt;/a&gt; it is good to choose &lt;a href=&quot;http://cxx.uclibc.org/&quot; class=&quot;urlextern&quot; title=&quot;http://cxx.uclibc.org/&quot; rel=&quot;ugc nofollow&quot;&gt;uClibc++&lt;/a&gt; as a default standard library for C++ as well – “Global build settings” → “Preferred standard C++ library” → “uClibc++”. now you can build whatever is needed for our minimal installation:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;make -j `grep processor /proc/cpuinfo | wc -l`&lt;/pre&gt;

&lt;p&gt;
this step will take about 1h (yes – an hour). most of the stuff is compiled sequentially, so multicore arch will not help you much. you need to wait…
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;installation and building&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installation_and_building&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2274-3858&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;custom_package&quot;&gt;custom package&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
when the main part is done, it is the time for preparing own package.
&lt;/p&gt;

&lt;p&gt;
all packages are placed under &lt;em&gt;package&lt;/em&gt; directory. it is enough to copy proper directory structure there. “proper structure” is the most tricky part – i&amp;#039;ve spent most of the above mentioned time on it. to make your life simpler i&amp;#039;ve created a working &lt;a href=&quot;https://www.baszerr.eu/lib/exe/fetch.php?media=blog:2012:07:31:helloworld.tar.bz2&quot; class=&quot;media mediafile mf_bz2&quot; title=&quot;blog:2012:07:31:helloworld.tar.bz2 (894 B)&quot;&gt;helloworld example&lt;/a&gt; for you to test. unpack it into the &lt;em&gt;package&lt;/em&gt; directory (i.e. create new package, named &lt;em&gt;helloworld&lt;/em&gt;). the content of this directory follows:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; package/helloworld/Makefile – makefile, that openwrt&amp;#039;s toolchain recognizes.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; package/helloworld/src/Makefile – your own makefile; it is enough if it builds as a default target, and has &lt;em&gt;clean&lt;/em&gt; target.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; package/helloworld/src/helloworldpp.cpp – C++ hello-world program.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; package/helloworld/src/helloworld.c – C hello-world program.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
C and C++ sources are regular files. Makefile, inside the &lt;em&gt;src&lt;/em&gt; directory, can be of your choice (i.e. any), as long as it is able to build your code. the nice thing about OpenWRT&amp;#039;s framework is you can do:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;cd package/&amp;lt;mypackage&amp;gt;/src
make&lt;/pre&gt;

&lt;p&gt;
and this will compile code for your local machine (as usually Makefiles do), while building with OpenWRT&amp;#039;s toolchain will cross-compile it.
&lt;/p&gt;

&lt;p&gt;
the real magic is hidden inside the Makefile, located in the same directory as the &lt;em&gt;src&lt;/em&gt; directory. here is an example file, taken from the &lt;em&gt;helloword&lt;/em&gt; example package:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;include $(TOPDIR)/rules.mk

PKG_NAME:=helloworld
PKG_RELEASE:=1

include $(INCLUDE_DIR)/uclibc++.mk
include $(INCLUDE_DIR)/package.mk

define Package/$(PKG_NAME)
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=helloworld printing program in C and C++
  DEPENDS:=+uclibcxx
endef

define Build/Prepare
      mkdir -p $(PKG_BUILD_DIR)
      $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Configure
endef

define Build/Compile
      $(MAKE) -C $(PKG_BUILD_DIR) $(TARGET_CONFIGURE_OPTS)
endef

define Package/$(PKG_NAME)/install
      $(INSTALL_DIR) $(1)/bin
      $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld   $(1)/bin/
      $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworldpp $(1)/bin/
endef

$(eval $(call BuildPackage,helloworld))&lt;/pre&gt;

&lt;p&gt;
first line includes required elements from the OpenWRT&amp;#039;s build. PKG_* are your local settings (here: name and version, but there are more available).
&lt;/p&gt;

&lt;p&gt;
next two includes are very important. first includes &lt;em&gt;uclibc++.mk&lt;/em&gt;, that switches to uClibc++ as the default, standard library, for your C++ programs (note that uClibc++ is smaller than regular libstdc++). next include (&lt;em&gt;package.mk&lt;/em&gt;) is required to build packages. note that the order of these includes DOES matter.
&lt;/p&gt;

&lt;p&gt;
next step is &lt;em&gt;define Package/$(PKG_NAME)&lt;/em&gt; section. you can put your package into the menu (remember &lt;em&gt;make menuconfig&lt;/em&gt;?) and, more importantly, say what are your dependencies (required step – otherwise you&amp;#039;ll get an errors from the build). here:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;DEPENDS:=+uclibcxx&lt;/pre&gt;

&lt;p&gt;
say&amp;#039;s we depend of uClibc++ (required by C++ version of &lt;em&gt;helloworld&lt;/em&gt; program – &lt;em&gt;helloworldpp&lt;/em&gt;).
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;define Build/Prepare&lt;/em&gt; section defines how to prepare your package for building. copying sources to the destination (i.e. build) dir is fine for us.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;define Build/Configure&lt;/em&gt; can be used to run &lt;em&gt;./configure&lt;/em&gt; script, if required.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;define Build/Compile&lt;/em&gt; is an important one – it tells build how to start build system of your package. it is important how this is done – &lt;em&gt;$(TARGET_CONFIGURE_OPTS)&lt;/em&gt; is mandatory. if your makefile builds by default, presented section&amp;#039;s content is just fine.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;define Package/$(PKG_NAME)/install&lt;/em&gt; tells how to install the package, that has been build. here we simply copy (using &lt;em&gt;install&lt;/em&gt; command) both compiled binaries to the output directory.
&lt;/p&gt;

&lt;p&gt;
last line of the makefile (&lt;em&gt;$(eval $(call BuildPackage,helloworld))&lt;/em&gt;) does all the magic, via specially prepared macro. just keep it the way it is. :)
&lt;/p&gt;

&lt;p&gt;
also keep in mind that &lt;em&gt;make&lt;/em&gt; does differ between tabulators and spaces! content of the following sections must be tab-indented:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; define Build/Prepare&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; define Build/Configure&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; define Build/Compile&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; define Package/$(PKG_NAME)/install&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;custom package&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;custom_package&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3859-8061&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;compilation&quot;&gt;compilation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
after having your package added you must enable it in the menu. the simplest way to do this is:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;make oldconfig&lt;/pre&gt;

&lt;p&gt;
this will update your previous configuration and prompt you what to do with new element – that is: &lt;em&gt;helloworld&lt;/em&gt;. enable it and your ready. you can now build it.
&lt;/p&gt;

&lt;p&gt;
in order to build, enter main directory (i.e. openwrt-trunk) and run:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;make package/helloworld/compile&lt;/pre&gt;

&lt;p&gt;
to clean just run:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;make package/helloworld/clean&lt;/pre&gt;

&lt;p&gt;
by default you&amp;#039;ll not see any details, printed by your makefile. in case something goes wrong, just add &lt;em&gt;V=99&lt;/em&gt; to the command line:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;make package/helloworld/compile V=99&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;compilation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;compilation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;8062-8692&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;running&quot;&gt;running&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
in order to run binary on your OpenWRT machine you need to copy them there:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;scp helloworld helloworldpp root@router:/tmp/&lt;/pre&gt;

&lt;p&gt;
then ssh to the machine and install uClibc++ (if it is not there yet):
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;opkg update
opkg install uclibcxx&lt;/pre&gt;

&lt;p&gt;
now you can run your code:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ssh root@router
cd /tmp
./helloworld
./helloworldpp&lt;/pre&gt;

&lt;p&gt;
that&amp;#039;s it – have fun! :)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;running&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;running&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;8693-9060&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;external_links&quot;&gt;external links&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
out of dozens of pages i&amp;#039;ve read, i&amp;#039;ve choose some that are the most interesting, for building with OpenWRT&amp;#039;s build system:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://hype-free.blogspot.com/2009/04/compiling-software-for-openwrt-and.html&quot; class=&quot;urlextern&quot; title=&quot;http://hype-free.blogspot.com/2009/04/compiling-software-for-openwrt-and.html&quot; rel=&quot;ugc nofollow&quot;&gt;http://hype-free.blogspot.com/2009/04/compiling-software-for-openwrt-and.html&lt;/a&gt; – near-to-ready example package.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.openwrt.org/doc/howto/obtain.firmware.sdk&quot; class=&quot;urlextern&quot; title=&quot;http://wiki.openwrt.org/doc/howto/obtain.firmware.sdk&quot; rel=&quot;ugc nofollow&quot;&gt;http://wiki.openwrt.org/doc/howto/obtain.firmware.sdk&lt;/a&gt; – info on SDK usage, for those who have x86 machines. ;)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.openwrt.org/doc/devel/packages&quot; class=&quot;urlextern&quot; title=&quot;http://wiki.openwrt.org/doc/devel/packages&quot; rel=&quot;ugc nofollow&quot;&gt;http://wiki.openwrt.org/doc/devel/packages&lt;/a&gt; – official how to on creating packages; many options described.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://wiki.openwrt.org/doc/howto/buildroot.exigence&quot; class=&quot;urlextern&quot; title=&quot;http://wiki.openwrt.org/doc/howto/buildroot.exigence&quot; rel=&quot;ugc nofollow&quot;&gt;http://wiki.openwrt.org/doc/howto/buildroot.exigence&lt;/a&gt; – information on how to build buildroot.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;external links&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;external_links&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;9061-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:09:13 +0000</pubDate>
        </item>
    </channel>
</rss>
