Tommy 碎碎念
https://blog.teatime.com.tw/
Tommy Wu's blog
tommy
2024-03-19T09:15:07Z
-
自行編譯 Utilite 使用的 kernel
https://blog.teatime.com.tw/1/post/465
<p>目前官方編譯的 <a href="https://www.kernel.org/" target="_blank">kernel</a> 少了許多的功能 (例如, 沒有把 netfilter 編進去, 要拿來當 router/firewall 就很困難), 所以有需的就就必須要自行編譯.</p><p>首先, <a href="http://utilite-computer.com/" target="_blank">Utilite </a> 有把<a href="https://gitorious.org/utilite" target="_blank">使用的 kernel 與 uboot 放在 gitorious 上頭</a> (看起來是每一次有 release 才會 push 上去), 所以... 要用的就自己 git clone 下來:</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span class="kw3">cd</span> <span class="sy0">/</span>usr<span class="sy0">/</span>src<br />git clone git://gitorious.org/utilite/utilite.git</pre></div></pre><p>這樣在 /usr/src/utilite 下就有 utilite 使用的 kernel tree 了.</p><p>接著, 取得目前用的 kernel (在 utilite 的機器上) 的設定:</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span class="kw2">zcat</span> <span class="sy0">/</span>proc<span class="sy0">/</span>config.gz <span class="sy0">></span> <span class="sy0">/</span>usr<span class="sy0">/</span>src<span class="sy0">/</span>utilite<span class="sy0">/</span>.config</pre></div></pre><p>如果你是在 utilite 或之前所說的自行建立的 armhf 的 chroot 環境, 就可以依據一般編譯 kernel 的方式:</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span class="kw2">make</span> menuconfig<br /><span class="kw2">make</span> uImage modules<br /><span class="kw2">make</span> modules_install<br /><span class="kw2">make</span> firmware_install</pre></div></pre><p>選擇自己要的 kernel 功能, 然後 build 成 uImage 的格式與相關的 module, 再安裝 module 與 firmware, 最後把 arch/arm/boot/uImage 複製到你的 /boot 下頭的 uImage-cm-fx6 (預設的 uboot 是載入這個檔案), 就可以用新的 kernel 了. (不支援 multi-boot, 不能在開機的時候去選要用的 kernel)</p><p>當然, 直接在 utilite 上頭編譯 kernel 會佔用很久的時間, 而在一般的 x86 機器上透過 qemu 的 chroot 方式來編譯, 似乎會比較快一些, 但是都比不上透過 cross compiler 來的方便與快速.</p><p>kernel 對於 cross compiler 的支援算是很好的, 基本上, 只要裝有 cross compiler 的機器上, 設定這兩個環境變數後, 就能在一般的主機上編譯出給 utilite 使用的 kernel 了:</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span class="kw3">export</span> <span class="re2">ARCH</span>=arm<br /><span class="kw3">export</span> <span class="re2">CROSS_COMPILE</span>=arm-linux-gnueabihf-</pre></div></pre><p>接著就可以用</p><pre class="php"><div class="insertcode"><pre class="php" style="font-family: monospace">make menuconfig<br />make uImage modules</pre></div></pre><p>來修改功能與編譯 kernel 與 module.</p><p>最後, 除了要自行複製 arch/arm/boot/uImage 的檔案外, 對於 module 與 firmware 可以用指定目錄的方式來安裝</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span class="re2">INSTALL_MOD_PATH</span>=.<span class="sy0">/</span>modules_install <span class="kw2">make</span> modules_install<br /><span class="re2">INSTALL_MOD_PATH</span>=.<span class="sy0">/</span>modules_install <span class="kw2">make</span> firmware_install</pre></div></pre><p>最後把 ./modules_install 這個目錄的東西, 複製到 utilite 上頭就可以了. </p>
Linux
Utilite
2013-11-23T11:17:47Z
tommy
-
自製 Debian Wheezy armhf 的 rootfs (for Utilite)
https://blog.teatime.com.tw/1/post/464
<p>由於目前 <a href="http://utilite-computer.com/web/home" target="_blank">Utilite</a> 只有提供 <a href="http://www.utilite-computer.com/wiki/index.php/Utilite_Linux_Installation_and_Update" target="_blank">Ubuntu 的 image</a> (而且似乎是 armel 的版本), 所以打算自己動手裝上習慣的 <a href="http://www.debian.org/" target="_blank">Debian</a> 版本. 不過... 由於目前 Debian Wheezy 並沒有提供 Utilite 的 installer, 所以就只能自己打造了. </p><p>首先, 你要有一台 Debian 的開發主機 (用 Ubuntu 也可以, 不過... 都要把 Utilite 由 Ubuntu 改裝成 Debian 了, 會在自己的原本環境是用 Ubuntu 嗎?).</p><ul><li>開發主機</li></ul><p>加入 <a href="http://www.emdebian.org/" target="_blank">emdebian<br /></a></p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>echo</span> deb http:<span>//</span>www.emdebian.org<span>/</span>debian<span>/</span> wheezy main <span>>></span> <span>/</span>etc<span>/</span>apt<span>/</span>sources.list.d<span>/</span>emdebian.list<br /><span>apt-get</span> <span>install</span> emdebian-archive-keyring<br /><span>apt-get</span> update</pre></div></pre><p>安裝所需要的工具</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>apt-get</span> <span>install</span> libc6-armel-cross libc6-dev-armel-cross<br /><span>apt-get</span> <span>install</span> binutils-arm-linux-gnueabi<br /><span>apt-get</span> <span>install</span> gcc-4.7-arm-linux-gnueabi<br /><span>apt-get</span> <span>install</span> g++-4.7-arm-linux-gnueabi<br /><span>apt-get</span> <span>install</span> uboot-mkimage<br /><span>apt-get</span> <span>install</span> libncurses5-dev<br /><span>apt-get</span> <span>install</span> git <span>bc</span> curl<br /><span>apt-get</span> <span>install</span> debootstrap dpkg-dev</pre></div></pre><p>安裝 QEMU</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>apt-get</span> <span>install</span> qemu binfmt-support qemu-user-static dpkg-cross</pre></div></pre><p>基本上, 開發主機上頭有上面的東西就可以了.</p><ul><li>製作 rootfs</li></ul><p>使用 debootstrap 產生基礎的環境</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>mkdir</span> <span>-p</span> <span>/</span>usr<span>/</span>src<span>/</span>armhf-root<br /><span>cd</span> <span>/</span>usr<span>/</span>src<span>/</span>armhf-root<br />debootstrap <span>--foreign</span> <span>--arch</span> armhf wheezy .</pre></div></pre><p>複製 qemu-arm-static 的該環境中 (因為一般的開發主機應該不會是 armhf 的機器, 要這樣才可以正常的 chroot)</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>cp</span> <span>/</span>usr<span>/</span>bin<span>/</span>qemu-arm-static usr<span>/</span>bin</pre></div></pre><p>debootstrap 的第二階段</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>LC_ALL</span>=C <span>LANGUAGE</span>=C <span>LANG</span>=C <span>chroot</span> . <span>/</span>debootstrap<span>/</span>debootstrap <span>--second-stage</span><br /><span>LC_ALL</span>=C <span>LANGUAGE</span>=C <span>LANG</span>=C <span>chroot</span> . <span>dpkg</span> <span>--configure</span> <span>-a</span></pre></div></pre><p>原則上, 到這邊結束, 就應該有一個可以 chroot 的 armhf 環境了.</p><ul><li>設定 Utilite 使用的 rootfs</li></ul>把 kernel module, firmware, udev 設定, 由 Utilite 的 Ubuntu image 複製過來 (假定檔案放在 /ubuntu_rootfs/ 底下)<br /><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>mkdir</span> <span>-p</span> lib<span>/</span>modules<br /><span>mkdir</span> <span>-p</span> lib<span>/</span>firmware<br /><span>cp</span> <span>-a</span> <span>/</span>ubuntu_rootfs<span>/</span>lib<span>/</span>modules<span>/</span>3.0.35-cm-fx6-4 lib<span>/</span>modules<span>/</span><br /><span>cp</span> <span>-a</span> <span>/</span>ubuntu_rootfs<span>/</span>lib<span>/</span>firmware<span>/*</span> lib<span>/</span>firmware<span>/</span><br /><span>cp</span> <span>-a</span> <span>/</span>ubuntu_rootfs<span>/</span>etc<span>/</span>modules etc<span>/</span><br /><span>cp</span> <span>-a</span> <span>/</span>ubuntu_rootfs<span>/</span>etc<span>/</span>udev<span>/</span>rules.d<span>/*</span> etc<span>/</span>udev<span>/</span>rules.d<span>/</span></pre></div></pre><p>更改 root 密碼</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>chroot</span> . <span>passwd</span></pre></div></pre><p>設定 hostname</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>echo</span> utilite <span>></span> etc<span>/</span><span>hostname</span></pre></div></pre><p>設定 DNS 解析</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>cat</span> <span><<</span>END <span>></span> etc<span>/</span>resolv.conf<br />nameserver 8.8.8.8<br />nameserver 8.8.4.4<br />END</pre></div></pre><p>將網卡設定為 DHCP (要設成固定 IP 請自己改)</p><pre class="php"><div class="insertcode"><pre class="php" style="font-family: monospace">cat <span><<</span>END <span>>></span> etc<span>/</span>network<span>/</span>interfaces<br /> <br /><span># eth0<br /></span>auto eth0<br />allow<span>-</span>hotplug eth0<br />iface eth0 inet dhcp<br /> <br /><span># eth1<br /></span>auto eth1<br />allow<span>-</span>hotplug eth1<br />iface eth1 inet dhcp<br /><a href="http://www.php.net/end"><span>END</span></a></pre></div></pre><p>設定 apt 要用的 source </p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>cat</span> <span><<</span>END <span>></span> etc<span>/</span>apt<span>/</span>sources.list<br />deb http:<span>//</span>ftp.debian.org.tw<span>/</span>debian wheezy main<br />deb-src http:<span>//</span>ftp.debian.org.tw<span>/</span>debian wheezy main<br />deb http:<span>//</span>security.debian.org<span>/</span> wheezy<span>/</span>updates main<br />deb-src http:<span>//</span>security.debian.org<span>/</span> wheezy<span>/</span>updates main<br />END</pre></div></pre><p>console 設定 (Utilite 是用 ttymxc3 當成 serial console)</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>echo</span> T0:23:respawn:<span>/</span>sbin<span>/</span>getty <span>-L</span> ttymxc3 <span>115200</span> vt100 <span>>></span> etc<span>/</span>inittab</pre></div></pre><p>設定 locale</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>chroot</span> . <span>apt-get</span> update<br /><span>LC_ALL</span>=C <span>LANGUAGE</span>=C <span>LANG</span>=C <span>chroot</span> . <span>apt-get</span> <span>install</span> <span>dialog</span> locales dpkg-dev<br /><span>LC_ALL</span>=C <span>LANGUAGE</span>=C <span>LANG</span>=C <span>chroot</span> . dpkg-reconfigure locales</pre></div></pre><p>設定 timezone</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>LC_ALL</span>=C <span>LANGUAGE</span>=C <span>LANG</span>=C <span>chroot</span> . dpkg-reconfigure tzdata</pre></div></pre><p>安裝其他你需要的軟體 (如 sshd, 當然你也可以不裝, 等把 rootfs 放上去時, 使用 serial console 連上去裝)</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>LC_ALL</span>=C <span>LANGUAGE</span>=C <span>LANG</span>=C <span>chroot</span> . <span>apt-get</span> <span>install</span> openssh-server dosfstools ntp ntpdate</pre></div></pre><p>更新並清除 cache</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>LC_ALL</span>=C <span>LANGUAGE</span>=C <span>LANG</span>=C <span>chroot</span> . <span>apt-get</span> upgrade<br /><span>chroot</span> . <span>apt-get</span> clean</pre></div></pre><p>如果需要其他的設定, 可以這時候 chroot 進去處理, 當然, 基本的 rootfs 算是完成, 也可以裝上後再連到機器上去使用.</p><p>如果不需要再 chroot 了, 就可以把 qeum-arm-static 移除</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>rm</span> usr<span>/</span>bin<span>/</span>qemu-arm-static</pre></div></pre><p>打包..</p><pre class="bash"><div class="insertcode"><pre class="bash" style="font-family: monospace"><span>tar</span> zcvf ..<span>/</span>debian_wheezy_armhf_rootfs.tar.gz .<span>/</span></pre></div></pre><p>接著依據官方 Ubuntu 的安裝方式, 把上面的 rootfs 放到 SSD 上 (/dev/sda2), 或放在 MicroSD (/dev/mmcblk0p2) 上頭. 記得不要動到 /boot (/dev/sda1 或 /dev/mmcblk0p1) 的部份 (那是個 vfat 的 partition, 放上所需要的 uImage 給 u-boot 來啟動). </p>
Linux
Utilite
2013-11-21T14:31:44Z
tommy