﻿define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>/dev/head &#187; svn</title>
	<atom:link href="http://devhead.ru/cat/svn/feed" rel="self" type="application/rss+xml" />
	<link>http://devhead.ru</link>
	<description>Статьи и видео уроки</description>
	<lastBuildDate>Mon, 30 Jan 2017 11:12:34 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.37</generator>
	<item>
		<title>Компиляция/портирование своей программы под OpenWRT</title>
		<link>http://devhead.ru/read/kompilyaciyaportirovanie-svoej-programmy-pod-openwrt</link>
		<comments>http://devhead.ru/read/kompilyaciyaportirovanie-svoej-programmy-pod-openwrt#comments</comments>
		<pubDate>Fri, 23 Dec 2011 06:45:59 +0000</pubDate>
		<dc:creator><![CDATA[andreykyz]]></dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://devhead.ru/read/kompilyaciyaportirovanie-svoej-programmy-pod-openwrt/</guid>
		<description><![CDATA[Недавно мне понадобилось установить мою программу написанную на C(Си) на точку доступа под управлением OpenWRT. Уже была написана статья по сборке этой программы под Windows при помощи GCC из Cygwin. Для сборки же OpenWRT и всех поставляемых программ используется система сборки Buildroot и система пакетов ipkg. После долгих исследований OpenWrt Wiki и других сайтов найти [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Недавно мне понадобилось установить мою программу написанную на C(Си) на точку доступа под управлением OpenWRT. Уже была написана <a target="_blank" title="Компиляция программы из Linux в Windows при помощи Сygwin, GCC и Eclipse CDT " href="../kompilyaciya-programmy-iz-linux-v-windows-pri-pomoshhi-sygwin-gcc-i-eclipse-cdt/">статья</a> по сборке этой программы под Windows при помощи GCC из Cygwin. Для сборки же OpenWRT и всех поставляемых программ используется система сборки <a target="_blank" title="Buildroot: making Embedded Linux easy" href="http://buildroot.uclibc.org/">Buildroot</a> и система пакетов <a target="_blank" href="http://www.dd-wrt.com/wiki/index.php/Ipkg">ipkg</a>. После долгих исследований <a target="_blank" href="http://wiki.openwrt.org/">OpenWrt Wiki</a> и других сайтов найти актуальную документации не удалось. В итоге после сборки информации по крупицам я всетаки собрал пакет ipkg со своей программой. Дабы не пропасть приобретенным знаниям я решил написать данную статью.</p>
<p><span id="more-1467"></span></p>
<p><strong>Получение исходных кодов</strong></p>
<p>Я собираю OpenWrt из исходных кодов ветки trunk. Получить её можно либо при помощи git:</p>
<blockquote>
<p>git clone git://nbd.name/openwrt.git</p>
</blockquote>
<p>Либо при помощи svn:</p>
<blockquote>
<p>svn co svn://svn.openwrt.org/openwrt/trunk/ openwrt/</p>
</blockquote>
<p>Как получить другие ветки, в том числе с пакетами, написано <a target="_blank" href="https://dev.openwrt.org/wiki/GetSource" title="OpenWrt source repository downloads">т</a><a target="_blank" title="OpenWrt source repository downloads" href="https://dev.openwrt.org/wiki/GetSource">ут</a>.</p>
<p><strong>Подготовка к добаленю своего пакета</strong></p>
<p>Переходим в полученный каталог</p>
<blockquote>
<p>cd openwrt</p>
</blockquote>
<p>и получаем так называетмые <a target="_blank" title="OpenWrt Feeds" href="http://wiki.openwrt.org/doc/devel/feeds">feeds(дополнительные пакеты)</a>. Получаемые feeds можно отредактировать в файле feeds.conf.default</p>
<blockquote>
<p>./scripts/feeds update -a &amp;&amp; ./scripts/feeds install -a</p>
</blockquote>
<p>Потом выполняем комадну</p>
<blockquote>
<p>make preq</p>
</blockquote>
<p>И мы узнаем каких пакетов нехватает у нас в системе(в операционной системе)</p>
<p><strong>Добавление своего пакета</strong></p>
<p>Переходим в каталог package</p>
<blockquote>
<p>cd package/</p>
</blockquote>
<p>Создаем коталог под наш пакет(у меня он называется ecu)</p>
<blockquote>
<p>mkdir ecu</p>
</blockquote>
<p>Копируем исходники нашей программы. Я собираю простую программу которая собирается простым Makefile'ом</p>
<blockquote>
<p>mkdir ecu/ecu-src/</p>
<p>cp -r моя_программа/* ecu/ecu-src/</p>
</blockquote>
<p>Содержимое каталога ecu-src/</p>
<blockquote>
<p>$ ls -R ecu-src/<br />ecu-src/:<br />Makefile  src</p>
<p>ecu-src/src:<br />crc.c  crc.h  main.c</p>
</blockquote>
<p>Содержимое ecu-src/Makefile</p>
<blockquote>
<p>cat ecu-src/Makefile</p>
</blockquote>
<p>&nbsp;</p>
<pre class="brush: bash">ecu: main.o crc.o
        $(CC) $(LDFLAGS) main.o crc.o -o ecu
main.o: src/main.c src/crc.h
        $(CC) $(CFLAGS) -c src/main.c
crc.o: src/crc.c
        $(CC) $(CFLAGS) -c src/crc.c
clean:
        rm *.o ecu</pre>
<p>&nbsp;</p>
<p>Теперь на нужно интегрировать исходники с Makefile'ом в систему сбоки OpenWRT. Для этого нужно создать специальный Makefile в каталоге ecu/. Содержимое моего файла:</p>
<blockquote>
<p>include $(TOPDIR)/rules.mk</p>
<p>PKG_NAME:=ecu<br />PKG_RELEASE:=1<br />PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)</p>
<p>include $(INCLUDE_DIR)/package.mk</p>
<p>&nbsp;</p>
<p>define Package/ecu<br /> SECTION:=utils<br /> CATEGORY:=Utilities<br /> TITLE:=Embedded clock updater<br />endef</p>
<p>&nbsp;</p>
<p>define Package/ecu/description<br />Big comments....<br /> ...<br />endef</p>
<p>define Build/Prepare<br /> mkdir -p $(PKG_BUILD_DIR)<br /> $(CP) ./ecu-src/* $(PKG_BUILD_DIR)/<br />endef</p>
<p>define Package/ecu/install<br /> $(INSTALL_DIR) $(1)/bin<br /> $(INSTALL_BIN) $(PKG_BUILD_DIR)/ecu $(1)/bin/<br />endef</p>
<p>$(eval $(call BuildPackage,ecu))</p>
</blockquote>
<p><strong>Сборка OpenWRT с добавленным пакетом пакетом</strong></p>
<p>Переходим в корневой каталог openwrt/ и открываем menuconfig</p>
<blockquote>
<p>make menuconfig</p>
</blockquote>
<p>Далее выбираем все что нам нужно для дистрибутива( на эту тему есть <a title="Видеонаблюдение на основе роутера " href="../videonablyudenie-na-osnove-routera/">статья</a>)  и самое главное наш новый пакет. Я добавил свою программу в секцию utils то я ищу её в ней</p>
<p><img src="../../wp-content/uploads/2011/12/openwrt_utils.png" height="146" width="340" /></p>
<p>Выбираю, собирать отдельным пакетом:</p>
<p><img src="../../wp-content/uploads/2011/12/openwrt_ecu.png" /></p>
<p>Все, теперь выходим и запускаем сборку</p>
<blockquote>
<p>make</p>
</blockquote>
<p>или если у вас многоядерный процессор</p>
<blockquote>
<p>make -jn</p>
</blockquote>
<p>где n - колличество ядер + 1</p>
<p>А вот и наш пакетик</p>
<blockquote>
<p><strong>bin/ar71xx/packages/ecu_1_ar71xx.ipk</strong></p>
</blockquote>
<p><strong>Возможные проблемы</strong></p>
<p>Если в ходе сборки появляется это<strong><br /></strong></p>
<blockquote>
<p>...<br /> make[3] -C package/ecu compile<br />make -r world: build failed. Please re-run make with V=99 to see what's going on<br />make: *** [world] Ошибка 1</p>
</blockquote>
<p>то перезапускаем сборку с рекомендованным ключем(очень подробный вывод)</p>
<p>make V=99</p>
<p>и ждем, у меня, например была такая ошибка</p>
<blockquote>
<p>...<br />src/main.c: In function 'main':<br />src/main.c:113:2: error: 'for' loop initial declarations are only allowed in C99 mode<br />src/main.c:113:2: note: use option -std=c99 or -std=gnu99 to compile your code<br />src/main.c:118:4: error: 'for' loop initial declarations are only allowed in C99 mode<br />...</p>
</blockquote>
<p>не понравился синтаксис моего файла, я добавил рекомендуемый ключ компиляции, так:</p>
<blockquote>
<p>cat package/ecu/ecu-src/Makefile</p>
</blockquote>
<p>&nbsp;</p>
<pre class="brush: bash">ecu: main.o crc.o
	$(CC) $(LDFLAGS) main.o crc.o -o ecu
main.o: src/main.c src/crc.h
	$(CC) $(CFLAGS) -std=gnu99 -c src/main.c
crc.o: src/crc.c
	$(CC) $(CFLAGS) -std=gnu99 -c src/crc.c
clean:
	rm *.o ecu</pre>
]]></content:encoded>
			<wfw:commentRss>http://devhead.ru/read/kompilyaciyaportirovanie-svoej-programmy-pod-openwrt/feed</wfw:commentRss>
		<slash:comments>53</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->