<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Embedded Linux по-русски</title>
	
	<link>http://openembedded.ru</link>
	<description />
	<lastBuildDate>Mon, 06 Sep 2010 11:53:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RussianEmbeddedLinux" /><feedburner:info uri="russianembeddedlinux" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>BitBake руководство пользователя</title>
		<link>http://feedproxy.google.com/~r/RussianEmbeddedLinux/~3/16w5EafFuNw/</link>
		<comments>http://openembedded.ru/2010/09/06/bitbake-rukovodstvo-polzovotelya/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 11:53:27 +0000</pubDate>
		<dc:creator>norguhtar</dc:creator>
				<category><![CDATA[Теория]]></category>
		<category><![CDATA[bitbake]]></category>
		<category><![CDATA[openembedded]]></category>
		<category><![CDATA[us]]></category>

		<guid isPermaLink="false">http://openembedded.ru/?p=373</guid>
		<description><![CDATA[Закончил перевод Bitbake User Manual. Ознакомиться с переводом можно тут. Docbook файл для генерации документации берется тут. Критика и пожелания привествуются.]]></description>
			<content:encoded><![CDATA[<p>Закончил перевод <a href="http://docs.openembedded.org/bitbake/html/">Bitbake User Manual</a>. Ознакомиться с переводом можно <a href="http://bitbake.openembedded.ru/">тут</a>. Docbook файл для генерации документации берется <a href="http://bitbake.openembedded.ru/usermanual.xml">тут</a>. Критика и пожелания привествуются.</p>
]]></content:encoded>
			<wfw:commentRss>http://openembedded.ru/2010/09/06/bitbake-rukovodstvo-polzovotelya/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://openembedded.ru/2010/09/06/bitbake-rukovodstvo-polzovotelya/</feedburner:origLink></item>
		<item>
		<title>Кросскомпиляция — как это работает.</title>
		<link>http://feedproxy.google.com/~r/RussianEmbeddedLinux/~3/6mMkTPL-h0g/</link>
		<comments>http://openembedded.ru/2010/05/25/krosskompilyaciya-kak-eto-rabotaet/#comments</comments>
		<pubDate>Tue, 25 May 2010 04:07:26 +0000</pubDate>
		<dc:creator>norguhtar</dc:creator>
				<category><![CDATA[Теория]]></category>
		<category><![CDATA[openembedded]]></category>
		<category><![CDATA[встроеннные системы]]></category>
		<category><![CDATA[кросскомпиляция]]></category>

		<guid isPermaLink="false">http://openembedded.ru/?p=356</guid>
		<description><![CDATA[Кроме bitbake одной из ключевых частей OpenEmbedded является инструментарий кросс-сборки или, как его чаще называют, cross-toolchain. Именно он осуществляет генерацию исполняемых файлов из исходного кода для целевой платформы. Хотя на первый взгляд кажется, что эта задача отличается от обычного процесса сборки, но на самом деле это не так. Все действия , которые осуществляются компилятором в [...]]]></description>
			<content:encoded><![CDATA[<p>Кроме bitbake одной из ключевых частей OpenEmbedded является инструментарий кросс-сборки или, как его чаще называют, cross-toolchain. Именно он осуществляет генерацию исполняемых файлов из исходного кода для целевой платформы. Хотя на первый взгляд кажется, что эта задача отличается от обычного процесса сборки, но на самом деле это не так. Все действия , которые осуществляются компилятором в процессе обычной сборки, так же осуществляются при кросс-сборке. Единственное существующее отличие – это целевая платформа. <span id="more-356"></span></p>
<p>Теперь давайте рассмотрим действия происходящие при сборке.  Хотя обычно они скрыты от вас, но выполняются они всегда:</p>
<ul>
<li>Трансляция исходного кода программы в ассемблерный код</li>
<li>Трансляция ассемблерного кода в команды процессора</li>
<li>Компоновка полученного кода с библиотеками</li>
</ul>
<p>Я выделил только основные действия. Помимо этого, к примеру, сначала производится обработка кода препроцессором. Но компилятор, к примеру gcc, осуществляет трансляцию исходного кода в ассемблерный код. Хотя это и кажется простым, но создание хороших компиляторов это все еще Rocket Science в программировании. Далее полученный ассемблерный код при помощи утилит из коллекции binutils транслируется в команды процессора и линкуется с библиотеками. В результате чего получается исполняемый файл. Ни одно из этих действий не требует обязательного запуска на целевой платформе, напротив – нам требуется только описание команд процессора. Что и позволяет осуществлять генерацию исполняемых файлов для платформы отличной от платформы запуска инструментария сборки.</p>
<p>Таким образом, чтобы осуществить генерацию кода для платформы, отличной от платформы запуска, необходимо собрать компилятор, ассемблер и компоновщик таким образом, чтобы при своей работе они создавали файлы для целевой платформы.  И все вместе они будут являться инструментарием кросс-сборки (cross-toolchain). Конечно, кроме компилятора, ассемблера и компоновщика в этот инструментарий обычно входит стандартная библиотека C (glibc, uclibc и тому подобные), но на самом деле она требуется для компоновщика и ваших программ, но никак не для самого инструментария кросс-сборки.</p>
<p>Но откуда же берется сложность при кросс-сборке, если все так просто? На самом деле проблема в том, что кроме компилятора, ассемблера и компоновщика в процессе участвуют autotools и прочие утилиты настройки скриптов сборки, которые далеко не всегда приспособлены к осуществлению кросс-сборки. Это в том числе касается и самого инструментария кросс-сборки. OpenEmbedded же позволяет избавиться от этих проблем. Все включаемые в него пакеты проверяются на корректность процесса кросс-сборки и адаптируются по необходимости, в том числе и инструментарий кросс-сборки.</p>
]]></content:encoded>
			<wfw:commentRss>http://openembedded.ru/2010/05/25/krosskompilyaciya-kak-eto-rabotaet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://openembedded.ru/2010/05/25/krosskompilyaciya-kak-eto-rabotaet/</feedburner:origLink></item>
		<item>
		<title>Загрузка базового образа с Compact Flash</title>
		<link>http://feedproxy.google.com/~r/RussianEmbeddedLinux/~3/6z6SIM7malM/</link>
		<comments>http://openembedded.ru/2010/03/18/zagruzka-bazovogo-obraza-s-compact-flash/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 07:11:43 +0000</pubDate>
		<dc:creator>norguhtar</dc:creator>
				<category><![CDATA[Практика]]></category>
		<category><![CDATA[openembedded]]></category>
		<category><![CDATA[встроеннные системы]]></category>

		<guid isPermaLink="false">http://openembedded.ru/?p=323</guid>
		<description><![CDATA[Надеюсь у вас получилось загрузить базовый образ в эмуляторе. Самое время попробовать запуститься на реальном железе. Для этого я воспользуюсь Compact Flash: И переходником Compact Flash в IDE: Если первое воткнуть во второе, затем воткнуть конструкцию в IDE, то в для компьютера это будет выглядеть как небольшой жесткий диск. Чтобы система могла грузиться с него [...]]]></description>
			<content:encoded><![CDATA[<p>Надеюсь у вас получилось загрузить базовый образ в эмуляторе. Самое время попробовать запуститься на реальном железе. Для этого я воспользуюсь Compact Flash:<br />
<a href="http://openembedded.ru/wp-content/uploads/2009/06/sku_11297_1.jpg"><img class="aligncenter size-medium wp-image-325" title="Compact Flash" src="http://openembedded.ru/wp-content/uploads/2009/06/sku_11297_1-300x300.jpg" alt="Compact Flash" width="300" height="300" /></a><br />
<span id="more-323"></span><br />
И переходником Compact Flash в IDE:<br />
<a href="http://openembedded.ru/wp-content/uploads/2009/06/sku_2720_1.jpg"><img class="aligncenter size-medium wp-image-324" title="CF to IDE" src="http://openembedded.ru/wp-content/uploads/2009/06/sku_2720_1-300x300.jpg" alt="CF to IDE" width="300" height="300" /></a></p>
<p>Если первое воткнуть во второе, затем воткнуть конструкцию в IDE, то в для компьютера это будет выглядеть как небольшой жесткий диск. Чтобы система могла грузиться с него необходимо записать на CF загрузчик. Для этого подключим CF к компьютеру при помощи cardreader и проверисм появилась ли она:</p>

<div class="wp_codebox"><table><tr id="p32316"><td class="code" id="p323code16"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">$dmesg</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">tail</span>
sd <span style="color: #000000;">12</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">1</span>: <span style="color: #7a0874; font-weight: bold;">&#91;</span>sdf<span style="color: #7a0874; font-weight: bold;">&#93;</span> Write Protect is off
sd <span style="color: #000000;">12</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">1</span>: <span style="color: #7a0874; font-weight: bold;">&#91;</span>sdf<span style="color: #7a0874; font-weight: bold;">&#93;</span> Mode Sense: 03 00 00 00
sd <span style="color: #000000;">12</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">1</span>: <span style="color: #7a0874; font-weight: bold;">&#91;</span>sdf<span style="color: #7a0874; font-weight: bold;">&#93;</span> Assuming drive cache: <span style="color: #c20cb9; font-weight: bold;">write</span> through
 sdf: sdf1
sd <span style="color: #000000;">12</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">1</span>: <span style="color: #7a0874; font-weight: bold;">&#91;</span>sdf<span style="color: #7a0874; font-weight: bold;">&#93;</span> Attached SCSI removable disk
sd <span style="color: #000000;">12</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">1</span>: Attached scsi generic sg6 <span style="color: #7a0874; font-weight: bold;">type</span> <span style="color: #000000;">0</span></pre></td></tr></table></div>

<p>У меня CF определился как sdf и на нем имеется один первичный раздел sdf1. Далее необходимо проверить какой тип файловой системы имеет раздел. Для этого запустите fdisk и введите <strong>p</strong> в качестве команды:</p>

<div class="wp_codebox"><table><tr id="p32317"><td class="code" id="p323code17"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> fidsk <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf
Command <span style="color: #7a0874; font-weight: bold;">&#40;</span>m <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">help</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>:p
&nbsp;
Disk <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf: <span style="color: #000000;">519</span> MB, <span style="color: #000000;">519192576</span> bytes
<span style="color: #000000;">16</span> heads, <span style="color: #000000;">63</span> sectors<span style="color: #000000; font-weight: bold;">/</span>track, <span style="color: #000000;">1006</span> cylinders
Units = cylinders of <span style="color: #000000;">1008</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000;">512</span> = <span style="color: #000000;">516096</span> bytes
Disk identifier: 0x001c2022
&nbsp;
   Device Boot      Start         End      Blocks   Id  System
<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf1               <span style="color: #000000;">1</span>        <span style="color: #000000;">1006</span>      <span style="color: #000000;">506992</span>+   c  W95 FAT32 <span style="color: #7a0874; font-weight: bold;">&#40;</span>LBA<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>У моего CF это FAT32. Но linux хотя и умеет использовать эту файловую систему для корневой системы, но делать это не рекомендуется. Для изменения типа раздела введите следующие команды:</p>

<div class="wp_codebox"><table><tr id="p32318"><td class="code" id="p323code18"><pre class="bash" style="font-family:monospace;">Command <span style="color: #7a0874; font-weight: bold;">&#40;</span>m <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">help</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>: t
Selected partition <span style="color: #000000;">1</span>
Hex code <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">type</span> L to list codes<span style="color: #7a0874; font-weight: bold;">&#41;</span>: <span style="color: #000000;">83</span>
Changed system <span style="color: #7a0874; font-weight: bold;">type</span> of partition <span style="color: #000000;">1</span> to <span style="color: #000000;">83</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>Linux<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>где:  <strong></strong></p>
<ul>
<li><strong>1</strong> &#8212; выбор номера раздела</li>
<li><strong>83</strong> &#8212; выбор типа раздела</li>
</ul>
<p>Теперь записываем изменения:</p>

<div class="wp_codebox"><table><tr id="p32319"><td class="code" id="p323code19"><pre class="bash" style="font-family:monospace;">Command <span style="color: #7a0874; font-weight: bold;">&#40;</span>m <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">help</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>: <span style="color: #c20cb9; font-weight: bold;">w</span>
The partition table has been altered<span style="color: #000000; font-weight: bold;">!</span>
&nbsp;
Calling ioctl<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> to re-read partition table.
&nbsp;
WARNING: If you have created or modified any DOS <span style="color: #000000;">6</span>.x
partitions, please see the fdisk manual page <span style="color: #000000; font-weight: bold;">for</span> additional
information.
Syncing disks.</pre></td></tr></table></div>

<p>Проверяем:</p>

<div class="wp_codebox"><table><tr id="p32320"><td class="code" id="p323code20"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">$sudo</span> fdisk <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf
&nbsp;
Command <span style="color: #7a0874; font-weight: bold;">&#40;</span>m <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">help</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>: p
&nbsp;
Disk <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf: <span style="color: #000000;">519</span> MB, <span style="color: #000000;">519192576</span> bytes
<span style="color: #000000;">16</span> heads, <span style="color: #000000;">63</span> sectors<span style="color: #000000; font-weight: bold;">/</span>track, <span style="color: #000000;">1006</span> cylinders
Units = cylinders of <span style="color: #000000;">1008</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000;">512</span> = <span style="color: #000000;">516096</span> bytes
Disk identifier: 0x001c2022
&nbsp;
   Device Boot      Start         End      Blocks   Id  System
<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf1               <span style="color: #000000;">1</span>        <span style="color: #000000;">1006</span>      <span style="color: #000000;">506992</span>+  <span style="color: #000000;">83</span>  Linux
&nbsp;
Command <span style="color: #7a0874; font-weight: bold;">&#40;</span>m <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">help</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>: q</pre></td></tr></table></div>

<p>Как видите теперь основной раздел имеет тип Linux.<br />
Форматируем его под ext2:</p>

<div class="wp_codebox"><table><tr id="p32321"><td class="code" id="p323code21"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> mkfs.ext2 <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf1
mke2fs 1.41.3 <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">12</span>-Oct-<span style="color: #000000;">2008</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
Filesystem <span style="color: #007800;">label</span>=
OS <span style="color: #7a0874; font-weight: bold;">type</span>: Linux
Block <span style="color: #007800;">size</span>=<span style="color: #000000;">1024</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">log</span>=<span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
Fragment <span style="color: #007800;">size</span>=<span style="color: #000000;">1024</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">log</span>=<span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000;">126976</span> inodes, <span style="color: #000000;">506992</span> blocks
<span style="color: #000000;">25349</span> blocks <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">5.00</span><span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> reserved <span style="color: #000000; font-weight: bold;">for</span> the super user
First data <span style="color: #007800;">block</span>=<span style="color: #000000;">1</span>
Maximum filesystem <span style="color: #007800;">blocks</span>=<span style="color: #000000;">67633152</span>
<span style="color: #000000;">62</span> block <span style="color: #c20cb9; font-weight: bold;">groups</span>
<span style="color: #000000;">8192</span> blocks per group, <span style="color: #000000;">8192</span> fragments per group
<span style="color: #000000;">2048</span> inodes per group
Superblock backups stored on blocks:
        <span style="color: #000000;">8193</span>, <span style="color: #000000;">24577</span>, <span style="color: #000000;">40961</span>, <span style="color: #000000;">57345</span>, <span style="color: #000000;">73729</span>, <span style="color: #000000;">204801</span>, <span style="color: #000000;">221185</span>, <span style="color: #000000;">401409</span>
&nbsp;
Writing inode tables: <span style="color: #000000; font-weight: bold;">done</span>
Writing superblocks and filesystem accounting information: <span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
This filesystem will be automatically checked every <span style="color: #000000;">33</span> mounts or
<span style="color: #000000;">180</span> days, whichever comes first.  Use tune2fs <span style="color: #660033;">-c</span> or <span style="color: #660033;">-i</span> to override.</pre></td></tr></table></div>

<p>Монтируем:</p>

<div class="wp_codebox"><table><tr id="p32322"><td class="code" id="p323code22"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>cf
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf1 <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>cf</pre></td></tr></table></div>

<p>В результате CF будет смонтирован в каталог <strong>/mnt/cf</strong>. </p>
<p>Теперь необходимо изменить конфигурацию ядра. Ранее в <a href="http://openembedded.ru/2009/01/07/zapusk/">Здравствуй мир! Запуск.</a> я уже описывал как заменить стандартный файл конфигурации. Делаем все тоже самое, но конфигурационный файл берем <a href="http://openembedded.ru/wp-content/uploads/2010/03/defconfig">отсюда</a>. В этом файле включены все стандартные IDE контроллеры. Далее необходимо пересобрать ядро и образ файлвой системы. Для этого запускаем следующие команды:</p>

<div class="wp_codebox"><table><tr id="p32323"><td class="code" id="p323code23"><pre class="bash" style="font-family:monospace;">bitbake <span style="color: #660033;">-c</span> clean linux
bitbake base-image</pre></td></tr></table></div>

<p>В результате у вас будет собрано новое ядро и новый образ с включающий его. Далее распаковываем образ точно так  же как описано в<br />
<a href="http://openembedded.ru/2009/05/25/base-image-as-start/">Базовый образ как точка старта</a>, только вместо каталога <strong>/var/lib/nfsroot</strong> используем каталог <strong>/mnt/cf</strong>. После этого изменяем <strong>/mnt/cf/etc/fstab</strong>, так как в этот раз загрузка будет производиться не из сети. И вместо</p>

<div class="wp_codebox"><table><tr id="p32324"><td class="code" id="p323code24"><pre class="bash" style="font-family:monospace;">rootfs <span style="color: #000000; font-weight: bold;">/</span> auto defaults  <span style="color: #000000;">1</span>  <span style="color: #000000;">1</span></pre></td></tr></table></div>

<p>В <strong>fstab</strong> должно быть:</p>

<div class="wp_codebox"><table><tr id="p32325"><td class="code" id="p323code25"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>hda1 <span style="color: #000000; font-weight: bold;">/</span> ext2 defaults <span style="color: #000000;">1</span> <span style="color: #000000;">1</span></pre></td></tr></table></div>

<p>Учтите что hda это первый IDE диск. Если ваш подопытный компьютер имеет еще и SATA контроллер, рекомендуется выключить его на время экспериментов. </p>
<p>Далее удалите файл <b>/mnt/cf/etc/rcS.d/S03udev</b> и добавьте <b>grub</b> точно так же как добавлялся <b>nfs-utils</b>. В результате у вас должна получиться готовая к работе система. Осталось прописать загрузчик. Перед этим отмонтируйте <b>/mnt/cf</b>:</p>

<div class="wp_codebox"><table><tr id="p32326"><td class="code" id="p323code26"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>cf</pre></td></tr></table></div>

<p>Затем запустите grub</p>

<div class="wp_codebox"><table><tr id="p32327"><td class="code" id="p323code27"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> grub</pre></td></tr></table></div>

<p>Появится интерактивное приглашение. Теперь настраиваем grub и прописываем его в mbr при помощи следующих команд:</p>

<div class="wp_codebox"><table><tr id="p32328"><td class="code" id="p323code28"><pre class="bash" style="font-family:monospace;">device <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf
root <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0,<span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
setup <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>Первая команда указывает grub рассматривать /dev/sdf устройство как hd0, следующая указывает, что в качестве корня используется первый раздел hd0 (sdf1), а setup устанавливает загрузчик в mbr. Если все прошло успешно введите <b>quit</b> и подождите пока загрузчик закончит свою работу.<br />
Далее можно вынуть CF подключить его к CF-IDE и пробовать загружаться на реальном железе, но перед этим вы можете попробовать загрузиться при помощи kvm:</p>

<div class="wp_codebox"><table><tr id="p32329"><td class="code" id="p323code29"><pre class="bash" style="font-family:monospace;">kvm <span style="color: #660033;">-hda</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf</pre></td></tr></table></div>

<p>или qemu:</p>

<div class="wp_codebox"><table><tr id="p32330"><td class="code" id="p323code30"><pre class="bash" style="font-family:monospace;">qemu <span style="color: #660033;">-hda</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdf</pre></td></tr></table></div>

<p>В результате вы должны будете увидеть приглашение системы:<br />
<img src="http://openembedded.ru/wp-content/uploads/2010/03/kvm1-300x175.png" alt="" title="OpenEmbedded - kvm" width="300" height="175" class="aligncenter size-medium wp-image-340" /></p>
]]></content:encoded>
			<wfw:commentRss>http://openembedded.ru/2010/03/18/zagruzka-bazovogo-obraza-s-compact-flash/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://openembedded.ru/2010/03/18/zagruzka-bazovogo-obraza-s-compact-flash/</feedburner:origLink></item>
		<item>
		<title>Группа обсуждения openembedded-ru</title>
		<link>http://feedproxy.google.com/~r/RussianEmbeddedLinux/~3/nO-VPAMXzj8/</link>
		<comments>http://openembedded.ru/2009/06/09/gruppa-obsuzhdeniya-openembedded-ru/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 14:14:38 +0000</pubDate>
		<dc:creator>norguhtar</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[openembedded]]></category>
		<category><![CDATA[встроеннные системы]]></category>

		<guid isPermaLink="false">http://openembedded.ru/?p=318</guid>
		<description><![CDATA[В связи с большим количеством вопросов не связанных с темой статей, я создал группу обсуждений openembedded-ru. Ссылку для перехода можно увидеть справа. Если у вас есть вопросы ко мне по openembedded и вы не знаете куда написать, пишите туда.]]></description>
			<content:encoded><![CDATA[<p>В связи с большим количеством вопросов не связанных с темой статей, я создал группу обсуждений <b>openembedded-ru</b>.  Ссылку для перехода можно увидеть справа. Если у вас есть вопросы ко мне по openembedded и вы не знаете куда написать, пишите туда.</p>
]]></content:encoded>
			<wfw:commentRss>http://openembedded.ru/2009/06/09/gruppa-obsuzhdeniya-openembedded-ru/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://openembedded.ru/2009/06/09/gruppa-obsuzhdeniya-openembedded-ru/</feedburner:origLink></item>
		<item>
		<title>Базовый образ как точка старта.</title>
		<link>http://feedproxy.google.com/~r/RussianEmbeddedLinux/~3/g6CyeMvRBhY/</link>
		<comments>http://openembedded.ru/2009/05/25/base-image-as-start/#comments</comments>
		<pubDate>Mon, 25 May 2009 05:21:13 +0000</pubDate>
		<dc:creator>norguhtar</dc:creator>
				<category><![CDATA[Практика]]></category>
		<category><![CDATA[booting]]></category>
		<category><![CDATA[diskless]]></category>
		<category><![CDATA[openembedded]]></category>
		<category><![CDATA[opkg]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://openembedded.ru/?p=286</guid>
		<description><![CDATA[Надеюсь, вам удалось собрать и запустить hello-world. В этот раз я опишу сборку и последущую загрузку минимального базового образа. Но прежде чем перейти к сборке, давайте переключим репозиторий с ветки (brunch) разработки org.openembedded.dev на текущую стабильную ветку origin/stable/2009. Изменения в эту ветку вносятся только после обкатки их в org.openembedded.dev, поэтому ее использование дает более стабильные [...]]]></description>
			<content:encoded><![CDATA[<p>Надеюсь, вам удалось собрать и запустить <strong>hello-world</strong>. В этот раз я опишу сборку и последущую загрузку минимального базового образа.<br />
<span id="more-286"></span><br />
Но прежде чем перейти к сборке, давайте переключим репозиторий с ветки (brunch) разработки <em>org.openembedded.dev</em> на текущую стабильную ветку <em>origin/stable/2009</em>. Изменения в эту ветку вносятся только после обкатки их в <em>org.openembedded.dev</em>, поэтому ее использование дает более стабильные результаты, нежели использование ветки <em>org.openembedded.dev</em>. Переключение веток осуществляется следующей командой:</p>

<div class="wp_codebox"><table><tr id="p28644"><td class="code" id="p286code44"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">git</span> checkout <span style="color: #660033;">-b</span> stable<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2009</span> origin<span style="color: #000000; font-weight: bold;">/</span>stable<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2009</span></pre></td></tr></table></div>

<p>После завершения команды каталог openembedded будет содержать стабильную ветку <em>stable/2009</em>.</p>
<p>Далее удаляем подкаталог <strong>tmp</strong> в каталоге <strong>~/stuff/build</strong>:</p>

<div class="wp_codebox"><table><tr id="p28645"><td class="code" id="p286code45"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-r</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build<span style="color: #000000; font-weight: bold;">/</span>tmp</pre></td></tr></table></div>

<p>Настраиваем переменные PATH и BBPATH так же как в <a href="http://openembedded.ru/2008/12/25/zdravstvuj-mir/">Здраствуй, мир! Сборка.</a>:</p>

<div class="wp_codebox"><table><tr id="p28646"><td class="code" id="p286code46"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH</span>=<span style="color: #800000;">${PATH}</span>:<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>bitbake<span style="color: #000000; font-weight: bold;">/</span>bin
$ <span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">BBPATH</span>=<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build:<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>openembedded</pre></td></tr></table></div>

<p>Переходим в каталог <strong>~/stuff/build</strong>, запускаем сборку:</p>

<div class="wp_codebox"><table><tr id="p28647"><td class="code" id="p286code47"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build
$ bitbake base-image</pre></td></tr></table></div>

<p><strong>base-image</strong> является метапакетом, запускающим сборку необходимых пакетов и компоновку их в образ корневой файловой системы. Учтите, что выполнение будет идти довольно долго.</p>
<p>После завершения сборки в каталоге <strong>~/stuff/build/tmp/deploy/glibc/images/x86</strong> появятся скомпилированное ядро, архив с модулями к нему и образ корневой файловой системы в формате jffs2 и tar. У меня этот каталог содержит:</p>

<div class="wp_codebox"><table><tr id="p28648"><td class="code" id="p286code48"><pre class="bash" style="font-family:monospace;">Angstrom-base-image-glibc-ipk-<span style="color: #000000;">2009</span>.X-test-<span style="color: #000000;">20090522</span>-x86.rootfs.jffs2
Angstrom-base-image-glibc-ipk-<span style="color: #000000;">2009</span>.X-test-<span style="color: #000000;">20090522</span>-x86.rootfs.tar
Angstrom-base-image-glibc-ipk-<span style="color: #000000;">2009</span>.X-test-<span style="color: #000000;">20090522</span>-x86-testlab
base-image-x86.jffs2
base-image-x86.tar
bzImage-2.6.25.20-r2-x86.bin
bzImage-x86.bin
modules-2.6.25.20-r2-x86.tgz</pre></td></tr></table></div>

<p>Для запуска системы потребуется два файла. Это образ корневой файловой системы в формате архива tar (<strong>Angstrom-base-image-glibc-ipk-2009.X-test-20090522-x86.rootfs.tar</strong>) и скомпилированное ядро (<strong>bzImage-2.6.25.20-r2-x86.bin</strong>). С ядром необходим проделать манипуляции аналогичные тем что производились в <a href="2009/01/07/zapusk/">Здравствуй, мир! Запуск.</a>, а вот с образом корневой файловой системы прийдется повозиться.</p>
<p>Сначала удалите старую корневую файловую систему из каталога <strong>/var/lib/nfsroot</strong> и распакуйте туда новый образ. Теперь перейдите в каталог <strong>/var/lib/nfsroot/etc/default</strong>. В нем имеется файл udev следующего содержания:</p>

<div class="wp_codebox"><table><tr id="p28649"><td class="code" id="p286code49"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Default for /etc/init.d/udev</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Comment this out to disable device cache</span>
<span style="color: #007800;">DEVCACHE</span>=<span style="color: #ff0000;">&quot;/etc/dev.tar&quot;</span></pre></td></tr></table></div>

<p>Закоментируйте <strong>DEVCACHE</strong> (если этого не сделать, то udev при старте будет пытаться распаковать его на корневую файловую систему которая находится в режиме только чтение). Далее измените в <strong>/var/lib/nfsroot/etc/fstab</strong> расположение корневой файловой системы. Для этого строку вида:</p>

<div class="wp_codebox"><table><tr id="p28650"><td class="code" id="p286code50"><pre class="bash" style="font-family:monospace;">rootfs  <span style="color: #000000; font-weight: bold;">/</span>  auto  defaults  <span style="color: #000000;">1</span>  <span style="color: #000000;">1</span></pre></td></tr></table></div>

<p>замените на:</p>

<div class="wp_codebox"><table><tr id="p28651"><td class="code" id="p286code51"><pre class="bash" style="font-family:monospace;">192.168.1.100:<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nfsroot  <span style="color: #000000; font-weight: bold;">/</span>  nfs  rw  <span style="color: #000000;">0</span> <span style="color: #000000;">0</span></pre></td></tr></table></div>

<p>Где <strong>192.168.1.100</strong> &#8212; это адрес вашего NFS сервера.</p>
<p>После того как вы завершили изменения, система <em>почти</em> готова к загрузке. Почему почти? Потому что хотя и указано, что корневая файловая система находится в режиме для записи, но реально при попытке загрузить систему она у вас будет бесконечно ожидать ответ от NFS сервера. Происходит это из-за того, что образ генерируемый base-image не включает в себя пакет nfs-utils, необходимый для работы с NFS сервером в режиме записи. Для исправления ситуации необходимо собрать этот пакет и установить в образ. Для сборки пакета выполняем следующие команды:</p>

<div class="wp_codebox"><table><tr id="p28652"><td class="code" id="p286code52"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build
$ bitbake nfs-utils package-index</pre></td></tr></table></div>

<p>В результате выполнения этих команд будет собран пакет nfs-utils и произведено переиндексирование репозитория пакетов. Далее требуется поставить собранный пакет.<br />
Для этого копируем из каталога <strong>~/stutff/build/tmp/deploy/glibc</strong> каталог <strong>ipk</strong> со всем содержимым в каталог <strong>/var/lib/nfsroot/media/card</strong>. Затем переходим в каталог <strong>/var/lib/nfsroot/etc/opkg.conf</strong>, удаляем там все подпадающие под маску <strong>*-feed.conf</strong> и создаем там файл <strong>local-feed.conf</strong> следующего содержания:</p>

<div class="wp_codebox"><table><tr id="p28653"><td class="code" id="p286code53"><pre class="bash" style="font-family:monospace;">src<span style="color: #000000; font-weight: bold;">/</span>gz all <span style="color: #c20cb9; font-weight: bold;">file</span>:<span style="color: #000000; font-weight: bold;">//</span>media<span style="color: #000000; font-weight: bold;">/</span>card<span style="color: #000000; font-weight: bold;">/</span>ipk<span style="color: #000000; font-weight: bold;">/</span>all
src<span style="color: #000000; font-weight: bold;">/</span>gz x86 <span style="color: #c20cb9; font-weight: bold;">file</span>:<span style="color: #000000; font-weight: bold;">//</span>media<span style="color: #000000; font-weight: bold;">/</span>card<span style="color: #000000; font-weight: bold;">/</span>ipk<span style="color: #000000; font-weight: bold;">/</span>x86
src<span style="color: #000000; font-weight: bold;">/</span>gz i486 <span style="color: #c20cb9; font-weight: bold;">file</span>:<span style="color: #000000; font-weight: bold;">//</span>media<span style="color: #000000; font-weight: bold;">/</span>card<span style="color: #000000; font-weight: bold;">/</span>ipk<span style="color: #000000; font-weight: bold;">/</span>i486</pre></td></tr></table></div>

<p>Приступаем к установке пакетов. Переходим в корневую файловую систему:</p>

<div class="wp_codebox"><table><tr id="p28654"><td class="code" id="p286code54"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># chroot /var/lib/nfsroot /bin/sh</span></pre></td></tr></table></div>

<p>Запускаем обновления списка пакетов из репозитория и установку nfs-utils:</p>

<div class="wp_codebox"><table><tr id="p28655"><td class="code" id="p286code55"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># opkg-cl update</span>
<span style="color: #666666; font-style: italic;"># opkg-cl install task-base-nfs</span></pre></td></tr></table></div>

<p>Думаю вы заметили что устанавливается не <strong>nfs-uitls</strong>, а <strong>task-base-nfs</strong>. Дело в том что пакет <strong>nfs-utils</strong> включает в себя сервер, а клиентская часть (<strong>portmap</strong>) вынесена в <strong>task-base-nfs</strong>.</p>
<p>После завершения установки выходим из корневой системы:</p>

<div class="wp_codebox"><table><tr id="p28656"><td class="code" id="p286code56"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># exit</span></pre></td></tr></table></div>

<p>Переходим к запуску. Запустите nfs сервер, а затем Virtual Box. Если вы все сделали правильно то в окне вы увидите следующее:<br />
<a href="http://openembedded.ru/wp-content/uploads/2009/05/kvm1.png"><img class="aligncenter size-medium wp-image-295" title="openembedded base-image" src="http://openembedded.ru/wp-content/uploads/2009/05/kvm1-300x176.png" alt="openembedded base-image" width="300" height="176" /></a></p>
<p>Для входа в систему введите пользователя <strong>root</strong> и нажмите <em>enter</em>. После чего вы попадаете в базовую систему. Можно изучать и играться. А в следующий раз я расскажу как ее запустить на реальном железе.</p>
]]></content:encoded>
			<wfw:commentRss>http://openembedded.ru/2009/05/25/base-image-as-start/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://openembedded.ru/2009/05/25/base-image-as-start/</feedburner:origLink></item>
		<item>
		<title>Знакомьтесь opkg</title>
		<link>http://feedproxy.google.com/~r/RussianEmbeddedLinux/~3/f0ko431ZN_U/</link>
		<comments>http://openembedded.ru/2009/02/23/znakomtes-opkg/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 17:38:46 +0000</pubDate>
		<dc:creator>norguhtar</dc:creator>
				<category><![CDATA[Теория]]></category>
		<category><![CDATA[openembedded]]></category>
		<category><![CDATA[opkg]]></category>

		<guid isPermaLink="false">http://openembedded.ru/?p=240</guid>
		<description><![CDATA[В прошлый раз я рассказал вам каким образом можно собрать дистрибутив linux при помощи OpenEmbedded и запустить его в VirtualBox. Перед тем как перейти к сборке более функциональных дистрибутивов стоит познакомиться с менеджером пакетов используемым в OpenEmbedded. В отличии от больших дистрибутивов использующих менеджеры пакетов rpm и deb, в OpenEmbedded используется opkg, который базируется на [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://openembedded.ru/2009/01/07/zapusk/">В прошлый раз</a> я рассказал вам каким образом можно собрать дистрибутив linux при помощи OpenEmbedded и запустить его в VirtualBox. Перед тем как перейти к сборке более функциональных дистрибутивов стоит познакомиться с менеджером пакетов используемым в OpenEmbedded.<br />
<span id="more-240"></span>В отличии от больших дистрибутивов использующих менеджеры пакетов rpm и deb, в OpenEmbedded используется opkg, который базируется на коде менеджера пакетов ipkg и является продолжателем его идей. Ipkg не используется поскольку на данный момент активно не разрабатывается и имет ряд известных, но не исправленных ошибок. В Opkg эти ошибки исправлены и добавлены новые возможности. Отмечу основные нововведения в Opkg:</p>
<ul>
<li>Использование libcurl для скачивания.</li>
<li>Проверка целостности списков пакетов при помощи gpg.</li>
<li>Автоматическая установка необходимых по зависимостям пакетов.</li>
<li>Возможность отключения автоматической установки пакетов по зависимостям.</li>
<li>Поддержка фасетной классификации пакетов.</li>
<li>Выделение основного функционала в отдельную библиотеку libopkg.</li>
</ul>
<p>В планах разработчиков Opkg стабилизация API библиотеки libopkg, что позволит создавать свои оболочки по управлению пакетами. Дополнительную информацию и исходные коды opkg можно получить на его <a href=http://code.google.com/p/opkg/" ref="nofollow">домашней странице</a>. </p>
<p>Для настройки opkg используется два конфигурационных файла <b>arch.conf</b> и <b>opkg.conf</b>. В первом содержатся допустимые архитектуры процессоров и вес по которому выбирается предпочтительная архитектура. В качестве примера приведу <b>arch.conf</b> для машины с процессором VIA C3:</p>

<div class="wp_codebox"><table><tr id="p24059"><td class="code" id="p240code59"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">arch</span> all <span style="color: #000000;">1</span>
<span style="color: #c20cb9; font-weight: bold;">arch</span> noarch <span style="color: #000000;">1</span>
<span style="color: #c20cb9; font-weight: bold;">arch</span> i586 <span style="color: #000000;">5</span>
<span style="color: #c20cb9; font-weight: bold;">arch</span> i486 <span style="color: #000000;">10</span></pre></td></tr></table></div>

<p>Как вы видите сначала указаны типы архитектуры <b>all</b> и <b>noarch</b>.<br />
В первую категорию попадают различные пакеты содержащие программы которые не зависят от архитектуры. Такими к примеру являются скрипты на perl, bash, python, java и тому подобные.<br />
Во вторую категорию попадают пакеты которые не содержат каких либо исполняемых файлов, к примеру скелет корневой файловой системы или man страницы. Далее указаны архитектуры <b>i586</b> и <b>i486</b>. Если же необходимый пакет будет присутствовать, но будет собран именно под архитектуру отличную от тех что есть в <b>arch.conf</b>, что позволяет избежать установки пакетов собранных под неподдериживаемые системой архитектуры. Теперь давайте обратим  внимание на веса архитектур.<br />
Веса необходимы для указания пакет какой архитектуры ставить при наличии такового в разных редакциях. Так в данном случае пакеты архитектур <b>all</b> и <b>noarch</b> всегда имеют приоритет над пакетами архитектур <b>i586</b> и <b>i486</b> так-как их вес меньше. А у архитектуры <b>i586</b> приоритет выбран выше чем у <b>i486</b> так как пакеты собранные с оптимизацией под i586 архитектуру могут работать быстрее чем пакеты собранные с оптимизацией под i486.<br />
Это позволяет выбрать из репозитария оптимальный набор пакетов для вашей системы. Расположение репозитариев указывается во втором файле конфигурации <b>opkg.conf</b>. К примеру вот так:</p>

<div class="wp_codebox"><table><tr id="p24060"><td class="code" id="p240code60"><pre class="bash" style="font-family:monospace;">src <span style="color: #ff0000;">&quot;MyDist All&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>192.186.1.100<span style="color: #000000; font-weight: bold;">/</span>deploy<span style="color: #000000; font-weight: bold;">/</span>glibc<span style="color: #000000; font-weight: bold;">/</span>ipk<span style="color: #000000; font-weight: bold;">/</span>all
src <span style="color: #ff0000;">&quot;MyDist i486&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>192.186.1.100<span style="color: #000000; font-weight: bold;">/</span>deploy<span style="color: #000000; font-weight: bold;">/</span>glibc<span style="color: #000000; font-weight: bold;">/</span>ipk<span style="color: #000000; font-weight: bold;">/</span>i486</pre></td></tr></table></div>

<p>В этом примере определены два репозитария <b>MyDist All</b> и <b>MyDist i486</b> первый содержит пакеты архитектуры <b>all</b>, второй архитектуры <b>i486</b>. В качестве их источника используется веб-сервер 192.168.1.100, в данном случае для получения доступа к репозитарию используется http-протокол, но помимо него могут быть использованы другие протоколы, которые поддерживаются curl. С полным списком можно ознакомится на его <a href="http://curl.haxx.se/" ref="nofollow">сайте</a>. Кроме репозиториев в файле конфигурации можно настроить прокси сервер, дополнительные пути и многое другое, но для практики по установке пакетов, про которую я напишу в следующий раз, это не потребуется. </p>
]]></content:encoded>
			<wfw:commentRss>http://openembedded.ru/2009/02/23/znakomtes-opkg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://openembedded.ru/2009/02/23/znakomtes-opkg/</feedburner:origLink></item>
		<item>
		<title>Применение встроенных систем</title>
		<link>http://feedproxy.google.com/~r/RussianEmbeddedLinux/~3/q2aqcLeaHhE/</link>
		<comments>http://openembedded.ru/2009/01/14/primenenie-vstroennyx-sistem/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 19:53:53 +0000</pubDate>
		<dc:creator>norguhtar</dc:creator>
				<category><![CDATA[Теория]]></category>
		<category><![CDATA[встроеннные системы]]></category>
		<category><![CDATA[классификация]]></category>

		<guid isPermaLink="false">http://openembedded.ru/?p=117</guid>
		<description><![CDATA[После того как я опубликовал на хабре анонс, меня спросили: Где эту штуку можно использовать? На каком железе это будет работать? Надеюсь,  в статье вы найдете ответы на эти вопросы. Начнем с того, что такое встроенная система. Встроенная система &#8212; это небольшой специализированный компьютер, который интегрирован в то устройство которым она управляет. Такие компьютеры можно [...]]]></description>
			<content:encoded><![CDATA[<p>После того как я опубликовал на хабре анонс, меня спросили:</p>
<ul>
<li>Где эту штуку можно использовать?</li>
<li>На каком железе это будет работать?</li>
</ul>
<p>Надеюсь,  в статье вы найдете ответы на эти вопросы.</p>
<p>Начнем с того, что такое <strong>встроенная система</strong>.</p>
<ul>
<li><strong>Встроенная система</strong> &#8212; это небольшой специализированный компьютер, который интегрирован в то устройство которым она управляет.</li>
</ul>
<p><span id="more-117"></span>Такие компьютеры можно условно разделить на два класса:</p>
<ul>
<li><strong>Малый</strong> &#8212; состоит одной микросхемы которая включает в себя процессор, ОЗУ, ПЗУ и интерфейсы ввода-вывода.</li>
<li><strong>Большой</strong> &#8212; состоит из нескольких микросхем, одна из которых включает в себя процессор и интерфейсы ввода-вывода, а остальные представляют из себя ОЗУ, ПЗУ и дополнительноые интерфейсы ввода-вывода.</li>
</ul>
<p>Малый класс встроенных систем обычно не обладает своей собственной операционной системой и управляющая программа работает с аппаратным обеспечением напрямую. Это связано с тем что объем ОЗУ и ПЗУ не слишком велик, а использование операционной системы для абстрагирования программы от аппаратного обеспечения не имеет смысла или даже вредно. Так происходит из-за того что количество интерфейсов ввода-вывода невелико и функции устройства просты или устройство работает в режиме &#171;жесткого&#187; реального времени и задержки вносимые работой операционной системы недопустимы. Встроенные системы этого класса используются очень широко, практически каждый человек сталкивалися с устройствами под их управлением. К ним относятся микроволновки, стиральные машины, автоматические двери, DVD-плееры и многие другие.</p>
<p>Большой класс встроенных систем в противоположность малому обычно обладает операционной системой и управление осуществляется специализированным программным обеспечением работающего в ней. Этот подход удобен, когда устройство обладает большим количеством сложных интерфейсов ввод-вывода или выполняет сложные функции. К примеру такого рода устройством является беспроводной VoIP-телефон. В нем есть беспроводной модуль Wi-Fi, клавиатура, экран, динамик и микрофон. При осуществлении звонка встраиваемая система должна одновременно обеспечивать кодирование/декодирование звука, подключение к точке доступа, взаимодействие с VoIP-АТС и передачу звука ей. Реализация всех этих задач в виде одной программы, работающей напрямую с аппаратным обеспечением, весьма сложна. Но если воспользоваться операционной системой, она возьмет на себя львиную долю рутинной работы, предоставляя программисту более простой интерфейс, за счет чего задача становится менее трудоемкой. Используются встроенные системы большого класса не так широко как малого, но в более сложных устройствах. Из того, что вы можете встретить в повседневной жизни, это:</p>
<ul>
<li>VoIP-телефоны</li>
<li>Маршрутизаторы</li>
<li>Точки доступа</li>
<li>Сетевые хранилища (NAS,SAN)</li>
<li>КПК</li>
<li>Некоторые цифровые фотоаппараты</li>
<li>Сотовые телефоны</li>
<li>Игровые приставки</li>
<li>Принтеры</li>
<li>Платежные и инфомационные терминалы</li>
</ul>
<p>Конечно, далеко не все из перечисленых устройств используют в качестве операционной системы Linux. Кроме Linux существуют специализированные операционные системы для встраиваемых систем, некоторые из них могут работать даже на малом классе встраиваемых систем. Linux же может работать на встраиваемых системах большого класса, соответствующих следующим критериям:</p>
<ul>
<li>Процессор поддерживается ядром</li>
<li>Минимум 4 мегабайта ОЗУ</li>
<li>Минимум 2 мегабайта ПЗУ</li>
</ul>
<p>Если у вас есть устройство с встраиваемой системой такого класса, то остается только найти способ загрузить ядро Linux на нем. Это может позволить расширить его функции или даже модифицировать их под свои нужды. Ограничиваться это будет только ресурсами устройства и вашей фантазией. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://openembedded.ru/2009/01/14/primenenie-vstroennyx-sistem/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://openembedded.ru/2009/01/14/primenenie-vstroennyx-sistem/</feedburner:origLink></item>
		<item>
		<title>Здравствуй, мир! Запуск.</title>
		<link>http://feedproxy.google.com/~r/RussianEmbeddedLinux/~3/bkg4ljuXPZQ/</link>
		<comments>http://openembedded.ru/2009/01/07/zapusk/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 16:14:15 +0000</pubDate>
		<dc:creator>norguhtar</dc:creator>
				<category><![CDATA[Практика]]></category>
		<category><![CDATA[booting]]></category>
		<category><![CDATA[diskless]]></category>
		<category><![CDATA[openembedded]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://openembedded.ru/?p=77</guid>
		<description><![CDATA[И так в прошлый раз я остановился на завершении сборки helloworld-image. В результате при помощи OpenEmbedded был собран helloworld и создан образ корневой файловой системы вместе с ним. Осталось только все это запустить, это довольно просто. Для начала устанавливаем Virtual Box: sudo apt-get install virtualbox Затем потребуется собрать модуль для virtualbox (возможно, вам не потребуется [...]]]></description>
			<content:encoded><![CDATA[<p>И так в прошлый раз я остановился на завершении сборки <b>helloworld-image</b>. В результате при помощи <b>OpenEmbedded</b> был собран <b>helloworld</b> и создан образ корневой файловой системы вместе с ним. Осталось только все это запустить, это довольно просто.<br />
<span id="more-77"></span><br />
Для начала устанавливаем Virtual Box:</p>

<div class="wp_codebox"><table><tr id="p7781"><td class="code" id="p77code81"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> virtualbox</pre></td></tr></table></div>

<p>Затем потребуется собрать модуль для virtualbox (возможно, вам не потребуется собирать модуль, так-как в исходных кодах он стал устанавливаться недавно)</p>

<div class="wp_codebox"><table><tr id="p7782"><td class="code" id="p77code82"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> module-assistant
<span style="color: #c20cb9; font-weight: bold;">sudo</span> m-a prepare
<span style="color: #c20cb9; font-weight: bold;">sudo</span> m-a a-i virtualbox-ose</pre></td></tr></table></div>

<p>и загрузить его</p>

<div class="wp_codebox"><table><tr id="p7783"><td class="code" id="p77code83"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> modprobe vboxdrv</pre></td></tr></table></div>

<p><strong>Note:</strong> Команда <b>sudo m-a a-i virtualbox-ose</b> может сообщить об неудачном завершении. Но на самом деле все что необходимо она выполнила. Если при этом у вас команда <b>sudo modprobe vboxdrv</b> не вывела никаких ошибок при выполнении, то значит все в порядке.</p>
<p>Затем добавляем его в автозагрузку. Для этого открываем /etc/modules и добавляем туда:</p>

<div class="wp_codebox"><table><tr id="p7784"><td class="code" id="p77code84"><pre class="bash" style="font-family:monospace;">vboxdrv</pre></td></tr></table></div>

<p>после чего сохраняем. Теперь при каждой загрузке этот модуль будет подгружаться сам. Осталось добавить себя в группу пользователей <strong>vboxusers</strong>, чтобы можно было работать с Virtualbox:</p>

<div class="wp_codebox"><table><tr id="p7785"><td class="code" id="p77code85"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> adduser <span style="color: #7a0874; font-weight: bold;">&#91;</span>your username<span style="color: #7a0874; font-weight: bold;">&#93;</span> vboxusers</pre></td></tr></table></div>

<p><strong>Note:</strong> Для вступления в силу изменений потребуется завершить сеанс и войти заново.</p>
<p>Теперь пробуем запустить Virtualbox (у меня находится в разделе стандартные). Если вы увидите нечто такое:<br />
<a href="http://openembedded.ru/wp-content/uploads/2009/01/openembedded0.png"><img class="aligncenter size-medium wp-image-81" title="VirtualBox" src="http://openembedded.ru/wp-content/uploads/2009/01/openembedded0-300x249.png" alt="VirtualBox" width="300" height="249" /></a></p>
<p>то значит, что virtualbox работаем и можно приступать к созданию виртуальной машины, если нет то необходимо разобраться, что у вас не так.</p>
<p>Для создания новой виртуальной машины нажимаем <strong>создать</strong>, далее в качестве имени вводим <strong>openembedded</strong> (на самом деле имя может быть любым, главное чтобы оно не содержало пробелов), в тип ОС указываем <strong>Linux 2.6</strong>, жмем <strong>далее</strong> до запроса о виртуальном диске. Тут так же жмем <strong>далее</strong>, когда выскакивает предупреждение о том, что у нас нет дисков, нажимайте <strong>продолжить</strong> пока они не потребуются. После этого выведется итог, там жмем <strong>готово</strong>.<br />
В списках виртуальных машин должна появиться машина <strong>openembedded</strong>. Выделяем ее и жмем <strong>свойства</strong>, там выбираем пункт <strong>Общие</strong> и переключаемся с закладки <strong>Основные</strong> на закладку <strong>Дополнительно</strong>. Там меняем порядок загрузки таким образом, чтобы <strong>Сеть</strong> была включена и была в списке первой. Если что-то не понятно сверьтесь:<br />
<a href="http://openembedded.ru/wp-content/uploads/2009/01/openembedded1.png"><img class="aligncenter size-medium wp-image-83" title="VirtualBox" src="http://openembedded.ru/wp-content/uploads/2009/01/openembedded1-300x214.png" alt="VirtualBox - Закладка дополнительно" width="300" height="214" /></a></p>
<p>Если вы выполнили все верно, то виртуальная машина настроена. Теперь необходимо добавить загрузчик, собрать ядро, установить и настроить NFS сервер. Начем с загрузчика.</p>
<p>В качестве загрузчика будет использоваться pxelinux из состава syslinux. Устанавливаем его:</p>

<div class="wp_codebox"><table><tr id="p7786"><td class="code" id="p77code86"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> syslinux</pre></td></tr></table></div>

<p>Нужный нам файл <strong>pxelinux.0</strong> находится в каталоге <strong>/usr/lib/syslinux</strong>. Для его установки переходим в каталог <strong>~/.VirtualBox</strong>, создаем  нем каталог <strong>TFTP</strong> и копируем туда <strong>pxelinux.0</strong>:</p>

<div class="wp_codebox"><table><tr id="p7787"><td class="code" id="p77code87"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>.VirtualBox
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> TFTP
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>syslinux<span style="color: #000000; font-weight: bold;">/</span>pxelinux.0 TFTP<span style="color: #000000; font-weight: bold;">/</span>openembedded.pxe</pre></td></tr></table></div>

<p><strong>Note:</strong>Такое странное имя выбрано не спроста. Если вы вспомните называлась виртуальная машина, то заметите что оно совпадает с ее именем. Это необходимо из-за того что VirtualBox обладает встроенными средствами автоконфигурации и загрузки по сети. Для того чтобы он нашел загрузчик, он должен называться <strong>имя машины.pxe</strong>.</p>
<p>Теперь можно попробовать включить виртуальную машину. Выберите ее в списке и нажмите <strong>старт</strong>. Если в результате вывелось что-то похожее<br />
<a href="http://openembedded.ru/wp-content/uploads/2009/01/openembedded7.png"><img class="aligncenter size-medium wp-image-89" title="pxellinux load" src="http://openembedded.ru/wp-content/uploads/2009/01/openembedded7-300x199.png" alt="pxellinux load" width="300" height="199" /></a></p>
<p>значит VirtualBox нашел загрузчик и передал ему управление. Выключаем вируальную машину и переходим к сборке ядра. Для этого потребуется изменить локальную конфигурацию и один из файлов репозитория. Начнем с файла локальной конфигурации <strong>local.conf</strong>. Добавляем в него строку следующего вида:</p>

<div class="wp_codebox"><table><tr id="p7788"><td class="code" id="p77code88"><pre class="bash" style="font-family:monospace;">FILESPATH =. <span style="color: #ff0000;">&quot;<span style="color: #007800;">${TOPDIR}</span>/conf/recipes/<span style="color: #007800;">${PN}</span>/<span style="color: #007800;">${MACHINE}</span>:&quot;</span></pre></td></tr></table></div>

<p>Затем изменяем файл <strong>base.bbclass</strong>. Он находится в каталоге <strong>~/stuff/openembedded/classes</strong>. Открывываем его, ищем строку начинающуюся с:</p>

<div class="wp_codebox"><table><tr id="p7789"><td class="code" id="p77code89"><pre class="bash" style="font-family:monospace;">FILESPATH</pre></td></tr></table></div>

<p>удаляем.</p>
<p><strong>Note:</strong> Эти действия необходимы для того чтобы конфигурация ядра бралась не из репозитория, а из определенного конфигурацией каталога.</p>
<p>Создаем каталог в котором будет находится файл конфигурации ядра:</p>

<div class="wp_codebox"><table><tr id="p7790"><td class="code" id="p77code90"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span>recipes<span style="color: #000000; font-weight: bold;">/</span>linux<span style="color: #000000; font-weight: bold;">/</span>x86</pre></td></tr></table></div>

<p>Выкачиваем его:</p>

<div class="wp_codebox"><table><tr id="p7791"><td class="code" id="p77code91"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span>recipes<span style="color: #000000; font-weight: bold;">/</span>linux<span style="color: #000000; font-weight: bold;">/</span>x86
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>openembedded.ru<span style="color: #000000; font-weight: bold;">/</span>wp-content<span style="color: #000000; font-weight: bold;">/</span>uploads<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2009</span><span style="color: #000000; font-weight: bold;">/</span>01<span style="color: #000000; font-weight: bold;">/</span>defconfig</pre></td></tr></table></div>

<p>Далее собираем ядро. Для этого переходим в каталог <strong>~/stuff/build</strong> и запускаем сборку ядра:</p>

<div class="wp_codebox"><table><tr id="p7792"><td class="code" id="p77code92"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">BBPATH</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$HOME</span>/stuff/build:<span style="color: #007800;">$HOME</span>/stuff/openembedded&quot;</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$PATH</span>:<span style="color: #007800;">$HOME</span>/stuff/bitbake/bin&quot;</span>
bitbake virtual<span style="color: #000000; font-weight: bold;">/</span>kernel</pre></td></tr></table></div>

<p>Сборка займет где-то полчаса-час в зависимости от мощности вашего компьютера. После ее завершения потребуется скопировать ядро в каталог <strong>~/.VirtualBox/TFT</strong>, чтобы его смог найти загрузчик. Далее настроить загрузчик,  так чтобы он грузил ядро и настроить NFS сервер, чтобы ядро смогло подключить корневую файловую систему. Начнем с ядра.</p>
<p>Ядро находится в каталоге <strong>~/stuff/build/tmp/deploy/glibc/images/x86</strong> и называется <strong>bzImage-x86.bin</strong>. Копируем его в <strong>~/.VirtualBox/TFTP</strong>:</p>

<div class="wp_codebox"><table><tr id="p7793"><td class="code" id="p77code93"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>.VirtualBox<span style="color: #000000; font-weight: bold;">/</span>TFTP
<span style="color: #c20cb9; font-weight: bold;">cp</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build<span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>deploy<span style="color: #000000; font-weight: bold;">/</span>glibc<span style="color: #000000; font-weight: bold;">/</span>images<span style="color: #000000; font-weight: bold;">/</span>x86<span style="color: #000000; font-weight: bold;">/</span>bzImage-x86.bin bzImage</pre></td></tr></table></div>

<p>Переходим к настройке загрузчика. Создаем каталог <strong>pxelinux.cfg</strong> (в нем загрузчик ищет файлы конфигурации):</p>

<div class="wp_codebox"><table><tr id="p7794"><td class="code" id="p77code94"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>.VirtualBox<span style="color: #000000; font-weight: bold;">/</span>TFTP<span style="color: #000000; font-weight: bold;">/</span>pxelinux.cfg
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>.VirtualBox<span style="color: #000000; font-weight: bold;">/</span>TFTP<span style="color: #000000; font-weight: bold;">/</span>pxelinux.cfg</pre></td></tr></table></div>

<p>Далее создаем файл конфигурации <strong>default</strong> следующего содержания:</p>

<div class="wp_codebox"><table><tr id="p7795"><td class="code" id="p77code95"><pre class="bash" style="font-family:monospace;">prompt <span style="color: #000000;">0</span>
default linux
timeout <span style="color: #000000;">5</span>
&nbsp;
label linux
kernel bzImage
append <span style="color: #007800;">ip</span>=dhcp <span style="color: #007800;">root</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>nfs <span style="color: #007800;">nfsroot</span>=192.168.1.100:<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nfsroot</pre></td></tr></table></div>

<p>При этом:</p>
<ul>
<li><strong>192.168.1.100</strong> это ваш ip адрес (который настроен на вашем компьютере автоматически или в ручную)</li>
<li><strong>/var/lib/nfsroot</strong> указывает где находится необходимая нам корневая файловая система.</li>
</ul>
<p>Если вы сейчас попробуете загрузить виртуальную машину, то загрузчик найдет ядро и загрузит его. Ядро запустится, но не найдет корневую файловую систему и перейдет в <strong>kernel panic</strong>. Чтобы избежать этого необходимо установить и настроить nfs сервер.<br />
Для установки запускаем команду:</p>

<div class="wp_codebox"><table><tr id="p7796"><td class="code" id="p77code96"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> nfs-kernel-server</pre></td></tr></table></div>

<p>затем настраиваем экспорт каталога, где будет находиться корневая файловая система,  в <strong>/etc/exports</strong>. Для этого в файл <strong>exports</strong> требуется добавить строку следующего вида:</p>

<div class="wp_codebox"><table><tr id="p7797"><td class="code" id="p77code97"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nfsroot        <span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>ro,insecure,all_squash,no_subtree_check<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>В качестве каталога для корневой файловой системы я выбрал <strong>/var/lib/nfsroot</strong>. Его требуется создать и распаковать туда корневую файловую систему. Сделать это можно следующим образом:</p>

<div class="wp_codebox"><table><tr id="p7798"><td class="code" id="p77code98"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nfsroot
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nfsroot
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xvf</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build<span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>deploy<span style="color: #000000; font-weight: bold;">/</span>glibc<span style="color: #000000; font-weight: bold;">/</span>images<span style="color: #000000; font-weight: bold;">/</span>x86<span style="color: #000000; font-weight: bold;">/</span>helloworld-image-x86.tar</pre></td></tr></table></div>

<p>В результате каталог <strong>/var/lib/nfsroot</strong> будет содержать корневую файловую систему. Проверить все ли в порядке можно при помощи следующей команды:</p>

<div class="wp_codebox"><table><tr id="p7799"><td class="code" id="p77code99"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span>
итого <span style="color: #000000;">4</span>
drwxr-xr-x <span style="color: #000000;">2</span> root root   <span style="color: #000000;">17</span> Дек <span style="color: #000000;">31</span> 00:<span style="color: #000000;">50</span> bin
drwxr-xr-x <span style="color: #000000;">2</span> root root <span style="color: #000000;">4096</span> Дек <span style="color: #000000;">31</span> 00:<span style="color: #000000;">50</span> dev
drwxr-xr-x <span style="color: #000000;">3</span> root root   <span style="color: #000000;">42</span> Дек <span style="color: #000000;">31</span> 00:<span style="color: #000000;">50</span> etc
drwxr-xr-x <span style="color: #000000;">4</span> root root   <span style="color: #000000;">26</span> Дек <span style="color: #000000;">31</span> 00:<span style="color: #000000;">50</span> usr</pre></td></tr></table></div>

<p>Если вы получили аналогичный вывод значит все в порядке.<br />
Запускаем nfs сервер:</p>

<div class="wp_codebox"><table><tr id="p77100"><td class="code" id="p77code100"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>nfs-kernel-server start</pre></td></tr></table></div>

<p>Теперь сновая запускаем виртуальную машину. После того как она включится, должен будет запустится загрузчик, затем он запустит ядро, а ядро подключит по nfs корневую файловую систему и запустит /bin/init который является символической ссылкой на программу helloworld. И в результате вы должны увидеть вот такую картину:<br />
<a href="http://openembedded.ru/wp-content/uploads/2009/01/openembedded8.png"><img class="aligncenter size-medium wp-image-98" title="openembedded booted" src="http://openembedded.ru/wp-content/uploads/2009/01/openembedded8-300x199.png" alt="openembedded booted" width="300" height="199" /></a></p>
<p>Если вы ее видите, то поздравляю вас. Вы собрали первый дистрибутив на базе OpenEmbedded!<br />
А в следующий раз я расскажу как собрать систему состояющую не только из helloworld.</p>
]]></content:encoded>
			<wfw:commentRss>http://openembedded.ru/2009/01/07/zapusk/feed/</wfw:commentRss>
		<slash:comments>49</slash:comments>
		<feedburner:origLink>http://openembedded.ru/2009/01/07/zapusk/</feedburner:origLink></item>
		<item>
		<title>Здравствуй, мир! Сборка.</title>
		<link>http://feedproxy.google.com/~r/RussianEmbeddedLinux/~3/ixHTW-LWR9o/</link>
		<comments>http://openembedded.ru/2008/12/25/zdravstvuj-mir/#comments</comments>
		<pubDate>Thu, 25 Dec 2008 18:17:43 +0000</pubDate>
		<dc:creator>norguhtar</dc:creator>
				<category><![CDATA[Практика]]></category>
		<category><![CDATA[bitbake]]></category>
		<category><![CDATA[openembedded]]></category>

		<guid isPermaLink="false">http://openembedded.ru/?p=24</guid>
		<description><![CDATA[Практически у всех программистов первой программой была Hello, world! Она говорила &#8212; Здравствуй, мир! и завершалась. Первый дистрибутив на базе OpenEmbedded будет делать то же самое. Но для этого придется немного попотеть. Вам потребуется следующее: Компьютер с установленным дистрибутивом Linux Ubuntu. Желание установить и умение читать. Интернет канал, желательно безлимитный. Если у вас есть все [...]]]></description>
			<content:encoded><![CDATA[<p>Практически у всех программистов первой программой была Hello, world! Она говорила &#8212; <strong>Здравствуй, мир!</strong> и завершалась. Первый дистрибутив на базе OpenEmbedded будет делать то же самое. Но для этого придется немного попотеть.<br />
<span id="more-24"></span><br />
Вам потребуется следующее:</p>
<ul>
<li>Компьютер с установленным дистрибутивом Linux Ubuntu.</li>
<li>Желание установить и умение читать.</li>
<li>Интернет канал, желательно безлимитный.</li>
</ul>
<p>Если у вас есть все требуемое, запускайте терминал. Для начала запустим установку необходимых программного обеспечения:</p>

<div class="wp_codebox"><table><tr id="p24114"><td class="code" id="p24code114"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">gcc</span> <span style="color: #c20cb9; font-weight: bold;">g++</span> ccache <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #c20cb9; font-weight: bold;">cvs</span> \
subversion git-core <span style="color: #c20cb9; font-weight: bold;">git</span> coreutils <span style="color: #c20cb9; font-weight: bold;">unzip</span> texi2html texinfo \
libsdl1.2-dev docbook-utils <span style="color: #c20cb9; font-weight: bold;">gawk</span> python-pysqlite2 \
diffstat help2man libxml2-utils xmlto \
python-psyco linux-headers-<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">uname</span> -r<span style="color: #000000; font-weight: bold;">`</span></pre></td></tr></table></div>

<p>В случае если у вас достаточно быстрый интернет, то установка займет где-то полчаса. Если же нет, то это отнимет больше времеи.</p>
<p>Как только все программы установятся, cоздаем каталог для опытов и переходим в нее:</p>

<div class="wp_codebox"><table><tr id="p24115"><td class="code" id="p24code115"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">exit</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build<span style="color: #000000; font-weight: bold;">/</span>conf
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff</pre></td></tr></table></div>

<p>Далее установливаем bitbake. Для этого с сайта <a href="http://developer.berlios.de/projects/bitbake/">bitbake</a> скачиваем и распаковываем последний релиз:</p>

<div class="wp_codebox"><table><tr id="p24116"><td class="code" id="p24code116"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>download.berlios.de<span style="color: #000000; font-weight: bold;">/</span>bitbake<span style="color: #000000; font-weight: bold;">/</span>bitbake-1.8.12.tar.gz
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xzvf</span> bitbake-1.8.12.tar.gz
<span style="color: #c20cb9; font-weight: bold;">mv</span> bitbake-1.8.12 bitbake</pre></td></tr></table></div>

<p>Следующим шагом идет получение репозитория OpenEmbedded. Для его получения запускаем:</p>

<div class="wp_codebox"><table><tr id="p24117"><td class="code" id="p24code117"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">git</span> clone <span style="color: #c20cb9; font-weight: bold;">git</span>:<span style="color: #000000; font-weight: bold;">//</span>git.openembedded.net<span style="color: #000000; font-weight: bold;">/</span>openembedded</pre></td></tr></table></div>

<p>Если вдруг доступен только http (злые админы закрыли интернеты) то пробуем получить его через http:</p>

<div class="wp_codebox"><table><tr id="p24118"><td class="code" id="p24code118"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">git</span> clone http:<span style="color: #000000; font-weight: bold;">//</span>repo.or.cz<span style="color: #000000; font-weight: bold;">/</span>r<span style="color: #000000; font-weight: bold;">/</span>openembedded.git</pre></td></tr></table></div>

<p><strong>Note:</strong><br />
В дальнейшем для обновления репозитария будет достаточно перейти в каталог <b>stuff/openembedded</b>:</p>

<div class="wp_codebox"><table><tr id="p24119"><td class="code" id="p24code119"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>openembedded
<span style="color: #c20cb9; font-weight: bold;">git</span> pull</pre></td></tr></table></div>

<p>Учтите, репозиторий довольно большой, так что качается довольно долго. Когда он скачается, необходимо создать конфигурационный файл сборки. Воспользуемся примером из репозитория:</p>

<div class="wp_codebox"><table><tr id="p24120"><td class="code" id="p24code120"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">cp</span> openembedded<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span>local.conf.sample build<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span>local.conf</pre></td></tr></table></div>

<p>Далее откройте файл в редакторе и измените значения следующих переменных:</p>

<div class="wp_codebox"><table><tr id="p24121"><td class="code" id="p24code121"><pre class="bash" style="font-family:monospace;">BBFILES = <span style="color: #ff0000;">&quot;<span style="color: #007800;">${HOME}</span>/stuff/openembedded/recipes/*/*.bb&quot;</span>
DL_DIR = <span style="color: #ff0000;">&quot;<span style="color: #007800;">${HOME}</span>/stuff/sources&quot;</span>
DISTRO = <span style="color: #ff0000;">&quot;angstrom-2008.1&quot;</span>
MACHINE = <span style="color: #ff0000;">&quot;x86&quot;</span></pre></td></tr></table></div>

<p>А в конце файла удалите строку:</p>

<div class="wp_codebox"><table><tr id="p24122"><td class="code" id="p24code122"><pre class="bash" style="font-family:monospace;">REMOVE_THIS_LINE</pre></td></tr></table></div>

<p>сохраните файл.<br />
Теперь необходимо настроить окружение. Сначала указываем где у нас находится bitbake</p>

<div class="wp_codebox"><table><tr id="p24123"><td class="code" id="p24code123"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH</span>=<span style="color: #800000;">${PATH}</span>:<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>bitbake<span style="color: #000000; font-weight: bold;">/</span>bin</pre></td></tr></table></div>

<p>затем указываем bitbake где искать репозиторий и файл конфигурации</p>

<div class="wp_codebox"><table><tr id="p24124"><td class="code" id="p24code124"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">BBPATH</span>=<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>build:<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>stuff<span style="color: #000000; font-weight: bold;">/</span>openembedded</pre></td></tr></table></div>

<p>И наконец запускаем сборку hello world:</p>

<div class="wp_codebox"><table><tr id="p24125"><td class="code" id="p24code125"><pre class="bash" style="font-family:monospace;">bitbake helloworld-image</pre></td></tr></table></div>

<p>Если в результате запуска появилось нечто такое:</p>

<div class="wp_codebox"><table><tr id="p24126"><td class="code" id="p24code126"><pre class="bash" style="font-family:monospace;">NOTE: Handling BitBake files: <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">6291</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">6291</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">100</span> <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
NOTE: Parsing finished. <span style="color: #000000;">6027</span> cached, <span style="color: #000000;">0</span> parsed, <span style="color: #000000;">264</span> skipped, <span style="color: #000000;">0</span> masked.
NOTE: build <span style="color: #000000;">200812252310</span>: started
&nbsp;
OE Build Configuration:
BB_VERSION        = <span style="color: #ff0000;">&quot;1.8.10&quot;</span>
METADATA_BRANCH   = <span style="color: #ff0000;">&quot;org.openembedded.dev&quot;</span>
METADATA_REVISION = <span style="color: #ff0000;">&quot;5b1ed09b1ab1a60a28a76e4658bc9957cd361b5d&quot;</span>
TARGET_ARCH       = <span style="color: #ff0000;">&quot;i486&quot;</span>
TARGET_OS         = <span style="color: #ff0000;">&quot;linux&quot;</span>
MACHINE           = <span style="color: #ff0000;">&quot;x86&quot;</span>
DISTRO            = <span style="color: #ff0000;">&quot;angstrom&quot;</span>
DISTRO_VERSION    = <span style="color: #ff0000;">&quot;2008.1-test-20081225&quot;</span>
TARGET_FPU        = <span style="color: #ff0000;">&quot;&quot;</span>
&nbsp;
NOTE: Resolving any missing task queue dependencies
NOTE: Preparing runqueue
NOTE: Executing runqueue</pre></td></tr></table></div>

<p>то можете себя поздравить, bitbake и openembedded установленны правильно. Вам осталось подождать пока bitbake соберет все что необходимо.</p>
<p><strong>- Стоп! А как это теперь запустить?</strong><br />
А вот об этом в следующий раз :)</p>
]]></content:encoded>
			<wfw:commentRss>http://openembedded.ru/2008/12/25/zdravstvuj-mir/feed/</wfw:commentRss>
		<slash:comments>59</slash:comments>
		<feedburner:origLink>http://openembedded.ru/2008/12/25/zdravstvuj-mir/</feedburner:origLink></item>
		<item>
		<title>Первый шаг</title>
		<link>http://feedproxy.google.com/~r/RussianEmbeddedLinux/~3/POHyzdmRi4Q/</link>
		<comments>http://openembedded.ru/2008/12/12/pervyj-shag/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 18:47:56 +0000</pubDate>
		<dc:creator>norguhtar</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://openembedded.ru/?p=9</guid>
		<description><![CDATA[Ну что, начнем? Этой записью я хочу объявить о начале проекта, посвященного встраиваемым системам и тому, как на них запускать и использовать Linux. Почему именно Linux? Почему не FreeBSD, к примеру? &#8212; спросите вы.  Потомучто эта система сейчас активно используется во встраиваемых системах. Когда вы покупаете маршрутизатор SOHO класса или сетевой NAS, то все чаще [...]]]></description>
			<content:encoded><![CDATA[<p>Ну что, начнем? Этой записью я хочу объявить о начале проекта, посвященного встраиваемым системам и тому, как на них запускать и использовать Linux.<br />
<strong>Почему именно Linux? Почему не FreeBSD, к примеру?</strong> &#8212; спросите вы.  Потомучто эта система сейчас активно используется во встраиваемых системах. Когда вы покупаете маршрутизатор SOHO класса или сетевой NAS, то все чаще внутри можно увидеть именно Linux. Для Linux существует множество инструментариев и руководств облегчающих его сборку для встраиваемых систем.<br />
К сожалению, на русском языке информации о использвании и запуске Linux на встраиваемых системах практически нет, мне хотелось бы восполнить этот пробел. Писать буду как для <strong>практиков</strong> так и для <strong>теоретиков</strong>. Первые смогут собрать и запустить свой собственный Linux без долгих разбирательств почему и зачем оно так. Вторые смогут узнать зачем и почему оно так.</p>
]]></content:encoded>
			<wfw:commentRss>http://openembedded.ru/2008/12/12/pervyj-shag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://openembedded.ru/2008/12/12/pervyj-shag/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 2.500 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-03-01 13:31:18 --><!-- Compression = gzip -->

