<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Debuggin&apos; Everyday</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/" />
    <link rel="self" type="application/atom+xml" href="http://yasu2.prosou.nu/blog/atom.xml" />
    <id>tag:yasu2.prosou.nu,2015-02-19:/blog//1</id>
    <updated>2015-11-09T14:22:53Z</updated>
    <subtitle>へっぽこ研究者兼サイクリストの日常。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 5.2.12</generator>

<entry>
    <title>OpenNTPd で行こう</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2015/11/openntpd.html" />
    <id>tag:yasu2.prosou.nu,2015:/blog//1.5365</id>

    <published>2015-11-09T14:01:05Z</published>
    <updated>2015-11-09T14:22:53Z</updated>

    <summary>サーバ関係はずっとFreeBSDで生きているわけですが、いまの職場に移ってきてすごく困ったことのひとつが、外部からのUDP/123が閉じられていること。FreeBSDとか、多くのUnix系OSに含まれているntp.org版のntpdでは、これだと外部のNTPサーバと同期することができません (学内のNTPサーバにも届かない...!)。 それで、いままでどうしていたかというと、ローカルのNTPサーバになるホストをntpdate -u で毎晩外部のNTPサーバと同期させて、あとはそのホストを参照していたわけですが、なぜか突然動かなくなりまして、ntpq -p しても、LOCAL(0) へのreachが0とかなんなの... という状態。ntpdがちゃんと動いているか、動いてないならなんでダメなのか、ログをいろいろあたっても全然わからず。 それで、とりあえずntpdでの外部のサーバへのアクセスがntpdate -u相当 (非特権ポートでのアクセス)になればいいんじゃないの、と思ったけれども、どうやらそれはできないようです。 解決策をいろいろ調べていたら、&quot;openntpdならできるよ!&quot; みたいな記事がちらほら。OpenSSH的に、OpenBSDのプロジェクトの一部として開発されているそうです。たしかに、ntp.orgなntpdはときどきセキュリティホールが見つかったりしてて、ドキドキすることもあるしなあ。OpenBSDらしく、シンプルに堅牢に、ということだそうで、設定ファイルは誰を参照してどのアドレス/ポートをListenするか、ということくらい(あと、何かセンサを持ってる人はそれも)。 マイクロ秒単位での正確性という面ではntp.orgの実装のほうが上だそうですが、うちは別にmakeがおかしくならなければいいよ、という程度なので、精度的には充分です。設定ファイルは簡単で、 listen * server ntp1.hogehoge.org server ntp2.hogehoge.org みたいに書いただけで動きました (どうせ firewall でいろいろきってるので、listen * でOK)。超ステキ。ntpq -p 相当の、いまどこと同期がとれてるかは、 % ntpctl -s all で見られます。見ていると、安定してきたら外部のサーバをpollingしにいく間隔も長くなるようですし、これはトラフィックの軽減というポイントからは非常にいいですね。 それから、当然NTP準拠なので、Macをはじめ、ローカルのNTPクライアントの設定はそのままで動きます。これからはこれでいこう。...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Unix かんけい" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="システム管理" label="システム管理" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="freebsd" label="FreeBSD" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>サーバ関係はずっとFreeBSDで生きているわけですが、いまの職場に移ってきてすごく困ったことのひとつが、外部からのUDP/123が閉じられていること。FreeBSDとか、多くのUnix系OSに含まれているntp.org版のntpdでは、これだと外部のNTPサーバと同期することができません (学内のNTPサーバにも届かない...!)。</p>

<p>それで、いままでどうしていたかというと、ローカルのNTPサーバになるホストをntpdate -u で毎晩外部のNTPサーバと同期させて、あとはそのホストを参照していたわけですが、なぜか突然動かなくなりまして、ntpq -p しても、LOCAL(0) へのreachが0とかなんなの... という状態。ntpdがちゃんと動いているか、動いてないならなんでダメなのか、ログをいろいろあたっても全然わからず。</p>

<p>それで、とりあえずntpdでの外部のサーバへのアクセスがntpdate -u相当 (非特権ポートでのアクセス)になればいいんじゃないの、と思ったけれども、どうやらそれはできないようです。</p>

<p>解決策をいろいろ調べていたら、"<a href="http://www.openntpd.org">openntpd</a>ならできるよ!" みたいな記事がちらほら。OpenSSH的に、OpenBSDのプロジェクトの一部として開発されているそうです。たしかに、ntp.orgなntpdはときどきセキュリティホールが見つかったりしてて、ドキドキすることもあるしなあ。OpenBSDらしく、シンプルに堅牢に、ということだそうで、設定ファイルは誰を参照してどのアドレス/ポートをListenするか、ということくらい(あと、何かセンサを持ってる人はそれも)。</p>

<p>マイクロ秒単位での正確性という面ではntp.orgの実装のほうが上だそうですが、うちは別にmakeがおかしくならなければいいよ、という程度なので、精度的には充分です。設定ファイルは簡単で、</p>

<p>listen *<br />
server ntp1.hogehoge.org<br />
server ntp2.hogehoge.org</p>

<p>みたいに書いただけで動きました (どうせ firewall でいろいろきってるので、listen * でOK)。超ステキ。ntpq -p 相当の、いまどこと同期がとれてるかは、<br />
% ntpctl -s all        <br />
で見られます。見ていると、安定してきたら外部のサーバをpollingしにいく間隔も長くなるようですし、これはトラフィックの軽減というポイントからは非常にいいですね。</p>

<p>それから、当然NTP準拠なので、Macをはじめ、ローカルのNTPクライアントの設定はそのままで動きます。これからはこれでいこう。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Raspberry Pi 2 + FreeBSD 11 + X.org</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2015/09/raspberry-pi-2-freebsd-11-xorg.html" />
    <id>tag:yasu2.prosou.nu,2015:/blog//1.5364</id>

    <published>2015-09-09T03:25:16Z</published>
    <updated>2015-09-09T03:55:03Z</updated>

    <summary>ARMv6 な FreeBSD 11-CURRENT では FreeBSD の pkg の提供がはじまっており、べんりべんり。 Raspberry Pi 2 用の起動 SD カードイメージも配布されています。 pkg で xorg と xf86-driver-scfb いれたら X もあがりました。 ただ、auto negotiation 的ないろいろがないので、Xorg -configure みたいなのはできません。 モニタとの解像度などの negotiation は syscons がやってくれるので、scfb driver で X 動きます。 遅いんですが、まあなんとか使えるかな、という感じでもあります。本体のメモリがあんまりないので X 端末的な感じでしょうか。...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Unix かんけい" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="arm" label="ARM" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="freebsd" label="FreeBSD" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[ARMv6 な FreeBSD 11-CURRENT では FreeBSD の pkg の提供がはじまっており、べんりべんり。<br>
Raspberry Pi 2 用の起動 SD カードイメージも配布されています。
<p>
pkg で xorg と xf86-driver-scfb いれたら X もあがりました。<br>
ただ、auto negotiation 的ないろいろがないので、Xorg -configure みたいなのはできません。<br>
モニタとの解像度などの negotiation は syscons がやってくれるので、scfb driver で X 動きます。<br>
遅いんですが、まあなんとか使えるかな、という感じでもあります。本体のメモリがあんまりないので X 端末的な感じでしょうか。
<p>
というわけでこんな xorg.conf で動きました。

<pre class='brush: plain'>
Section &quot;Files&quot;
EndSection

Section &quot;Module&quot;
    Load        &quot;dbe&quot;
    Disable    &quot;dri&quot;
    Disable    &quot;dri2&quot;
    Disable    &quot;glx&quot;
    SubSection  &quot;extmod&quot;
        Option  &quot;omit xfree86-dga&quot;
    EndSubSection
EndSection

Section &quot;ServerFlags&quot;
    Option    &quot;AIGLX&quot;        &quot;false&quot;
    Option    &quot;NoAccel&quot;    &quot;True&quot;
    Option    &quot;NoDRI&quot;        &quot;True&quot;
    Option    &quot;DRI&quot;        &quot;False&quot;
    Option    &quot;DRI2&quot;        &quot;False&quot;
EndSection

Section &quot;InputDevice&quot;
    Identifier  &quot;Keyboard1&quot;
    Driver      &quot;kbd&quot;
EndSection

Section &quot;InputDevice&quot;
    Identifier  &quot;Mouse1&quot;
    Driver      &quot;mouse&quot;
    Option      &quot;Protocol&quot;      &quot;auto&quot;
    Option      &quot;Device&quot;        &quot;/dev/sysmouse&quot;
EndSection

Section &quot;Monitor&quot;
    Identifier  &quot;Monitor&quot;

    Mode &quot;1680x1050&quot;
        DotClock        147.14
        HTimings        1680 1784 1968 2256
        VTimings        1050 1051 1054 1087
    EndMode
EndSection

Section &quot;Device&quot;
    Identifier  &quot;Generic FB&quot;
    Driver      &quot;scfb&quot;
    Option    &quot;NoAccel&quot;    &quot;True&quot;
EndSection

Section &quot;Screen&quot;
    Identifier  &quot;Screen&quot;
    Device      &quot;Generic FB&quot;
EndSection

Section &quot;ServerLayout&quot;
    Identifier  &quot;layout&quot;
    Screen      0 &quot;Screen&quot; 0 0
    InputDevice &quot;Mouse1&quot; &quot;CorePointer&quot;
    InputDevice &quot;Keyboard1&quot; &quot;CoreKeyboard&quot;
EndSection
</pre>]]>
        
    </content>
</entry>

<entry>
    <title>ZYBOでFreeBSDその後</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2015/05/zybofreebsd.html" />
    <id>tag:yasu2.prosou.nu,2015:/blog//1.5363</id>

    <published>2015-05-15T14:50:31Z</published>
    <updated>2015-05-15T15:04:00Z</updated>

    <summary>学期が始まってから急に忙しくなって、長らく作業が止まっていたのですが、ちょっと時間がとれたのでいくつかやってみたことがあります。わかったことのまとめ。 PS の初期化 (CPU clockのPLLとか、PS側のI/Oの設定) は FSBL によって行われる。.bit ファイルではない。 したがって、boot.bin に .bit ファイルを含めることは必ずしも必須ではない (ZYBOの場合はちがう: 後述) FSBL は前半で最低限の設定をし、PL が構成されたら後半の作業をする ZYBO の場合、この後半の作業で I2C ROM から MAC アドレスを読み出すが、I2C は PL 経由の EMIO に接続されているので、ここをつなぐ .bit ファイルがロードされていないと FSBL の途中で固まる。 PS がびっくりしない程度の範囲で PL は起動後に書き換えてもよさそう。たとえば、Master AXI ポートの先の回路が変わるくらいはなんともない模様。ただ、Slave...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Unix かんけい" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="研究とか" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="freebsd" label="FreeBSD" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="zynq" label="Zynq" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>学期が始まってから急に忙しくなって、長らく作業が止まっていたのですが、ちょっと時間がとれたのでいくつかやってみたことがあります。わかったことのまとめ。</p>

<ul>
<li>PS の初期化 (CPU clockのPLLとか、PS側のI/Oの設定) は FSBL によって行われる。.bit ファイルではない。</li>
<li>したがって、boot.bin に .bit ファイルを含めることは必ずしも必須ではない (ZYBOの場合はちがう: 後述)</li>
<li>FSBL は前半で最低限の設定をし、PL が構成されたら後半の作業をする</li>
<li>ZYBO の場合、この後半の作業で I2C ROM から MAC アドレスを読み出すが、I2C は PL 経由の EMIO に接続されているので、ここをつなぐ .bit ファイルがロードされていないと FSBL の途中で固まる。</li>
<li>PS がびっくりしない程度の範囲で PL は起動後に書き換えてもよさそう。たとえば、Master AXI ポートの先の回路が変わるくらいはなんともない模様。ただ、Slave AXI ポートとか、ACP ポートはどうかな...</li>
</ul>

<p>とりあえず、Master AXI の先に LED とスイッチつないで、/dev/mem を mmap したところ、スイッチの値は読み出せましたが、LED は全然だめで、おそらくこれはキャッシュか何かが悪さをしているのだと思います。</p>

<p>FreeBSD/ARM の /dev/mem はまだ buggy なようで、キャッシュしちゃったりするようです。memcontrol も使えないし、まあ、そのあたりの実装がまだちゃんとできていない、ということなのでしょう。なので、AXI なモジュールつくったら、デバイスドライバ書かないといけない感じですね。というわけで、適当なドライバを書いたあたりで、また記事を書くことにしましょう。</p>
]]>
        
    </content>
</entry>

<entry>
    <title>ZYBO で FreeBSD が動くまで (ハードウェア編)</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2015/03/zybo-freebsd.html" />
    <id>tag:yasu2.prosou.nu,2015:/blog//1.5362</id>

    <published>2015-03-26T09:34:14Z</published>
    <updated>2015-03-26T09:36:06Z</updated>

    <summary>前回までの記事では Digilent が提供している ZYBO Base Design をそのまま使って FreeBSD を起動する、というのをやったのですが、この Base Design には HDMI のコントローラやら何やらが載っており、それなりに PL 部のリソースを使っています。自分で hack する以上は、PL 部はほとんどからっぽ、という状態からスタートしたいのが人情です。 というわけで、自分でやってみました。結果からいうと簡単で自明な理由なのですが、実はけっこうはまりましたので、記録としてここに残しておこうと思います。 作業を始める前に、Digilent のウェブサイトから ZYBO_zynq_def.xml (ZYBO Board Definition File for configuring the Zynq Processing System core in Xilinx Platform Studio and Vivado...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Unix かんけい" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="fpga" label="FPGA" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="freebsd" label="FreeBSD" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="zynq" label="Zynq" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>前回までの記事では Digilent が提供している ZYBO Base Design をそのまま使って FreeBSD を起動する、というのをやったのですが、この Base Design には HDMI のコントローラやら何やらが載っており、それなりに PL 部のリソースを使っています。自分で hack する以上は、PL 部はほとんどからっぽ、という状態からスタートしたいのが人情です。</p>

<p>というわけで、自分でやってみました。結果からいうと簡単で自明な理由なのですが、実はけっこうはまりましたので、記録としてここに残しておこうと思います。</p>

<p>作業を始める前に、Digilent のウェブサイトから ZYBO_zynq_def.xml (ZYBO Board Definition File for configuring the Zynq Processing System core in Xilinx Platform Studio and Vivado IP Integrator) をダウンロードしておくと便利です。これを使うと、クロックや MIO の設定などを ZYBO 用に一括で設定可能です (ZedBoard 用もあります)。</p>

<ol>
<li>Vivado のプロジェクトを作る (XC7Z010-CLG400-1)
<li>Create Block Design で新しいブロックデザインを開く
<li>Add IP で Zynq7 Processing System を加える
<li>現れた Zynq PS のブロックをダブルクリックして設定画面を開く
</ol>

<p>これで、"Import XPS Settings" からさきほどの ZYBO_zynq_def.xml を読み込むと、画面が以下のようになります。</p>

<p><a href="http://yasu2.prosou.nu/blog/2015/03/26/zynq-customize.png"><img alt="zynq-customize.png" src="http://yasu2.prosou.nu/blog/assets_c/2015/03/zynq-customize-thumb-400xauto-1444.png" width="400" height="280" class="mt-image-none" style="" /></a></p>

<p>I2C や UART1, SD0, USB0, ENET0 などにチェックが入ったら PS の設定は OK です。Clock Configuration や DDR Configuration なども正しく設定されているはずです。このあと、PS 周辺部の設定をしていきます。</p>

<p>ポイントは、<br />
<ul><br />
<li>DDR と FIXED_IO は Make External する (これは自動でもできる)<br />
<li>IIC_0 (I2Cのこと) も Make External する<br />
<li>SDIO0_WP は Low に落とす<br />
<li>Master AXI GP port のクロックは FCLK_CLK0 をつないでおく<br />
</ul><br />
というあたりです。</p>

<p>DDR (DDR SDRAM) と、FIXED_IO (固定機能ピン) は右クリックして "Make External" すれば下の図のようにブロックの出力ポートとなり、これはピンが決まっているので、なにもしなくても配置配線後にちゃんと外にでてくれます。</p>

<p>IIC_0 (I2C) も同様に Make External してブロックの外に出しますが、これは Zynq PS の設定の Peripheral I/O Pins の画面で見ると "EMIO" でなっており、PL 部の programmable fabric につながるので、最終的にどこのピンにつながるかを自分で指定する必要があります。</p>

<p>I2C、何に使うのかわからなくて放置していたのですが、実は ZYBO では MAC アドレスが I2C ROM に記録されており、FSBL を書き換えるところのコード (fsbl_hooks.c) ではこの ROM を参照しにいっています。このとき I2C が配線されていないとそこで止まってしまい、OS の起動までたどり着けないので注意しましょう。</p>

<p>また、ZYBO には Micro SD カードスロットが載っていますが、Micro SD なので Write Protect の検出がありません。これも EMIO に出ているピンですので、Add IP で "Constant" を呼び出して、値を 0 にして SDIO0_WP につないでしまいましょう。</p>

<p>Master AXI ポートがひとつありますが、いまのところ使わないので、このクロックは FCLK_CLK0 につないでおけばよいでしょう。何もつながないとエラーになります。</p>

<p>ということで、できあがりの block design は下のようになります。</p>

<p><a href="http://yasu2.prosou.nu/blog/2015/03/26/zynq-block.png"><img alt="zynq-block.png" src="http://yasu2.prosou.nu/blog/assets_c/2015/03/zynq-block-thumb-400xauto-1442.png" width="400" height="347" class="mt-image-none" style="" /></a></p>

<p>あとは、<br />
<ol><br />
<li>Generate Block Design する (Flow navigator で)<br />
<li>Create HDL Wrapper する (デザイン階層でブロックデザインを右クリック)<br />
<li>I2C のピンを制約に追加して bitstream 生成<br />
</ol><br />
すれば OK です。</p>

<p>デフォルトで HDL Wrapper に現れる I2C なポートの名前は iic_0_scl_io と iic_0_sda_io だと思いますので、以下を XDC ファイルに追加すれば OK です。これを書かずにやると、I2C のピンがどこか知らないところへ行ってしまうので気を付けましょう。</p>

<pre class='brush: plain'>
set_property PACKAGE_PIN N18 [get_ports iic_0_scl_io]
set_property IOSTANDARD LVCMOS33 [get_ports iic_0_scl_io]
set_property PACKAGE_PIN N17 [get_ports iic_0_sda_io]
set_property IOSTANDARD LVCMOS33 [get_ports iic_0_sda_io]
</pre>]]>
        
    </content>
</entry>

<entry>
    <title>ZYBO で FreeBSD が動くまで (3)</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2015/03/zybo-freebsd-3.html" />
    <id>tag:yasu2.prosou.nu,2015:/blog//1.5360</id>

    <published>2015-03-21T00:28:41Z</published>
    <updated>2015-03-23T03:56:52Z</updated>

    <summary><![CDATA[前回の記事では ZedBoard 用のカーネルで ZYBO を起動するところまで書きました。ZedBoard 用のカーネルでは、Ethernet のポートとして cgem0 が認識されますが、ifconfig であれやこれや頑張ってみてもどうにも使えません。dmesg をみるとこんな感じです。 cgem0: &lt;Cadence CGEM Gigabit Ethernet Interface&gt; mem 0xb000-0xbfff irq 54,55 on simplebus1 miibus0: &lt;MII bus&gt; on cgem0 ukphy0: &lt;Generic IEEE 802.3u media interface&gt; PHY 0 on miibus0 ukphy0: none,...]]></summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Unix かんけい" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="freebsd" label="FreeBSD" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="zynq" label="Zynq" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[前回の記事では ZedBoard 用のカーネルで ZYBO を起動するところまで書きました。ZedBoard 用のカーネルでは、Ethernet のポートとして cgem0 が認識されますが、ifconfig であれやこれや頑張ってみてもどうにも使えません。dmesg をみるとこんな感じです。

<pre class='brush: plain'>
cgem0: &lt;Cadence CGEM Gigabit Ethernet Interface&gt; mem 0xb000-0xbfff irq 54,55 on simplebus1
miibus0: &lt;MII bus&gt; on cgem0
ukphy0: &lt;Generic IEEE 802.3u media interface&gt; PHY 0 on miibus0
ukphy0: none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-master, 1000baseT-FDX, 1000baseT-FDX-master, auto
ukphy1: &lt;Generic IEEE 802.3u media interface&gt; PHY 1 on miibus0
ukphy1: none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-master, 1000baseT-FDX, 1000baseT-FDX-master, auto
cgem0: Ethernet address: 00:1e:c0:ac:bf:8e
</pre>

一方、10.1-RELEASE をみると、src/sys/arm/conf/ZEDBOARD には
<pre class='brush: plain'>
device          ether
device          cgem      # Zynq-7000 gig ethernet device
device          mii
device          e1000phy
</pre>
と書かれており、cgem に e1000phy を組み合わせて使うことになっているようです。e1000phy は Marvell 88E1000 用のドライバですが、ZYBO に載っているのは Realtek RTL8211E なので、rgephy を使うのが正しいです。
<p>
そういうわけで、ZYBO 用のカーネルコンフィギュレーションは ZEDBOARD のをちょっとだけいじれば OK です。
<pre class='brush: plain'>
-ident          ZEDBOARD
+ident          ZYBO
</pre>

<pre class='brush: plain'>
 device         ether
 device         cgem                    # Zynq-7000 gig ethernet device
 device         mii
-device         e1000phy
+device         rgephy                  # RealTek GbE PHY
</pre>

FreeBSD のソースコードリポジトリからソースツリーを取得してコンパイルします。root 権限は使わずにふつうにユーザ権限でやればよいでしょう。/usr/obj のかわりにどこにオブジェクトを生成するかは MAKEOBJDIRPREFIX で指定します。

<pre class='brush: plain'>
% setenv MAKEOBJDIRPREFIX=${pwd}/obj
% svn co https://svn0.us-west.freebsd.org/base/stable/10 src
% cd src
% cp sys/arm/conf/ZEDBOARD sys/arm/conf/ZYBO
% vi sys/arm/conf/ZYBO
% make -j8 buildworld TARGET_ARCH=armv6 
% make -j8 buildkernel TARGET_ARCH=armv6 KERNCONF=ZEDBOARD
</pre>

あとは SD カードをマウントしてふつうにインストールします。

<pre class='brush: plain'>
% su
# mount /dev/da0s2a/mnt
# setenv MAKEOBJPREFIX=...
# make installworld DESTDIR=/mnt
# make installkernel DESTDIR=/mnt KERNCONF=ZYBO
</pre>

installworld では chflags noschg とかしないといけないところが何カ所かありますが、ま、なんとかなります。
<p>

ports とかもふつうに使えるので、ある程度の開発環境は ZYBO ネイティブでやるのがよさそうです。僕の研究室の環境ではふつうに ZYBO のログインを LDAP で認証して、NFS 経由でホームディレクトリが見えています :)]]>
        
    </content>
</entry>

<entry>
    <title>ZYBO で FreeBSD が動くまで (2)</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2015/03/zybo-freebsd-2.html" />
    <id>tag:yasu2.prosou.nu,2015:/blog//1.5359</id>

    <published>2015-03-20T02:38:59Z</published>
    <updated>2015-03-20T09:55:50Z</updated>

    <summary>前回の記事でブートローダーを作るところまで行ったので、こんどはそれを使って、コンパイルを一切せずに FreeBSD をブートするところまで行きたいと思います。ZedBoard 用に配布されているファイルを使うので Ethernet は使えませんが、それ以外はふつうに使えますし、FreeBSD が動いている環境がなくても OK です。ただ、シリアルコンソールが使える環境を用意してください。 ZedBoard 用のSD カードイメージをダウンロードして書き込む 起動用のファイルを ZYBO 用に差し替える 動かしてみる といった手順で説明していきます。 Step 1: SDカードイメージをダウンロードして書き込む 配布されている SD カードイメージのサイズは 1GB 程度 (大半が空き領域ですが) なので、2GB 以上のカードならば問題ないと思います。Class 10 など、なるべく速いものを用意しましょう。 書き込むと、 mmcsd0s1: FAT フォーマットのブート領域 mmcsd0s2a: UFS な FreeBSD root filesystem...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
    <category term="freebsd" label="FreeBSD" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="zynq" label="Zynq" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[前回の記事でブートローダーを作るところまで行ったので、こんどはそれを使って、コンパイルを一切せずに FreeBSD をブートするところまで行きたいと思います。ZedBoard 用に配布されているファイルを使うので　Ethernet は使えませんが、それ以外はふつうに使えますし、FreeBSD が動いている環境がなくても OK です。ただ、シリアルコンソールが使える環境を用意してください。
<ol>
<li>ZedBoard 用のSD カードイメージをダウンロードして書き込む
<li>起動用のファイルを ZYBO 用に差し替える 
<li>動かしてみる
</ol>
といった手順で説明していきます。
<p>
<em>Step 1: SDカードイメージをダウンロードして書き込む</em>
<p>
配布されている SD カードイメージのサイズは 1GB 程度 (大半が空き領域ですが) なので、2GB 以上のカードならば問題ないと思います。Class 10 など、なるべく速いものを用意しましょう。
<p>
書き込むと、
<ul>
<li> mmcsd0s1: FAT フォーマットのブート領域
<li> mmcsd0s2a: UFS な FreeBSD root filesystem
</ul>
になりますので、書き込み前に Micro SD カードに入っていた内容は消えてしまいます。注意してください。
<p>
SD カードのイメージは、FreeBSD の FTP サイトの、pub/FreeBSD/releases/arm/armv6/ISO-IMAGES/ で配布されています。たとえば、10.1-RELEASE のものなら、10.1/FreeBSD-10.1-RELEASE-arm-armv6-ZEDBOARD.img.bz2 をダウンロードして、bunzip2 (最近のものは xz で圧縮されていますので unxz) で展開してください。これをそのまま dd で書き込めば OK です。

<pre class='brush: plain'>
% dd if=FreeBSD-10.1-RELEASE-arm-armv6-ZEDBOARD.img of=/dev/da0 bs=1048576
</pre>

とかそんな感じです。of= のところはデバイス名なので、OS や環境次第です。Mac でも、/dev/disk1 とかすれば、ちゃんと書き込むことができます。書き込みに成功すると、/dev/ の下にパーティションがふたつ生えてきます。次のステップでは、このうち 1 つ目の、FAT フォーマットのパーティションに、起動に必要なファイルを書き込みます。

<em>Step 2: 起動用のファイルを ZYBO 用に差し替える</em>

SD カードの起動用パーティションには以下のファイルがあります。

<ul>
<li>boot.bin: FSBL + .bit ファイル + u-boot (ZedBoard 用)
<li>license.txt
<li>ubldr: u-boot 用の FreeBSD ブートローダ
<li>uenv.txt: u-boot の設定ファイル (ZedBoard 用)
<li>zedboard.dtb: ZedBoard の device tree blob
<li>zedboard.dts: zedboard.dts のソース
</ul>

このうち boot.bin は前の記事で作ったもの、ubldr は SD カードにあるものをそのまま使えますので、最後の3つだけを準備すれば OK です。
<p>
uenv.txt には u-boot がどのファイルをどのアドレスにロードし、どこから起動するか、が記述されています。最低限変更しなければならないのは、device tree blob のファイル名だけです。また、ZedBoard 用に配布されているものは SD カードからの boot だけでなく、tftp での boot にも対応した記述がされていますが、これは不要なら削除しても構いません。たとえば、以下のようにします:
<pre class='brush: plain'>
kernel_addr=0x100000
ubldr_addr=0x100000
dtb_addr=0x1000
dtb_name=zybo.dtb
uenvcmd=echo Booting FreeBSD from SD...; mmcinfo ; fatload mmc 0 ${ubldr_addr} ubldr ; fatload mmc 0 ${dtb_addr} ${dtb_name} ; fdt addr ${dtb_addr} ; bootelf ${ubldr_addr}
</pre>
このうち、kernel_addr は実は使わないのですが、なんとなく残してあります。
<p>
これで、起動に必要なファイルを SD カードからメモリにロードして kernel を起動する準備ができました。しかし、 Zynq などで使われているバスは、PCI バスのようなネゴシエーションの仕組みを持っていないので、kernel には (かつて ISA バス時代の FreeBSD や Linux がそうであったように) 各デバイスのアドレスなどを教えてあげる必要があります。ISA バスの時代にはこれらは kernel にハードコードされており、ハードウェアの変更にあわせてカーネルを再構築する必要がありましたが、最近はこれを device tree blob (.dtbファイル) というのを使って再構築なしに簡単に実現する仕掛けが用意されています。.dtb は、簡単な構文のソースファイル (.dts) から生成することができ、.dtb から .dts への逆変換も可能です。
<p>
Device tree blob は Linux でも FreeBSD でも使われていますが、記述する内容は OS のバスアーキテクチャやデバイスドライバに依存するため、実質的に内容は OS 依存になります。したがって、Linux 用の .dtb をそのまま使うことはできません。なお、ZYBO + Linux 用の .dtb は Digilent が GitHub に置いている Linux カーネルのリポジトリから手に入れることができます。FreeBSD の場合には、以下で説明するように ZedBoard 用のものを変更するのがよいでしょう。
<p>
変更は2カ所必要で、まず一カ所目はタイマの周波数です。Zynq の Global Timer は CPU core clock の半分の周波数で動きますので、これを正しく設定する必要があります。ZedBoard の ARM core は 666MHz 動作ですが、ZYBO では 650MHz になりますので、325MHz を設定します。10進数でも16進数でも構いません。この数字を間違えると、タイマ割り込みの周波数が正しく設定されず、変なところで device timeout が発生したりして、あちこちおかしくなるので注意が必要です (PS への供給クロックかと思って 50MHzにしたら、SD カードがすぐタイムアウトするし、時計が5倍速くらいで進むのでびっくりしました...)。
<pre class='brush: plain'>
                timer@f00600 {
                        compatible = &quot;arm,mpcore-timers&quot;;
-                       clock-frequency = &lt;0x13de4355&gt;;
+                       clock-frequency = &lt;325000000&gt;;
                        #address-cells = &lt;0x1&gt;;
                        #size-cells = &lt;0x0&gt;;
                        reg = &lt;0xf00200 0x100 0xf00600 0x20&gt;;
                        interrupts = &lt;0x1b 0x1d&gt;;
                        interrupt-parent = &lt;0x1&gt;;
                };
</pre>
<p>
もうひとつ、USB host (echi0) からは phy_vbus_ext を削除します。ZedBoard では USB PHY が外付けなのでこれが必要ですが、ZYBO ではこれがついていると USB PHY の初期化が行われず、USB が使えません。
<pre class='brush: plain'>
                ehci0: ehci@2000 {
                        compatible = &quot;xlnx,zy7_ehci&quot;;
                        reg = &lt;0x2000 0x1000&gt;;
                        interrupts = &lt;0x35&gt;;
                        interrupt-parent = &lt;0x1&gt;;
-                       phy_vbus_ext;
                };
</pre>
<p>
また、ZYBO 用のファイルですよ、ということをきちんと書いておいてもよいと思います (とりあえず動けばいいよ、というのなら関係ないですが)。
<pre class='brush: plain'>
-       model = &quot;zedboard&quot;;
-       compatible = &quot;digilent,zedboard&quot;;
+       model = &quot;zybo&quot;;
+       compatible = &quot;digilent,zybo&quot;;
</pre>
<p>
.dts をコンパイルして .dtc を作るには <a href="http://www.devicetree.org/Device_Tree_Compiler">Device Tree Compiler</a>が必要です。たいていのプラットフォームで make 一発でビルドできると思います。
<pre class='brush: plain'>
% dtc -I dts -O dtb zybo.dts -o zybo.dtb
</pre>
のようにすると zybo.dts から zybo.dtb を生成することができます。
boot.bin, uenv.txt, zybo.dtb を、Micro SD カードの1つ目のパーティション (FAT) にコピーすれば終わりです。
<p>
<em>Step 3: 起動する</em>
<p>
ZYBO は基本的に USB からの給電でも動くようですが、USB ハブの先につながっていたりすると、ARM core の負荷がかかったときなどに電源が落ちることがあるようです (僕の環境では起きるのですが、大丈夫な方もいらっしゃるようです)。5V の AC アダプタを用意することをおすすめします。同じ Digilent の Atlys ボードについていたもの (5V 4A) をそのまま使っています。
<p>
Micro SD カードを ZYBO の Micro SD スロットに挿し、JP5 のジャンパが "SD" の位置になっていることを確認したら、シリアルコンソールのホストになる PC に USB ケーブルをつないで、ボードの電源を入れましょう。シリアルポート (/dev/cuaU1 あるいは /dev/ttyUSB1 あたり) に 115200bps でつなげば、u-boot → ubldr → FreeBSD kernel の順番に起動し、パスワードなしの root アカウントでログインできると思います。
<p>
SD カードイメージに含まれている UFS パーティション (/dev/mmcsd0s2a) は、初回の起動時にカードのサイズいっぱいまで拡大されますので、それで不都合がある場合にはあらかじめ FreeBSD なマシンで Micro SD カード上の /etc/rc.conf を修正しておいてください。
<p>
ボードの電源を切る前に、shutdown -h now するのをお忘れなく。]]>
        
    </content>
</entry>

<entry>
    <title>ZYBO で FreeBSD が動くまで (1)</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2015/03/zybo-freebsd-1.html" />
    <id>tag:yasu2.prosou.nu,2015:/blog//1.5358</id>

    <published>2015-03-19T03:15:14Z</published>
    <updated>2015-03-20T00:06:08Z</updated>

    <summary>Digilent から出ている ZYBO という、Xilinx Zynq-7000 SoC を積んだボードがお手頃価格なので、研究室で何枚か買ってみました。Zynq は FPGA と ARM がひとつのチップに乗った SoC (system on a chip) で、ARM では Linux も動くし、FPGA 部分に載せた回路を周辺デバイスとして動かすこともできるので、けっこう面白いことができそう。ZYBO に載っているチップ (XC7Z010) の FPGA 部分は今となってはそれほど大きいサイズではないのだけれど... で、僕は Linux のデバイスドライバとかよくわからない (一応書けるけども... なんか苦手) ので、FreeBSD 動くといいなー、と。 同様のボードでひと回り大きいチップを積んだ Zedboard というボードもあり、こちらは FreeBSD 10.1-RELEASE から...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Unix かんけい" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="fpga" label="FPGA" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="freebsd" label="FreeBSD" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="zynq" label="Zynq" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>Digilent から出ている <a href="http://www.digilentinc.com/Products/Detail.cfm?Prod=ZYBO">ZYBO</a> という、Xilinx Zynq-7000 SoC を積んだボードがお手頃価格なので、研究室で何枚か買ってみました。Zynq は FPGA と ARM がひとつのチップに乗った SoC (system on a chip) で、ARM では Linux も動くし、FPGA 部分に載せた回路を周辺デバイスとして動かすこともできるので、けっこう面白いことができそう。ZYBO に載っているチップ (XC7Z010) の FPGA 部分は今となってはそれほど大きいサイズではないのだけれど...</p>

<p>で、僕は Linux のデバイスドライバとかよくわからない (一応書けるけども... なんか苦手) ので、FreeBSD 動くといいなー、と。</p>

<p>同様のボードでひと回り大きいチップを積んだ <a href="http://www.digilentinc.com/Products/Detail.cfm?Prod=ZEDBOARD">Zedboard</a> というボードもあり、こちらは<a href="https://wiki.freebsd.org/FreeBSD/arm/Zedboard"> FreeBSD 10.1-RELEASE から (まだ Tier1 ではないものの) サポートされている</a> ので、なんとかなるのでは、と思って試しはじめたものの、boot の仕組みから何から全然わからなくて、ちゃんと使えるようになるまで3日かかった。ということで、いちおう記録にまとめておこうと思います。FreeBSD のカーネル構築なんかしたことないよ、とか、FPGA 触ったことないよ、という人にはあまり参考にならないかもしれないけれど。</p>

<p><em>Step 0: 必要なもの</em></p>

<p>以下のものが必要です。今回は 1. の部分を書いていきます。Xilinx Vivado が動く開発環境が必要です。僕は Linux でやっていますが、Windows でも大丈夫かもしれません。</p>

<p>1. BOOT.bin 3点セット: Zynq SoCの構成情報, FSBL (First stage boot loader), u-boot <br />
2. Device tree blob + uenv.txt<br />
3. ubldr + FreeBSD </p>

<p><em>Step 1: SoC を構成する</em></p>

<p>Zynq は PS (Processing System) と PL (Programmable Logic) のふたつの部分に分かれており、AXI インタフェイスで接続されています。PL 部分はふつうの FPGA だと思えば OK です。</p>

<p>PS には ARM と、メモリコントローラや USB コントローラなどの周辺回路が入っているのだけれど、ただ Micro SD カードにブートローダーを書き込んだだけでは起動できません。Zynq に載っている PLL を使って、ARM コアや SDRAM をはじめとする各所のクロックをどうするか、とか、USB コントローラなどの各種周辺回路をどの MIO (Multiplexed I/O) ピンに引き出すか、といった設定が必要です。Zynq の場合、これらは PL 部分の構成情報といっしょに書き込む必要があります。</p>

<p>とりあえず FreeBSD を動かす、というだけの場合、FPGA の部分についてはあまり考えることはありませんし、HDL を書いて自分で回路を作る、という必要もありません。今回は手っ取り早く Digilent の ZYBO のページにある "ZYBO Base System Design" を使います。同じページにある "Embedded Linux hands-on tutorial for the ZYBO" にこれの説明があります。基本的には、Xilinx の設計ツールである Vivado で、次のような画面でブロックをつないでいくだけです。</p>

<p><a href="http://yasu2.prosou.nu/blog/2015/03/19/block-design.png"><img alt="block-design.png" src="http://yasu2.prosou.nu/blog/assets_c/2015/03/block-design-thumb-400xauto-1440.png" width="400" height="217" class="mt-image-none" style="" /></a></p>

<p>Base System Design では HDMI を動かしたりするいろいろが含まれており、PS 以外にもいろいろなブロックが配置されていますが、FreeBSD をきどうするだけならこれらは必須ではありません。この場合のポイントは、Zynq7 Processing System の設定で、</p>

<p>- MIO Configuration: USB0 (MIO28-39), SD0 (MIO40-45), UART1 (MIO48-49), Bank 1: 1.8V<br />
- Clock Configuration: Input Frequency = 50MHz<br />
- DDR Configuration: Memory part = MT41K128M16 JT125</p>

<p>といったあたりです。Base System Design では このあたりは ZYBO のボード事情に合わせて正しく設定されています。Digilent tutorial の通りにして、Vivado で "Generate Bitstream" すると、Zynq の回路を構成するための .bit ファイルが生成されます。</p>

<p><em>Step 2: u-boot をコンパイルする</em></p>

<p>順序的には SoC が構成されたあと、FSBL が読み込まれて、そこから u-boot が起動するのですが、FSBL を使うときは Xilinx SDK が出てくるので、先に u-boot の話をしておきます。</p>

<p>u-boot は組み込みシステム向けの、OS 非依存なブートローダで、SD カードや tftp を使って起動することができます。Digilent が配布しているものを使いました (これもチュートリアルにある通りです)。設定とかはないので、make するだけです。</p>

<pre class='brush: plain'>
% git clone -b master-next https://github.com/DigilentInc/u-boot-Digilent-Dev.git
% cd u-boot-Digilent-Dev
% make CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_zybo_config
% make CROSS_COMPILE=arm-xilinx-linux-gnueabi-
</pre>

<p>これで u-boot というファイルができるので、それを u-boot.elf に rename しておきます。</p>

<p><em>Step 3: First stage boot loader をコンパイルする</em></p>

<p>Zynq PS のアドレスマップなどはハードウェアの構成によって変わるので、Vivado で作ったハードウェアに合わせたブートローダを作る必要があります。これも、Digilent のチュートリアルにある通りの方法で作ることができます。</p>

<p>基本的には、<br />
- Vivado で File → Export Hardware で SDK 用にハードウェアの構成情報を書き出す<br />
- 続いて Vivado で File → Launch SDK を選んで Xilinx SDK を起動する<br />
- File → New → Application Project でプロジェクトを作る際のテンプレートとして Zynq FSBL を選択<br />
- fsbl_hooks.c を Base System Design の配布ファイルにあるものと差し替え (これやらないと MAC アドレスが毎回変わるのだとか...)</p>

<p>という流れです。Vivado 側で (PS から見た) ハードウェアの構成が変化した場合には作り直す必要がありますが、OS 非依存ですので Linux でも FreeBSD でも同じです。</p>

<p>SDK のフォルダの下の、FSBL/Debug/ (FSBL は Application project 名) に FSBL.elf ができるはずです。これが FSBL のバイナリです。</p>

<p><em>Step 4: BOOT.bin を作る</em></p>

<p>.bit ファイル → FSBL → u-boot の順で SD カードから読み込まれて Zynq が起動するわけですが、これらは Zynq Boot Image (BOOT.bin) としてひとつのファイルにまとめて SD カードに書き込みます。SDK のメニューバーで、Xilinx Tools → Create Zynq Boot Image を選ぶと作ることができます。</p>

<p>一番下の boot image partitions というところに、<br />
- FSBL.elf<br />
- (自分のFPGA構成情報).bit<br />
- u-boot.elf<br />
をこの順番に Add していけば OK です。FSBL.elf のところには [bootloader] という表示がつきますので、確認してください。</p>

<p>指定したディレクトリに BOOT.bin と、つかったファイルのリストの .bif ファイルが生成されれば、OS を起動する準備はおおむね準備完了です。</p>

<p>(続く、といいなあ)</p>]]>
        
    </content>
</entry>

<entry>
    <title>GTK-mac-bundler HOWTO (ビルド編)</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2015/03/gtk-mac-bundler-howto-1.html" />
    <id>tag:yasu2.prosou.nu,2015:/blog//1.5357</id>

    <published>2015-03-13T05:18:52Z</published>
    <updated>2015-03-20T00:22:13Z</updated>

    <summary>gtk-mac-bundler の本体もとってきて、適当なディレクトリに展開して make install します。 $ tar xf gtk-mac-bundler-0.7.3.tar.xz $ cd gtk-mac-bundler-0.7.3 $ make install これで gtk-mac-bundler がインストールされる先は ~/.local/ 以下で、jhbuild で gtk をインストールした先と同じです。また、展開したフォルダ以下の examples/ には gtk-mac-bundler を実行するときの設定ファイルのサンプルがいろいろあります。 pkg-config が参照する GTK のインストールディレクトリを適切に選択するためには、PKG_CONFIG_PATH とかを設定する必要があるのですが、そういうのはまとめて jhbuild に委ねます。 $ jhbuild shell これで起動するシェルは環境設定がちゃんとできているだけで普通の bash なので、このなかで普通に自分のプログラムを...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Mac" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Unix かんけい" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gtkosx" label="GTK+-OSX" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>gtk-mac-bundler の本体もとってきて、適当なディレクトリに展開して make install します。<br />
<pre class='brush: plain'><br />
$ tar xf gtk-mac-bundler-0.7.3.tar.xz<br />
$ cd gtk-mac-bundler-0.7.3<br />
$ make install<br />
</pre></p>

<p>これで gtk-mac-bundler がインストールされる先は ~/.local/ 以下で、jhbuild で gtk をインストールした先と同じです。また、展開したフォルダ以下の examples/ には gtk-mac-bundler を実行するときの設定ファイルのサンプルがいろいろあります。</p>

<p>pkg-config が参照する GTK のインストールディレクトリを適切に選択するためには、PKG_CONFIG_PATH とかを設定する必要があるのですが、そういうのはまとめて jhbuild に委ねます。<br />
<pre class='brush: plain'><br />
$ jhbuild shell<br />
</pre><br />
これで起動するシェルは環境設定がちゃんとできているだけで普通の bash なので、このなかで普通に自分のプログラムを build して実行ファイルを作ります。</p>

<p>アプリケーションバンドルを作るには以下のファイルが必要です。</p>

<p>- .bundle ファイル (gtk-mac-bundle の設定)<br />
- Info.plist (OS X 用)<br />
- 起動用シェルスクリプト<br />
- アイコンファイル</p>

<p>[.bundle ファイル]</p>

<p>gtk-demo をアプリケーションバンドルにするためのサンプルが examples/gtk-demo.bundle として用意されており、中味は XML ファイルです。最低限変更が必要なのは、</p>

<p>- launcher-script (起動用シェルスクリプト)<br />
- plist (Info.plist として使うファイル)<br />
- main-binary (実行ファイル本体)</p>

<p>の3つです。アイコンのファイルがある場合には、これも変更しておきましょう。</p>

<p>また、pango に関連するバイナリが不足しており、このままだとポータビリティのない (他のMacで動かない) バンドルができてしまうので、pango-querymodules や pango のモジュールを含める設定をします。</p>

<pre class='brush: xml'>
  &lt;binary&gt;
    ${prefix}/bin/pango-querymodules
    ${prefix}/lib/pango/1.8.0/modules/*.so
  &lt;/binary&gt;
</pre>

<p>[Info.plist]</p>

<p>アプリケーションのバージョンや Copyright の情報などが記述されています。examples/Info.plist をたたき台にしてテキストエディタで書きます。</p>

<p>[起動用シェルスクリプト] </p>

<p>サンプルとして examples/launcher.sh が用意されており、基本的にはこれで変更の必要はない、はずなのですが、やはり pango に関連する部分を修正しておかないと、他の Mac に持って行ったときにフォントが全部□になってしまいます。</p>

<p>修正が必要なのはスクリプトのわりと最初のほうと、一番最後の2カ所です。これで、起動のたびに pango のモジュールパスを正しく生成するようにします。</p>

<pre class='brush: plain'>
 export PANGO_RC_FILE=&quot;$bundle_etc/pango/pangorc&quot;
+export PANGO_LIBDIR=&quot;$bundle_lib&quot;
+export PANGO_SYSCONFDIR=&quot;$bundle_etc&quot;
</pre>

<pre class='brush: plain'>
+mkdir -p &quot;$bundle/pango/1.8.0&quot;
+ln -sf ../../ &quot;$bundle/pango/1.8.0/modules&quot;
+
+&quot;$bundle_bin/pango-querymodules&quot; &gt; &quot;$bundle_etc/pango/pango.modules&quot;
+
+export PANGO_LIBDIR=&quot;&quot;
+
 $EXEC &quot;$bundle_contents/MacOS/$name-bin&quot; &quot;$@&quot; $EXTRA_ARGS
</pre>

<p>これで準備は終わりです。<br />
<pre class='brush: plain'><br />
$ gtk-mac-bundler hogehoge.bundle<br />
</pre><br />
とすれば、~/Desktop にアプリケーションバンドルが作られるはずです。</p>]]>
        
    </content>
</entry>

<entry>
    <title>GTK-mac-bundler HOWTO (環境構築編)</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2015/03/gtk-mac-bundler-howto.html" />
    <id>tag:yasu2.prosou.nu,2015:/blog//1.5356</id>

    <published>2015-03-13T05:11:12Z</published>
    <updated>2015-03-20T00:06:43Z</updated>

    <summary>ひさびさに GMV を Mac 版バイナリ配布用にビルドすることにしました。で、以前は GTK+ のパッケージを別にインストールしてもらう構成にしていたのだけれど、これ、インストール先の環境を汚してしまう感じがして大変申し訳ないので、ちゃんと Application bundle にしたいなー、と思いまして。 GMV を intensive に開発していた頃は、まだ GTK+-Quartz はあちこち怪しいところもあった (Gimp の配布も X11 版でした) んですが、いまはかなり安定して動くようになりましたし、しかも gtk-mac-bundler なんていうツールまで提供されているので、これは使うしかない。 まず、MacOS X 10.8 + Xcode をセットアップ。最近は MacOS X も仮想マシンとして使えるようになって本当に便利。職場では VMware Fusion ですが、自宅では VirtualBox でやってます。どっちもちゃんと動きます。VirtualBox だと、MacOS 用の Guest...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Mac" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Unix かんけい" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gtkosx" label="GTK+-OSX" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>ひさびさに <a href="http://murasaki.dna.bio.keio.ac.jp/gmv.html">GMV</a> を Mac 版バイナリ配布用にビルドすることにしました。で、以前は GTK+ のパッケージを別にインストールしてもらう構成にしていたのだけれど、これ、インストール先の環境を汚してしまう感じがして大変申し訳ないので、ちゃんと Application bundle にしたいなー、と思いまして。</p>

<p>GMV を intensive に開発していた頃は、まだ GTK+-Quartz はあちこち怪しいところもあった (Gimp の配布も X11 版でした) んですが、いまはかなり安定して動くようになりましたし、しかも <a href="https://wiki.gnome.org/Projects/GTK%2B/OSX/Bundling">gtk-mac-bundler</a> なんていうツールまで提供されているので、これは使うしかない。</p>

<p>まず、MacOS X 10.8 + Xcode をセットアップ。最近は MacOS X も仮想マシンとして使えるようになって本当に便利。職場では VMware Fusion ですが、自宅では VirtualBox でやってます。どっちもちゃんと動きます。VirtualBox だと、MacOS 用の Guest Additions がないので GUI で使うには若干不便 (host からの copy & paste とかができない) ですが、Xcode のセットアップまでやっちゃえばあとは ssh でログインして作業できることが大半ですし、あんまり問題ない感じ。</p>

<p>GNOME.org の <a href="https://wiki.gnome.org/Projects/GTK%2B/OSX/Building#Building_Other_Programs">GTK+-OSX</a> のページから、gtk-osx-build-setup.sh というのをとってきてスタートです。なお、一連のツールは jhbuild という仕掛けを利用しており、gtk-osx-build-setp はこれを ~/.local/bin にインストールします。<br />
<pre class='brush: plain'><br />
$ sh ./gtk-osx-build-setup.sh<br />
$ export PATH=~/.local/bin:$PATH<br />
$ jhbuild bootstrap<br />
</pre></p>

<p>これでとっかかりの部分があっけなく完了です。<p></p>

<p>ここから先は bootstrap でインストールされたツール群を利用するために、~/gtk/inst/bin にも PATH を通す必要がありますが、いろいろの環境変数の設定が面倒なので、<br />
<pre class='brush: plain'><br />
$ jhbuild shell<br />
</pre><br />
として、構築環境を起動します。しかしここでは MACOSX_DEPLOYMENT_TARGET という環境変数がなぜか 10.7 に設定されており、あとで GTK の build がエラーになるので、<br />
<pre class='brush: plain'><br />
$ export MACOSX_DEPLOYMENT_TARGET=10.8<br />
</pre><br />
としておいて、一通りのツールを作ります。Python は build しておかないと、システム標準のでは meta-gtk-osx-core の build でエラーがでる気がします。<br />
<pre class='brush: plain'><br />
% jhbuild build python<br />
% jhbuild build meta-gtk-osx-bootstrap<br />
% jhbuild build meta-gtk-osx-core<br />
</pre></p>

<p>(続く)</p>]]>
        
    </content>
</entry>

<entry>
    <title>/dev/ttyUSB on Linux</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2015/03/devttyusb-on-linux.html" />
    <id>tag:yasu2.prosou.nu,2015:/blog//1.5355</id>

    <published>2015-03-12T08:57:51Z</published>
    <updated>2015-03-20T00:07:18Z</updated>

    <summary><![CDATA[Linux 全然わからないんですが、FPGA に書き込みするのに使ってるマシンから FPGA 上の UART を叩きたかったので。 で、USB-UART が /dev/ttyUSB0 とかに生えてくるのだけれど、これの permission がふつうのユーザからは読み書きできないようになってたので、udev のルールを書き足してみたら、うまくいきました。 # cat /etc/udev/rules.d/51-ttyUSB.rules KERNEL==&quot;ttyUSB*[0-9]*&quot;, GROUP=&quot;dialout&quot;, MODE=&quot;0666&quot; # /sbin/udevadm control --reload あと、GNU screen でシリアルポート使えるの全然知らなかったのですが、最近の Linux には cu とかないし、minicom はなんか慣れないし、これはいいですね。 % screen /dev/ttyUSB0 9600 とかすれば9600bpsでつながるし、終了はふつうにscreen のkill window でいけるぽい。...]]></summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Unix かんけい" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="linux" label="Linux" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>Linux 全然わからないんですが、FPGA に書き込みするのに使ってるマシンから FPGA 上の UART を叩きたかったので。</p>

<p>で、USB-UART が /dev/ttyUSB0 とかに生えてくるのだけれど、これの permission がふつうのユーザからは読み書きできないようになってたので、udev のルールを書き足してみたら、うまくいきました。</p>

<pre class='brush: plain'>
# cat /etc/udev/rules.d/51-ttyUSB.rules
KERNEL==&quot;ttyUSB*[0-9]*&quot;, GROUP=&quot;dialout&quot;, MODE=&quot;0666&quot;
# /sbin/udevadm control --reload
</pre>

<p>あと、GNU screen でシリアルポート使えるの全然知らなかったのですが、最近の Linux には cu とかないし、minicom はなんか慣れないし、これはいいですね。</p>

<pre class='brush: plain'>
% screen /dev/ttyUSB0 9600
</pre>

<p>とかすれば9600bpsでつながるし、終了はふつうにscreen のkill window でいけるぽい。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Yosemite Beta と iOS 8</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2014/09/yosemite-beta-ios-8.html" />
    <id>tag:yasu2.prosou.nu,2014:/blog//1.5353</id>

    <published>2014-09-23T02:16:45Z</published>
    <updated>2014-09-23T03:24:33Z</updated>

    <summary>古い MacBook Air (Late 2010) を引っ張り出してきて Yosemite Beta をクリーンインストールしてみました。Yosemite Beta のインストーラのフォルダの中に createinstallmedia みたいなツールがあり、それで USB メモリを起動ディスクにできます。 [ iCloud ] Yosemite では iCloud Drive にアップグレードしないと iWork で作って iCloud に置いてあるデータにアクセスできないっぽい。 iOS 8 では iCloud (Drive でない) のデータにアクセスできています。 [ iOS - Mac 連携 ]...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Mac" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ios8" label="iOS 8" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yosemite" label="Yosemite" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>古い MacBook Air (Late 2010) を引っ張り出してきて Yosemite Beta をクリーンインストールしてみました。Yosemite Beta のインストーラのフォルダの中に createinstallmedia みたいなツールがあり、それで USB メモリを起動ディスクにできます。</p>

<p>[ iCloud ]</p>

<p>Yosemite では iCloud Drive にアップグレードしないと iWork で作って iCloud に置いてあるデータにアクセスできないっぽい。</p>

<p>iOS 8 では iCloud (Drive でない) のデータにアクセスできています。</p>

<p>[ iOS - Mac 連携 ]</p>

<p>iPhone に電話かかってくると Mac の画面に通知が出る。出たからどうにかなるかっていうと、iPhone で普通に電話とるしかないみたいですが。</p>

<p>発信もできそうだけど、やってみても何もおきませんでした。<br />
FaceTime の設定の画面には iPhone と同じ WiFi ネットワークにつながっていれば連携ができる、という説明があります。</p>

<p>[ 動いたもの ]</p>

<p>- ATOK<br />
- Dropbox (ただしファイルやフォルダのアイコンに同期状況のマークがつかない)<br />
- Evernote <br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>台風予報</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2014/08/post-1444.html" />
    <id>tag:yasu2.prosou.nu,2014:/blog//1.5352</id>

    <published>2014-08-06T14:06:12Z</published>
    <updated>2014-08-06T14:10:07Z</updated>

    <summary>台風が発生するとあっという間にやってくる沖縄では、わりとみんな真剣に台風の進路予想をみるわけで。 でも実はいろいろなところが予報出してます。 米海軍: http://www.usno.navy.mil/JTWC/ 気象庁: http://www.jma.go.jp/jp/typh/ Weathernews: http://weathernews.jp/typhoon/ ちょっと前に 台風の上陸地点について気象庁と Weathernews が異なった見解を出して問題になる という事件がありましたが、進路予報もよく見るとちょっとずつ違っていたりします。 今回は米海軍の予報だと沖縄本島地方にはあんまり近付かない感じ。そうなってほしいなあ。...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="沖縄" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="台風" label="台風" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>台風が発生するとあっという間にやってくる沖縄では、わりとみんな真剣に台風の進路予想をみるわけで。<br />
でも実はいろいろなところが予報出してます。</p>

<p>米海軍: <a href="http://www.usno.navy.mil/JTWC/">http://www.usno.navy.mil/JTWC/</a><br />
気象庁: <a href="http://www.jma.go.jp/jp/typh/">http://www.jma.go.jp/jp/typh/</a><br />
Weathernews: <a href="http://weathernews.jp/typhoon/">http://weathernews.jp/typhoon/</a></p>

<p>ちょっと前に <a href="http://slashdot.jp/story/09/10/20/0026203/%E5%8F%B0%E9%A2%A8-18-%E5%8F%B7%E3%81%AE%E4%B8%8A%E9%99%B8%E5%9C%B0%E7%82%B9%E3%82%92%E5%B7%A1%E3%81%A3%E3%81%A6%E6%B0%97%E8%B1%A1%E5%BA%81%E3%81%A8%E3%82%A6%E3%82%A7%E3%82%B6%E3%83%BC%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9%E3%81%8C%E3%83%90%E3%83%88%E3%83%AB">台風の上陸地点について気象庁と Weathernews が異なった見解を出して問題になる</a> という事件がありましたが、進路予報もよく見るとちょっとずつ違っていたりします。</p>

<p>今回は米海軍の予報だと沖縄本島地方にはあんまり近付かない感じ。そうなってほしいなあ。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ANA136</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2014/06/ana136-1.html" />
    <id>tag:yasu2.prosou.nu,2014:/blog//1.5351</id>

    <published>2014-06-17T08:48:48Z</published>
    <updated>2014-06-17T09:20:58Z</updated>

    <summary>羽田からの飛行機はいつも、素敵な誰かを乗せてやってくる。 いつも一人で乗っていた羽田線に、 奥さんを東京から迎えて、夫婦で乗るようになり、 それから、両親が沖縄に遊びにきたりして。 そんなわけで、生まれてくる娘を迎えに東京へ行ってきました。 帰宅してから那覇に向かうバスに乗るまで20分、バスの中で飛行機を予約する、というとんでもないハードスケジュールで飛んだけど、出産に間に合って本当によかった。 一人のフライトが二人になり、今年の夏には三人で。...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>羽田からの飛行機はいつも、素敵な誰かを乗せてやってくる。</p>

<p>いつも一人で乗っていた羽田線に、<br />
奥さんを東京から迎えて、夫婦で乗るようになり、<br />
それから、両親が沖縄に遊びにきたりして。</p>

<p>そんなわけで、生まれてくる娘を迎えに東京へ行ってきました。</p>

<p>帰宅してから那覇に向かうバスに乗るまで20分、バスの中で飛行機を予約する、というとんでもないハードスケジュールで飛んだけど、出産に間に合って本当によかった。</p>

<p>一人のフライトが二人になり、今年の夏には三人で。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ownCloud いれてみた</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2014/05/owncloud.html" />
    <id>tag:yasu2.prosou.nu,2014:/blog//1.5350</id>

    <published>2014-05-05T02:47:23Z</published>
    <updated>2014-05-05T03:03:08Z</updated>

    <summary>いままで過去の発表スライドはぜんぶ subversion で管理して同期してたのだけれど、Keynote のファイルがフォルダ形式に戻っちゃったので、ちょっと編集すると .svn が消えたりして困ったことになる問題が頻発。 Dropbox でもいいのだけれど、ちょっと容量的に心配なのでどうしよっかなー、と思って、ownCloud いれてみた。 感想とか制約とか: - セットアップ超簡単。FreeBSD ports でインストールするだけでほとんど終わる (SQLite つかえるし) - 速度が遅い？と思ったけどそうでもなかった - Mac 版のクライアントは普通にイケてる - ただし Dropbox みたいに、Finder のアイコンに同期状態がついたりはしない - 昔の (zipな) Keynote のファイルを &quot;アップグレード&quot; してフォルダ形式にすると、同期時に conflict と判断されて取り残される - ファイル名に &quot;?&quot; とかが含まれていると同期されない。Web から...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
        <category term="Unix かんけい" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="freebsd" label="FreeBSD" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>いままで過去の発表スライドはぜんぶ subversion で管理して同期してたのだけれど、Keynote のファイルがフォルダ形式に戻っちゃったので、ちょっと編集すると .svn が消えたりして困ったことになる問題が頻発。</p>

<p>Dropbox でもいいのだけれど、ちょっと容量的に心配なのでどうしよっかなー、と思って、<a href="http://www.owncloud.org/">ownCloud</a> いれてみた。</p>

<p>感想とか制約とか:<br />
- セットアップ超簡単。FreeBSD ports でインストールするだけでほとんど終わる (SQLite つかえるし)<br />
- 速度が遅い？と思ったけどそうでもなかった<br />
- Mac 版のクライアントは普通にイケてる<br />
- ただし Dropbox みたいに、Finder のアイコンに同期状態がついたりはしない<br />
- 昔の (zipな) Keynote のファイルを "アップグレード" してフォルダ形式にすると、同期時に conflict と判断されて取り残される<br />
- ファイル名に "?" とかが含まれていると同期されない。Web から copy & paste した画像とかが Keynote のスライドにあると取り残される<br />
- シンボリックリンクが扱えない</p>

<p>写真をいっぱい置く、みたいな、regular file しかないよ、という使い方ならかなりよいのでは、と思ったけど、僕はちょっとつらいな。<br />
Dropbox ってすごいんですね...</p>]]>
        
    </content>
</entry>

<entry>
    <title>ANA127</title>
    <link rel="alternate" type="text/html" href="http://yasu2.prosou.nu/blog/2014/04/ana127-1.html" />
    <id>tag:yasu2.prosou.nu,2014:/blog//1.5349</id>

    <published>2014-04-07T08:02:05Z</published>
    <updated>2014-04-14T07:18:53Z</updated>

    <summary>高校の時にいわゆる鉄道写真を撮るのをすっぱりやめてからは、乗り物を撮るだけのために出かける、ということはもう15年以上もなかったわけだけど、最後の 747-400D 定期便が那覇にやってくる、となればそれはある程度違ってくるわけで。 那覇空港の滑走路は南北にまっすぐで、空港付近で個人的にお気に入りなのは空港の立体駐車場の屋上とかから見る RWY36 の離陸と、豊崎方面から見る RWY36 の着陸便。あとは、北風時は着陸便がうちの上空通るのもいいですね。つまり、南風運用になっちゃうと残念ですが、季節はそろそろ春。 それで、数日前からすっかり暖かくなって南風だったので諦めていたのですが、前日から天気が悪くなって、北風。もうこれは行くしかないですね。カメラは家にも何台かおいてあるんだけど、望遠レンズは研究室に置きっ放しになっちゃってたので、コンパクトデジカメしかないんだけども。 それで、豊崎海浜公園は北風運用時の進入経路の真下。カメラ持ってる人いっぱいいるんじゃないかと思ったら、誰もいませんでした。頻繁に着陸便が通り過ぎるので何度か練習で撮ってみたりとか。でも、ATCも何もきいてないので、いつくるか全然わからないわけです。 遠くから見分けるのは胴体下のメインギアくらいかな。4発機かどうかは、小さいと意外とわからないものですね。 というわけで那覇空港に着陸するのを見届けておしまい。 長い間お疲れさまでした。ありがとう。...</summary>
    <author>
        <name>Yasunori Osana</name>
        
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://yasu2.prosou.nu/blog/">
        <![CDATA[<p>高校の時にいわゆる鉄道写真を撮るのをすっぱりやめてからは、乗り物を撮るだけのために出かける、ということはもう15年以上もなかったわけだけど、最後の 747-400D 定期便が那覇にやってくる、となればそれはある程度違ってくるわけで。</p>

<p>那覇空港の滑走路は南北にまっすぐで、空港付近で個人的にお気に入りなのは空港の立体駐車場の屋上とかから見る RWY36 の離陸と、豊崎方面から見る RWY36 の着陸便。あとは、北風時は着陸便がうちの上空通るのもいいですね。つまり、南風運用になっちゃうと残念ですが、季節はそろそろ春。</p>

<p>それで、数日前からすっかり暖かくなって南風だったので諦めていたのですが、前日から天気が悪くなって、北風。もうこれは行くしかないですね。カメラは家にも何台かおいてあるんだけど、望遠レンズは研究室に置きっ放しになっちゃってたので、コンパクトデジカメしかないんだけども。</p>

<p>それで、豊崎海浜公園は北風運用時の進入経路の真下。カメラ持ってる人いっぱいいるんじゃないかと思ったら、誰もいませんでした。頻繁に着陸便が通り過ぎるので何度か練習で撮ってみたりとか。でも、ATCも何もきいてないので、いつくるか全然わからないわけです。</p>

<p><a href="http://yasu2.prosou.nu/blog/2014/04/07/DSCN6522.JPG"><img alt="DSCN6522.JPG" src="http://yasu2.prosou.nu/blog/assets_c/2014/04/DSCN6522-thumb-400xauto-1432.jpg" width="400" height="300" class="mt-image-none" style="" /></a></p>

<p>遠くから見分けるのは胴体下のメインギアくらいかな。4発機かどうかは、小さいと意外とわからないものですね。</p>

<p><a href="http://yasu2.prosou.nu/blog/2014/04/07/DSCN6523.JPG"><img alt="DSCN6523.JPG" src="http://yasu2.prosou.nu/blog/assets_c/2014/04/DSCN6523-thumb-400xauto-1434.jpg" width="400" height="300" class="mt-image-none" style="" /></a></p>

<p><a href="http://yasu2.prosou.nu/blog/2014/04/07/DSCN6524.JPG"><img alt="DSCN6524.JPG" src="http://yasu2.prosou.nu/blog/assets_c/2014/04/DSCN6524-thumb-400xauto-1436.jpg" width="400" height="300" class="mt-image-none" style="" /></a><br />
<a href="http://yasu2.prosou.nu/blog/2014/04/07/DSCN6525.JPG"><img alt="DSCN6525.JPG" src="http://yasu2.prosou.nu/blog/assets_c/2014/04/DSCN6525-thumb-400xauto-1438.jpg" width="400" height="300" class="mt-image-none" style="" /></a></p>

<p>というわけで那覇空港に着陸するのを見届けておしまい。<br />
長い間お疲れさまでした。ありがとう。</p>]]>
        
    </content>
</entry>

</feed>
