<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
  <channel>
    <title>Usoinfo blog</title>
    <link>http://blog.usoinfo.info/</link>
    <description>OpenStreetMapを使ったツールの開発やプログラミング、Linuxの話題など。</description>
    <language>ja</language>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <itunes:subtitle></itunes:subtitle>
    <itunes:summary>OpenStreetMapを使ったツールの開発やプログラミング、Linuxの話題など。</itunes:summary>
    <itunes:keywords>GPS,OpenStreetMap,プログラミング,Linux</itunes:keywords>
    
    <itunes:author>usoinfo</itunes:author>
    <itunes:owner>    
       <itunes:name></itunes:name>
       <itunes:email></itunes:email>
    </itunes:owner>
        <itunes:explicit>no</itunes:explicit>
        <item>
      <link>http://blog.usoinfo.info/article/519479621.html</link>
      <title>UsostRideTool2</title>
      <pubDate>Mon, 15 Dec 2025 19:14:13 +0900</pubDate>
            <description>7年半一度もアクセスしていなかったブログがまだちゃんと残ってて、ログインできるし記事も書ける！Seesaaさん凄い！！！というわけで、こまめにブログを書くのが性に合わず、旧ツイッターに行ってからはまるで放置していたわけだが、「そういえば昔ブログ作ってたな」と思い出したのは、久しぶりに、公開できるものを開発してみたから。ブログ書きから離れた後、自転車趣味を始めて、最初は楽しいのか半信半疑だったけどだんだんのめり込むようになり、今じゃすっかりロードバイク大好きマンになってしまった..</description>
            <itunes:summary><![CDATA[
7年半一度もアクセスしていなかったブログがまだちゃんと残ってて、ログインできるし記事も書ける！
Seesaaさん凄い！！！

というわけで、こまめにブログを書くのが性に合わず、旧ツイッターに行ってからはまるで放置していたわけだが、「そういえば昔ブログ作ってたな」と思い出したのは、久しぶりに、公開できるものを開発してみたから。

ブログ書きから離れた後、自転車趣味を始めて、最初は楽しいのか半信半疑だったけどだんだんのめり込むようになり、今じゃすっかりロードバイク大好きマンになってしまった。最初は時速と距離だけしか出ないチープなサイコンを付けて近所を軽く走っていたものが、長じてくるとGPSロガー付きのサイコンでライドログを蓄積する日々。近年は友人に誘われてブルベというイベントにも参加するようになり、すっかりロングライドする人と成り果てた（今年始めてSRを取れました…）。

一方、ロードバイクってのは消耗品の塊で（走るものはみんなそう）、いろんな部品が劣化して、どんどん部品を交換しなきゃならない。チェーンは400kmで注油して3000kmで交換して、タイヤは5000kmで交換して、ブレーキシューも減ったら交換、タイヤのグリスアップだって年一でしなきゃ…ってなわけで、サイコンでログを取って、ログの情報から距離や時間を積算して、メンテナンスの時期を測っていた。さすがに手で計算するのはあまりに煩雑なので、Stravaからアクティビティを取ってきて積算するツールを自作して使っていた。自分用で自分しか使わないから、見てくれの非常に悪い、汚いツールを。

さて、昨今、IT業界はすっかりAI時代になり、AIを使うか死か、みたいな激動の時代なわけだ。開発者としてAIを学ぶ必要に迫られ、まことに万やむを得ず、AIによる開発というやつを勉強することにした。そのとっかかりとして、自分用に作ってた、ロードバイクメンテナンス時期測りWebアプリを、AIで作り直してみよう、と思い立ったのだ。

それで、そこそこ見せられる感じのものが出来たので、サービスを公開するところまで状態を整える練習として（もちろんそこもAIでやる）、やってみた。

それがこれ <a href="https://www.usost.net/ridetool2/web/" target="_blank">UsostRideTool2</a>

<a href="https://usoinfo.up.seesaa.net/image/usoride2-main.png" target="_blank"><img border="0" alt="usoride2-main.png" src="https://usoinfo.up.seesaa.net/image/usoride2-main-thumbnail2.png" width="181" height="320"></a>

自転車趣味の方、よろしければご利用ください。
<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
7年半一度もアクセスしていなかったブログがまだちゃんと残ってて、ログインできるし記事も書ける！<br />Seesaaさん凄い！！！<br /><br />というわけで、こまめにブログを書くのが性に合わず、旧ツイッターに行ってからはまるで放置していたわけだが、「そういえば昔ブログ作ってたな」と思い出したのは、久しぶりに、公開できるものを開発してみたから。<br /><br />ブログ書きから離れた後、自転車趣味を始めて、最初は楽しいのか半信半疑だったけどだんだんのめり込むようになり、今じゃすっかりロードバイク大好きマンになってしまった。最初は時速と距離だけしか出ないチープなサイコンを付けて近所を軽く走っていたものが、長じてくるとGPSロガー付きのサイコンでライドログを蓄積する日々。近年は友人に誘われてブルベというイベントにも参加するようになり、すっかりロングライドする人と成り果てた（今年始めてSRを取れました…）。<br /><br />一方、ロードバイクってのは消耗品の塊で（走るものはみんなそう）、いろんな部品が劣化して、どんどん部品を交換しなきゃならない。チェーンは400kmで注油して3000kmで交換して、タイヤは5000kmで交換して、ブレーキシューも減ったら交換、タイヤのグリスアップだって年一でしなきゃ…ってなわけで、サイコンでログを取って、ログの情報から距離や時間を積算して、メンテナンスの時期を測っていた。さすがに手で計算するのはあまりに煩雑なので、Stravaからアクティビティを取ってきて積算するツールを自作して使っていた。自分用で自分しか使わないから、見てくれの非常に悪い、汚いツールを。<br /><br />さて、昨今、IT業界はすっかりAI時代になり、AIを使うか死か、みたいな激動の時代なわけだ。開発者としてAIを学ぶ必要に迫られ、まことに万やむを得ず、AIによる開発というやつを勉強することにした。そのとっかかりとして、自分用に作ってた、ロードバイクメンテナンス時期測りWebアプリを、AIで作り直してみよう、と思い立ったのだ。<br /><br />それで、そこそこ見せられる感じのものが出来たので、サービスを公開するところまで状態を整える練習として（もちろんそこもAIでやる）、やってみた。<br /><br />それがこれ <a href="https://www.usost.net/ridetool2/web/" target="_blank">UsostRideTool2</a><br /><br /><a href="https://usoinfo.up.seesaa.net/image/usoride2-main.png" target="_blank"><img border="0" alt="usoride2-main.png" src="https://usoinfo.up.seesaa.net/image/usoride2-main-thumbnail2.png" width="181" height="320" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/usoride2-main-thumbnail2.png.html'; return false;" style="cursor:pointer;" /></a><br /><br />自転車趣味の方、よろしければご利用ください。<br /><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>開発</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/519479621</guid>
            <enclosure url="https://usoinfo.up.seesaa.net/image/usoride2-main.png" length="386198" type="image/png" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/usoride2-main.png" length="386198" type="image/png" />
                      </item>
        <item>
      <link>http://blog.usoinfo.info/article/457133188.html</link>
      <title>atpagesから移行</title>
      <pubDate>Sat, 24 Feb 2018 09:48:06 +0900</pubDate>
            <description>atpagesに置いていた内容をXdomainに移行。http://www53.atpages.jp/usoinfo2/ だったURLは、http://xdomain.usoinfo.info/ に置き換えてアクセスしてください。land.to も危ないかなあ。。。</description>
            <itunes:summary><![CDATA[
atpagesに置いていた内容をXdomainに移行。
http://www53.atpages.jp/usoinfo2/ だったURLは、http://xdomain.usoinfo.info/ に置き換えてアクセスしてください。

land.to も危ないかなあ。。。<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
atpagesに置いていた内容をXdomainに移行。<br /><a href="http://www53.atpages.jp/usoinfo2/" target="_blank">http://www53.atpages.jp/usoinfo2/</a> だったURLは、<a href="http://xdomain.usoinfo.info/" target="_blank">http://xdomain.usoinfo.info/</a> に置き換えてアクセスしてください。<br /><br />land.to も危ないかなあ。。。<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/457133188</guid>
                </item>
        <item>
      <link>http://blog.usoinfo.info/article/456764912.html</link>
      <title>@pages閉鎖</title>
      <pubDate>Fri, 09 Feb 2018 06:43:18 +0900</pubDate>
            <description>@pagesが今月末でサービスを終了するとのこと。ブログ以外の部分のコンテンツの移行を検討中。</description>
            <itunes:summary><![CDATA[
@pagesが今月末でサービスを終了するとのこと。
ブログ以外の部分のコンテンツの移行を検討中。<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
@pagesが今月末でサービスを終了するとのこと。<br />ブログ以外の部分のコンテンツの移行を検討中。<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/456764912</guid>
                </item>
        <item>
      <link>http://blog.usoinfo.info/article/452582079.html</link>
      <title>Orange Pi Zero + BMP180/BME280 でデータ計測</title>
      <pubDate>Thu, 10 Aug 2017 16:00:56 +0900</pubDate>
            <description>I2C経由で気温や気圧が取れる、BMP180とBMP280というチップを買った。Orange Pi Zero に繋いで、データを取ってみる。OrangePiのOSはARMBIAN 5.31 stable。買ったのは、BMP180モジュール 200円くらいBME280モジュール 550円くらいジャンパーケーブル メス-メス 100円くらいピンヘッダ 150円くらい全部合わせて1000円ほど。他に必要なものは、ハンダと半田ごて。まずハードウェア側の整備。OrangePi本体のI2..</description>
            <itunes:summary><![CDATA[
I2C経由で気温や気圧が取れる、BMP180とBMP280というチップを買った。Orange Pi Zero に繋いで、データを取ってみる。
OrangePiのOSはARMBIAN 5.31 stable。

買ったのは、
<a href="https://www.amazon.co.jp/dp/B01LX14G6M">BMP180モジュール</a> 200円くらい<a href="https://www.amazon.co.jp/dp/B01M98R905">BME280モジュール</a> 550円くらい<a href="https://www.amazon.co.jp/dp/B06XNNVLM5">ジャンパーケーブル メス-メス</a> 100円くらい<a href="https://www.amazon.co.jp/dp/B00OVPHETK">ピンヘッダ</a> 150円くらい全部合わせて1000円ほど。他に必要なものは、ハンダと半田ごて。

まずハードウェア側の整備。
OrangePi本体のI2Cポートはピンが出てないので(RaspberryPiは出ているのだが…)ピンヘッダを半田付けし、BMP180/BME280モジュールは付属してくるピンヘッダを半田付け。
--
OragePi 1 - VCC BMP180
OragePi 3 - SDA BMP180
OragePi 5 - SCL BMP180
OragePi 9 - GND BMP180
--
をジャンパーケーブルで結線する。
<a href="http://usoinfo.up.seesaa.net/image/IMG_20170810_154343s.jpg" target="_blank"><img alt="IMG_20170810_154343s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170810_154343s-thumbnail2.jpg" width="320" height="240" border="0"></a>
こんな感じになった。

次いでソフトウェア側の整備。
/etc/modprobe.d/fbdev-blacklist.conf にblacklistを2行追加してreboot。
aptitude install i2c-tools libi2c-dev をインストール。

# vi /etc/modprobe.d/fbdev-blacklist.conf
--
blacklist pcf8591 ←この行追加
blacklist bmp085 ←この行追加
--
# reboot

# aptitude install i2c-tools libi2c-devi2cdetectしてみると、モジュールが見えた。
# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- 76 --                         そして、センサー値の取得は、https://www.blackmagicboxes.com/?p=608 に掲載されているデータ取得用のプログラムを使用。
デバイスが、/dev/i2c-1 ではなく、/dev/i2c-0 で見えているので、プログラムを一部書き換え。

char *bus = "/dev/i2c-1";
↓
char *bus = "/dev/i2c-0";そしてコンパイルして実行。
# gcc  -g -Wall -Wextra -pedantic -std=c11 -o bme280_p bme280_p.c
# ./bme280_p -a
Temperature in Celsius : 26.07 C 
Temperature in Fahrenheit : 78.92 F 
Pressure : 1006.47 hPa 
Relative Humidity : 0.00 %RH 見えた！カンタン！！！

この例で繋いだのはBMP180だったので湿度は取れていないが、同じようにBME280を繋げば、湿度も取れる。
気圧のデータを、muninに取ってみた。グラフ出力サンプルはこんな感じ。

<a href="http://usoinfo.up.seesaa.net/image/pressure_withjma_1-day.png" target="_blank"><img alt="pressure_withjma_1-day.png" src="http://usoinfo.up.seesaa.net/image/pressure_withjma_1-day-thumbnail2.png" width="320" height="182" border="0"></a>

緑のラインはBMP180の計測値、青のラインは最寄りの気象台が発表している1時間毎の気圧。
こうしてみると、ほぼ一定の誤差で、気圧の変動は気象台の計測値を完全にトレースしている。まあ、当然と言えば当然だが、わざわざ自前で気圧を測らなくても、気象庁のデータで十分だろうということが分かってしまった……。

しかし、たかだか数百円で、カンタンにデータが取れるようになったので、これはなかなかいいんじゃなかろうか。夏休みの自由研究とかに向いているのではなかろうか？
<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
I2C経由で気温や気圧が取れる、BMP180とBMP280というチップを買った。Orange Pi Zero に繋いで、データを取ってみる。<br />OrangePiのOSはARMBIAN 5.31 stable。<br /><br />買ったのは、<br /><ul><li><a href="https://www.amazon.co.jp/dp/B01LX14G6M">BMP180モジュール</a> 200円くらい</li><li><a href="https://www.amazon.co.jp/dp/B01M98R905">BME280モジュール</a> 550円くらい</li><li><a href="https://www.amazon.co.jp/dp/B06XNNVLM5">ジャンパーケーブル メス-メス</a> 100円くらい</li><li><a href="https://www.amazon.co.jp/dp/B00OVPHETK">ピンヘッダ</a> 150円くらい</li></ul>全部合わせて1000円ほど。他に必要なものは、ハンダと半田ごて。<br /><br />まずハードウェア側の整備。<br />OrangePi本体のI2Cポートはピンが出てないので(RaspberryPiは出ているのだが…)ピンヘッダを半田付けし、BMP180/BME280モジュールは付属してくるピンヘッダを半田付け。<br />--<br />OragePi 1 - VCC BMP180<br />OragePi 3 - SDA BMP180<br />OragePi 5 - SCL BMP180<br />OragePi 9 - GND BMP180<br />--<br />をジャンパーケーブルで結線する。<br /><a href="http://usoinfo.up.seesaa.net/image/IMG_20170810_154343s.jpg" target="_blank"><img alt="IMG_20170810_154343s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170810_154343s-thumbnail2.jpg" width="320" height="240" border="0" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/IMG_20170810_154343s-thumbnail2.jpg.html'; return false;" style="cursor:pointer;" /></a><br />こんな感じになった。<br /><br />次いでソフトウェア側の整備。<br />/etc/modprobe.d/fbdev-blacklist.conf にblacklistを2行追加してreboot。<br />aptitude install i2c-tools libi2c-dev をインストール。<br /><br /><sourcecode class="brush:bash"># vi /etc/modprobe.d/fbdev-blacklist.conf<br />--<br />blacklist pcf8591 ←この行追加<br />blacklist bmp085 ←この行追加<br />--<br /># reboot<br /><br /># aptitude install i2c-tools libi2c-dev</sourcecode>i2cdetectしてみると、モジュールが見えた。<br /><sourcecode class="brush:bash"># i2cdetect -y 0<br />     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f<br />00:          -- -- -- -- -- -- -- -- -- -- -- -- -- <br />10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br />20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br />30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br />40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br />50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br />60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <br />70: -- -- -- -- -- -- 76 --                         </sourcecode>そして、センサー値の取得は、<a href="https://www.blackmagicboxes.com/?p=608" target="_blank">https://www.blackmagicboxes.com/?p=608</a> に掲載されているデータ取得用のプログラムを使用。<br />デバイスが、/dev/i2c-1 ではなく、/dev/i2c-0 で見えているので、プログラムを一部書き換え。<br /><sourcecode class="brush:cpp"><br />char *bus = "/dev/i2c-1";<br />↓<br />char *bus = "/dev/i2c-0";</sourcecode>そしてコンパイルして実行。<br /><sourcecode class="brush:bash"># gcc  -g -Wall -Wextra -pedantic -std=c11 -o bme280_p bme280_p.c<br /># ./bme280_p -a<br />Temperature in Celsius : 26.07 C <br />Temperature in Fahrenheit : 78.92 F <br />Pressure : 1006.47 hPa <br />Relative Humidity : 0.00 %RH </sourcecode>見えた！カンタン！！！<br /><br />この例で繋いだのはBMP180だったので湿度は取れていないが、同じようにBME280を繋げば、湿度も取れる。<br />気圧のデータを、muninに取ってみた。グラフ出力サンプルはこんな感じ。<br /><br /><a href="http://usoinfo.up.seesaa.net/image/pressure_withjma_1-day.png" target="_blank"><img alt="pressure_withjma_1-day.png" src="http://usoinfo.up.seesaa.net/image/pressure_withjma_1-day-thumbnail2.png" width="320" height="182" border="0" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/pressure_withjma_1-day-thumbnail2.png.html'; return false;" style="cursor:pointer;" /></a><br /><br />緑のラインはBMP180の計測値、青のラインは最寄りの気象台が発表している1時間毎の気圧。<br />こうしてみると、ほぼ一定の誤差で、気圧の変動は気象台の計測値を完全にトレースしている。まあ、当然と言えば当然だが、わざわざ自前で気圧を測らなくても、気象庁のデータで十分だろうということが分かってしまった……。<br /><br />しかし、たかだか数百円で、カンタンにデータが取れるようになったので、これはなかなかいいんじゃなかろうか。夏休みの自由研究とかに向いているのではなかろうか？<br /><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>Linux</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/452582079</guid>
            <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170810_154343s.jpg" length="124994" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170810_154343s.jpg" length="124994" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/pressure_withjma_1-day.png" length="28948" type="image/png" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/pressure_withjma_1-day.png" length="28948" type="image/png" />
                      </item>
        <item>
      <link>http://blog.usoinfo.info/article/452473045.html</link>
      <title>BIOSしか起動しない KVI-70B を回復</title>
      <pubDate>Sun, 06 Aug 2017 17:25:23 +0900</pubDate>
            <description>今更、激安中華タブでもないと思うのだが、誰かの役に立つかもしれないので、ジャンクのKVI-70Bを回復させた作業記録。当然ながら保証なんてクソくらえ壊れて上等、自己責任の参考資料である。特に使い道もなかったのだが、恵安のKVI-70Bの中古が送込3000円で売られてたので買った。但し書きに、「BIOSは起動するがOS起動不可」と書いてあったため、ジャンク品相当ではあろうが、BIOSまで上がるのならなんとかする方法はあると思い、値段に釣られて買ったのである。で、品物が届いたので..</description>
            <itunes:summary><![CDATA[
今更、激安中華タブでもないと思うのだが、誰かの役に立つかもしれないので、ジャンクのKVI-70Bを回復させた作業記録。
当然ながら保証なんてクソくらえ壊れて上等、自己責任の参考資料である。

特に使い道もなかったのだが、恵安の<a href="https://www.keian.co.jp/products/kvi-70b/">KVI-70B</a>の中古が送込3000円で売られてたので買った。但し書きに、「BIOSは起動するがOS起動不可」と書いてあったため、ジャンク品相当ではあろうが、BIOSまで上がるのならなんとかする方法はあると思い、値段に釣られて買ったのである。

で、品物が届いたので電源を入れてみたが、確かにBIOSのPOST画面は出るしBIOS Setupにも入れるが、Windowsは起動しない（起動すると画面が乱れて固まる）。ブート失敗後は、回復オプションが出てくるので、ストレージがハードウェア的に壊れてるとかいうことはなさそうだが……。
多分、回復オプションとかリカバリーとかがあると思って、UEFI shellから起動を試みたり、USBからのブートを試みるが、起動しない。いろいろと試してBIOSの設定を変えているうち、うっかりBIOS設定でUSB3.0を切ったら二度とUSBデバイスを認識しないカラダになってしまった。
外付けキーボードを挿しても認識しないので、何の操作もできなくなってしまった。USB3.0を切ってはダメです。あはは！！！

普通のデスクトップやノートのマザーボードだったら、CMOSクリアをかけてBIOSをリセットすればいいんだが、タブレットではどうにもならない。やむを得ず、殻を割る。KVI-70Bは、両面テープなどは使われておらず、簡単に割れた。
<a href="http://usoinfo.up.seesaa.net/image/IMG_20170723_171148s.jpg" target="_blank"><img alt="IMG_20170723_171148s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170723_171148s-thumbnail2.jpg" width="320" height="240" border="0"></a>

バッテリーを空にしたり、バッテリーからの給電線を切断したり、３日ほど放置したりしたが、BIOS設定はリセットされない。
万策尽きた、と思ったが、５年以上前に、BIOSをぶっ飛ばした時にチップに無理矢理BIOSを書き込むために、フラッシュROMライタを買っていたことを思い出した。これでBIOSを吸い出せばなんとかならないだろうか。

ボードを眺めていると、Winbond W25Q64FWSというチップがあった。これがBIOSに違いない。が、ボードにがっちり実装されていて取り外せそうにない。どうしよう、、、と思ってぐぐっていると、<a href="https://www.amazon.co.jp/s/ref=nb_sb_noss_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;url=search-alias%3Dindustrial&amp;field-keywords=IC%E3%83%86%E3%82%B9%E3%83%88%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97">ICテストクリップ</a>というものがあることを発見。チップを脇から挟んでROMライタまで結線するというアイテムだ。
早速クリック。

ROMライタは古いものなので、WindowsXP 32bitのドライバしかないので、読み書きする用に別のマシンにXPを新たにインストールし、準備を整えているうちに、テストクリップが届いた。
<a href="http://usoinfo.up.seesaa.net/image/IMG_20170806_082411s.jpg" target="_blank"><img alt="IMG_20170806_082411s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170806_082411s-thumbnail2.jpg" width="320" height="240" border="0"></a>
<a href="http://usoinfo.up.seesaa.net/image/IMG_20170806_103149s.jpg" target="_blank"><img alt="IMG_20170806_103149s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170806_103149s-thumbnail2.jpg" width="320" height="240" border="0"></a>

チップを挟んで、BIOSを吸い出す。一旦Eraseして、BIOSを書き戻し、起動。が、設定は変わらず、キーボードは認識しない。BIOSの設定自体がフラッシュROMに書き込まれているのか？なんてこった。BIOSファイルのバイナリダンプを眺めてみるが、どこが設定値なのか分かるはずもない。多分、どこか1バイトを書き換えればいいのだろうが、どこだか分からん。くそう、メーカーがBIOSファイルを１つでも公開してればなあ……。手詰まり。再び、万策尽きた。

未練がましく、チップを覆っているセロハンを剥がしてみると、ボード上に "EM_I8170_V3.1" の刻印があったので、ぐぐってみると、EMDOOR EM-I8710というタブレットがあり、これは REEDER W7iC というタブレットと等価であって、<a href="https://forum.xda-developers.com/windows-8-rt/general/reeder-w7ic-tabletemdoor-em-i8170-t3126085">W7iCのBIOSファイル</a>が見つかった。
ダウンロードしてみると、BIOSとおぼしきReederW7iCBIOS_V1.6.8.binも8192KB。これ焼けばいけるかも！？ということで（起動できなくなってもROMライタだから怖くないし）、フラッシュROMにこのBIOSを書き込む。
<a href="http://usoinfo.up.seesaa.net/image/IMG_20170806_103327s.jpg" target="_blank"><img alt="IMG_20170806_103327s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170806_103327s-thumbnail2.jpg" width="320" height="240" border="0"></a>
<a href="http://usoinfo.up.seesaa.net/image/ezp2011-2017-08-06.PNG" target="_blank"><img alt="ezp2011-2017-08-06.PNG" src="http://usoinfo.up.seesaa.net/image/ezp2011-2017-08-06-thumbnail2.PNG" width="320" height="223" border="0"></a>

起動してみると、、、おお、キーボードが認識されている！起動画面とか充電画面は Reeder W7iC らしきものに変わってしまっているが、これでいけそうだ。

もう元々の中身を回復するのは諦めて、WindowsのMediaCreationToolで Windows 10 Home 32bit のインストール用ブートUSBを作り、Windowsパーティションをぶっ飛ばしてクリーンインストールを実施。成功。

不明なデバイスが大量にあるが、これを順次解決していく。
Windows Updateを全て当てた後、メインボード関係のドライバとして、（多分互換だとおぼしき）<a href="https://www.acer.com/ac/ja/JP/content/support-product/5735?b=1">Iconia Tablet8 W1-810</a>から、8.1用の「Platform Installer ドライバー」をダウンロードして入れる。これでI2C関係の不明なデバイスが解決された。
次いで<a href="http://jp.kionix.com/downloads">Kionix</a>からKXTJ9-KXCJ9-KXTJ2 Driverをダウンロードして入れる。これで３軸傾きセンサーが解決された。（回転方向が反対になってるが、後で解決する）

後はカメラとタッチパネルだが、これはメーカー、ベンダーのドライバがない。
<a href="http://bbs.kakaku.com/bbs/K0000789714/#19191083">カカクコムのBBS</a>に、吸い出したドライバーを発見したのでダウンロード。解凍してUSBメモリでKVI-70Bに持って行き、！マークのデバイスを「ドライバーの更新」でローカルから探して当てる。
タッチパネルはこのままではどうもタッチが狂っているので、<a href="http://eeepc.dnki.co.jp/?eid=1106892">SileadTouch.fw</a>を取得。zipを解凍したら、SileadTouch.fw を C:\Windows\System32\Drivers の下にコピーし、デバイスマネージャーからタッチパネルのドライバーを一度アンインストール。再起動すると不明なデバイスになるので、ドライバーの更新で当て直して、解決。
センサーの回転方向が反対になるのは、レジストリ値 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ROOT\SENSOR\0000\Device Parameters\kxfusion に 00,00,00,01,01,00,02 と書き込む。解決。
regファイルはこう。Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ROOT\SENSOR\0000\Device Parameters\kxfusion]
"Orientation"=hex:00,00,00,01,01,00,02
不明なデバイスに１つ残っている（カメラのセンサー？）が、これは解決法が分からなかった。

が、これで、概ね普通に使用可能なWindows10になったと思われる。
<a href="http://usoinfo.up.seesaa.net/image/IMG_20170806_164759s.jpg" target="_blank"><img alt="IMG_20170806_164759s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170806_164759s-thumbnail2.jpg" width="320" height="240" border="0"></a>

ストレージの残りが2Gもないので、果たして何かに使えるかと言うと、微妙だが……。
あと本体あっつい！
<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
今更、激安中華タブでもないと思うのだが、誰かの役に立つかもしれないので、ジャンクのKVI-70Bを回復させた作業記録。<br />当然ながら保証なんてクソくらえ壊れて上等、自己責任の参考資料である。<br /><br />特に使い道もなかったのだが、恵安の<a href="https://www.keian.co.jp/products/kvi-70b/">KVI-70B</a>の中古が送込3000円で売られてたので買った。但し書きに、「BIOSは起動するがOS起動不可」と書いてあったため、ジャンク品相当ではあろうが、BIOSまで上がるのならなんとかする方法はあると思い、値段に釣られて買ったのである。<br /><br />で、品物が届いたので電源を入れてみたが、確かにBIOSのPOST画面は出るしBIOS Setupにも入れるが、Windowsは起動しない（起動すると画面が乱れて固まる）。ブート失敗後は、回復オプションが出てくるので、ストレージがハードウェア的に壊れてるとかいうことはなさそうだが……。<br />多分、回復オプションとかリカバリーとかがあると思って、UEFI shellから起動を試みたり、USBからのブートを試みるが、起動しない。いろいろと試してBIOSの設定を変えているうち、うっかり<font style="font-size:150%;font-weight:bold;">BIOS設定でUSB3.0を切ったら二度とUSBデバイスを認識しないカラダになってしまった。</font><br />外付けキーボードを挿しても認識しないので、何の操作もできなくなってしまった。<font style="font-size:150%;font-weight:bold;color:red;">USB3.0を切ってはダメです。</font>あはは！！！<br /><br />普通のデスクトップやノートのマザーボードだったら、CMOSクリアをかけてBIOSをリセットすればいいんだが、タブレットではどうにもならない。やむを得ず、殻を割る。KVI-70Bは、両面テープなどは使われておらず、簡単に割れた。<br /><a href="http://usoinfo.up.seesaa.net/image/IMG_20170723_171148s.jpg" target="_blank"><img alt="IMG_20170723_171148s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170723_171148s-thumbnail2.jpg" width="320" height="240" border="0" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/IMG_20170723_171148s-thumbnail2.jpg.html'; return false;" style="cursor:pointer;" /></a><br /><br />バッテリーを空にしたり、バッテリーからの給電線を切断したり、３日ほど放置したりしたが、BIOS設定はリセットされない。<br />万策尽きた、と思ったが、５年以上前に、BIOSをぶっ飛ばした時にチップに無理矢理BIOSを書き込むために、フラッシュROMライタを買っていたことを思い出した。これでBIOSを吸い出せばなんとかならないだろうか。<br /><br />ボードを眺めていると、Winbond W25Q64FWSというチップがあった。これがBIOSに違いない。が、ボードにがっちり実装されていて取り外せそうにない。どうしよう、、、と思ってぐぐっていると、<a href="https://www.amazon.co.jp/s/ref=nb_sb_noss_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&url=search-alias%3Dindustrial&field-keywords=IC%E3%83%86%E3%82%B9%E3%83%88%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97">ICテストクリップ</a>というものがあることを発見。チップを脇から挟んでROMライタまで結線するというアイテムだ。<br />早速クリック。<br /><br />ROMライタは古いものなので、WindowsXP 32bitのドライバしかないので、読み書きする用に別のマシンにXPを新たにインストールし、準備を整えているうちに、テストクリップが届いた。<br /><a href="http://usoinfo.up.seesaa.net/image/IMG_20170806_082411s.jpg" target="_blank"><img alt="IMG_20170806_082411s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170806_082411s-thumbnail2.jpg" width="320" height="240" border="0" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/IMG_20170806_082411s-thumbnail2.jpg.html'; return false;" style="cursor:pointer;" /></a><br /><a href="http://usoinfo.up.seesaa.net/image/IMG_20170806_103149s.jpg" target="_blank"><img alt="IMG_20170806_103149s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170806_103149s-thumbnail2.jpg" width="320" height="240" border="0" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/IMG_20170806_103149s-thumbnail2.jpg.html'; return false;" style="cursor:pointer;" /></a><br /><br />チップを挟んで、BIOSを吸い出す。一旦Eraseして、BIOSを書き戻し、起動。が、設定は変わらず、キーボードは認識しない。BIOSの設定自体がフラッシュROMに書き込まれているのか？なんてこった。BIOSファイルのバイナリダンプを眺めてみるが、どこが設定値なのか分かるはずもない。多分、どこか1バイトを書き換えればいいのだろうが、どこだか分からん。くそう、メーカーがBIOSファイルを１つでも公開してればなあ……。手詰まり。再び、万策尽きた。<br /><br />未練がましく、チップを覆っているセロハンを剥がしてみると、ボード上に "EM_I8170_V3.1" の刻印があったので、ぐぐってみると、EMDOOR EM-I8710というタブレットがあり、これは REEDER W7iC というタブレットと等価であって、<a href="https://forum.xda-developers.com/windows-8-rt/general/reeder-w7ic-tabletemdoor-em-i8170-t3126085">W7iCのBIOSファイル</a>が見つかった。<br />ダウンロードしてみると、BIOSとおぼしきReederW7iCBIOS_V1.6.8.binも8192KB。これ焼けばいけるかも！？ということで（起動できなくなってもROMライタだから怖くないし）、フラッシュROMにこのBIOSを書き込む。<br /><a href="http://usoinfo.up.seesaa.net/image/IMG_20170806_103327s.jpg" target="_blank"><img alt="IMG_20170806_103327s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170806_103327s-thumbnail2.jpg" width="320" height="240" border="0" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/IMG_20170806_103327s-thumbnail2.jpg.html'; return false;" style="cursor:pointer;" /></a><br /><a href="http://usoinfo.up.seesaa.net/image/ezp2011-2017-08-06.PNG" target="_blank"><img alt="ezp2011-2017-08-06.PNG" src="http://usoinfo.up.seesaa.net/image/ezp2011-2017-08-06-thumbnail2.PNG" width="320" height="223" border="0" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/ezp2011-2017-08-06-thumbnail2.PNG.html'; return false;" style="cursor:pointer;" /></a><br /><br />起動してみると、、、おお、キーボードが認識されている！起動画面とか充電画面は Reeder W7iC らしきものに変わってしまっているが、これでいけそうだ。<br /><br />もう元々の中身を回復するのは諦めて、WindowsのMediaCreationToolで Windows 10 Home 32bit のインストール用ブートUSBを作り、Windowsパーティションをぶっ飛ばしてクリーンインストールを実施。成功。<br /><br />不明なデバイスが大量にあるが、これを順次解決していく。<br />Windows Updateを全て当てた後、メインボード関係のドライバとして、（多分互換だとおぼしき）<a href="https://www.acer.com/ac/ja/JP/content/support-product/5735?b=1">Iconia Tablet8 W1-810</a>から、8.1用の「Platform Installer ドライバー」をダウンロードして入れる。これでI2C関係の不明なデバイスが解決された。<br />次いで<a href="http://jp.kionix.com/downloads">Kionix</a>からKXTJ9-KXCJ9-KXTJ2 Driverをダウンロードして入れる。これで３軸傾きセンサーが解決された。（回転方向が反対になってるが、後で解決する）<br /><br />後はカメラとタッチパネルだが、これはメーカー、ベンダーのドライバがない。<br /><a href="http://bbs.kakaku.com/bbs/K0000789714/#19191083">カカクコムのBBS</a>に、吸い出したドライバーを発見したのでダウンロード。解凍してUSBメモリでKVI-70Bに持って行き、！マークのデバイスを「ドライバーの更新」でローカルから探して当てる。<br />タッチパネルはこのままではどうもタッチが狂っているので、<a href="http://eeepc.dnki.co.jp/?eid=1106892">SileadTouch.fw</a>を取得。zipを解凍したら、SileadTouch.fw を C:\Windows\System32\Drivers の下にコピーし、デバイスマネージャーからタッチパネルのドライバーを一度アンインストール。再起動すると不明なデバイスになるので、ドライバーの更新で当て直して、解決。<br />センサーの回転方向が反対になるのは、レジストリ値 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ROOT\SENSOR\0000\Device Parameters\kxfusion に 00,00,00,01,01,00,02 と書き込む。解決。<br />regファイルはこう。<sourcecode class="brush:php">Windows Registry Editor Version 5.00<br />[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ROOT\SENSOR\0000\Device Parameters\kxfusion]<br />"Orientation"=hex:00,00,00,01,01,00,02</sourcecode><br />不明なデバイスに１つ残っている（カメラのセンサー？）が、これは解決法が分からなかった。<br /><br />が、これで、概ね普通に使用可能なWindows10になったと思われる。<br /><a href="http://usoinfo.up.seesaa.net/image/IMG_20170806_164759s.jpg" target="_blank"><img alt="IMG_20170806_164759s.jpg" src="http://usoinfo.up.seesaa.net/image/IMG_20170806_164759s-thumbnail2.jpg" width="320" height="240" border="0" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/IMG_20170806_164759s-thumbnail2.jpg.html'; return false;" style="cursor:pointer;" /></a><br /><br />ストレージの残りが2Gもないので、果たして何かに使えるかと言うと、微妙だが……。<br />あと本体あっつい！<br /><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>Windows</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/452473045</guid>
            <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170723_171148s.jpg" length="143544" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170723_171148s.jpg" length="143544" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170806_082411s.jpg" length="154363" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170806_082411s.jpg" length="154363" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170806_103149s.jpg" length="184812" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170806_103149s.jpg" length="184812" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170806_103327s.jpg" length="145056" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170806_103327s.jpg" length="145056" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/ezp2011-2017-08-06.PNG" length="121975" type="image/png" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/ezp2011-2017-08-06.PNG" length="121975" type="image/png" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170806_164759s.jpg" length="129245" type="image/jpeg" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/IMG_20170806_164759s.jpg" length="129245" type="image/jpeg" />
                      </item>
        <item>
      <link>http://blog.usoinfo.info/article/452153155.html</link>
      <title>PHPでIPアドレス＋ネットマスクに適合するかチェック</title>
      <pubDate>Wed, 26 Jul 2017 18:06:00 +0900</pubDate>
            <description>あるIPアドレスが、ネットワークアドレス/ネットマスク長にヒットするかどうかを検査したい。ソースアドレスでアクセス制限したいとかいう時によくあるアレである。IPv4だけのときは、ip2long/long2ipでマスク長のビット演算をして比較すればよかったが、昨今IPv6も普通にあり得るのでそっちにも適用しなくちゃいけない。IPv6は128ビットなので、longでは検査できないので、inet_ptonを使って検査するルーチンを書いてみた。Github はこちら。https://..</description>
            <itunes:summary><![CDATA[
あるIPアドレスが、ネットワークアドレス/ネットマスク長にヒットするかどうかを検査したい。ソースアドレスでアクセス制限したいとかいう時によくあるアレである。
IPv4だけのときは、ip2long/long2ipでマスク長のビット演算をして比較すればよかったが、昨今IPv6も普通にあり得るのでそっちにも適用しなくちゃいけない。
IPv6は128ビットなので、longでは検査できないので、inet_ptonを使って検査するルーチンを書いてみた。

Github はこちら。
https://github.com/usoinfo/php_ipaddrmask_test

  function ipaddr_mask($src, $mask)
  {
    $iarr  = str_split($src);
    $marr  = str_split($mask);
    $ret  = false;
    for($i=0;$i&lt;count($iarr);$i++){
      $ret  .= $iarr[$i] & $marr[$i];
    }
    return $ret;
  }

  function ipaddr_compare($srcaddr, $netaddr, $netmask)
  {
    if( !$netmask && ($pos = strpos($netaddr,"/")) !== FALSE ){
      $netmask  = intval( substr($netaddr, $pos+1) );
      $netaddr  = substr($netaddr, 0, $pos);
    }
    
    $addr  = inet_pton($srcaddr);
    $comp  = inet_pton($netaddr);

    $len  = strlen($addr)*8;
    if($netmask &gt; $len) $netmask = $len;

    $mask  = str_repeat('f', $netmask&gt;&gt;2);
    switch($netmask & 3){
    case 3: $mask .= 'e'; break;
    case 2: $mask .= 'c'; break;
    case 1: $mask .= '8'; break;
    }
    $mask = pack('H*', str_pad($mask, $len&gt;&gt;2, '0') );
    
    return ipaddr_mask($addr, $mask) == ipaddr_mask($comp, $mask);
  }
  
  /* 
  
  使用法サンプル
  $srcaddr    = "192.168.1.12";
  $netaddr    = "192.168.1.0";
  $netmask    = 24;
  $r    = ipaddr_compare($srcaddr, $netaddr, $netmask);
  echo $srcaddr." compare ".$netaddr."/".$netmask." =&gt; ".($r ? "match" : "unmatch")."\n";
  
  $srcaddr    = "25ef:91:c540:1:a00:27fa:fce1:28c";
  $netaddr    = "25ef:91:c540:1::0";
  $netmask    = 64;
  $r    = ipaddr_compare($srcaddr, $netaddr, $netmask);
  echo $srcaddr." compare ".$netaddr."/".$netmask." =&gt; ".($r ? "match" : "unmatch")."\n";
  
  実行結果
  192.168.1.12 compare 192.168.1.0/24 =&gt; match
  25ef:91:c540:1:a00:27fa:fce1:28c compare 25ef:91:c540:1::0/64 =&gt; match

  */
<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
あるIPアドレスが、ネットワークアドレス/ネットマスク長にヒットするかどうかを検査したい。ソースアドレスでアクセス制限したいとかいう時によくあるアレである。<br />IPv4だけのときは、ip2long/long2ipでマスク長のビット演算をして比較すればよかったが、昨今IPv6も普通にあり得るのでそっちにも適用しなくちゃいけない。<br />IPv6は128ビットなので、longでは検査できないので、inet_ptonを使って検査するルーチンを書いてみた。<br /><br />Github はこちら。<br /><a href="https://github.com/usoinfo/php_ipaddrmask_test" target="_blank">https://github.com/usoinfo/php_ipaddrmask_test</a><br /><br /><sourcecode class="brush:php">  function ipaddr_mask($src, $mask)<br />  {<br />    $iarr  = str_split($src);<br />    $marr  = str_split($mask);<br />    $ret  = false;<br />    for($i=0;$i&lt;count($iarr);$i++){<br />      $ret  .= $iarr[$i] & $marr[$i];<br />    }<br />    return $ret;<br />  }<br /><br />  function ipaddr_compare($srcaddr, $netaddr, $netmask)<br />  {<br />    if( !$netmask && ($pos = strpos($netaddr,"/")) !== FALSE ){<br />      $netmask  = intval( substr($netaddr, $pos+1) );<br />      $netaddr  = substr($netaddr, 0, $pos);<br />    }<br />    <br />    $addr  = inet_pton($srcaddr);<br />    $comp  = inet_pton($netaddr);<br /><br />    $len  = strlen($addr)*8;<br />    if($netmask > $len) $netmask = $len;<br /><br />    $mask  = str_repeat('f', $netmask>>2);<br />    switch($netmask & 3){<br />    case 3: $mask .= 'e'; break;<br />    case 2: $mask .= 'c'; break;<br />    case 1: $mask .= '8'; break;<br />    }<br />    $mask = pack('H*', str_pad($mask, $len>>2, '0') );<br />    <br />    return ipaddr_mask($addr, $mask) == ipaddr_mask($comp, $mask);<br />  }<br />  <br />  /* <br />  <br />  使用法サンプル<br />  $srcaddr    = "192.168.1.12";<br />  $netaddr    = "192.168.1.0";<br />  $netmask    = 24;<br />  $r    = ipaddr_compare($srcaddr, $netaddr, $netmask);<br />  echo $srcaddr." compare ".$netaddr."/".$netmask." => ".($r ? "match" : "unmatch")."\n";<br />  <br />  $srcaddr    = "25ef:91:c540:1:a00:27fa:fce1:28c";<br />  $netaddr    = "25ef:91:c540:1::0";<br />  $netmask    = 64;<br />  $r    = ipaddr_compare($srcaddr, $netaddr, $netmask);<br />  echo $srcaddr." compare ".$netaddr."/".$netmask." => ".($r ? "match" : "unmatch")."\n";<br />  <br />  実行結果<br />  192.168.1.12 compare 192.168.1.0/24 => match<br />  25ef:91:c540:1:a00:27fa:fce1:28c compare 25ef:91:c540:1::0/64 => match<br /><br />  */</sourcecode><br /><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>開発</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/452153155</guid>
                </item>
        <item>
      <link>http://blog.usoinfo.info/article/440563017.html</link>
      <title>ホストマシンの仮想化支援機能(VT-x/AMD-V)が使用できません。</title>
      <pubDate>Sat, 30 Jul 2016 07:15:05 +0900</pubDate>
            <description>Visual Studio 2015 Community をインストールしたら、その後、VirtualBoxのVMが起動できなくなった。実行しようとすると「ホストマシンの仮想化支援機能(VT-x/AMD-V)が使用できません。」とメッセージが出る。しかし、BIOSの設定では、VT-xは有効になっている。これは、Hyper-Vが有効になったせいらしい。「コントロールパネル」-「プログラムと機能」-「Windowsの機能の有効化または無効化」で、Hyper-Vのチェックボックスを..</description>
            <itunes:summary><![CDATA[
Visual Studio 2015 Community をインストールしたら、その後、VirtualBoxのVMが起動できなくなった。実行しようとすると「ホストマシンの仮想化支援機能(VT-x/AMD-V)が使用できません。」とメッセージが出る。
しかし、BIOSの設定では、VT-xは有効になっている。

これは、Hyper-Vが有効になったせいらしい。
「コントロールパネル」-「プログラムと機能」-「Windowsの機能の有効化または無効化」で、Hyper-Vのチェックボックスをオフにして再起動したら解決。
<a href="http://usoinfo.up.seesaa.net/image/20160730-01.png" target="_blank"><img src="http://usoinfo.up.seesaa.net/image/20160730-01-thumbnail2.png" alt="20160730-01.png" border="0" height="283" width="320"></a>
困るぜ。仕事が出来なくなるところだった。<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
Visual Studio 2015 Community をインストールしたら、その後、VirtualBoxのVMが起動できなくなった。実行しようとすると「ホストマシンの仮想化支援機能(VT-x/AMD-V)が使用できません。」とメッセージが出る。<br />しかし、BIOSの設定では、VT-xは有効になっている。<br /><br />これは、Hyper-Vが有効になったせいらしい。<br />「コントロールパネル」-「プログラムと機能」-「Windowsの機能の有効化または無効化」で、Hyper-Vのチェックボックスをオフにして再起動したら解決。<br /><a href="http://usoinfo.up.seesaa.net/image/20160730-01.png" target="_blank"><img src="http://usoinfo.up.seesaa.net/image/20160730-01-thumbnail2.png" alt="20160730-01.png" border="0" height="283" width="320" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/20160730-01-thumbnail2.png.html'; return false;" style="cursor:pointer;" /></a><br />困るぜ。仕事が出来なくなるところだった。<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>Windows</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/440563017</guid>
            <enclosure url="https://usoinfo.up.seesaa.net/image/20160730-01.png" length="81505" type="image/png" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/20160730-01.png" length="81505" type="image/png" />
                      </item>
        <item>
      <link>http://blog.usoinfo.info/article/435310552.html</link>
      <title>同じUSBデバイスが複数ある時にデバイスを識別する</title>
      <pubDate>Sun, 20 Mar 2016 10:26:22 +0900</pubDate>
            <description>全く同じUSBデバイスが複数繋がっている時、特定の１つを指定するにはどうすればいいか困っていた。ベンダーID・プロダクトIDが異なっていればudevでデバイス名を固定すればいいのだが、同じだとどうやら固定できなさそう。そもそも/dev配下にデバイスとして見えないものはどうすればいいのか。具体的にはUSB温度計が複数繋がっている時。USBのデバイス番号で読み取り先の温度計を指定できるものの、USBのデバイス番号は毎回変わるので、決め打ちで一意に指定できない。lsusbでUSBデ..</description>
            <itunes:summary><![CDATA[
全く同じUSBデバイスが複数繋がっている時、特定の１つを指定するにはどうすればいいか困っていた。
ベンダーID・プロダクトIDが異なっていればudevでデバイス名を固定すればいいのだが、同じだとどうやら固定できなさそう。そもそも/dev配下にデバイスとして見えないものはどうすればいいのか。
具体的にはUSB温度計が複数繋がっている時。
USBのデバイス番号で読み取り先の温度計を指定できるものの、USBのデバイス番号は毎回変わるので、決め打ちで一意に指定できない。

lsusbでUSBデバイスの接続状況が見られるわけだが、'lsusb'だとバス・デバイス番号・デバイスIDが、'lsusb -t'だと、カスケードされたハブの接続とその先のデバイス番号が分かる。
そこで、例えば
+PCのUSBポート
|
+---ハブ1--+--エレコムのカメラ
|          +--USB温度計
|
+---ハブ2--+--バッファローのカメラ
           +--USB温度計

こんな感じに機器が繋がっているならば、

”エレコムのカメラと同じハブに繋がってるUSB温度計”
”バッファローのカメラと同じハブに繋がってるUSB温度計”

という特定の仕方をすれば、USB温度計のデバイス番号が一意に求められる（別にカメラじゃなくても、ベンダーID・プロダクトIDが違っていれば何でもいいけど）。
よって、まず lsusb -t の出力でツリー構造を分析して、ルートからどうハブを経由しているかとデバイス番号を紐付けして、その結果をlsusbの出力でデバイス番号とベンダーID・プロダクトIDを紐付けすれば、”エレコムのカメラと同じハブに繋がってるUSB温度計”が分かるようになるだろう。

ということで、lsusb -tとlsusbの出力結果を解析して、接続されている場所・デバイス番号・デバイスIDを列挙するコードをPHPで書いてみた。

https://github.com/usoinfo/usb_device_list

初めてgithubを使ってみた。
使い方のサンプルは、 sample.php にあります。
<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
全く同じUSBデバイスが複数繋がっている時、特定の１つを指定するにはどうすればいいか困っていた。<br />ベンダーID・プロダクトIDが異なっていればudevでデバイス名を固定すればいいのだが、同じだとどうやら固定できなさそう。そもそも/dev配下にデバイスとして見えないものはどうすればいいのか。<br />具体的にはUSB温度計が複数繋がっている時。<br />USBのデバイス番号で読み取り先の温度計を指定できるものの、USBのデバイス番号は毎回変わるので、決め打ちで一意に指定できない。<br /><br />lsusbでUSBデバイスの接続状況が見られるわけだが、'lsusb'だとバス・デバイス番号・デバイスIDが、'lsusb -t'だと、カスケードされたハブの接続とその先のデバイス番号が分かる。<br />そこで、例えば<sourcecode class="brush:bash"><br />+PCのUSBポート<br />|<br />+---ハブ1--+--エレコムのカメラ<br />|          +--USB温度計<br />|<br />+---ハブ2--+--バッファローのカメラ<br />           +--USB温度計<br /></sourcecode><br />こんな感じに機器が繋がっているならば、<br /><strong><br />”エレコムのカメラと同じハブに繋がってるUSB温度計”<br />”バッファローのカメラと同じハブに繋がってるUSB温度計”<br /></strong><br />という特定の仕方をすれば、USB温度計のデバイス番号が一意に求められる（別にカメラじゃなくても、ベンダーID・プロダクトIDが違っていれば何でもいいけど）。<br />よって、まず lsusb -t の出力でツリー構造を分析して、ルートからどうハブを経由しているかとデバイス番号を紐付けして、その結果をlsusbの出力でデバイス番号とベンダーID・プロダクトIDを紐付けすれば、”エレコムのカメラと同じハブに繋がってるUSB温度計”が分かるようになるだろう。<br /><br />ということで、lsusb -tとlsusbの出力結果を解析して、接続されている場所・デバイス番号・デバイスIDを列挙するコードをPHPで書いてみた。<br /><br /><a href="https://github.com/usoinfo/usb_device_list" target="_blank">https://github.com/usoinfo/usb_device_list</a><br /><br />初めてgithubを使ってみた。<br />使い方のサンプルは、 sample.php にあります。<br /><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>開発</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/435310552</guid>
                </item>
        <item>
      <link>http://blog.usoinfo.info/article/418819060.html</link>
      <title>Debian Jessie で、シャットダウン・再起動するときsshdが終わらない</title>
      <pubDate>Tue, 12 May 2015 09:00:15 +0900</pubDate>
            <description>sshで接続したままDebian Jessieをシャットダウンか再起動すると、サーバー側のsshdがコネクションを切らないまま終了するので、クライアント側がいつまでも繋がりっぱなしでうざい。rc0 rc6 でsshdをkillするようにして、とりあえず回避。これDebianのバグなんじゃないかなあ？よくわからんけど。/etc/init.d/ に killsshd 等適当な名前でスクリプトを作成。runlevel 2345 では何もしない、06では kilall sshd する..</description>
            <itunes:summary><![CDATA[
sshで接続したままDebian Jessieをシャットダウンか再起動すると、サーバー側のsshdがコネクションを切らないまま終了するので、クライアント側がいつまでも繋がりっぱなしでうざい。
rc0 rc6 でsshdをkillするようにして、とりあえず回避。
これDebianのバグなんじゃないかなあ？よくわからんけど。

/etc/init.d/ に killsshd 等適当な名前でスクリプトを作成。
runlevel 2345 では何もしない、06では kilall sshd するだけ。
#! /bin/sh
### BEGIN INIT INFO
# Provides:          killsshd
# Required-Start:    
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: kill all sshd process
# Description:       kill all sshd process
#
### END INIT INFO
#
# Author:	usoinfo
#

PATH=/bin:/usr/bin:/sbin:/usr/sbin

case "$1" in
  start)
    ;;
  stop)
    killall sshd
    ;;
  status)
    ;;
  *)
    echo "Usage: /etc/init.d/killsshd {stop}"
    exit 1
    ;;
esac

exit 0適当に有効化。aptitude install psmisc (※killallコマンドが入ってなければ入れる)
chown root:root /etc/init.d/killsshd
chmod 755 /etc/init.d/killsshd 
update-rc.d killsshd defaultsreboot、shutdownの時は、killall sshdされるので、サーバー側から接続が切られるはず。
<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
sshで接続したままDebian Jessieをシャットダウンか再起動すると、サーバー側のsshdがコネクションを切らないまま終了するので、クライアント側がいつまでも繋がりっぱなしでうざい。<br />rc0 rc6 でsshdをkillするようにして、とりあえず回避。<br />これDebianのバグなんじゃないかなあ？よくわからんけど。<br /><br />/etc/init.d/ に killsshd 等適当な名前でスクリプトを作成。<br />runlevel 2345 では何もしない、06では kilall sshd するだけ。<br /><sourcecode class="brush:bash">#! /bin/sh<br />### BEGIN INIT INFO<br /># Provides:          killsshd<br /># Required-Start:    <br /># Required-Stop:     <br /># Default-Start:     2 3 4 5<br /># Default-Stop:      0 1 6<br /># Short-Description: kill all sshd process<br /># Description:       kill all sshd process<br />#<br />### END INIT INFO<br />#<br /># Author:	usoinfo<br />#<br /><br />PATH=/bin:/usr/bin:/sbin:/usr/sbin<br /><br />case "$1" in<br />  start)<br />    ;;<br />  stop)<br />    killall sshd<br />    ;;<br />  status)<br />    ;;<br />  *)<br />    echo "Usage: /etc/init.d/killsshd {stop}"<br />    exit 1<br />    ;;<br />esac<br /><br />exit 0</sourcecode>適当に有効化。<sourcecode class="brush:bash">aptitude install psmisc (※killallコマンドが入ってなければ入れる)<br />chown root:root /etc/init.d/killsshd<br />chmod 755 /etc/init.d/killsshd <br />update-rc.d killsshd defaults</sourcecode>reboot、shutdownの時は、killall sshdされるので、サーバー側から接続が切られるはず。<br /><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>Linux</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/418819060</guid>
                </item>
        <item>
      <link>http://blog.usoinfo.info/article/418596388.html</link>
      <title>玄箱にDebian Jessieをインストール</title>
      <pubDate>Fri, 08 May 2015 06:54:26 +0900</pubDate>
            <description>Squeeze化しカーネルを2.6.39.4にして使っていた玄箱だが、Jessieがリリースされたのを機に、追い付いておくことにした。と言っても、HDL-GXRでWheezy/Jessieを動かすよりは簡単に済んだ。玄箱は、正式にカーネルに取り込まれているので、カーネルソースをいじらなくてよいので。よって、Weezy用は3.2系logtermの3.2.68、Jessie用は最新のstableである3.19.6を選択した。基本的な作業は、3.x系のカーネルをコンパイルして(参照..</description>
            <itunes:summary><![CDATA[
<a href="http://blog.usoinfo.info/article/389750420.html">Squeeze化しカーネルを2.6.39.4に</a>して使っていた玄箱だが、Jessieがリリースされたのを機に、追い付いておくことにした。

と言っても、<a href="http://blog.usoinfo.info/article/418454427.html">HDL-GXRでWheezy/Jessieを</a>動かすよりは簡単に済んだ。玄箱は、正式にカーネルに取り込まれているので、カーネルソースをいじらなくてよいので。
よって、Weezy用は3.2系logtermの3.2.68、Jessie用は最新のstableである3.19.6を選択した。

基本的な作業は、3.x系のカーネルをコンパイルして(<a href="http://blog.usoinfo.info/article/389750420.html">参照記事</a>)、debootstrapでrootfsを作成(<a href="http://blog.usoinfo.info/article/390884654.html">参照記事</a>)、玄箱からディスクを取り出して別のPCにマウントし、ブート環境を整えた上で、作ったカーネルとrootfsを展開した。
作ったrootfsとカーネルを一応置いておく。

Wheezy向け
rootfs <a href="https://drive.google.com/file/d/0B18h_ms-e_FLUl9vX1dXWjIyZlE/view?usp=sharing">kurobox-rootfs-wheezy.tar.bz2</a>
kernel <a href="https://drive.google.com/file/d/0B18h_ms-e_FLNURYQ3hKN1Z2ZlE/view?usp=sharing">kurobox-kernel-3.2.68.tar.bz2</a>
lib <a href="https://drive.google.com/file/d/0B18h_ms-e_FLZWJWZWo1ZTJSRG8/view?usp=sharing">kurobox-lib-3.2.68.tar.bz2</a>
config <a href="https://drive.google.com/file/d/0B18h_ms-e_FLNjhhY0lfck5Ed28/view?usp=sharing">kurobox-config-3.2.68.txt</a>

Jessie向け
rootfs <a href="https://drive.google.com/file/d/0B18h_ms-e_FLZmplMzJVaURreGc/view?usp=sharing">kurobox-rootfs-jessie.tar.bz2</a>
kernel <a href="https://drive.google.com/file/d/0B18h_ms-e_FLLUoxZ3BLN05CSWs/view?usp=sharing">kurobox-kernel-3.19.6.tar.bz2</a>
lib <a href="https://drive.google.com/file/d/0B18h_ms-e_FLODZHUDQxdVNlTVE/view?usp=sharing">kurobox-lib-3.19.6.tar.bz2</a>
config <a href="https://drive.google.com/file/d/0B18h_ms-e_FLYWRYZkxHTVlveU0/view?usp=sharing">kurobox-config-3.19.6.txt</a>

インストール手順
1. ハードディスクのパーティションを切る
Linuxの動いているPCにHDDを接続して、
(※接続したHDDはsdbの想定)
/dev/sdb1 MontaVista Linux (100M～お好みで)
/dev/sdb2 swap (256M～お好みで)
/dev/sdb3 Debian (残り全部)

sdb1,sdb3はext3でフォーマット、sdb2はmkswapする。
玄人志向のページから<a href="http://archive.kuroutoshikou.com/modules/display/?iid=118">ファームウェアアップデート Ver1.02</a>をダウンロードし解凍、中のimage.zipを解凍して、tmpimage.tgzを /dev/sdb1 に展開する。(この段階で玄箱MontaVistaが動くようになるはず。つまり第１パーティションに玄箱オリジナルのLinuxが入ればいいので、通常の初期化手順を実行しても良い、はず。)

2. ブート環境の整備
<a href="http://ux.getuploader.com/KUROBOX_PPC_Ubuntu_Precise/">玄箱/玄箱HG 用 ubuntu 12.04 LTS image</a>より、kuro-bootsel2.20080419.tar.gz と ubuntu-precise-installer.zip をダウンロード。
ubuntu-precise-installer.zip を解凍し、u-boot-1.2.0-hd.ram.bin uloader-2.4.17_mvl21-sandpoint.oをsdb1:/boot に置く。
kuro-bootsel2.20080419.tar.gz を解凍して、install.shの内容を手作業で実行。
# mount /dev/sdb1 /mnt (※接続したHDDはsdbの想定)
# cp u-boot-1.2.0-hd.ram.bin /mnt/boot
# cp uloader-2.4.17_mvl21-sandpoint.o /mnt/boot
# mkdir -p /mnt/boot/tools
# cp kuro_swread kuro_morse /mnt/boot/tools/
# cp kuro_bootsel2.sh /mnt/etc/init.d/
# chmod 755 /mnt/etc/init.d/kuro_bootsel2.sh
# pushd /mnt/etc/rc.d/rcS.d
# ln -s ../init.d/kuro_bootsel2.sh S15kuro_bootsel2.sh
# popd
# cp kuro_boot.conf /mnt/etc/sdb1:/etc/init.d/kuro_bootsel2.sh を次のように変更。
101行目から
	if [ ! -f $2 ]; then
		/bin/echo "Kernel does not exist."
		/boot/tools/kuro_morse F $AVR
		return 0;
	fi
	init_avr
を
#	if [ ! -f $2 ]; then
#		/bin/echo "Kernel does not exist."
#		/boot/tools/kuro_morse F $AVR
#		return 0;
#	fi
	if [ -f $2 ]; then
		/sbin/insmod $1 kernel=$2 $3
	else
		echo /sbin/insmod $1 $2 $3
		/sbin/insmod $1 $2 $3
		echo /sbin/init 6
		/sbin\/init 6
	fi
	init_avr
している内容は、ubuntu-precise-installer-kuroBOX.sh の sed -e "101,105 s/^./#/" -e "110 s/^./#/" ... と同じ。
sdb1:/etc/kuro_boot.conf を次のように変更。
# kuro_bootsel config file (2008-04-01)
#
# "bootdefault"
# 1: Linux, 2-9: See below
bootdefault=2

(略)

# Menu entry No.2
#
menu2="Debian"
loader2="-f /boot/uloader-2.4.17_mvl21-sandpoint.o"
kernel2='uboot=/boot/u-boot-1.2.0-hd.ram.bin'
option2=''
している内容は、ubuntu-precise-installer-kuroBOX.sh の sed -e "s/^#bootdefault=1$/bootdefault=2/" ... と同じ。

3. rootfs,kernel,lib を展開
カーネルをsdb1へ、rootfsとlibをsdb3へ展開する。
# mount /dev/sdb1 /mnt
# tar xvfj kurobox-kernel-XXXXXX.tar.bz2 -C /mnt/boot
# umount /mnt
# mount /dev/sdb3 /mnt
# tar xvfj kurobox-rootfs-XXXXXX.tar.bz2 -C /mnt
# tar xvfj kurobox-lib-XXXXXX.tar.bz2 -C /mnt
# umount /mnt4. ハードディスクを玄箱に接続してブート
eth0はdhcpでアドレスを取得。電源投入から3～5分くらいで、sshd が上がりアクセス可能になる。はず。
ユーザー名root、パスワードkuroadmin でログインできる。
<a></a>
- 2015/05/08
3.19.6カーネルでUSBディスクを認識しなかったので作り直し。

]]></itunes:summary>
      <content:encoded><![CDATA[
<a href="http://blog.usoinfo.info/article/389750420.html">Squeeze化しカーネルを2.6.39.4に</a>して使っていた玄箱だが、Jessieがリリースされたのを機に、追い付いておくことにした。<br /><br />と言っても、<a href="http://blog.usoinfo.info/article/418454427.html">HDL-GXRでWheezy/Jessieを</a>動かすよりは簡単に済んだ。玄箱は、正式にカーネルに取り込まれているので、カーネルソースをいじらなくてよいので。<br />よって、Weezy用は3.2系logtermの3.2.68、Jessie用は最新のstableである3.19.6を選択した。<br /><br />基本的な作業は、3.x系のカーネルをコンパイルして(<a href="http://blog.usoinfo.info/article/389750420.html">参照記事</a>)、debootstrapでrootfsを作成(<a href="http://blog.usoinfo.info/article/390884654.html">参照記事</a>)、玄箱からディスクを取り出して別のPCにマウントし、ブート環境を整えた上で、作ったカーネルとrootfsを展開した。<br />作ったrootfsとカーネルを一応置いておく。<br /><br /><strong>Wheezy向け</strong><br />rootfs <a href="https://drive.google.com/file/d/0B18h_ms-e_FLUl9vX1dXWjIyZlE/view?usp=sharing">kurobox-rootfs-wheezy.tar.bz2</a><br />kernel <a href="https://drive.google.com/file/d/0B18h_ms-e_FLNURYQ3hKN1Z2ZlE/view?usp=sharing">kurobox-kernel-3.2.68.tar.bz2</a><br />lib <a href="https://drive.google.com/file/d/0B18h_ms-e_FLZWJWZWo1ZTJSRG8/view?usp=sharing">kurobox-lib-3.2.68.tar.bz2</a><br />config <a href="https://drive.google.com/file/d/0B18h_ms-e_FLNjhhY0lfck5Ed28/view?usp=sharing">kurobox-config-3.2.68.txt</a><br /><br /><strong>Jessie向け</strong><br />rootfs <a href="https://drive.google.com/file/d/0B18h_ms-e_FLZmplMzJVaURreGc/view?usp=sharing">kurobox-rootfs-jessie.tar.bz2</a><br />kernel <a href="https://drive.google.com/file/d/0B18h_ms-e_FLLUoxZ3BLN05CSWs/view?usp=sharing">kurobox-kernel-3.19.6.tar.bz2</a><br />lib <a href="https://drive.google.com/file/d/0B18h_ms-e_FLODZHUDQxdVNlTVE/view?usp=sharing">kurobox-lib-3.19.6.tar.bz2</a><br />config <a href="https://drive.google.com/file/d/0B18h_ms-e_FLYWRYZkxHTVlveU0/view?usp=sharing">kurobox-config-3.19.6.txt</a><br /><br /><strong>インストール手順</strong><br /><em>1. ハードディスクのパーティションを切る</em><br />Linuxの動いているPCにHDDを接続して、<br /><pre class="prettyprint lang-bash">(※接続したHDDはsdbの想定)<br />/dev/sdb1 MontaVista Linux (100M～お好みで)<br />/dev/sdb2 swap (256M～お好みで)<br />/dev/sdb3 Debian (残り全部)<br /></pre><br />sdb1,sdb3はext3でフォーマット、sdb2はmkswapする。<br />玄人志向のページから<a href="http://archive.kuroutoshikou.com/modules/display/?iid=118">ファームウェアアップデート Ver1.02</a>をダウンロードし解凍、中の<strong>image.zip</strong>を解凍して、<strong>tmpimage.tgz</strong>を /dev/sdb1 に展開する。(この段階で玄箱MontaVistaが動くようになるはず。つまり第１パーティションに玄箱オリジナルのLinuxが入ればいいので、通常の初期化手順を実行しても良い、はず。)<br /><br /><em>2. ブート環境の整備</em><br /><a href="http://ux.getuploader.com/KUROBOX_PPC_Ubuntu_Precise/">玄箱/玄箱HG 用 ubuntu 12.04 LTS image</a>より、<strong>kuro-bootsel2.20080419.tar.gz</strong> と <strong>ubuntu-precise-installer.zip</strong> をダウンロード。<br />ubuntu-precise-installer.zip を解凍し、<strong>u-boot-1.2.0-hd.ram.bin uloader-2.4.17_mvl21-sandpoint.o</strong>をsdb1:/boot に置く。<br /><strong>kuro-bootsel2.20080419.tar.gz</strong> を解凍して、<strong>install.sh</strong>の内容を手作業で実行。<br /><pre class="prettyprint lang-bash"># mount /dev/sdb1 /mnt (※接続したHDDはsdbの想定)<br /># cp u-boot-1.2.0-hd.ram.bin /mnt/boot<br /># cp uloader-2.4.17_mvl21-sandpoint.o /mnt/boot<br /># mkdir -p /mnt/boot/tools<br /># cp kuro_swread kuro_morse /mnt/boot/tools/<br /># cp kuro_bootsel2.sh /mnt/etc/init.d/<br /># chmod 755 /mnt/etc/init.d/kuro_bootsel2.sh<br /># pushd /mnt/etc/rc.d/rcS.d<br /># ln -s ../init.d/kuro_bootsel2.sh S15kuro_bootsel2.sh<br /># popd<br /># cp kuro_boot.conf /mnt/etc/</pre><strong>sdb1:/etc/init.d/kuro_bootsel2.sh</strong> を次のように変更。<br /><pre class="prettyprint lang-bash">101行目から<br />	if [ ! -f $2 ]; then<br />		/bin/echo "Kernel does not exist."<br />		/boot/tools/kuro_morse F $AVR<br />		return 0;<br />	fi<br />	init_avr<br />を<br />#	if [ ! -f $2 ]; then<br />#		/bin/echo "Kernel does not exist."<br />#		/boot/tools/kuro_morse F $AVR<br />#		return 0;<br />#	fi<br />	if [ -f $2 ]; then<br />		/sbin/insmod $1 kernel=$2 $3<br />	else<br />		echo /sbin/insmod $1 $2 $3<br />		/sbin/insmod $1 $2 $3<br />		echo /sbin/init 6<br />		/sbin\/init 6<br />	fi<br />	init_avr<br /></pre>している内容は、ubuntu-precise-installer-kuroBOX.sh の sed -e "101,105 s/^./#/" -e "110 s/^./#/" ... と同じ。<br /><strong>sdb1:/etc/kuro_boot.conf</strong> を次のように変更。<br /><pre class="prettyprint lang-bash"># kuro_bootsel config file (2008-04-01)<br />#<br /># "bootdefault"<br /># 1: Linux, 2-9: See below<br />bootdefault=2<br /><br />(略)<br /><br /># Menu entry No.2<br />#<br />menu2="Debian"<br />loader2="-f /boot/uloader-2.4.17_mvl21-sandpoint.o"<br />kernel2='uboot=/boot/u-boot-1.2.0-hd.ram.bin'<br />option2=''<br /></pre>している内容は、ubuntu-precise-installer-kuroBOX.sh の sed -e "s/^#bootdefault=1$/bootdefault=2/" ... と同じ。<br /><br /><em>3. rootfs,kernel,lib を展開</em><br />カーネルをsdb1へ、rootfsとlibをsdb3へ展開する。<br /><pre class="prettyprint lang-bash"># mount /dev/sdb1 /mnt<br /># tar xvfj kurobox-kernel-XXXXXX.tar.bz2 -C /mnt/boot<br /># umount /mnt<br /># mount /dev/sdb3 /mnt<br /># tar xvfj kurobox-rootfs-XXXXXX.tar.bz2 -C /mnt<br /># tar xvfj kurobox-lib-XXXXXX.tar.bz2 -C /mnt<br /># umount /mnt</pre><em>4. ハードディスクを玄箱に接続してブート</em><br />eth0はdhcpでアドレスを取得。電源投入から3～5分くらいで、sshd が上がりアクセス可能になる。はず。<br />ユーザー名root、パスワードkuroadmin でログインできる。<br /><a name="more"></a><br />- 2015/05/08<br />3.19.6カーネルでUSBディスクを認識しなかったので作り直し。

]]><![CDATA[
]]></content:encoded>
            <category>開発</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/418596388</guid>
                </item>
        <item>
      <link>http://blog.usoinfo.info/article/418454427.html</link>
      <title>HDL-GXRでJessieを動かす。</title>
      <pubDate>Tue, 05 May 2015 16:44:54 +0900</pubDate>
            <description>前記事で、HDL-GXRでWheezyを動かしたが、こっちが本命、Jessie。Jessieはつい先日出たばかりだが、Debianの過去バージョンの捨て去り方は急すぎるというか、もう少し余韻を残してくれてもいいんじゃないか。ミラーサイトからイメージが消えるの早い早い。というわけで、HDL-GXRでJessieを動かした。Jessieのカーネルは3.16番台のようなので、3.16.7 をコンパイルし、debootstrapでrootfsを作成。やった内容は、Wheezyとほぼ同..</description>
            <itunes:summary><![CDATA[
<a href="http://blog.usoinfo.info/article/418453811.html">前記事</a>で、HDL-GXRでWheezyを動かしたが、こっちが本命、Jessie。Jessieはつい先日出たばかりだが、Debianの過去バージョンの捨て去り方は急すぎるというか、もう少し余韻を残してくれてもいいんじゃないか。ミラーサイトからイメージが消えるの早い早い。

というわけで、HDL-GXRでJessieを動かした。
Jessieのカーネルは3.16番台のようなので、3.16.7 をコンパイルし、debootstrapでrootfsを作成。
やった内容は、Wheezyとほぼ同じなので割愛。前記事の3.2.68を3.16.7に、wheezyをjessieに読み替えれば大体合っている。

作ったカーネルとrootfsを。簡単なまとめは<a href="http://xdomain.usoinfo.info/hdlgxr-kernelpatch3-16-7.html">こちら</a>。使用は自己責任で。
patch <a href="https://drive.google.com/file/d/0B18h_ms-e_FLdFJrUWgySzJmNkk/view?usp=sharing">hdl-gxr-kernel-3.16.7.patch</a>
config <a href="https://drive.google.com/file/d/0B18h_ms-e_FLMFlJcDR2dkVhemc/view?usp=sharing">hdl-gxr-config-3.16.7.txt</a>
kernel <a href="https://drive.google.com/file/d/0B18h_ms-e_FLUWFnTUFZbWxCemc/view?usp=sharing">hdl-gxr-kernel-3.2.68.tar.bz2</a>
lib <a href="https://drive.google.com/file/d/0B18h_ms-e_FLZ2kydmEzb3NEWFE/view?usp=sharing">hdl-gxr-lib-3.2.68.tar.bz2</a>
rootfs <a href="https://drive.google.com/file/d/0B18h_ms-e_FLTmFFSlpfeTBMQ1E/view?usp=sharing">hdl-gxr-rootfs-wheezy.tar.bz2</a>
（Wheezyと同じく、eth0のアドレスはDHCPで、アクセスはsshで、ユーザー名root、パスワードはolpadminです。）

最新のstableカーネル3.19.6を使おうと思ったんだが、うまく動かせていない。何がいけないのかわからない。<a></a>atpagesがサービスを停止したのでまちめのURLを変更。
簡単なまとめは<a href="http://xdomain.usoinfo.info/hdlgxr-kernelpatch3-16-7.html">こちら</a>。

]]></itunes:summary>
      <content:encoded><![CDATA[
<a href="http://blog.usoinfo.info/article/418453811.html">前記事</a>で、HDL-GXRでWheezyを動かしたが、こっちが本命、Jessie。Jessieはつい先日出たばかりだが、Debianの過去バージョンの捨て去り方は急すぎるというか、もう少し余韻を残してくれてもいいんじゃないか。ミラーサイトからイメージが消えるの早い早い。<br /><br />というわけで、HDL-GXRでJessieを動かした。<br />Jessieのカーネルは3.16番台のようなので、3.16.7 をコンパイルし、debootstrapでrootfsを作成。<br />やった内容は、Wheezyとほぼ同じなので割愛。前記事の3.2.68を3.16.7に、wheezyをjessieに読み替えれば大体合っている。<br /><br />作ったカーネルとrootfsを。簡単なまとめは<a href="http://xdomain.usoinfo.info/hdlgxr-kernelpatch3-16-7.html">こちら</a>。使用は自己責任で。<br />patch <a href="https://drive.google.com/file/d/0B18h_ms-e_FLdFJrUWgySzJmNkk/view?usp=sharing">hdl-gxr-kernel-3.16.7.patch</a><br />config <a href="https://drive.google.com/file/d/0B18h_ms-e_FLMFlJcDR2dkVhemc/view?usp=sharing">hdl-gxr-config-3.16.7.txt</a><br />kernel <a href="https://drive.google.com/file/d/0B18h_ms-e_FLUWFnTUFZbWxCemc/view?usp=sharing">hdl-gxr-kernel-3.2.68.tar.bz2</a><br />lib <a href="https://drive.google.com/file/d/0B18h_ms-e_FLZ2kydmEzb3NEWFE/view?usp=sharing">hdl-gxr-lib-3.2.68.tar.bz2</a><br />rootfs <a href="https://drive.google.com/file/d/0B18h_ms-e_FLTmFFSlpfeTBMQ1E/view?usp=sharing">hdl-gxr-rootfs-wheezy.tar.bz2</a><br />（Wheezyと同じく、eth0のアドレスはDHCPで、アクセスはsshで、ユーザー名root、パスワードはolpadminです。）<br /><br />最新のstableカーネル3.19.6を使おうと思ったんだが、うまく動かせていない。何がいけないのかわからない。<a name="more"></a>atpagesがサービスを停止したのでまちめのURLを変更。<br />簡単なまとめは<a href="http://xdomain.usoinfo.info/hdlgxr-kernelpatch3-16-7.html">こちら</a>。

]]><![CDATA[
]]></content:encoded>
            <category>開発</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/418454427</guid>
                </item>
        <item>
      <link>http://blog.usoinfo.info/article/418453811.html</link>
      <title>HDL-GXRをWheezyで動かす</title>
      <pubDate>Tue, 05 May 2015 16:28:28 +0900</pubDate>
            <description>今更ながらのHDL-GXRについて。USB温度計を繋げてmuninで監視していたのだが、どうも時々通信が切れ、不安定。セキュリティに不安もあるし、Debianのバージョンを上げようと挑戦したものの、なかなかに難儀であった…。1. カーネルを作成カーネル2.6.39.4のままWheezyにすると、通信が出来なくなったりして、うまく動かないので、まず3.x系のカーネルを作る。Wheezyは3.2系で動いているので、3.2系のlongterm、3.2.68 を使うことにした。クロス..</description>
            <itunes:summary><![CDATA[
今更ながらのHDL-GXRについて。
USB温度計を繋げてmuninで監視していたのだが、どうも時々通信が切れ、不安定。
セキュリティに不安もあるし、Debianのバージョンを上げようと挑戦したものの、なかなかに難儀であった…。

1. カーネルを作成

カーネル2.6.39.4のままWheezyにすると、通信が出来なくなったりして、うまく動かないので、まず3.x系のカーネルを作る。
Wheezyは3.2系で動いているので、3.2系のlongterm、3.2.68 を使うことにした。
クロスコンパイル環境は、<a href="http://blog.usoinfo.info/article/418379646.html">前記事</a>を参照。
基本的な作業手順は、<a href="http://blog.usoinfo.info/article/390873934.html">2.6系と変わらない</a>。
カーネルパッチは再び手移植してみた。カーネルソースって、かなり頻繁に変更されているんだなあ。
<a href="https://drive.google.com/file/d/0B18h_ms-e_FLUUdQcmtSWkRsRzQ/view?usp=sharing">3.2.68用のカーネルパッチはこれ</a>
<a href="https://drive.google.com/file/d/0B18h_ms-e_FLTW1TT3RxRExpOWc/view?usp=sharing">.configのサンプル</a>
というわけで、カーネルをクロスでコンパイル。(これはDebian8+emdebianの環境での例)

# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.68.tar.xz
# tar xvfJ linux-3.2.68.tar.xz
# cd linux-3.2.68
# patch -p1 &lt; ../hdl-gxr-kernel-3.2.68.patch
patching file arch/arm/boot/compressed/head.S
patching file arch/arm/kernel/head.S
patching file arch/arm/mach-orion5x/Kconfig
patching file arch/arm/mach-orion5x/Makefile
patching file arch/arm/mach-orion5x/hdl_gxr-setup.c
patching file arch/arm/tools/mach-types
# cp ../hdl-gxr-config-3.2.68.txt .config
# ARCH=arm make menuconfig (※必要ならconfigを変更)
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make uImage modules
scripts/kconfig/conf --silentoldconfig Kconfig
  CHK     include/config/kernel.release
  UPD     include/config/kernel.release
:
(略)
:
# mkdir -p /opt/arm/boot
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/opt/arm make modules_install
# cp -p arch/arm/boot/uImage /opt/arm/boot/uImage.new
# cp -p System.map /opt/arm/boot/
# cp -p .config /opt/arm/boot/config-3.2.68.hdl-gxr
# pushd /opt/arm/boot
# tar cvfj /opt/arm/hdl-gxr-kernel-3.2.68.tar.bz2 .
# cd /opt/arm
# tar cvfj /opt/arm/hdl-gxr-lib-3.2.68.tar.bz2 lib
# popd

出来上がった hdl-gxr-kernel-3.2.68.tar.bz2 hdl-gxr-lib-3.2.68.tar.bz2 を、どこかに取っておく。

2. rootfsを作成

debootstrapでWheezyのrootfsを作成。
基本的な作業手順は、<a href="http://blog.usoinfo.info/article/390884654.html">Squeeze化</a>と同じ。
HDL-GXRはSqueeze以降でないと、xzがない、鍵がないなどでうまくない。


# aptitude install binutils (※arが入っていない場合のみ)
# mkdir -p /opt/landisk/debootstrap (※任意のディレクトリ)
# cd /opt/landisk/debootstrap
# wget http://ftp.jp.debian.org/debian/pool/main/d/debootstrap/debootstrap-udeb_1.0.67_all.udeb
# ar -x debootstrap-udeb_1.0.67_all.udeb
# tar Jxvfp data.tar.xz
# export DEBOOTSTRAP_DIR=`pwd`/usr/share/debootstrap
# export PATH=$PATH:`pwd`/usr/sbin
# mkdir -p /opt/landisk/wheezy (※任意のディレクトリ)
# debootstrap --arch=armel wheezy /opt/landisk/wheezy http://ftp.jp.debian.org/debian
I: Retrieving Release 
I: Retrieving Release.gpg 
:
(略)
:
I: Base system installed successfully.
# mount -t proc proc /opt/landisk/wheezy/proc
# chroot /opt/landisk/wheezy
# dpkg-reconfigure tzdata (※タイムゾーン設定)
# passwd (※rootのパスワード設定)
# vi /etc/apt/sources.list (※aptの設定)
--
deb http://ftp.jp.debian.org/debian wheezy main contrib non-free
deb-src http://ftp.jp.debian.org/debian wheezy main contrib non-free
deb http://security.debian.org wheezy/updates main contrib non-free
--
# apt-get update
# apt-get upgrade
# apt-get install udev openssh-server
# vi /etc/network/interfaces (※ネットワークを設定)
# vi /etc/fstab
--
proc         /proc           proc    defaults,nosuid,noexec  0 0
/dev/sda1    /boot           ext3    defaults,rw     0 0
/dev/sda2    swap            swap    defaults        0 0
/dev/sda3    /               ext3    defaults,rw     1 1
--
# apt-get clean
# exit
# umount /opt/landisk/wheezy/proc
# cd /opt/landisk/wheezy
# tar cjvf /opt/landisk/hdl-gxr-wheezy-rootfs.tar.bz2 .

出来上がった hdl-gxr-wheezy-rootfs.tar.bz2 を、どこかに取っておく。

3. ディスクに展開

HDL-GXRに入れるディスクを、USB-SATA接続キットなどを使ってLinuxの動いているPCに接続する。
（※新しいディスクなどの場合は、パーティションの切り方などは<a href="http://blog.usoinfo.info/article/390871326.html">過去記事</a>参照。）
第1パーティションにカーネル、第3パーティションにrootfsとカーネルモジュールを展開する。
ターゲットのディスクを /dev/sdb と仮定すると、さっき作った hdl-gxr-kernel-3.2.68.tar.bz2 hdl-gxr-lib-3.2.68.tar.bz2 hdl-gxr-wheezy-rootfs.tar.bz2 をPCに持ってきて


# mount /dev/sdb1 /mnt
# tar xvfj hdl-gxr-kernel-3.2.68.tar.bz2 -C /mnt
# umount /mnt
# mount /dev/sdb3 /mnt
# tar xvfj hdl-gxr-wheezy-rootfs.tar.bz2 -C /mnt
# tar xvfj hdl-gxr-lib-3.2.68.tar.bz2 -C /mnt
# umount /mnt

てな感じ。展開したディスクをHDL-GXRに接続し、電源投入。
うまくいけば、WheezyになったDebianが動いているはず。


作ったカーネルとrootfsを一応置いておく。簡単なまとめは<a href="http://www53.atpages.jp/usoinfo2/hdlgxr-kernelpatch3-2-68.html">こちら</a>。使用は自己責任で。
patch <a href="https://drive.google.com/file/d/0B18h_ms-e_FLUUdQcmtSWkRsRzQ/view?usp=sharing">hdl-gxr-kernel-3.2.68.patch</a>
config <a href="https://drive.google.com/file/d/0B18h_ms-e_FLTW1TT3RxRExpOWc/view?usp=sharing">hdl-gxr-config-3.2.68.txt</a>
kernel <a href="https://drive.google.com/file/d/0B18h_ms-e_FLWmMwXy00TEJnekU/view?usp=sharing">hdl-gxr-kernel-3.2.68.tar.bz2</a>
lib <a href="https://drive.google.com/file/d/0B18h_ms-e_FLbFVHbmY3dEI0Y0E/view?usp=sharing">hdl-gxr-lib-3.2.68.tar.bz2</a>
rootfs <a href="https://drive.google.com/file/d/0B18h_ms-e_FLMjVmcEIxXzExUG8/view?usp=sharing">hdl-gxr-rootfs-wheezy.tar.bz2</a>
これをディスクに放り込めば、とりあえず動く。はず。
eth0のアドレスはDHCPで、アクセスはsshで、ユーザー名root、パスワードはolpadminです。

Jessieは次で。
<a></a>atpagesがサービスを停止したので、まとめの場所を変更。
簡単なまとめは<a href="http://xdomain.usoinfo.info/hdlgxr-kernelpatch3-2-68.html">こちら</a>。

]]></itunes:summary>
      <content:encoded><![CDATA[
今更ながらのHDL-GXRについて。<br />USB温度計を繋げてmuninで監視していたのだが、どうも時々通信が切れ、不安定。<br />セキュリティに不安もあるし、Debianのバージョンを上げようと挑戦したものの、なかなかに難儀であった…。<br /><br /><strong>1. カーネルを作成</strong><br /><br />カーネル2.6.39.4のままWheezyにすると、通信が出来なくなったりして、うまく動かないので、まず3.x系のカーネルを作る。<br />Wheezyは3.2系で動いているので、3.2系のlongterm、3.2.68 を使うことにした。<br />クロスコンパイル環境は、<a href="http://blog.usoinfo.info/article/418379646.html">前記事</a>を参照。<br />基本的な作業手順は、<a href="http://blog.usoinfo.info/article/390873934.html">2.6系と変わらない</a>。<br />カーネルパッチは再び手移植してみた。カーネルソースって、かなり頻繁に変更されているんだなあ。<br /><a href="https://drive.google.com/file/d/0B18h_ms-e_FLUUdQcmtSWkRsRzQ/view?usp=sharing">3.2.68用のカーネルパッチはこれ</a><br /><a href="https://drive.google.com/file/d/0B18h_ms-e_FLTW1TT3RxRExpOWc/view?usp=sharing">.configのサンプル</a><br />というわけで、カーネルをクロスでコンパイル。(これはDebian8+emdebianの環境での例)<br /><sourcecode class="brush:bash"><br /># wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.68.tar.xz<br /># tar xvfJ linux-3.2.68.tar.xz<br /># cd linux-3.2.68<br /># patch -p1 < ../hdl-gxr-kernel-3.2.68.patch<br />patching file arch/arm/boot/compressed/head.S<br />patching file arch/arm/kernel/head.S<br />patching file arch/arm/mach-orion5x/Kconfig<br />patching file arch/arm/mach-orion5x/Makefile<br />patching file arch/arm/mach-orion5x/hdl_gxr-setup.c<br />patching file arch/arm/tools/mach-types<br /># cp ../hdl-gxr-config-3.2.68.txt .config<br /># ARCH=arm make menuconfig (※必要ならconfigを変更)<br /># ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make uImage modules<br />scripts/kconfig/conf --silentoldconfig Kconfig<br />  CHK     include/config/kernel.release<br />  UPD     include/config/kernel.release<br />:<br />(略)<br />:<br /># mkdir -p /opt/arm/boot<br /># ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/opt/arm make modules_install<br /># cp -p arch/arm/boot/uImage /opt/arm/boot/uImage.new<br /># cp -p System.map /opt/arm/boot/<br /># cp -p .config /opt/arm/boot/config-3.2.68.hdl-gxr<br /># pushd /opt/arm/boot<br /># tar cvfj /opt/arm/hdl-gxr-kernel-3.2.68.tar.bz2 .<br /># cd /opt/arm<br /># tar cvfj /opt/arm/hdl-gxr-lib-3.2.68.tar.bz2 lib<br /># popd<br /></sourcecode><br />出来上がった <strong>hdl-gxr-kernel-3.2.68.tar.bz2 hdl-gxr-lib-3.2.68.tar.bz2</strong> を、どこかに取っておく。<br /><br /><strong>2. rootfsを作成</strong><br /><br />debootstrapでWheezyのrootfsを作成。<br />基本的な作業手順は、<a href="http://blog.usoinfo.info/article/390884654.html">Squeeze化</a>と同じ。<br />HDL-GXRはSqueeze以降でないと、xzがない、鍵がないなどでうまくない。<br /><br /><sourcecode class="brush:bash"><br /># aptitude install binutils (※arが入っていない場合のみ)<br /># mkdir -p /opt/landisk/debootstrap (※任意のディレクトリ)<br /># cd /opt/landisk/debootstrap<br /># wget http://ftp.jp.debian.org/debian/pool/main/d/debootstrap/debootstrap-udeb_1.0.67_all.udeb<br /># ar -x debootstrap-udeb_1.0.67_all.udeb<br /># tar Jxvfp data.tar.xz<br /># export DEBOOTSTRAP_DIR=`pwd`/usr/share/debootstrap<br /># export PATH=$PATH:`pwd`/usr/sbin<br /># mkdir -p /opt/landisk/wheezy (※任意のディレクトリ)<br /># debootstrap --arch=armel wheezy /opt/landisk/wheezy http://ftp.jp.debian.org/debian<br />I: Retrieving Release <br />I: Retrieving Release.gpg <br />:<br />(略)<br />:<br />I: Base system installed successfully.<br /># mount -t proc proc /opt/landisk/wheezy/proc<br /># chroot /opt/landisk/wheezy<br /># dpkg-reconfigure tzdata (※タイムゾーン設定)<br /># passwd (※rootのパスワード設定)<br /># vi /etc/apt/sources.list (※aptの設定)<br />--<br />deb http://ftp.jp.debian.org/debian wheezy main contrib non-free<br />deb-src http://ftp.jp.debian.org/debian wheezy main contrib non-free<br />deb http://security.debian.org wheezy/updates main contrib non-free<br />--<br /># apt-get update<br /># apt-get upgrade<br /># apt-get install udev openssh-server<br /># vi /etc/network/interfaces (※ネットワークを設定)<br /># vi /etc/fstab<br />--<br />proc         /proc           proc    defaults,nosuid,noexec  0 0<br />/dev/sda1    /boot           ext3    defaults,rw     0 0<br />/dev/sda2    swap            swap    defaults        0 0<br />/dev/sda3    /               ext3    defaults,rw     1 1<br />--<br /># apt-get clean<br /># exit<br /># umount /opt/landisk/wheezy/proc<br /># cd /opt/landisk/wheezy<br /># tar cjvf /opt/landisk/hdl-gxr-wheezy-rootfs.tar.bz2 .<br /></sourcecode><br />出来上がった <strong>hdl-gxr-wheezy-rootfs.tar.bz2</strong> を、どこかに取っておく。<br /><br /><strong>3. ディスクに展開</strong><br /><br />HDL-GXRに入れるディスクを、USB-SATA接続キットなどを使ってLinuxの動いているPCに接続する。<br />（※新しいディスクなどの場合は、パーティションの切り方などは<a href="http://blog.usoinfo.info/article/390871326.html">過去記事</a>参照。）<br />第1パーティションにカーネル、第3パーティションにrootfsとカーネルモジュールを展開する。<br />ターゲットのディスクを /dev/sdb と仮定すると、さっき作った <strong>hdl-gxr-kernel-3.2.68.tar.bz2 hdl-gxr-lib-3.2.68.tar.bz2 hdl-gxr-wheezy-rootfs.tar.bz2</strong> をPCに持ってきて<br /><br /><sourcecode class="brush:bash"><br /># mount /dev/sdb1 /mnt<br /># tar xvfj hdl-gxr-kernel-3.2.68.tar.bz2 -C /mnt<br /># umount /mnt<br /># mount /dev/sdb3 /mnt<br /># tar xvfj hdl-gxr-wheezy-rootfs.tar.bz2 -C /mnt<br /># tar xvfj hdl-gxr-lib-3.2.68.tar.bz2 -C /mnt<br /># umount /mnt</sourcecode><br /><br />てな感じ。展開したディスクをHDL-GXRに接続し、電源投入。<br />うまくいけば、WheezyになったDebianが動いているはず。<br /><br /><hr /><br />作ったカーネルとrootfsを一応置いておく。簡単なまとめは<a href="http://www53.atpages.jp/usoinfo2/hdlgxr-kernelpatch3-2-68.html">こちら</a>。使用は自己責任で。<br />patch <a href="https://drive.google.com/file/d/0B18h_ms-e_FLUUdQcmtSWkRsRzQ/view?usp=sharing">hdl-gxr-kernel-3.2.68.patch</a><br />config <a href="https://drive.google.com/file/d/0B18h_ms-e_FLTW1TT3RxRExpOWc/view?usp=sharing">hdl-gxr-config-3.2.68.txt</a><br />kernel <a href="https://drive.google.com/file/d/0B18h_ms-e_FLWmMwXy00TEJnekU/view?usp=sharing">hdl-gxr-kernel-3.2.68.tar.bz2</a><br />lib <a href="https://drive.google.com/file/d/0B18h_ms-e_FLbFVHbmY3dEI0Y0E/view?usp=sharing">hdl-gxr-lib-3.2.68.tar.bz2</a><br />rootfs <a href="https://drive.google.com/file/d/0B18h_ms-e_FLMjVmcEIxXzExUG8/view?usp=sharing">hdl-gxr-rootfs-wheezy.tar.bz2</a><br />これをディスクに放り込めば、とりあえず動く。はず。<br />eth0のアドレスはDHCPで、アクセスはsshで、ユーザー名root、パスワードはolpadminです。<br /><br />Jessieは次で。<br /><a name="more"></a>atpagesがサービスを停止したので、まとめの場所を変更。<br />簡単なまとめは<a href="http://xdomain.usoinfo.info/hdlgxr-kernelpatch3-2-68.html">こちら</a>。

]]><![CDATA[
]]></content:encoded>
            <category>開発</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/418453811</guid>
                </item>
        <item>
      <link>http://blog.usoinfo.info/article/418379646.html</link>
      <title>Debian 8 (Jessie) でクロスコンパイル環境を作る</title>
      <pubDate>Mon, 04 May 2015 07:45:29 +0900</pubDate>
            <description>過去にDebian Squeeze+Emdebianで、玄箱/LANDISKのカーネルをクロスコンパイルする環境を作ったが、Debian Jessieになって、ちょっと違っているようなので。基本的には、このページ(CrossToolchains)に従って作っていく。アーキテクチャ &#39;armel&#39; になっているところは、別のターゲットの場合は適宜読み替え。手順を簡単にまとめると、sources.list にEmdebianを追加Emdebianの鍵を追加アーキテクチャを追加ap..</description>
            <itunes:summary><![CDATA[
過去に<a href="http://blog.usoinfo.info/article/390873934.html">Debian Squeeze+Emdebian</a>で、玄箱/LANDISKのカーネルをクロスコンパイルする環境を作ったが、Debian Jessieになって、ちょっと違っているようなので。

基本的には、このページ(<a href="https://wiki.debian.org/CrossToolchains">CrossToolchains</a>)に従って作っていく。
アーキテクチャ 'armel' になっているところは、別のターゲットの場合は適宜読み替え。

手順を簡単にまとめると、sources.list にEmdebianを追加Emdebianの鍵を追加アーキテクチャを追加aptitude updateaptitude install crossbuild-essential-(アーキテクチャ)である。

1. EmbedianのAPTを設定

※ソースリストにEmdebianを追加
# echo 'deb http://emdebian.org/tools/debian/ jessie main' \
&gt; /etc/apt/sources.list.d/crosstools.list

※鍵を追加
# wget -q -O - http://emdebian.org/tools/debian/emdebian-toolchain-archive.key \
| apt-key add -

※アーキテクチャ armel を追加
# dpkg --add-architecture armel

※APTを更新
# aptitude update
2. ツールチェインをインストール
# aptitude install crossbuild-essential-armel
以下の新規パッケージがインストールされます:
:
(略)


その他のツールも必要に応じて。（カーネルコンパイルに必要なものを入れる）
# aptitude install u-boot-tools ncurses-dev bzip2


3. HDL-GXRのカーネルをコンパイルしてみる
<a href="http://blog.usoinfo.info/article/390942728.html">過去記事</a>参照
# tar xvfj linux-2.6.39.4.tar.bz2
# cd linux-2.6.39.4/
# patch -p1 &lt; ../hdl-gxr-kernel-2.6.39.4.patch
# cp ../hdl-gxr-config-2.6.39.4.txt .config
# ARCH=arm make oldconfig
# ARCH=arm make menuconfig
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make uImage modules
# mkdir -p /opt/arm/boot
# ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/opt/arm make modules_install
# cp -p arch/arm/boot/uImage /opt/arm/boot/uImage.new
# cp -p System.map /opt/arm/boot/
# cp -p .config /opt/arm/boot/config-2.6.39.4.hdl-gxr
# pushd /opt/arm/boot
# tar cvfz ../kern.tgz .
# cd /opt/arm
# tar cvfz lib.tgz lib
# popd
<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
過去に<a href="http://blog.usoinfo.info/article/390873934.html">Debian Squeeze+Emdebian</a>で、玄箱/LANDISKのカーネルをクロスコンパイルする環境を作ったが、Debian Jessieになって、ちょっと違っているようなので。<br /><br />基本的には、このページ(<a href="https://wiki.debian.org/CrossToolchains">CrossToolchains</a>)に従って作っていく。<br />アーキテクチャ 'armel' になっているところは、別のターゲットの場合は適宜読み替え。<br /><br />手順を簡単にまとめると、<ul><li>sources.list にEmdebianを追加</li><li>Emdebianの鍵を追加</li><li>アーキテクチャを追加</li><li>aptitude update</li><li>aptitude install crossbuild-essential-(アーキテクチャ)</li></ul>である。<br /><br /><strong>1. EmbedianのAPTを設定</strong><br /><sourcecode class="brush:bash"><br />※ソースリストにEmdebianを追加<br /># echo 'deb http://emdebian.org/tools/debian/ jessie main' \<br />&gt; /etc/apt/sources.list.d/crosstools.list<br /><br />※鍵を追加<br /># wget -q -O - http://emdebian.org/tools/debian/emdebian-toolchain-archive.key \<br />| apt-key add -<br /><br />※アーキテクチャ armel を追加<br /># dpkg --add-architecture armel<br /><br />※APTを更新<br /># aptitude update</sourcecode><br /><strong>2. ツールチェインをインストール</strong><br /><sourcecode class="brush:bash"># aptitude install crossbuild-essential-armel<br />以下の新規パッケージがインストールされます:<br />:<br />(略)<br /></sourcecode><br /><br />その他のツールも必要に応じて。（カーネルコンパイルに必要なものを入れる）<br /><sourcecode class="brush:bash"># aptitude install u-boot-tools ncurses-dev bzip2<br /></sourcecode><br /><br /><strong>3. HDL-GXRのカーネルをコンパイルしてみる</strong><br /><a href="http://blog.usoinfo.info/article/390942728.html">過去記事</a>参照<br /><sourcecode class="brush:bash"># tar xvfj linux-2.6.39.4.tar.bz2<br /># cd linux-2.6.39.4/<br /># patch -p1 < ../hdl-gxr-kernel-2.6.39.4.patch<br /># cp ../hdl-gxr-config-2.6.39.4.txt .config<br /># ARCH=arm make oldconfig<br /># ARCH=arm make menuconfig<br /># ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make uImage modules<br /># mkdir -p /opt/arm/boot<br /># ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/opt/arm make modules_install<br /># cp -p arch/arm/boot/uImage /opt/arm/boot/uImage.new<br /># cp -p System.map /opt/arm/boot/<br /># cp -p .config /opt/arm/boot/config-2.6.39.4.hdl-gxr<br /># pushd /opt/arm/boot<br /># tar cvfz ../kern.tgz .<br /># cd /opt/arm<br /># tar cvfz lib.tgz lib<br /># popd</sourcecode><br /><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>開発</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/418379646</guid>
                </item>
        <item>
      <link>http://blog.usoinfo.info/article/417950139.html</link>
      <title>CentOS6にawstatsをインストールする</title>
      <pubDate>Sun, 26 Apr 2015 10:32:36 +0900</pubDate>
            <description>Apacheのログを解析するため、awstatsをサクッと入れる。環境は、CentOS6 + Apache 2.4 での例。1. epelからawstatsをインストールEPELが入ってない場合は適宜いれる。過去記事などを参照。# yum install --enablerepo=epel awstatsLoaded plugins: fastestmirrorSetting up Install ProcessLoading mirror speeds from cache..</description>
            <itunes:summary><![CDATA[
Apacheのログを解析するため、awstatsをサクッと入れる。
環境は、CentOS6 + Apache 2.4 での例。

1. epelからawstatsをインストール

EPELが入ってない場合は適宜いれる。<a href="http://blog.usoinfo.info/article/370024757.html">過去記事</a>などを参照。
# yum install --enablerepo=epel awstats
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
:
(略)
:
Installed:
  awstats.noarch 0:7.0-3.el6                                                                                                
Complete!

2.awstatsのconfigを書き換える

デフォルトでは、/etc/awstats 以下に、awstats.(ホスト名).conf ができている。
解析するサーバーが１つで、ホスト名とWebサーバー名が同一ならこのままのファイル名でいいが、バーチャルホストを切っていたりして複数の設定にしたい時は、awstats.(設定名).conf という名前でファイルを作成する。(設定名)は、後でアクセスするときに使う。
例えば、設定名www、設定名virtualの２つを使うときはこんな感じにする。
# cp awstats.model.conf awstats.www.conf
# cp awstats.model.conf awstats.virtual.conf
# ls -l
total 320
-rw-r--r-- 1 root root 61665 Feb 21  2013 awstats.model.conf
-rw-r--r-- 1 root root 61665 Apr 26 08:39 awstats.virtual.conf
-rw-r--r-- 1 root root 61665 Apr 26 08:37 awstats.www.confそれぞれのconfを書き換える。
最低限書き換える箇所は# vi awstats.XXXX.conf
---
LogFile="(ログファイルのパス)"
LogFormat=(ログファイルの形式:1-4)
---LogFileは、ログファイルのパスを、解析したいログの場所に変更する。複数のログファイルを結合して解析したい時は、
LogFile="/usr/share/awstats/tools/logresolvemerge.pl (ログファイル1) (ログファイル2) (...) |"こんな風にlogresolvemerge.plを使うと、複数ファイルを時系列で並べ替えて結合してくれる。

LogFormatは、ログファイルの形式を指定する。commonの時は4にするが、combinedの方が取れるデータが多いのでオススメ。変更するときはApacheの設定ファイルのCustomLogを書き換える。
# vi (http.confあるいはVirtualHostの中)
---
CustomLog (ログファイルのパス) common
↓
CustomLog (ログファイルのパス) combined
---
古いログをよけてから、apacheをリスタートする。
3.Webからawstatsを見えるように設定。

設定を直接httpd.confかVirtualHostの中に書いても良いし、conf/extra/awstats.conf などに分けてincludeしてもいい。必要なら認証もかける。
例・awstats.confを作る
# vi (apacheのconfディレクトリ)/extra/awstats.conf
---
Alias /awstatsclasses "/usr/share/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/share/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/share/awstats/wwwroot/icon/"
ScriptAlias /awstats/ "/usr/share/awstats/wwwroot/cgi-bin/"

&lt;Directory "/usr/share/awstats/wwwroot/cgi-bin"&gt;
   DirectoryIndex awstats.pl
   Options ExecCGI
&lt;/Directory&gt;

&lt;Directory "/usr/share/awstats/wwwroot"&gt;
  AuthUserFile (パスワードファイルの配置ディレクトリ)/passwd.awstats
  AuthName "AWSTATS"
  AuthType Basic
  Require valid-user
  Require all denied
  Require ip 127.0.0.1
&lt;/Directory&gt;
---
例・httpd.confから設定ファイルをincludeする
# vi httpd.conf
---
:
(任意の場所に追加)
Include conf/extra/awstats.conf
---
例・BASIC認証を設定
# htpasswd -c (パスワードファイルの配置ディレクトリ)/passwd.awstats
New password: 
Re-type new password: 
Adding password for user XXXX
#
4.初回の解析データ生成

まだ解析データはないので、初回だけ手動でデータを生成する。
ログサイズによっては、初回の生成は時間がかかるかも。
# /usr/share/awstats/tools/awstats_updateall.pl now \
-configdir="/etc/awstats" \
-awstatsprog="/usr/share/awstats/wwwroot/cgi-bin/awstats.pl"

Running '"/usr/share/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=XXXXXX -configdir="/etc/awstats"' to update config XXXXXX
Create/Update database for config "/etc/awstats/awstats.XXXXXX.conf" by AWStats version 7.0 (build 1.971)
From data in log file "/usr/local/apache2/logs/access_XXXXXX_log"...
Phase 1 : First bypass old records, searching new record...
:
(略)
:
 Found 1 new qualified records.
#
5.アクセスできるか試してみる

2. で、設定名とサーバー名が同じで１つしかないなら、http://(インストールしたサーバー名)/awstats/ にアクセスしてみる。
設定が複数あったり、設定名がサーバー名と違うなら、http://(インストールしたサーバー名)/awstats/awstats.pl?config=(設定名) にアクセスしてみる。

<a href="http://usoinfo.up.seesaa.net/image/awstat-example-150426.png" target="_blank"><img src="http://usoinfo.up.seesaa.net/image/awstat-example-150426-thumbnail2.png" alt="awstat-example-150426.png" border="0" height="229" width="320"></a>

うまくできていれば、解析された結果が表示される。
データの更新は、標準では１時間に１回で、起動のためのスクリプトは /etc/cron.hourly/awstats に配置されている。１日１回に変えたい、あるいは任意の頻度に変えたい場合は、このスクリプトを適当な場所に移したりすると良い。
<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
Apacheのログを解析するため、awstatsをサクッと入れる。<br />環境は、CentOS6 + Apache 2.4 での例。<br /><br /><strong>1. epelからawstatsをインストール</strong><br /><br />EPELが入ってない場合は適宜いれる。<a href="http://blog.usoinfo.info/article/370024757.html">過去記事</a>などを参照。<br /><sourcecode class="brush:bash"># yum install --enablerepo=epel awstats<br />Loaded plugins: fastestmirror<br />Setting up Install Process<br />Loading mirror speeds from cached hostfile<br />:<br />(略)<br />:<br />Installed:<br />  awstats.noarch 0:7.0-3.el6                                                                                                <br />Complete!</sourcecode><br /><br /><strong>2.awstatsのconfigを書き換える</strong><br /><br />デフォルトでは、/etc/awstats 以下に、awstats.(ホスト名).conf ができている。<br />解析するサーバーが１つで、ホスト名とWebサーバー名が同一ならこのままのファイル名でいいが、バーチャルホストを切っていたりして複数の設定にしたい時は、awstats.(設定名).conf という名前でファイルを作成する。(設定名)は、後でアクセスするときに使う。<br />例えば、設定名www、設定名virtualの２つを使うときはこんな感じにする。<br /><sourcecode class="brush:bash"># cp awstats.model.conf awstats.www.conf<br /># cp awstats.model.conf awstats.virtual.conf<br /># ls -l<br />total 320<br />-rw-r--r-- 1 root root 61665 Feb 21  2013 awstats.model.conf<br />-rw-r--r-- 1 root root 61665 Apr 26 08:39 awstats.virtual.conf<br />-rw-r--r-- 1 root root 61665 Apr 26 08:37 awstats.www.conf</sourcecode>それぞれのconfを書き換える。<br />最低限書き換える箇所は<sourcecode class="brush:bash"># vi awstats.XXXX.conf<br />---<br />LogFile="(ログファイルのパス)"<br />LogFormat=(ログファイルの形式:1-4)<br />---</sourcecode>LogFileは、ログファイルのパスを、解析したいログの場所に変更する。複数のログファイルを結合して解析したい時は、<br /><sourcecode class="brush:bash">LogFile="/usr/share/awstats/tools/logresolvemerge.pl (ログファイル1) (ログファイル2) (...) |"</sourcecode>こんな風にlogresolvemerge.plを使うと、複数ファイルを時系列で並べ替えて結合してくれる。<br /><br />LogFormatは、ログファイルの形式を指定する。commonの時は4にするが、combinedの方が取れるデータが多いのでオススメ。変更するときはApacheの設定ファイルのCustomLogを書き換える。<br /><sourcecode class="brush:bash"># vi (http.confあるいはVirtualHostの中)<br />---<br />CustomLog (ログファイルのパス) common<br />↓<br />CustomLog (ログファイルのパス) combined<br />---<br />古いログをよけてから、apacheをリスタートする。</sourcecode><br /><strong>3.Webからawstatsを見えるように設定。</strong><br /><br />設定を直接httpd.confかVirtualHostの中に書いても良いし、conf/extra/awstats.conf などに分けてincludeしてもいい。必要なら認証もかける。<br />例・awstats.confを作る<br /><sourcecode class="brush:bash"># vi (apacheのconfディレクトリ)/extra/awstats.conf<br />---<br />Alias /awstatsclasses "/usr/share/awstats/wwwroot/classes/"<br />Alias /awstatscss "/usr/share/awstats/wwwroot/css/"<br />Alias /awstatsicons "/usr/share/awstats/wwwroot/icon/"<br />ScriptAlias /awstats/ "/usr/share/awstats/wwwroot/cgi-bin/"<br /><br />&lt;Directory "/usr/share/awstats/wwwroot/cgi-bin"&gt;<br />   DirectoryIndex awstats.pl<br />   Options ExecCGI<br />&lt;/Directory&gt;<br /><br />&lt;Directory "/usr/share/awstats/wwwroot"><br />  AuthUserFile (パスワードファイルの配置ディレクトリ)/passwd.awstats<br />  AuthName "AWSTATS"<br />  AuthType Basic<br />  Require valid-user<br />  Require all denied<br />  Require ip 127.0.0.1<br />&lt;/Directory&gt;<br />---</sourcecode><br />例・httpd.confから設定ファイルをincludeする<br /><sourcecode class="brush:bash"># vi httpd.conf<br />---<br />:<br />(任意の場所に追加)<br />Include conf/extra/awstats.conf<br />---</sourcecode><br />例・BASIC認証を設定<br /><sourcecode class="brush:bash"># htpasswd -c (パスワードファイルの配置ディレクトリ)/passwd.awstats<br />New password: <br />Re-type new password: <br />Adding password for user XXXX<br />#</sourcecode><br /><strong>4.初回の解析データ生成</strong><br /><br />まだ解析データはないので、初回だけ手動でデータを生成する。<br />ログサイズによっては、初回の生成は時間がかかるかも。<br /><sourcecode class="brush:bash"># /usr/share/awstats/tools/awstats_updateall.pl now \<br />-configdir="/etc/awstats" \<br />-awstatsprog="/usr/share/awstats/wwwroot/cgi-bin/awstats.pl"<br /><br />Running '"/usr/share/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=XXXXXX -configdir="/etc/awstats"' to update config XXXXXX<br />Create/Update database for config "/etc/awstats/awstats.XXXXXX.conf" by AWStats version 7.0 (build 1.971)<br />From data in log file "/usr/local/apache2/logs/access_XXXXXX_log"...<br />Phase 1 : First bypass old records, searching new record...<br />:<br />(略)<br />:<br /> Found 1 new qualified records.<br />#</sourcecode><br /><strong>5.アクセスできるか試してみる</strong><br /><br />2. で、設定名とサーバー名が同じで１つしかないなら、http://(インストールしたサーバー名)/awstats/ にアクセスしてみる。<br />設定が複数あったり、設定名がサーバー名と違うなら、http://(インストールしたサーバー名)/awstats/awstats.pl?config=(設定名) にアクセスしてみる。<br /><br /><div style="text-align:center;"><a href="http://usoinfo.up.seesaa.net/image/awstat-example-150426.png" target="_blank"><img src="http://usoinfo.up.seesaa.net/image/awstat-example-150426-thumbnail2.png" alt="awstat-example-150426.png" border="0" height="229" width="320" onclick="location.href = 'http://blog.usoinfo.info/upload/detail/image/awstat-example-150426-thumbnail2.png.html'; return false;" style="cursor:pointer;" /></a></div><br /><br />うまくできていれば、解析された結果が表示される。<br />データの更新は、標準では１時間に１回で、起動のためのスクリプトは /etc/cron.hourly/awstats に配置されている。１日１回に変えたい、あるいは任意の頻度に変えたい場合は、このスクリプトを適当な場所に移したりすると良い。<br /><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>開発</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/417950139</guid>
            <enclosure url="https://usoinfo.up.seesaa.net/image/awstat-example-150426.png" length="66775" type="image/png" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/awstat-example-150426.png" length="66775" type="image/png" />
                      </item>
        <item>
      <link>http://blog.usoinfo.info/article/417166901.html</link>
      <title>METARのデータを取得して整形する</title>
      <pubDate>Sun, 12 Apr 2015 09:11:13 +0900</pubDate>
            <description>前回に引き続き。気象庁以外で気温などの現在値が取れるものはないか、ということで、世界各国の空港の気象情報であるMETARからデータを取るPHP関数も作ってみた。これ metar.phps。適当な場所に置いて include して使用する。例:metar_sample.php#!/usr/local/bin/php&amp;lt;?php    include &#39;metar.phps&#39;;    $data    = METAR_get(&#39;RJAA&#39;);    foreach($data..</description>
            <itunes:summary><![CDATA[
前回に引き続き。
気象庁以外で気温などの現在値が取れるものはないか、ということで、世界各国の空港の気象情報であるMETARからデータを取るPHP関数も作ってみた。
これ <a href="http://usoinfo.up.seesaa.net/image/metar.phps">metar.phps</a>。

適当な場所に置いて include して使用する。
例:<a href="http://usoinfo.up.seesaa.net/image/metar_sample.php">metar_sample.php</a>

#!/usr/local/bin/php
&lt;?php
    include 'metar.phps';

    $data    = METAR_get('RJAA');

    foreach($data['info'] as $i =&gt; $v){
        echo $v['name'].' '.$data['data'][ $i ].' '.$v['unit']."\n";
    }
?&gt;
空港のコードには、ICAOの４レターコードをくべる。
例えば、成田空港のデータを引っ張ってきて表示。こんな結果。

$ ./metar_sample.php 
時刻 2015/04/12 08:30:00 
気温 12 ℃
湿度 71 %
気圧 1030 hPa
風向 NNE 
風速 10 kt
空港によっては30分刻みでデータが来るので、気象庁よりいいかも知れない。気温の値の小数点以下が丸まってしまうのが欠点。
<a></a>

]]></itunes:summary>
      <content:encoded><![CDATA[
前回に引き続き。<br />気象庁以外で気温などの現在値が取れるものはないか、ということで、世界各国の空港の気象情報であるMETARからデータを取るPHP関数も作ってみた。<br />これ <a href="http://usoinfo.up.seesaa.net/image/metar.phps">metar.phps</a>。<br /><br />適当な場所に置いて include して使用する。<br />例:<a href="http://usoinfo.up.seesaa.net/image/metar_sample.php">metar_sample.php</a><br /><sourcecode class="brush:php"><br />#!/usr/local/bin/php<br />&lt;?php<br />    include 'metar.phps';<br /><br />    $data    = METAR_get('RJAA');<br /><br />    foreach($data['info'] as $i => $v){<br />        echo $v['name'].' '.$data['data'][ $i ].' '.$v['unit']."\n";<br />    }<br />?&gt;</sourcecode><br />空港のコードには、ICAOの４レターコードをくべる。<br />例えば、成田空港のデータを引っ張ってきて表示。こんな結果。<br /><sourcecode class="brush:bash"><br />$ ./metar_sample.php <br />時刻 2015/04/12 08:30:00 <br />気温 12 ℃<br />湿度 71 %<br />気圧 1030 hPa<br />風向 NNE <br />風速 10 kt</sourcecode><br />空港によっては30分刻みでデータが来るので、気象庁よりいいかも知れない。気温の値の小数点以下が丸まってしまうのが欠点。<br /><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>開発</category>
      <author>usoinfo</author>
      <guid isPermaLink="false">blog:https://blog.seesaa.jp,usoinfo/417166901</guid>
            <enclosure url="https://usoinfo.up.seesaa.net/image/metar.phps" length="3987" type="text/plain" />
                  <enclosure url="https://usoinfo.up.seesaa.net/image/metar_sample.php" length="186" type="text/plain" />
                      </item>
      </channel>
</rss>

