2015年04月01日

Tizenアプリ開発事始め (1)

今週に入って横浜はさらに暖かくなってきました。こちらでは近所の桜が7分咲き位で、もう少しで満開になりそうです。今週末と来週末は各地は花見客で賑わうことでしょう。去年の丁度同じ時期に横浜の蒔田という所に滞在していましたが、そのときも大岡川岸の桜が満開でした。今シーズンの桜前線は例年通りのペースで移動しているようですね。私は日吉から移動する準備で忙しくて、とても花見どころではありません。ただ、蒔田と合わせて10ヶ月も滞在していた横浜を離れるのは名残惜しいので、思い出づくりのために一人寂しく何処かで花見でもしようかなぁという気持ちもあります。気が向いたら、近場の桜の名所にでも出かけようかと思っています。

さて、前記事にTizen SDKをMacへインストールした際の作業記録を書きましたが、これに引き続いて、Tizen SDKを使ってHello Worldアプリを作成してみました。Tizenには2種類のアプリケーション・モデルが在ります。Web ApplicationとNative Applicationがそれで、前者はHTML5とJavaScriptでプログラムを書き、後者はC/C++で書きます。さらに、この2つを組み合わせたHybrid Applicationを作成することも可能なので、正確にはTizenには3種類のアプリケーション・モデルが存在することになります。

この辺の情報は、Tizen Developersサイト上のDeveloper Guideというオンライン・ドキュメントに詳しく書かれています。

 Tizen Web Application Model | Tizen Developers
 Tizen Native Application Model | Tizen Developers

両方のモデルのHello Worldアプリを作成する手順が書かれたチュートリアルも、同サイトに掲載されています。

 Creating Your First Tizen Application | Tizen Developers

Tizen(Tizen Mobile)アプリ開発の事始めとして、上記のチュートリアルを読みながら、両方のモデルのHello Worldアプリを作成してみました。また、Tizen SDKにはEmulatorとWeb Simulatorという2種類のエミュレータ・ツールが含まれており、これらを使ってアプリの実行やデバッグを行うこともできます。チュートリアルに従って作成したアプリを、これらのエミュレータ・ツールを使って実行することも試してみました。本記事にその作業の記録を書いていきます。

なお、Tizen SDKのEmulatorはQEMU上で動作し、Web SimulatorはGoogle Chrome上で動作します。QEMUはTizen SDKに含まれていますが、Google Chromeは含まれていません。Web Simulatorを利用する場合は、あらかじめGoogle Chromeをインストールしておく必要があります。また、Web ApplicationモデルのアプリはEmulatorとWeb Simulatorの両方で実行できますが、Native ApplicationはEmulatorでしか実行することはできません。

■ 開発者証明書の作成と登録


Tizen SDKのEmulatorとWeb Simulatorの使うためには前提条件があります。あらかじめAuthor Certificate(開発者証明書)というものを作成して、それをTizen IDEに登録しておかなくてはなりません。開発者証明書が登録されていない状態では、EmulatorやWeb Simulatorの仮想マシンへアプリをダウンロードできないようになっています(iOSでは実機の場合だけ、Androidではエミュレータと実機の両方で証明書が必要でした。TizenにはAndroidと同様のアプリ認証の仕組みが組み込まれているのでしょう)。以下に、Tizen IDEで開発者証明書を作成して登録する手順を記します。

  1. Tizen IDEの[Tizen IDE] > [Preferences]メニューを選択すると、[Preferences]ウィンドウが開ます。

  2. [Preferences]ウィンドウの左側のリストから[Tizen SDK] > [Security Profiles]という項目を選択すると、右側が下のように表示に変わります。
    SCShot_150401_0059-Registering_Auther_Certificate-TizenIDE-728x566
    このウィンドウ内で、セキュリティ・プロファイルと開発者証明書の作成と登録を行うことができます。

  3. 最初に[Profiles]エリアの[Add]ボタンを押します。すると、下のようなウィンドウが開いて、新しいセキュリティ・プロファイルの名前を問われます。
    SCShot_150401_0060-Registering_Auther_Certificate-TizenIDE-472x155.png
    適当な名前を入力して[OK]ボタンを押せば、セキュリティ・プロファイルが作成されます。
    SCShot_150401_0061-Registering_Auther_Certificate-TizenIDE-728x566

  4. 続いて、開発者証明書を作成するために[Author Certificates]エリアの[Generate]ボタンを押します。すると、下のようなウィンドウが開きます。
    SCShot_150401_0064-Registering_Auther_Certificate-TizenIDE-400x507.png
    このウィンドウの各エディットボックスに適当な値を入力して(「*」印は必須、それ以外は任意の項目です。名無しの開発者というのは嫌だったので、任意の項目のうち[Name]だけは入力しました)、[OK]ボタンを押すと、開発者証明書が作成されて下のようなウィンドウが表示されます。
    SCShot_150401_0065-Registering_Auther_Certificate-TizenIDE-516x142.png
    このウィンドウの[Yes]ボタンを押すと、作成された開発者証明書がセキュリティ・プロファイルの中へ登録されます。
    SCShot_150401_0066-Registering_Auther_Certificate-TizenIDE-728x566

上記の手順によって作成した開発者証明書は、/Users/LOGINUSER/tizen-sdk-data/keystore/authorというディレクトリに格納されます。他のPCでもTizen IDEを使っている場合は、このファイルをコピーして利用できます。

■ Web Applicationモデル・アプリの作成


開発者証明書の準備が整ったので、いよいよWeb Applicationモデルのアプリケーション・プロジェクトを作成しました。

Tizen IDEの[File] > [New] > [Project]というメニューを選択すると、下のようなウィンドウが開きます。
SCShot_150401_0003-Creating_HelloWorld_WebApp-TizenIDE-525x500.png
このウィンドウの[Tizen] > [Tizen Web Project]という項目を選択して、[Next > ]ボタンを押すと、さらに下のような[New Tizen Web Project]ウィンドウが開きます。
SCShot_150401_0006-Creating_HelloWorld_WebApp-TizenIDE-917x750
チュートリアルに従って、このウィンドウでは[Template] > [MOBILE-2.3] → [Basic] > [Basic Application]という項目を選択し、[Project name]エディットボックスにプロジェクト名を入力した上で、[Finish]ボタンを押しました。この操作によって、新しいWeb Applicationモデルのプロジェクトが作成されます。

作成されたプロジェクトは、Workbenchウィンドウの[Project Explorler]ビュー内にエントリとして追加されます。
SCShot_150401_0009-Creating_HelloWorld_WebApp-TizenIDE-1024x742
プロジェクトを作成できたので、さっそくこれをビルドしてみました(上のスクリーンショットは、プロジェクトをビルドした後のものです)。Tizen IDEの[Project] > [Build Project]メニューを選択するか、あるいは[Project Explorler]ビュー内のエントリのコンテキストメニュー(右クリックすると開くメニュー)から[Build Project]という項目を選択することでもプロジェクトをビルドできます。

■ EmulatorによるWeb Applicationの実行


Web Applicationモデルのプロジェクトが作成できたので、Tizen SDKのEmulatorを使ってこれを実行してみしまた。

Emulatorを使ってプロジェクトを実行するには、Emulator Managerというツールを使ってあらかじめ仮想マシンを作成しておかなくてはなりません。Workbenchウィンドウの[Connection Manager]ビュー上に存在する[Emulator Manager]アイコンをクリックすると、Tizen IDEからEmulator Managerを起動することができます。
SCShot_150401_0022-Running_HelloWorld_WebApp-TizenIDE-1024x742
下がEmulator Managerのウィンドウです。初めてEmulator Managerを起動すると、仮想マシンはまだ存在しません。
SCShot_150401_0023-Running_HelloWorld_WebApp-TizenIDE-840x504
仮想マシンを作成するには、[Create New]というアイコンをクリックします。この操作によって、Emulator Managerのウィンドウは下のような表示に変わります。
SCShot_150401_0024-Running_HelloWorld_WebApp-TizenIDE-840x504
右側に表示されているのが新しい仮想マシンのプロパティです。必要に応じてこれらのプロパティを変更した上で、[Confirm]というボタンを押せば、仮想マシンが作成されます。
SCShot_150401_0029-Running_HelloWorld_WebApp-TizenIDE-840x504
新しい仮想マシンを作成したら、それを起動しましょう。左側の仮想マシンのアイコン内の[Launch emulator]というボタンをクリックすると、その仮想マシンを起動できます(仮想マシンの起動には少し時間がかかります。私のPCはHaswell Core i5 1.4GHz CPU、8GBメモリのそこそこ高性能な奴ですが、それでもTizenが完全な起動状態になるのに60秒程かかります)。
SCShot_150401_0079-Running_HelloWorld_WebApp-TizenIDE-434x452.png
Emulator Managerで仮想マシンを起動すると、Tizen IDE側の[Connection Manager]ビューにもそのエントリが追加されます。
SCShot_150401_0078-Running_HelloWorld_WebApp-TizenIDE-1024x742
この状態でTizen IDE側の対象プロジェクトを選択し、Workbenchウィンドウのツールバー上に存在する[Run]ボタンを押す(あるいは、[Run] > [Run As] > [Tizen Web Application]というメニューを選択するか、[Project Explorler]ビューの対象プロジェクトのコンテキストメニューから[Run As] > [Tizen Web Application]という項目を選択すると)、そのプロジェクトが仮想マシンへダウンロードされて起動状態になります。
SCShot_150401_0082-Running_HelloWorld_WebApp-TizenIDE-434x452.png
SCShot_150401_0083-Running_HelloWorld_WebApp-TizenIDE-434x452.png
ちなみに、Tizen IDEに開発者証明書を登録していない状態でプロジェクトを実行しようとすると、下のようなエラー・メッセージが表示されます。
SCShot_150401_0035-Registering_Auther_Certificate-TizenIDE-534x133.png
Emulatorの仮想マシンを色々と操作してみましたが、全体的に動作が遅くてレスポンスも悪いです。Android SDKのエミュレータと同じような感じです。デバッグには使えると思いますが、アプリの評価テストは実機ターゲットでないと厳しそうです。


■ Web Application Hello Worldチュートリアル


以上でWeb Applicationモデル・アプリの作成とEmulatorによる実行は終わりですが、「Creating Your First Tizen Application」チュートリアルには、プロジェクトに変更を加えてEmulatorで実行するまでの手順が書かれています。続きの作業として、このチュートリアルの内容を最後までやってみました。

Tizen IDEの[Project Explorler]内のプロジェクトの構成ファイルからindex.htmlを選択して、そのコンテキストメニューの[Open] > [Open With] > [Web Page Editor]という項目を実行します。すると、下のような[Editor]ビューが開いて、その中にindex.htmlの内容が表示されます。
SCShot_150401_0091-Running_HelloWorld_WebApp-TizenIDE-1024x742
index.htmlにはアプリの起動画面のコードが含まれています。Web Applicationモデルのアプリでは、このように画面の定義コードはHTML5形式で書かれています。

ここで、[Editor]ビュー内の「Application Name」という文字列を「HelloWorld」に書き換えました。
SCShot_150401_0092-Running_HelloWorld_WebApp-TizenIDE-1024x742
上記の操作が終わった後、プロジェクトを再ビルドした上で、Emulator Managerの仮想マシンでプロジェクトを再度実行してみました。すると、プロジェクトへ加えた変更内容が仮想マシンにも反映されていました。
SCShot_150401_0097-Running_HelloWorld_WebApp-TizenIDE-434x452.png
いままでブログ記事をたくさん書いてきたので、私もHTMLにはそこそこ慣れています。WebプログラマもHTMLの書式に慣れている人が多いでしょう。アプリの画面定義をHTMLで書けることは大きなメリットだと言えます。

■ Web SimulatorによるWeb Applicationの実行


EmulatorによってWeb Applicationモデルのプロジェクトを実行できることが確認できたので、続いてWeb Simulatorの方も試してみました。

こちらはEmulatorより簡単で、Tizen IDEの対象プロジェクトを選択している状態で[Run] > [Run As] > [Tizen Web Simulator Application]というメニューを選択すると(あるいは、[Project Explorler]ビューの対象プロジェクトのコンテキストメニューから[Run As] > [Tizen Web Simulator Application]という項目を選択すると)、Google Chrome のウィンドウとしてWeb Simulatorが起動してプロジェクトが実行されます。
SCShot_150401_0098-Running_HelloWorld_WebApp-TizenIDE-820x792

Native Applicationモデルのアプリを作成して、それをEmulatorで実行するところまで書くつもりだったのですが、またしても疲れてしまいました。いつも床についている時間をとっくに過ぎているので(最近は遅くても夜9時には寝ています)、続きは次の記事に書きます。

【参考ページ】

  1. Tizen Tutorial : Setting up Active Security Profile
  2. Tizenの開発環境構築とHello Worldまで | Vitalify Inc. staffblog
  3. GClue blog: Tizen向けWebアプリの作成
  4. Tizen SDK 2.0 Alpha エミュレーターの使い方 (1) | OPTPiX Labs Blog
posted by とみやん at 13:09| Comment(0) | TrackBack(0) | モバイルOS研究 > Tizen

2015年03月27日

Tizenの研究を始めました

Yocto Projectの記事の中でTizenに興味を持っていることを書きましたが、いよいよTizenの研究を本格的に始めることにしました。

Tizenと言えばSamsung社を連想する人が多いようですが、TizenプロジェクトはLinux Foundation(Linuxオペレーティングシステムの普及をサポートする非営利のコンソーシアム)内に存在しており、Samsungは同プロジェクトの参加企業の一つでしかありません。また、Tizenの産業的役割を主導するために組織されたTizen Association という非営利団体が在り、こちらはアメリカのニュージャージー州に本部を置いています。TizenはAndroidに対抗するモバイルOSとして大きな注目を浴びた時期がありましたが、いまは主力分野をウェアラブル・デバイス、Smart TV、IVI(In-Vehicle Infotainment)などにシフトしています。モバイル・デバイスの向けのSDKやディストリビューションも開発が継続されていますが、TizenのUIはiOSやAndroidのようにまだ洗練されていません。

2015年1月にインド向けのSamsung Z1というスマホが発売されましたが(これの前にロシア向けのSamsung Zという機種が発表されましたが、発売延期になっています)、これがTizenを搭載した初めてのスマホです。これに対して、Firefox OSの方はすでに10機種以上が発売されています(そのほとんどは新興国向けの機種のようですが)。AndroidのライバルとなりそうなモバイルOSとしては、Firefox OSの方が一歩も二歩もリードしていると言って良いでしょう。Google検索のヒット数を比較すると、TizenよりFirefox OSの方が10倍も多いです。日本国内に限っても、NTTドコモが計画していたTizen搭載スマホの発売は延期された(Tizenスマホの開発は進めていたようですが、市場動向から大きな販売数は見込めないと判断したようです)のに対して、auからはFx0 LGL25というFirefox OS搭載スマホが2014年12月に発売されています(ただし、Fx0 LGL25の評判はあまり良くないようです)。これほどの差が開いてしまうと、もはやTizen勢が挽回するは難しいでしょう。

この2つのモバイルOSが登場した当初は私もFirefox OSを方に注目していたのですが、いまはどちらかと言うとTizenに対する興味の方が大きくなっています。Firefox OSへの興味も失った訳ではありませんが、Firefox OSがAndroidの資産をかなり流用していることが判ったことで、Firefox OSに対する熱は一気に冷めました。いまも進歩が続いているAndroidの成果を流用できるので現実的な選択であることは理解できますが、「それでは、Androidとどうやって差別化するのか」という疑問が生まれます。私は天邪鬼でマイナーなものにほど惹かれる傾向を持っていて、いまはFirefox OSよりTizenへの関心の方が強いです。

私がTizenに大きな興味を持つようになったもう一つの理由は、Tizenプロジェクトを主導している企業にIntelが含まれていることです。Yocto Projectもそうですが、Intelが主導者的な役割をしているプロジェクトを研究すると技術的に得られるものが大きいです。ただし、Intelが主導者的な役割をしているのはスマホ/タブレット向けのTizen(Tizen Mobile)ではなく、Tizen IVIの方のようです。前者を主導しているのはSamsungのようです。Samsung社はGalaxyシリーズのアクセサリという位置づけでGearシリーズという製品を販売していますが、その中の腕時計型製品にもTizenが搭載されています。こちらはTizen Wearableという名前で、そのSDK(Tizen SDK for Wearable)もTizen Developersのサイトで配布されています(ただし、Samsung Gearシリーズの評判はあまり芳しくないようです)。Intelが主導者的な役割をしているので完全に消滅してしまうことはないと思いますが、Tizenの将来は決して明るいとは言えないでしょう。

■ Tizen SDKのインストール


Tizen研究着手の第一段として、まずはTizen SDKをインストールしてみましました。ウェアラブル・デバイスやIVI用のTizen SDKも配布されていますが、無印のTizen SDKはモバイル・デバイス用の開発環境です。私が一番興味を持っているのはTizen IVIなのですが、アプリの動作環境や開発手法は他のデバイス向けのSDKと大きな差はなんいじゃないかと想像しています。開発者向けのTizen DevelopersというサイトでTizen SDKのMac OS X版が配布されているので(Ubuntu, Windows, Mac OS X版があります)、Tizenの概要を知るために、これをメインPCのMacBook Airへインストールしてみました。

Tizen SDKは、Tizen Developersサイトの以下のベージで配布されています。

 Tizen SDK | Tizen Developers

Tizen SDKを使うにはいくつかの前提条件があります。前提条件に関する詳しい情報は以下のベージに掲載されています。

 Prerequisites for the Tizen SDK | Tizen Developers

PCのスベックとしては、デュアルコア2GHz以上のCPU、3GB以上のメモリとなっていますが、ググって得た情報によると、CPUはCore i5クラス以上、メモリは4GB以上でないと、SDKに含まれているエミュレータが実用的な性能では動かないらしいです。今回Tizen SDKをインストールしたのはMacBook Air 11"(Early 2014)ですが、この条件を十分に満たしています。

Mac OS X版Tizen SDKのソフト環境の要件だけを記載すると、以下のような条件を満たしている必要があるようです。
  • Oracle版のJava 7以降がインストールされていること。
  • Command Line Toolsがインストールされていること。

Tizen SDKにはIDEが含まれていますが、これはEclipseをカスタマイズした物らしいです。EclipseはJavaベースのアプリケーションなので、Javaが必要になります。私の環境にはApple版のJava 6(JDK 1.6)はインストール済みでしたが、Oracle版のJavaはインストールしていませんでした。Tizen SDKのインストールを始める前に、OracleのサイトからJDK 1.7を入手して、Apple版JDK 1.6を残したままインストールしました(参考ページAにApple版とOracle版JDKの共存方法が掲載されていたので、このとおりにしました)。Command Line Toolsの方はXcode 5.1.1のインストール時に追加済みだったので、こちらの作業は必要ありませんでした。

下調べで得た情報によると、Tizen SDKのインストールは上記のベージで配布されている「Install Manager」という名前のインストーラを使って行うようです。このInstall ManagerによってTizen DevelopersのサイトからSDKイメージがダウンロードされるようですが、あらかじめダウンロードしておいたSDKイメージを使うこともできます。インターネット回線の速度に依存しますが、前者の方法だと最低でも数十分以上かかるみたいなので、私は後者の方法を選択しました。ちなみに、今回MacへインストールしたのはTizen 2.3 Rev2 SDK(本記事投稿時点の最新バージョン)です。

前提条件がすべて整っている状態になっていることを確認した後、さっそくTizen SDKのInstall Managerを起動してみました。
SCShot_150327_0003-Installing_Tizen_2.3_Rev2_SDK-MacOSX-452x256.png
Install Managerを起動すると、最初に下のようなウィンドウが表示されます。
SCShot_150327_0007-Installing_Tizen_2.3_Rev2_SDK-MacOSX-630x490.png
このままインスールを開始すると、SDKイメージはインターネット経由でダウンロードされるようです。ここでは、ローカルなSDKイメージを指定するために[Advanced]というリンクをクリックしました。すると、下のようなウィンドウが開きました。
SCShot_150327_0011-Installing_Tizen_2.3_Rev2_SDK-MacOSX-578x484.png
このウィンドウ内の[Package server]というのがインターネット経由でSDKイメージをダウンロードするオプションで、もう一方の[SDK image]がローカルなSDKイメージを使うオプションのようです。[SDK image]ラジオボタンを選択した上で、右側のフォルダ・アイコンをクリックするとファイル選択ダイアログが開いたので、あらかじめダウンロードしておいたTizen SDKのイメージファイルを指定しました。その上で[OK]ボタンを押すと、最初のウィンドウに戻りました。

SDKイメージの取得方法を選択した後、最初のウィンドウの[Install]アイコンをクリックして、Tizen SDKのインストール処理を開始しました。すると、下のようなウィンドウが表示されました。
SCShot_150327_0013-Installing_Tizen_2.3_Rev2_SDK-MacOSX-630x490.png
このウィンドウには2種類のインストール・プロファイルが表示されています。このままインストールを開始すると、[Mobile-2.3]というタイプのアプリを開発するための標準的なコンポーネントがインストールされるんだと思います。

インストールするコンポーネントを変更できるかどうかに興味があったので、ここでは[Custom]というボタンを押してみました。すると、ウィンドウは下のような表示に変わりました。
SCShot_150327_0014-Installing_Tizen_2.3_Rev2_SDK-MacOSX-630x490.png
どうやら、このウィンドウによってインストールするコンポーネントを個別に選択できるようです。下のウィンドウが[Typical]のコンポーネントの選択状態です。
SCShot_150327_0015-Installing_Tizen_2.3_Rev2_SDK-MacOSX-630x490.png
[Typical]のコンポーネントだけでも問題ないのかもしれませんが、ここでは、すべてのコンポーネントを選択状態にした上で、[Next]ボタンを押しました。
SCShot_150327_0016-Installing_Tizen_2.3_Rev2_SDK-MacOSX-630x490.png
すると、ライセンス条件への同意を求める下のようなウィンドウが表示されました。
SCShot_150327_0017-Installing_Tizen_2.3_Rev2_SDK-MacOSX-630x490.png
[I agree]ボタンを押すと、さらに下のようなウィンドウに変わりました。
SCShot_150327_0018-Installing_Tizen_2.3_Rev2_SDK-MacOSX-630x490.png
このウィンドウの[INSTALL]ボタンを押すると、Tizen SDKのインスール処理が開始されました。
SCShot_150327_0020-Installing_Tizen_2.3_Rev2_SDK-MacOSX-630x490.png
インストール処理が終了すると、最終的に下のようなウィンドウ表示になりました。
SCShot_150327_0021-Installing_Tizen_2.3_Rev2_SDK-MacOSX-630x490.png
これで、Tizen SDKのインストールは完了のようです。

インストール処理の開始直前のウィンドウに表示されているとおり、デフォルトでは、Tizen SDKは以下の2つのディレクトリへインストールされます(同ウィンドウ内の[Installation Location][Data Location]というリンクをクリックすることで、Tizen SDKのインストール先ディレクトリを変更するこも可能です)。
  • /Users/LOGINUSER/tizen-sdk
  • /Users/LOGINUSER/tizen-sdk-data

Tizen IDEの実行ファイルを探してみると、/Users/LOGINUSER/tizen-sdk/ide/IDE.appがそれのようです。
SCShot_150327_0022-Installing_Tizen_2.3_Rev2_SDK-MacOSX-910x474
インストール完了時のウィンドウに表示されている指示に従って、Macを再起動した後、このIDE.appという実行ファイルを起動してみました。すると、下のようなスプラッシュ・ウィンドウが表示されました。
SCShot_150327_0023-Installing_Tizen_2.3_Rev2_SDK_MacOSX-478x328.png
そして、しばらく待つと、下のようなウィンドウが開きました。Eclipseを使ったことのある人にはお馴染みのワーススペースの保存先ディレクトリを尋ねるウィンドウです。
SCShot_150327_0027-Installing_Tizen_2.3_Rev2_SDK_MacOSX-591x244.png
このウィンドウの[OK]ボタンを押すと、数秒後に下のようなウィンドウが開きました。
SCShot_150327_0030-Installing_Tizen_2.3_Rev2_SDK_MacOSX-1024x746
これが、Tizen IDEのWorkbenchウィンドウのようです。

本当はHello Worldアプリを作成して、それをエミュレータで実行するところまで書くつもりだったのですが、疲れてしまいました。Tizenのアプリ開発事始め的な内容は次の記事に書くことにします。

【2015/03/29 追記】

本記事にはTizen SDK 2.3 Rev2をMacBook Airへインストールした際の作業記録を書きましたが、Mac miniへもTizen SDKをインストールしてみました。こちらへインストールしたのは少し古いバージョンのTizen SDK 2.2.1 です。

この2つのバージョンのInstall MaganerとTizen IDEの画面にはだいぶん差がありました。参考のために、Tizen 2.2.1 SDKのMac OS X版をインストールした際のスクリーンショットを掲載しておきます。
SCShot_150329_0001-Installing_Tizen_2.2.1_SDK-MacOSX-628x478.png
SCShot_150329_0003-Installing_Tizen_2.2.1_SDK-MacOSX-578x484.png
SCShot_150329_0005-Installing_Tizen_2.2.1_SDK-MacOSX-578x484.png
SCShot_150329_0006-Installing_Tizen_2.2.1_SDK-MacOSX-578x484.png
SCShot_150329_0008-Installing_Tizen_2.2.1_SDK-MacOSX-578x484.png
SCShot_150329_0009-Installing_Tizen_2.2.1_SDK-MacOSX-578x484.png
SCShot_150329_0010-Installing_Tizen_2.2.1_SDK-MacOSX-578x484.png
SCShot_150329_0013-Installing_Tizen_2.2.1_SDK-MacOSX-578x484.png
SCShot_150329_0014-Installing_Tizen_2.2.1_SDK-MacOSX-578x484.png
Tizen 2.2.1 SDKでは、Tizen IDEの実行ファイル名はTizenIDE.appになっていました。
SCShot_150329_0016-Installing_Tizen_2.2.1_SDK-MacOSX-888x558
初めてTizen SDK 2.2.1 のIDEを起動すると、スプラッシュ・ウィンドウとワークスペースの保存先を尋ねるウィンドウに続いて、下のようなWelcomeウィンドウが表示されました。
SCShot_150329_0020-Installing_Tizen_2.2.1_SDK-MacOSX-1024x768
このウィンドウの[Workbench]というアイコンをクリックすると、Tizen IDEのWorkbenchウィンドウが開きました(2回目以降の起動ではWelcomeウィンドウは表示せれず、直接Workbenchウィンドウが開きました)。
SCShot_150329_0022-Installing_Tizen_2.2.1_SDK-MacOSX-1024x768
Workbenchウィンドウの構成も、Tizen SDK 2.2.1と2.3 Rev2では少し違っています。

【参考ページ】

  1. MacにJava(JDK)をインストール - Qiita
  2. Macに「Tizen SDK」をインストール | Tech Cauquet
  3. GClue blog: Tizen SDKのインストール


posted by とみやん at 18:53| Comment(0) | TrackBack(0) | モバイルOS研究 > Tizen

2015年03月22日

横浜・日吉で過ごす休日

先週から気温が上がって暖かくなり、一気に春らしくなってきました。今日は気温が18℃まで上がりすごく温かいです。急に暖かくなったので、体感的には20℃位に感じます。もはや完全に春の陽気ですね。信州も今日は温かいようですが、中信の3月の平均気温は10℃前後で今月一杯は肌寒い日々が続きます。信州と比べるのは間違いだと思いますが、こちらの春は暖かくて過ごし易いです。一体何処の話をしているのかと思われそうですが、私はいま横浜の日吉という所に滞在しています。横浜は海に近く、春や夏に南から温かい海風が吹くとかなり気温が上がります。今日の風は強くありませんが、その海風が緩やかに吹いています。

去年の9月から神奈川県内の会社で派遣常駐の組込みLinux関連の仕事を続けていましたが、先月末にその仕事がやっと終わりました。この仕事は本当にきつくて厳しかったです。去年10月から今年2月まで5ヶ月連続で労働時間が200Hを超えていることが、それを表しています。毎日夜10時まで残業、毎週土曜日は休日出勤、さらに休日まで滞在先の部屋で仕事の作業をやっていました。ソフトウェアの主要な部分を私一人で開発することになり、ほぼ全責任を背負わさせてしまったため、こういう働き方でしかこなすことができませんでした。作業ボリュームとして2〜3人分の仕事を一人でやっているような感じで、アシスタントも相談相手もおらず孤立無援だったこともストレスに拍車をかけていました。私の年齢でこれだけハードに働くと、身体が悲鳴を上げてしまいます。去年末に体調を崩してしまい、それでも仕事を続けざるをえない状況に陥り本当に苦しい日々が続きました。何とか開発業務を完遂できましたが、いまも体調が完全には回復していません。年齢的に身体の回復力が低下しているので、自然に回復するのに時間がかかっているのだと思います。大きなストレスを抱えたまま仕事を続けていたので、もしかすると「燃え尽き症候群」に陥っているのかもしれません。新しい事へ挑戦する意欲がぜんぜん湧いて来なくて困っています。体力と気力の両方が回復するに、少し時間がかかりそうです。

さて、たまには良いかなぁと思って、近況報告の記事でも書きます。じつは、去年の9月から私はずっと日吉に滞在していました。あまりに本業の仕事が多忙すぎて、プライベートな時間がまったく取れなかったので、日吉には滞在先の部屋で寝るために帰っているだけでした。日吉の街の印象とかを書きたいと思っていたのですが、なかなか書けずにいました。たまの休日に近くの定食屋やレストランなどで食事をするくらいだったので、記事を書けるほどのネタも持っていません。やっと仕事も片付いて束の間のモラトリアム時間ができたので、最近は日吉の街をブラブラと散策して過ごしたりしています。
IMG_20150322_162413-Yokohama_Hiyoshi-Town_Scene.jpg
IMG_20150322_162658-Yokohama_Hiyoshi-Town_Scene.jpg
IMG_20150322_163621-Yokohama_Hiyoshi-Town_Scene.jpg
IMG_20150322_164415-Yokohama_Hiyoshi-Town_Scene.jpg
IMG_20150322_165026-Yokohama_Hiyoshi-Town_Scene.jpg
IMG_20150322_165902-Yokohama_Hiyoshi-Town_Scene.jpg
日吉と言えば、慶応義塾大学の日吉キャンパスが在るので有名です。と言うか、日吉にはほぼそれしかないと言っても良いでしょう。街中は学生だらけで、私のような年配者にとってはすごく居心地が悪いです。平日の日中は若者限定の街と言っても良いくらい、駅周辺では学生しか見かけません。そして、金曜日の夜ともなれば、駅周辺の飲み屋は学生達で溢れかえり、飲んで騒いでいる声があちらこちらから聞こえます。慶応大学の学生は裕福な家庭の子供ばかりなので、社会マナーが高く悪ふざけや馬鹿騒ぎはしませんが、金曜日の夜は特に若者特有の活気が街全体に漂っている感じがします。日吉の街の規模は小さく、駅から徒歩10分圏内にしか店がありません。駅周辺は若者向けの店ばかりで、大きなスーパーもないので、家族持ちにとって日吉は住み心地の良い街だとは思えません。その所為か、東横線沿線の近隣の街と比較すると、日吉より武蔵小杉や元住吉の方が人気が高いらしいです。

裕福層が多く住んでいるからか、東急東横線沿線は東京でも物価が高い地区として有名です。駅ビルの中に小さめの東急ストアが在るのですが、食品の値段が全体的に高くて、私はこのスーバーをまったく利用していません。駅から15分位離れた場所にアピタという大型スーパーが在り、こちらの方が食品の値段が安いので、休日にこちらでまとめ買いをしています。滞在場所のすぐ近くにピアゴというコンビニ規模のミニスーバーが在って、こちらの店も良く利用しています。都会の街なので一通りの種類の店はすべて揃っていて不便さは感じませんが、商品を買うときに店を選べるほどではありません。全体的にイマイチ感が強い街というのが日吉の印象です。マイナス点ばかり書きましたが、裕福層が多く住んでおり優等生的な学生しかいない街なので、全体的に上品な雰囲気が漂っているのは日吉の良い所だと思います。

私は日吉に7ヶ月滞在していますが、この街に住んでみたいとはまったく思いませんでした。たまたまリーズナブルなマンスリー物件を見つけたから滞在していただけなので、日吉の街に特別な思い入れも感じません。もう少しでのその日吉からも離れるので、短い期間とはいえ人生の一時期を過ごした場所の記録を残すために本記事を書いています。

色々と書くことがあるかなぁと思っていたのですが、これ以上のネタを思いつきません。日吉はそれくらい小さな街です。まったく内容のない記事になってしまいましたが、これで終わりにします。
posted by とみやん at 14:38| Comment(0) | TrackBack(0) | 日記

2015年03月19日

[Yocto] lm_sensorsによるIntel E3815のCPU温度測定

しばらくYocto LinuxのSato Mobile Desktop GUI関連の記事を続けてきたので、この辺で、実機ターゲットの記事を挿みます。またしても小ネタになりますが、lm_sensorsというx86系ターゲットのCPU温度を測定できるパッケージの紹介記事を書きます。

PCのCPU温度を測定するWindows用のソフトウェアはたくさん在ります。多くのマザーボード・メーカーが自社製品にこの種のソフトを添付していますし、フリーのソフトも数多く存在しています。日本ではあまり流行っていませんが、ゲーミングPCという世界があり、ゲーミングPCではCPUのオーバー・クロックを試すユーザーが多いようです。このようにユーザー側の需要が高いからか、WindowsではCPU温度を測定できることは普通のことになっています。一方、LinuxではCPU温度を測定したいという需要はそれほど高くないようです。Linux用のゲームは数が少ないでし、Linux用のPCではパフォーマンスアップより安定動作の方を重視するので、CPUのオーバー・クロックを試すユーザーは少ないからです。Windowsと同種の機能を提供するソフトは必ずLinuxにも在る言われますが、Linux用のCPU温度測定ソフトもいくつか存在します。その中でもっとも広く使われているのがlm_sensorsです。UbuntuなどPC用Linuxディストリビューションでは、lm_sensorsはアーカイブ・リポジトリ経由で簡単にインストールできます。lm_sensorsはCPUだけでなくハードディスクの温度も測定もでき、ファンの回転数も制御できます。さらに、Web経由でlm_sensorsの機能を利用するためのCGIまで含まれてます。

Yocto Linuxでは、lm_sensorsのレシピはOpenEmbeddedリポジトリに収集されています。OpenEmbeddedリポジトリからパッケージレシピを取得すると、lm_sensorsを利用できるようなりますが、lm_sensorsはカーネルが提供する機能を利用して動作するソフトウェアです。そのため、単純にパッケージをターゲットイメージへ組み込んだだけでは動作しません。以降に、DE3815TYKHE用のYocto Linuxにlm_sensorsを組み込んで、正常に動くことを確認するまでの作業録を書いていきます。

最初に、DE3815TYKHE用のbblayers.conflocal.confに以下のような設定記述を追加して、単純にlm_sensorsをcore-image-satoイメージへ組み込んでみました。
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
LCONF_VERSION = "6"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto-bsp \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto-bsp \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-openembedded/meta-oe \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-intel \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-intel/meta-tlk \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-de3815tybe \
"
BBLAYERS_NON_REMOVABLE ?= " \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto \
"

#
# Additional packages to be installed to the specific images
#
IMAGE_INSTALL_append_pn-core-image-sato = " \
lmsensors-libsensors \
lmsensors-sensors \
lmsensors-sensord \
lmsensors-fancontrol \
lmsensors-sensorsdetect \
lmsensors-sensorsconfconvert \
lmsensors-pwmconfig \
lmsensors-isatools \
lmsensors-config-cgi"

lm_sensorsレシピから生成されるすべてのパッケージ(*-config-*, *-doc, *-dbgパッケージを含めると、じつはこれの倍以上の数があります)をターゲットイメージへ追加しています。

パッケージ名からの推測になりますが、上記のうち、lmsensors-sensorsdetectパッケージにsensors-detectというコマンドが含まれているようです。ググって得た情報によると、このsensors-detectコマンドがターゲットハードウェアのセンサー・デバイスの種類を調べて、lm_sensorsの動作に必要なカーネルモジュールに関する設定ファイルを自動的に生成してくれるようになっているそうです。この情報に従って、lm_sensorsの全パッケージを追加したcore-image-satoイメージをDE3815TYKHEへインストールした上で、まずはターゲット上でsensors-detectコマンドを実行してみました。
# sensors-detect
# sensors-detect revision 6209 (2014-01-14 22:51:58 +0100)
# System: ????????????????????????????????? ????????????????????????????????? [?????????????????????????????????]
# Board: Intel Corporation DE3815TYKH

This program will help you determine which kernel modules you need
to load to use lm_sensors most effectively. It is generally safe
and recommended to accept the default answers to all questions,
unless you know what you're doing.

Some south bridges, CPUs or memory controllers contain embedded sensors.
Do you want to scan for them? This is totally safe. (YES/no):
modprobe: FATAL: Module cpuid not found.
Failed to load module cpuid.
Silicon Integrated Systems SIS5595... No
VIA VT82C686 Integrated Sensors... No
VIA VT8231 Integrated Sensors... No
AMD K8 thermal sensors... No
AMD Family 10h thermal sensors... No
AMD Family 11h thermal sensors... No
AMD Family 12h and 14h thermal sensors... No
AMD Family 15h thermal sensors... No
AMD Family 15h power sensors... No
AMD Family 16h power sensors... No
Intel digital thermal sensor... No
Intel AMB FB-DIMM thermal sensor... No
VIA C7 thermal sensor... No
VIA Nano thermal sensor... No

Some Super I/O chips contain embedded sensors. We have to write to
standard I/O ports to probe them. This is usually safe.
Do you want to scan for Super I/O sensors? (YES/no):

modprobe: FATAL: Module cpuid not found. Failed to load module cpuid.”というエラー・メッセージが出力されて、続く項目がすべて“No”になっているので、sensors-detectはプロセッサとチップセットの種類を特定できていないようです。これ以上継続するのは無駄だと思って、sensors-detectの処理を途中で中止しました、上のエラー・メッセージからカーネルのcpuidという機能を有効にする必要があるようです。

現在のYocto Linuxのカーネル・コンフィグレーションで検索してみると、以下のような設定項目が見つかりました。
# zcat /proc/config.gz | grep CPUID
# CONFIG_X86_CPUID is not set

bitbake linux-yocto -c menuconfig」コマンドによってカーネルのコンフィグレーション画面を開き、CONFIG_X86_CPUIDに該当する設定項目を探してみると、以下のメニュー項目がそれに該当するようです。
UBShot_20150319_145912-YoctoLinux-DE3815TYKHE-Adding_lmsensors-704x721
このメニュー項目を有効にした上で「bitbake linux-yocto -c compile -f」と「bitbake linux-yocto」コマンドを実行して、カーネルイメージの再ビルドを行いました。さらにターゲットイメージの再ビルドも行い、そのイメージをDE3815TYKHEへインストールした上で、再度sensors-detectコマンドを実行してみました。
# sensors-detect
# sensors-detect revision 6209 (2014-01-14 22:51:58 +0100)
# System: ????????????????????????????????? ????????????????????????????????? [?????????????????????????????????]
# Board: Intel Corporation DE3815TYKH

This program will help you determine which kernel modules you need
to load to use lm_sensors most effectively. It is generally safe
and recommended to accept the default answers to all questions,
unless you know what you're doing.

Some south bridges, CPUs or memory controllers contain embedded sensors.
Do you want to scan for them? This is totally safe. (YES/no):
Silicon Integrated Systems SIS5595... No
VIA VT82C686 Integrated Sensors... No
VIA VT8231 Integrated Sensors... No
AMD K8 thermal sensors... No
AMD Family 10h thermal sensors... No
AMD Family 11h thermal sensors... No
AMD Family 12h and 14h thermal sensors... No
AMD Family 15h thermal sensors... No
AMD Family 15h power sensors... No
AMD Family 16h power sensors... No
Intel digital thermal sensor... Success!
(driver `coretemp')
Intel AMB FB-DIMM thermal sensor... No
VIA C7 thermal sensor... No
VIA Nano thermal sensor... No

Some Super I/O chips contain embedded sensors. We have to write to
standard I/O ports to probe them. This is usually safe.
Do you want to scan for Super I/O sensors? (YES/no):
Probing for Super-I/O at 0x2e/0x2f
Trying family `National Semiconductor/ITE'... No
Trying family `SMSC'... No
Trying family `VIA/Winbond/Nuvoton/Fintek'... No
Trying family `ITE'... Yes
Found unknown chip with ID 0x8607
Probing for Super-I/O at 0x4e/0x4f
Trying family `National Semiconductor/ITE'... No
Trying family `SMSC'... No
Trying family `VIA/Winbond/Nuvoton/Fintek'... No
Trying family `ITE'... No

Some systems (mainly servers) implement IPMI, a set of common interfaces
through which system health data may be retrieved, amongst other things.
We first try to get the information from SMBIOS. If we don't find it
there, we have to read from arbitrary I/O ports to probe for such
interfaces. This is normally safe. Do you want to scan for IPMI
interfaces? (YES/no):
# DMI data unavailable, please consider installing dmidecode 2.7
# or later for better results.
Probing for `IPMI BMC KCS' at 0xca0... No
Probing for `IPMI BMC SMIC' at 0xca8... No

Some hardware monitoring chips are accessible through the ISA I/O ports.
We have to write to arbitrary I/O ports to probe them. This is usually
safe though. Yes, you do have ISA I/O ports even if you do not have any
ISA slots! Do you want to scan the ISA I/O ports? (YES/no):
Probing for `National Semiconductor LM78' at 0x290... No
Probing for `National Semiconductor LM79' at 0x290... No
Probing for `Winbond W83781D' at 0x290... No
Probing for `Winbond W83782D' at 0x290... No

Lastly, we can probe the I2C/SMBus adapters for connected hardware
monitoring devices. This is the most risky part, and while it works
reasonably well on most systems, it has been reported to cause trouble
on some systems.
Do you want to probe the I2C/SMBus adapters now? (YES/no):
Found unknown SMBus adapter 8086:0f12 at 0000:00:1f.3.
Sorry, no supported PCI bus adapters found.

Next adapter: i915 gmbus ssc (i2c-0)
Do you want to scan it? (yes/NO/selectively):

Next adapter: i915 gmbus vga (i2c-1)
Do you want to scan it? (yes/NO/selectively):

Next adapter: i915 gmbus panel (i2c-2)
Do you want to scan it? (yes/NO/selectively):

Next adapter: i915 gmbus dpc (i2c-3)
Do you want to scan it? (yes/NO/selectively):

Next adapter: i915 gmbus dpb (i2c-4)
Do you want to scan it? (yes/NO/selectively):

Next adapter: i915 gmbus dpd (i2c-5)
Do you want to scan it? (yes/NO/selectively):

Next adapter: DPDDC-B (i2c-6)
Do you want to scan it? (YES/no/selectively):

Next adapter: SMBus I801 adapter at e000 (i2c-7)
Do you want to scan it? (YES/no/selectively):
Client found at address 0x50
Probing for `Analog Devices ADM1033'... No
Probing for `Analog Devices ADM1034'... No
Probing for `SPD EEPROM'... No
Probing for `EDID EEPROM'... No


Now follows a summary of the probes I have just done.
Just press ENTER to continue:

Driver `coretemp':
* Chip `Intel digital thermal sensor' (confidence: 9)

Do you want to generate /etc/sysconfig/lm_sensors? (yes/NO): YES
Copy prog/init/lm_sensors.init to /etc/init.d/lm_sensors
for initialization at boot time.
You should now start the lm_sensors service to load the required
kernel modules.


cpuidに関するエラー・メッセージが消えて、最初の項目のうち“Intel digital thermal sensor...”が“Success!”に変わっているので、プロセッサとチップセットの種類を特定できているようです。これで大丈夫なのかなぁと思いながら、今度はsensors-detectの処理を継続してみました。すべてのプロンプトに対して「Enter」をタイプしながら進むと、一番最後に/etc/sysconfig/lm_sensorsという設定ファイルを作成するかどうかを問うプロンプトが表示されました。このプロンプトに「YES」と入力すると、設定ファイルの作成に成功したらしいメッセージが出力されてsensors-detectは終了しました。

sensors-detectによって作成された設定ファイルを確認すると、下のような内容でした。
# cat /etc/sysconfig/lm_sensors
# Generated by sensors-detect on Thu Mar 19 17:03:45 2015
# This file is sourced by /etc/init.d/lm_sensors and defines the modules to
# be loaded/unloaded.
#
# The format of this file is a shell script that simply defines variables:
# HWMON_MODULES for hardware monitoring driver modules, and optionally
# BUS_MODULES for any required bus driver module (for example for I2C or SPI).

HWMON_MODULES="coretemp"

設定ファイルが作成されたので、これでOKなんだろうと思って、続いてsensorsというコマンドを実行してみました。これがCPU温度の測定情報を取得するためのコマンドです。sensorsコマンドによって、以下のような情報が出力されました。
# sensors
acpitz-virtual-0
Adapter: Virtual device
temp1: +26.8 C (crit = +90.0 C)


一応CPU温度の測定値は取得できているよう見えますが、“+26.8 C”という値はちょっと低すぎるような気します。それに、sensors-detectの表示メッセージと上記の設定ファイル内の“coretemp”というのが気になりました。これもカーネルモジュール(ドライバ)だと思われるからです。

現在のカーネル・コンフィグレーションを調べると、以下のような設定項目がヒットしました。
# zcat /proc/config.gz | grep CORETEMP
# CONFIG_SENSORS_CORETEMP is not set

名前からしても、多分このCONFIG_SENSORS_CORETEMPが“coretemp”に該当するカーネルの設定項目だと思われます。上記のとおり、現在の設定では無効になっています。

ここで色々とググって調べたみたところ、Atomプロセッサでlm_sensorsを動かすには、どうやらカーネルのCONFIG_X86_MSRCONFIG_SENSORS_CORETEMPという機能を有効にしないとダメらしいことが判りました。どうやってこの結論に達したかと言うと、lm_sensors公式サイトの「Device Support Status」ページに掲載されている表中の「Intel Atom」の情報から推測しました。
ASShot_20150320_0006-YoctoLinux-DE3815TYKHE-Adding_lmsensors-1222x539
上表中の「MSR」という用語について調べてみると、これは「Model-specific Register」の略だそうで、Pentiumから追加されたプロセッサの内部機能を制御するための特殊なレジスタらしいです。Pentium M以降のプロセッサでは、このMSR経由で取得できるデータにCPU温度情報が含まれていることが判りました。もう一つの「coretemp」は、Intel Core/Core 2/Atomシリーズ・プロセッサに内蔵されているセンサー・デバイス用のドライバのようです。

上記の情報に基づいて、再度カーネルのコンフィグレーション画面を開いて、CONFIG_X86_MSRCONFIG_SENSORS_CORETEMPに該当するメニュー項目を有効にしました。
UBShot_20150319_154431-YoctoLinux-DE3815TYKHE-Adding_lmsensors-704x721
UBShot_20150319_161849-YoctoLinux-DE3815TYKHE-Adding_lmsensors-704x721
その上で、カーネルイメージとターゲットイメージの再ビルドを行いました。再ビルドによって生成されたターゲットイメージをDE3815TYKHEへインストールして、再度sensors-detectコマンドを実行してみると、前回と同様に、最後に設定ファイルの作成に成功した旨のメッセージが表示されて終了しました。sensors-detectによって作成された/etc/sysconfig/lm_sensorsの内容も同じでした。

/etc/sysconfig/lm_sensorsが作成されていることを確認した後、再度ターゲット上でsensorsコマンドを実行してみると、今度は下のような情報が表示されました。
# sensors
acpitz-virtual-0
Adapter: Virtual device
temp1: +26.8 C (crit = +90.0 C)

coretemp-isa-0000
Adapter: ISA adapter
Core 0: +48.0 C (high = +110.0 C, crit = +110.0 C)


新たに追加された下側の“+48.0 C”はCPUの温度としてそれらしい値です。“Core 0 ”というのはE3815がシングルコアであることを表しているのでしょう。これがカーネルのcoretempドライバによって取得された温度情報のようです。それにsensorsコマンドを繰り返し実行すると、この温度が変化することが確認できました。この測定値こそDE3815TYKHEに搭載されているE3815の温度のようです。

以上で、DE3815TYKHE上のYocto Linuxでlm_sensorsが動くようになりましたが、最後にlocal.confの設定記述を以下のように変更しました。
#
# Additional packages to be installed to the specific images
#
IMAGE_INSTALL_append_pn-core-image-sato = " \
lmsensors-libsensors \
lmsensors-sensors \
lmsensors-sensord \
lmsensors-sensorsdetect \
lmsensors-sensorsconfconvert \
lmsensors-isatools \
lmsensors-config-cgi"

ターゲットイメージからlmsensors-fancontrolとlmsensors-pwmconfigというパッケージを削除するためです。この2つはファンの回転数の取得と制御を行うパッケージのようですが、DE3815TYKHEにはファンは搭載されていないからです。

本記事には、カーネルの機能を利用しているlm_sensorsをターゲットイメージへ組み込んで、その機能が正常に動作していることを確認するまでの試行錯誤をそのまま書いてみました。このようなパッケージをYocto Linuxへ組み込む際の作業過程を知ってもらいたかったからです。PC用のLinuxディストリビューションではアーカイブ・リポジトリにパッケージが用意されているので、lm_sensorsのようなメジャーなソフトウェアは簡単にインストールすることができます。それ対して、組込みLinuxの開発作業では、本記事のような試行錯誤を何度も繰り返しながらシステムを構築していきます。他のIT分野のソフトウェア開発も似たようなものだと思いますが、組込みLinuxではGoogle先生への依存度が極めて高いです。もしGoogleの検索情報が存在しなかったら、にっちもさっも行かないでしょう。インターネット上に情報を上げくれたり、オープンソース・コミュニティに積極的に参加している人達、そしてGoogleへの感謝を忘れてはいけないですね。

組込みLinuxを利用している日本の企業はもっと積極的に情報を公開すべきですし、オープンソース・コミュニティへの貢献活動を忘れてはいけないと思います。オープンソースを利用して利益を上げているくせに、こういう活動を疎かにしている日本企業があまりに多すぎます。Linuxカーネルやオープンソース・ソフトウェアは何千・何万人ものプログラマの成果によって成り立っていています。Androidの構成要素はほとんどGoogleが開発したものですが、AndroidはLinuxカーネルの上で動いているので、オープンソース・コミュニティの成果の上に構築されたOSだと言えます。オープンソース・ソフトウェアを利用して利益を上げているのなら、その利益に見合った対価を払うのは当然の義務だと思います。欧米のIT企業では、オープンソース・コミュニティへの貢献度が大きい社員は高く評価されます。日本では、こういう活動はプライベートでやるべきものだという考え方が主流で、社員が企業活動の一環としてやることを禁止している会社が多いです。欧米では、オープンソース・コミュニティへの貢献は社会公益への貢献と同じだと考える人が多いようです。本当に悲しい事ですが、日本企業の本音は、社会より会社の利益の方を優先したいのでしょう。会社の理念として「社会への貢献」という項目を書いているくせに、実際には、社会公益のことなどまったく考えていないのが日本企業の実情なのかもしれません。

社会公益へ大きな貢献をすれば、その貢献を実現した社員だけでなく、社員が所属している会社も高く評価されるはずです。会社の利益にいくら貢献しても、日本企業はその貢献度に見合ったロイヤリティを社員へ払いません。会社に貢献するより社会へ貢献することを優先した方が社員にとっても有益じゃないでしょうか。社会公益に貢献して有名になれば、将来起業したり独立するときにそれが大きく効いてきます。どうせ40歳を超えたらリストラの対象になってしまうだから、大手企業で働いている社員は、もっと社会公益のことを考えてキャリアアップを優先した方が自分のためです。会社の中に埋もれてしまうより、オープンソース・コミュニティへの参加活動をどんどんやって有名になった方が勝ち組に入れるじゃないでしょうか。Developers Summitなどでスタートアップ企業の経営者の話を聞くと、ほとんどがこのパターンで独立しています。「会社に所属しているうちに、いかに社会に名を売って有名になるか」。こういう考え方で積極的に会社の外にコネクションを広げた方が、勝ち組になれる早道なんだと思えてなりません。

【2015/03/23 追記】

本記事には、DE3815TYKHE用Yocto Linuxにlm_sensorsを組み込むための作業過程を試行錯誤も含めて書きましたが、lm_sensors用のカーネル・コンフィグレーションをBSP化する方法について書いていませんでした。2014/10/25の記事にDE3815TYKHE用BSPの作成方法を掲載済みですが、このBSPのDaisy 1.6.2版(2014/12/29の記事で作成したDE3815TYKHE用BSP)へlm_sensors用の設定を追加する方法について以下に説明します。

ターゲット上でlm_sensorsが正常に動くことが確認できたら、一旦現在のカーネルのビルド状態をクリーンします。以下のコマンドによって、それができます。
% bitbake linux-yocto -c cleansstate

カーネルのビルド状態をクリーンした後、以下のコマンドを実行すると、改めてカーネルのソースが展開されます。
% bitbake linux-yocto -c kernel_configme -f

続いて、カーネルのコンフィグレーション画面を開くために、以下のコマンドを実行します。
% bitbake linux-yocto -c menuconfig

コンフィグレーション画面が開いたら、本記事で示したlm_sensors用の3つのメニュー項目を有効にします。

変更した設定内容を保存してカーネルのコンフィグレーション画面を閉じたら、続いて以下のコマンドを実行します。
% bitbake linux-yocto -c diffconfig

これによって、lm_sensors用の差分設定が格納された以下のようなfragment.cfgというコンフィグレーションフラグメント・ファイルが生成されます。
++ .config	2015-03-23 17:23:31.081557999 +0900
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
CONFIG_SENSORS_CORETEMP=m

続いて、上で作成したfragment.cfgをDE3815TYKHE BSPのカーネル・レシビが格納されているディレクトリへリネーム・コピーします。
% mkdir ../meta-de3815tybe/recipes-kernel/linux/linux-yocto
% cp -p tmp/work/corei7-64-intel-common-poky-linux/linux-yocto/3.10.59+gitAUTOINC+8f05306a8e_747e1cbd12-r0/fragment.cfg ../meta-de3815tybe/recipes-kernel/linux/linux-yocto/add_config-enable_lmsensors.cfg

上の操作がすべて済んだら、DE3815TYKHE BSPのカーネル・レシビを以下のように書き換えます。
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

#############################
# MACHINE = de3815tybe-32 #
#############################
COMPATIBLE_MACHINE_de3815tybe-32 = "de3815tybe-32"
KMACHINE_de3815tybe-32 = "valleyisland-32"
KBRANCH_de3815tybe-32 = "standard/base"
KERNEL_FEATURES_de3815tybe-32 = " features/valleyisland-io/valleyisland-io.scc \
features/valleyisland-io/valleyisland-io-pci.scc \
features/ciphers/ciphers.scc \
features/wifi/wifi-all.scc"

LINUX_VERSION_de3815tybe-32 = "3.10.59"
SRCREV_machine_de3815tybe-32 = "747e1cbd12b15db8bc2ae86e2359c1b113f120d6"
SRCREV_meta_de3815tybe-32 = "8f05306a8e6f5ee422d50c3317acce0cf9e6aada"
SRCREV_valleyisland-io_de3815tybe-32 = "0992d01f5f382f6da60004ef87f67ebd3ca13732"

SRC_URI_de3815tybe-32 = "git://git.yoctoproject.org/linux-yocto-3.10.git;protocol=git;nocheckout=1;branch=${KBRANCH},${KMETA},valleyisland-io-3.0;name=machine,meta,valleyisland-io"

SRC_URI_de3815tybe-32 += "file://add_config-enable_lmsensors.cfg"

#############################
# MACHINE = de3815tybe-64 #
#############################
COMPATIBLE_MACHINE_de3815tybe-64 = "de3815tybe-64"
KMACHINE_de3815tybe-64 = "valleyisland"
KBRANCH_de3815tybe-64 = "standard/base"
KERNEL_FEATURES_de3815tybe-64 = " features/valleyisland-io/valleyisland-io.scc \
features/valleyisland-io/valleyisland-io-pci.scc \
features/ciphers/ciphers.scc \
features/wifi/wifi-all.scc"

LINUX_VERSION_de3815tybe-64 = "3.10.59"
SRCREV_machine_de3815tybe-64 = "747e1cbd12b15db8bc2ae86e2359c1b113f120d6"
SRCREV_meta_de3815tybe-64 = "8f05306a8e6f5ee422d50c3317acce0cf9e6aada"
SRCREV_valleyisland-io_de3815tybe-64 = "0992d01f5f382f6da60004ef87f67ebd3ca13732"

SRC_URI_de3815tybe-64 = "git://git.yoctoproject.org/linux-yocto-3.10.git;protocol=git;nocheckout=1;branch=${KBRANCH},${KMETA},valleyisland-io-3.0;name=machine,meta,valleyisland-io"

SRC_URI_de3815tybe-64 += "file://add_config-enable_lmsensors.cfg"

module_autoload_i2c-dev = "i2c-dev"

これで、lm_sensorsを組み込むためのDE3815TYKHE BSPの改造は完了です。最終的なDE3815TYKHE BSPのファイル構成を以下に示します。

  meta-de3815tybe
|-- conf
| |-- machine
| | |-- de3815tybe-32.conf
| | `-- de3815tybe-64.conf
| `-- layer.conf
|-- recipes-bsp
| `-- formfactor
| |-- formfactor
| | |-- de3815tybe-32
| | | `-- machconfig
| | `-- de3815tybe-64
| | `-- machconfig
| `-- formfactor_0.0.bbappend
`-- recipes-kernel
`-- linux
|-- linux-yocto
| `-- add_config-enable_lmsensors.cfg
`-- linux-yocto_3.10.bbappend

この状態で以下のコマンドを実行すれば、lm_sensorsに対応したカーネルイメージをビルドすることができます。
% bitbake linux-yocto


【参考ページ】

 lm sensors - ArchWiki
 CPU/CPUID/MSR - SyncHack
posted by とみやん at 10:46| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project

2015年03月17日

[Yocto] QEMUのディスプレイ解像度を変える方法

01/16の記事以降、Yocto LinuxのSato Mobile Desktop GUI画面のスクリーンショットをいくつも掲載してきましたが、これらスクリーンショットはいずれもQEMU x86-64ターゲットのディスプレイ解像度を1024x768に設定した状態で取得したものです。Yocto Linuxでは、QEMUターゲットの標準状態のデイスプレイ解像度は640x480になっています。一体どういう方法を使って、デイスプレイの解像度を変えたのか知りたい人がいるじゃないかと思います。

小ネタのTips情報になりますが、Yocto LinuxのQEMUターゲットのデイスプレイ解像度を変更する方法について紹介しましょう。

結論を先に書いてしまうと、じつは、X11の設定ファイルの内容をいじることでQEMUターゲットのディスプレイの解像度を変えています。QEMUターゲット上でX11が動いている場合、そのディスプレイの表示画面は最終的にX11によって制御されます。X11にはxorg.conf(Yocto Linuxのターゲットでは、このファイルは/etc/X11/xorg.confに配置されます)という設定ファイルが存在しており、このファイルの中にX11が管理するモニタの設定値が記述されています。

Yocto Linux(Poky Daisy 1.6.2)ビルド環境の、X11(xorg-xserver)のレシピが格納されているディレクトリのファイル構成は以下のようになっています。

  meta
`-- recipes-graphics
`-- xorg-xserver
|-- xserver-xf86-config
| |-- qemarm
| | `-- xorg.conf
| |-- qemmips
| | `-- xorg.conf
| |-- qemmips64
| | `-- xorg.conf
| |-- qemuppc
| | `-- xorg.conf
| |-- qemush4
| | `-- xorg.conf
| |-- qemux86
| | `-- xorg.conf
| |-- qemux86-64
| | `-- xorg.conf
| `-- xorg.conf
|-- xserver-xorg
| |-- aarch64.patch
| |-- crosscompile.patch
| |-- ix_open_max_preprocessor_error.patch
| |-- macro_tweak.patch
| |-- mips64-crosscompiler.patch
| `-- xorg-CVE-2013-6424.patch
|-- xserver-xf86-config_0.1.bb
|-- xserver-xorg_1.15.0.bb
`-- xserver-xorg.inc

上記のmeta/recipes-graphics/xorg-xserver/xserver-xf86-config/qemu*ディレクトリに格納されているファイルが各QEMUターゲットで使われるxorg.confで、これらはすべて同じ内容になっています。以下にその内容を示します。
Section "Files"
EndSection

Section "InputDevice"
Identifier "Generic Keyboard"
Driver "evdev"
Option "CoreKeyboard"
Option "Device" "/dev/input/by-path/platform-i8042-serio-0-event-kbd"
Option "XkbRules" "xorg"
Option "XkbModel" "evdev"
Option "XkbLayout" "us"
EndSection

Section "InputDevice"
Identifier "Configured Mouse"
Driver "vmmouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection

Section "InputDevice"
Identifier "Qemu Tablet"
Driver "evdev"
Option "CorePointer"
Option "Device" "/dev/input/touchscreen0"
Option "USB" "on"
EndSection

Section "Device"
Identifier "Graphics Controller"
Driver "vmware"
EndSection

Section "Monitor"
Identifier "Generic Monitor"
Option "DPMS"
# 1024x600 59.85 Hz (CVT) hsync: 37.35 kHz; pclk: 49.00 MHz
Modeline "1024x600_60.00" 49.00 1024 1072 1168 1312 600 603 613 624 -hsync +vsync
# 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz
ModeLine "640x480" 25.2 640 656 752 800 480 490 492 525 -hsync -vsync
# 640x480 @ 72Hz (VESA) hsync: 37.9kHz
ModeLine "640x480" 31.5 640 664 704 832 480 489 491 520 -hsync -vsync
# 640x480 @ 75Hz (VESA) hsync: 37.5kHz
ModeLine "640x480" 31.5 640 656 720 840 480 481 484 500 -hsync -vsync
# 640x480 @ 85Hz (VESA) hsync: 43.3kHz
ModeLine "640x480" 36.0 640 696 752 832 480 481 484 509 -hsync -vsync
EndSection

Section "Screen"
Identifier "Default Screen"
Device "Graphics Controller"
Monitor "Generic Monitor"
SubSection "Display"
Modes "640x480"
EndSubSection
EndSection

Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
InputDevice "Generic Keyboard"
# InputDevice "Configured Mouse"
InputDevice "QEMU Tablet"
Option "AllowEmptyInput" "no"
EndSection

このxorg.confの中にはキーボード、マウス、モニタの設定項目が存在しますが、上記のハイライトの部分がX11の起動時に使われるモニタの種類と表示モードを定義しています。この定義のDisplayサブセクションのModesプロパティの設定値を変更してやれば、X11のディスプレイ解像度を変えることができます。

私がQEMUx86-64ターゲット用に作成したxorg.confと、このファイルを格納したxserver-xf86-configパッケージを作成するためのレシピファイル(meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbをカスタマイズするためのレシピ)を以下に公開します。
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

Section "Files"
EndSection

Section "InputDevice"
Identifier "Generic Keyboard"
Driver "evdev"
Option "CoreKeyboard"
Option "Device" "/dev/input/by-path/platform-i8042-serio-0-event-kbd"
Option "XkbRules" "xorg"
Option "XkbModel" "evdev"
Option "XkbLayout" "us"
EndSection

Section "InputDevice"
Identifier "Configured Mouse"
Driver "vmmouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection

Section "InputDevice"
Identifier "Qemu Tablet"
Driver "evdev"
Option "CorePointer"
Option "Device" "/dev/input/touchscreen0"
Option "USB" "on"
EndSection

Section "Device"
Identifier "Graphics Controller"
Driver "vmware"
EndSection

Section "Monitor"
Identifier "Generic Monitor"
Option "DPMS"
# 1024x768i @ 43Hz (industry standard) hsync: 35.5kHz
ModeLine "1024x768" 44.9 1024 1032 1208 1264 768 768 776 817 +hsync +vsync Interlace
# 1024x768 @ 60Hz (VESA) hsync: 48.4kHz
ModeLine "1024x768" 65.0 1024 1048 1184 1344 768 771 777 806 -hsync -vsync
# 1024x768 @ 70Hz (VESA) hsync: 56.5kHz
ModeLine "1024x768" 75.0 1024 1048 1184 1328 768 771 777 806 -hsync -vsync
# 1024x768 @ 75Hz (VESA) hsync: 60.0kHz
ModeLine "1024x768" 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync
# 1024x768 @ 85Hz (VESA) hsync: 68.7kHz
ModeLine "1024x768" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync +vsync
# 1024x768 @ 89Hz (non-standard) hsync: 72.0kHz
ModeLine "1024x768" 100 1024 1108 1280 1408 768 768 780 796 +hsync +vsync
# 1024x600 59.85 Hz (CVT) hsync: 37.35 kHz; pclk: 49.00 MHz
Modeline "1024x600_60.00" 49.00 1024 1072 1168 1312 600 603 613 624 -hsync +vsync
# 800x600 @ 56Hz (VESA) hsync: 35.2kHz
ModeLine "800x600" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync
# 800x600 @ 60Hz (VESA) hsync: 37.9kHz
ModeLine "800x600" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
# 800x600 @ 72Hz (VESA) hsync: 48.1kHz
ModeLine "800x600" 50.0 800 856 976 1040 600 637 643 666 +hsync +vsync
# 800x600 @ 75Hz (VESA) hsync: 46.9kHz
ModeLine "800x600" 49.5 800 816 896 1056 600 601 604 625 +hsync +vsync
# 800x600 @ 85Hz (VESA) hsync: 53.7kHz
ModeLine "800x600" 56.3 800 832 896 1048 600 601 604 631 +hsync +vsync
# 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz
ModeLine "640x480" 25.2 640 656 752 800 480 490 492 525 -hsync -vsync
# 640x480 @ 72Hz (VESA) hsync: 37.9kHz
ModeLine "640x480" 31.5 640 664 704 832 480 489 491 520 -hsync -vsync
# 640x480 @ 75Hz (VESA) hsync: 37.5kHz
ModeLine "640x480" 31.5 640 656 720 840 480 481 484 500 -hsync -vsync
# 640x480 @ 85Hz (VESA) hsync: 43.3kHz
ModeLine "640x480" 36.0 640 696 752 832 480 481 484 509 -hsync -vsync
EndSection

Section "Screen"
Identifier "Default Screen"
Device "Graphics Controller"
Monitor "Generic Monitor"
SubSection "Display"
Modes "1024x768"
EndSubSection
EndSection

Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
InputDevice "Generic Keyboard"
# InputDevice "Configured Mouse"
InputDevice "QEMU Tablet"
Option "AllowEmptyInput" "no"
EndSection

オリジナルのxorg.confのMonitorセクションには640x480と1024x600の表示モードのエントリしか存在しなかったので、800x600と1024x768のエントリを追加しています。これらの表示モード・エントリの設定値は、X11のソースパッケージに収納されている以下のファイルから取得しました。
//
// Default modes distilled from
// "VESA and Industry Standards and Guide for Computer Display Monitor
// Timing", version 1.0, revision 0.8, adopted September 17, 1998.
//
// $XFree86: xc/programs/Xserver/hw/xfree86/etc/vesamodes,v 1.3 1999/11/16 03:28:03 tsi Exp $


# 640x350 @ 85Hz (VESA) hsync: 37.9kHz
ModeLine "640x350" 31.5 640 672 736 832 350 382 385 445 +hsync -vsync

# 640x400 @ 85Hz (VESA) hsync: 37.9kHz
ModeLine "640x400" 31.5 640 672 736 832 400 401 404 445 -hsync +vsync

# 720x400 @ 85Hz (VESA) hsync: 37.9kHz
ModeLine "720x400" 35.5 720 756 828 936 400 401 404 446 -hsync +vsync

# 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz
ModeLine "640x480" 25.175 640 656 752 800 480 490 492 525 -hsync -vsync

# 640x480 @ 72Hz (VESA) hsync: 37.9kHz
ModeLine "640x480" 31.5 640 664 704 832 480 489 492 520 -hsync -vsync

# 640x480 @ 75Hz (VESA) hsync: 37.5kHz
ModeLine "640x480" 31.5 640 656 720 840 480 481 484 500 -hsync -vsync

# 640x480 @ 85Hz (VESA) hsync: 43.3kHz
ModeLine "640x480" 36.0 640 696 752 832 480 481 484 509 -hsync -vsync

# 800x600 @ 56Hz (VESA) hsync: 35.2kHz
ModeLine "800x600" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync

# 800x600 @ 60Hz (VESA) hsync: 37.9kHz
ModeLine "800x600" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync

# 800x600 @ 72Hz (VESA) hsync: 48.1kHz
ModeLine "800x600" 50.0 800 856 976 1040 600 637 643 666 +hsync +vsync

# 800x600 @ 75Hz (VESA) hsync: 46.9kHz
ModeLine "800x600" 49.5 800 816 896 1056 600 601 604 625 +hsync +vsync

# 800x600 @ 85Hz (VESA) hsync: 53.7kHz
ModeLine "800x600" 56.3 800 832 896 1048 600 601 604 631 +hsync +vsync

# 1024x768i @ 43Hz (industry standard) hsync: 35.5kHz
ModeLine "1024x768" 44.9 1024 1032 1208 1264 768 768 776 817 +hsync +vsync Interlace

# 1024x768 @ 60Hz (VESA) hsync: 48.4kHz
ModeLine "1024x768" 65.0 1024 1048 1184 1344 768 771 777 806 -hsync -vsync

# 1024x768 @ 70Hz (VESA) hsync: 56.5kHz
ModeLine "1024x768" 75.0 1024 1048 1184 1328 768 771 777 806 -hsync -vsync

# 1024x768 @ 75Hz (VESA) hsync: 60.0kHz
ModeLine "1024x768" 78.75 1024 1040 1136 1312 768 769 772 800 +hsync +vsync

# 1024x768 @ 85Hz (VESA) hsync: 68.7kHz
ModeLine "1024x768" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync +vsync

# 1152x864 @ 75Hz (VESA) hsync: 67.5kHz
ModeLine "1152x864" 108.0 1152 1216 1344 1600 864 865 868 900 +hsync +vsync

# 1280x960 @ 60Hz (VESA) hsync: 60.0kHz
ModeLine "1280x960" 108.0 1280 1376 1488 1800 960 961 964 1000 +hsync +vsync

# 1280x960 @ 85Hz (VESA) hsync: 85.9kHz
ModeLine "1280x960" 148.5 1280 1344 1504 1728 960 961 964 1011 +hsync +vsync

# 1280x1024 @ 60Hz (VESA) hsync: 64.0kHz
ModeLine "1280x1024" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync

# 1280x1024 @ 75Hz (VESA) hsync: 80.0kHz
ModeLine "1280x1024" 135.0 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync

# 1280x1024 @ 85Hz (VESA) hsync: 91.1kHz
ModeLine "1280x1024" 157.5 1280 1344 1504 1728 1024 1025 1028 1072 +hsync +vsync

# 1600x1200 @ 60Hz (VESA) hsync: 75.0kHz
ModeLine "1600x1200" 162.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync

# 1600x1200 @ 65Hz (VESA) hsync: 81.3kHz
ModeLine "1600x1200" 175.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync

# 1600x1200 @ 70Hz (VESA) hsync: 87.5kHz
ModeLine "1600x1200" 189.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync

# 1600x1200 @ 75Hz (VESA) hsync: 93.8kHz
ModeLine "1600x1200" 202.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync

# 1600x1200 @ 85Hz (VESA) hsync: 106.3kHz
ModeLine "1600x1200" 229.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync

# 1792x1344 @ 60Hz (VESA) hsync: 83.6kHz
ModeLine "1792x1344" 204.8 1792 1920 2120 2448 1344 1345 1348 1394 -hsync +vsync

# 1792x1344 @ 75Hz (VESA) hsync: 106.3kHz
ModeLine "1792x1344" 261.0 1792 1888 2104 2456 1344 1345 1348 1417 -hsync +vsync

# 1856x1392 @ 60Hz (VESA) hsync: 86.3kHz
ModeLine "1856x1392" 218.3 1856 1952 2176 2528 1392 1393 1396 1439 -hsync +vsync

# 1856x1392 @ 75Hz (VESA) hsync: 112.5kHz
ModeLine "1856x1392" 288.0 1856 1984 2208 2560 1392 1393 1396 1500 -hsync +vsync

# 1920x1440 @ 60Hz (VESA) hsync: 90.0kHz
ModeLine "1920x1440" 234.0 1920 2048 2256 2600 1440 1441 1444 1500 -hsync +vsync

# 1920x1440 @ 75Hz (VESA) hsync: 112.5kHz
ModeLine "1920x1440" 297.0 1920 2064 2288 2640 1440 1441 1444 1500 -hsync +vsync


Yocto Linuxでcore-image-satoのようなX11の機能を含むイメージをビルドすると、ターゲットイメージのビルド処理の過程でX11のソースパッケージがダウンロードされて展開されますが、上記はその展開先に存在するファイルを示しています。

xorg.conf内のMonitorセクションに1024x768より高い解像度の表示モード・エントリを追加した上で、それ使うようにDisplayサブセクションを定義しても、設定どおりのディスプレイ解像度で動作することも確認しました。上記のxorg.confの内容は物理的なモニタには依存していないので、どのQEMUターゲットでも使えるはずです。

ただし、Yocto Linuxの開発ホスト機としてVMwareの仮想マシンを利用している場合は注意が必要です。この場合、仮想マシン(QEMUから観たホスト側)のディスプレイはVMwareによって管理されており、その物理画面(仮想マシンのディスプレイ画面)はVMwareのディスプレイドライバによって制御されています。VMware仮想マシン上でQEMUが動いている場合、VMware側のディスプレイドライバのバージョンが古いと、xorg.confのDisplayサブセクションの設定値がQEMUのウィンドウ(モニタ)へ反映されないことがあります。このような環境では、VMwareとVMware Toolsはできるだけ最新バージョンのものを使った方で良いようです。

このアドバイスは実体験に基づいています。私の場合Mac上のVMware Fusionを利用しており、仮想マシンのUbuntu 12.04.1上にYocto Linuxビルド環境を構築しています。最近VMware Fusionのバージョンを5から7にアップグレードしたのですが、VMware Fusionをアップグレードする前の仮想マシンでは、上記とおりにxorg.confを変更しても、ディスプレイ解像度が640x480でQEMU x86-64ターゲットのウィンドウが開いてしまう現象が頻発していました。なぜこのような現象が起きるのかずっと原因が判らなかったのですが、VMware Fusion 7にアップグレートしたらこの現象がまったく起きなくなりました。VMware Fusion 7では、xorg.confの設定内容が反映されて常に1024x768の解像度でQEMUのウィンドウが開いています。VMware Fusionのアップグレードによって明確な差が生まれているので、QEMUとVMwareのディスプレイドライバの間に何からの因果関係が存在するとしか考えられません。

最後に、Sato GUIの表示画面にどれくらい差があるのか確認するために、QEMU x86-64ターゲットのディスプレイ解像度を変えながらスクリーンショットを撮ってみました。
UBShot_20150317_171230-Yocto_Modifying_QEM_X11-DisplayResolution-642x509
UBShot_20150317_171532-Yocto_Modifying_QEM_X11-DisplayResolution-802x629
UBShot_20150317_171820-Yocto_Modifying_QEM_X11-DisplayResolution-1026x629
UBShot_20150317_172054-Yocto_Modifying_QEM_X11-DisplayResolution-1026x797
一番上から、640x480、800x600、1024x600、1024x768に設定しています(上に掲載しているのは縮小サイズ版ですが、各スクリーンショットの画像に実サイズ版のリンクを貼ってあります)。やはりディスプレイ解像度による差は大きいことが一目瞭然ですね。

X11の設定ファイルを変更するだけのTipsですが、上のスクリーンショットが示しているとおり、その効果は絶大です。Yocto Linuxを使って組込みLinuxシステムの開発をやっている人にとって、本記事の内容が役に立てば幸いです。

【2015/03/21 追記】

本記事ではYocto LinuxのX11ベースのGUIイメージのディスプレイ解像度を変更する方法について説明しましたが、コンソール・ベースのCLIイメージのディスプレイ解像度を変える方法についても説明しておかないと片手落ちかと思います。GUIイメージと比較して需要はずっと低いかと思いますが、CLIイメージのディスプレイ解像度を変える方法について以下に記します。

QEMUターゲットを起動するのにrunqemuというコマンドを使いますが、CLIイメージを実行する場合に、runqemuコマンドに以下のようなパラメータとオプションを指定してやると、QEMUターゲットのモニタの表示モードを変更することができます。
% runqemu <MACHINE> <IMAGE> bootparams="uvesafb.mode_option=<DISPLAY_MODE>"

例えば、QEMU x86-64ターゲットを使ってcore-image-full-cmdlineイメージを1024x768 32ビット・カラー・モードで起動したい場合は、以下のようなコマンドによってそれができます。
% runqemu qemux86-64 core-image-full-cmdline bootparams="uvesafb.mode_option=1024x768-32"

runqemuコマンドをオプション指定なし実行すると、Terminalウィンドウに以下のような起動情報が出力されますが、これがrunqemuコマンドのデフォルトのオプションです。
UBShot_20150321_195605-Yocto_Modifying_QEM_VGA-DisplayResolution-704x631
--append "vga=0 uvesafb.mode_option=640x480-32 ..."」というオブションが存在しますが、これがQEMUターゲットのデフォルトのモニタ表示モードに相当します。

bootparams="uvesafb.mode_option=1024x768-32"」というオブションを指定することで、runqemuコマンドの起動情報出力は以下のように変わります。
UBShot_20150321_200051-Yocto_Modifying_QEM_VGA-DisplayResolution-704x631
つまりカーネルパラメータの「uvesafb.mode_option=」の設定値を上書きしていることになります。結果として、QEMUターゲットのモニタの表示モードが変更される訳です。

参考のために、QEMU x86-64ターゲット上で動作しているcore-image-full-cmdlineの640x480と1024x768のスクリーンショットを掲載しておきます。
UBShot_20150321_195825-Yocto_Modifying_QEM_VGA-DisplayResolution-642x509
UBShot_20150321_200119-Yocto_Modifying_QEM_VGA-DisplayResolution-1026x797
posted by とみやん at 14:44| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project

2015年02月28日

[Yocto] Sato Mobile Desktopの日本語表示化 (2)

前記事から1ヶ月も間が空いてしましいました。体調を崩して寝込んでしまう日が続いたり、本業の仕事がなかなか切りがつかなかったりで記事を書く時間が取れませんでした。今週に入って、花粉症の症状も出ています。季節の変わり目だからか、私は2〜3月に体調を崩すことが多いです。持病のヘルニア腰痛も3〜5月に症状が悪化することが多く、さらに花粉症にも苦しめられるので、私は一年の中でこの時期が一番嫌いです。ここ数年は季節の変わり目に必ず体調を崩すようになってしまいました。まだ老年期ではないですが、これから歳を重ねると、気候の変化にさえ身体が耐えられなくなってくるんだなぁと感じています。

さて、前記事に続いて、Yocto LinuxのSato Mobile Desktopの日本語表示化について書きます。

前記事では、core-image-satoイメージへ日本語TrueTypeフォントを組み込む方法について説明しました。これによって、Midoriブラウザでは日本語文字が表示できるようになりました。Midoriのような表示フォントを変更できるアプリでは、ターゲットイメージに日本語TrueTypeフォントさえ組み込めば、アプリ側でフォント設定を変更することで日本語の表示ができるようになります。

それでは、Sato GUI自体を日本語表示に対応させるにはどうすれば良いのでしょうか。じつは、これを実現する事はすごく簡単なのです。すでに日本語TrueTypeフォントを組み込み済みなら、ターゲット上で以下の手順の操作を行うだけです。
  1. Sato GUIからAppearanceアプリを起動します。すると、下のようなウィンドウが表示されます。
    UBShot_20150228_143005-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
    このウィンドウの[Appearance]メニューから[Sato]という項目を選択した上で、(現在の設定フォントを示している)[Font]ボタンをクリックします。


  2. すると、下のような[Pick a Font]ウィンドウが開くので、フォントの一覧から日本語文字のタイプフェースを含むフォントを選択した上で、[OK]ボタンを押します。
    UBShot_20150228_143236-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797

  3. すると、下のように、Sato GUIのDesktopウィンドウの表示フォントが選択したものに設定されます。
    UBShot_20150228_143259-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797

上記の手順の操作によって、Sato GUIは設定したフォントで表示されるようになりますが、これはGUI上の表示を変えただけです。システムや個々のアプリは、フォント情報の他にロケール情報というものを持っています。

Yocto Linuxにおいてシステム全体のロケール情報を変えるには、ターゲット上に以下のような内容の~/.profile(/home/root/.profile)というファイルを作成する必要があります。
# vi ~/.profile
export LC_ALL=ja_JP.UTF-8

この~/.profileを作成した後、Yocto Linuxを再起動すると、Sato GUIは下のような表示に変わります。
UBShot_20150228_143621-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
ご覧のとおり、一部のアプリのタイトルやヘルプが日本語で表示されています。タイトルやヘルプが英語表示のままのアプリは、日本語のロケール情報を持っていないんだと思います。~/.profile内の「export LC_ALL=ja_JP.UTF-8」という記述は、システム全体に適用されるロケール情報(システム・ロケール)を変更するための設定です(環境変数LC_ALLが未設定の場合のデフォルト値は「LC_ALL=C」になります。Cというは、すべての文字が1バイトのASCIIコードだけで表現されるロケールです)。このように設定すると、日本語のロケール情報を持っているアプリでは、アプリ内のメニューやメッセージなどで日本語が使われるようになります。例えば、ファイルマネージャ(File Manager)は下のように表示になります。
UBShot_20150301_125112-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
UBShot_20150301_125552-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
上側が表示フォントと環境変数LC_ALLの設定値を変更する前、下側がこれらを変更した後のスクリーンショットです。

ちなみに、上記で作成した~/.profileというファイルは、Yocto Linuxの起動時に実行されるログイン・スクリプトの一つです。Yocto Linuxのデフォルトのログイン・シェルはbash(Bourne-Again Shell)ではなく、ash(Almquist Shell)というものです。ashはbashとほぼ互換の機能を持っていながら、bashより軽量なため、組込みLinuxで採用されることの多いシェルです。

じつは、Sato GUIの日本語表示化のためのターゲット側の設定はこれで終わりなのです。ただし、Yocto Linuxの日本語表示用構成要素としてはこれだけでは不完全です。何が不完全なのかと言うと、このままではCLI環境用のプログラムが依然日本語の表示ができない状態になっています。

上記のシステム・ロケール設定を変更した状態でTerminalウィンドウを開くと、下のような「setlocale LC_ALL=ja_JP.UTF-8」に失敗した旨のエラー・メッセージが表示されます。
UBShot_20150228_191235-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
そして、Terminalウィンドウの中で日本語の文字を含むテキストファイルを出力すると、上のように、文字化けした状態で表示されてしまいます(このテキストファイルはscpを使ってQEMU x86-64ターゲットへ転送しました)。じつは、このTerminalウィンドウの表示フォントは、すでに上記の手順の操作によって設定した日本語のフォント(Sazanami Gothic Gothic-Reqular 9pt)になっています。それなのに、日本語文字を表示することができません。その原因は、システム上にCLI環境用の日本語のロケール情報が存在していないからです。Yocto Linuxのシステム上のCLI環境用のロケール情報の有無は、以下のコマンドによって確認できます。
# rpm -qa | grep locale
eglibc-binary-localedata-en-gb-2.19-r0.core2_64
eglibc-binary-localedata-en-us-2.19-r0.core2_64
locale-base-en-gb-2.19-r0.core2_64
locale-base-en-us-2.19-r0.core2_64
pcmanfm-locale-en-gb-1.1.2-r0.core2_64
gstreamer-locale-en-gb-0.10.36-r2.core2_64
aspell-locale-en-gb-0.60.6.1-r1.core2_64
libwebkitgtk-1.0-locale-en-gb-1.8.3-r1.core2_64
libglib-2.0-locale-en-gb-2.38.2-r0.core2_64
midori-locale-en-gb-0.5.5-r0.core2_64
gst-plugins-base-locale-en-gb-0.10.36-r8.core2_64
gtk+-locale-en-gb-2.24.22-r0.core2_64
gdk-pixbuf-locale-en-gb-2.30.3-r0.core2_64
eglibc-locale-en-gb-2.19-r0.core2_64
libatk-1.0-locale-en-gb-2.10.0-r0.core2_64
libfm-locale-en-gb-1.1.2.2-r0.core2_64
libexif-locale-en-gb-0.6.21-r0.core2_64
gst-plugins-good-locale-en-gb-0.10.31-r8.core2_64
avahi-locale-en-gb-0.6.31-r11.1.core2_64
xkeyboard-config-locale-en-gb-2.11-r0.core2_64
libsoup-2.4-locale-en-gb-2.45.3-r0.core2_64
glib-networking-locale-en-gb-2.38.0-r0.core2_64
vte-locale-en-gb-0.28.2-r6.core2_64
gconf-locale-en-gb-3.2.6-r0.core2_64

上のとおり、デフォルト状態のYocto Linuxにはen_GB.UTF-8とen_US.UTF-8のロケール情報(ロケール・パッケージ)しか含まれていません。

Sato GUIのTerminalウィンドウ内でも日本語を表示できるようにするには、ja_JP.UTF-8のロケール情報をターゲットイメージへ組み込まなくてはなりません。それを行うには、local.confに以下のような設定記述を追加します。
#
# IMAGE_LINGUAS controls what locales should be included in images.
#
IMAGE_LINGUAS ?= "en-us ja-jp"

この設定を追加した後にcore-image-satoの再ビルドを行い、新しい生成されたイメージを起動すると、下のように、en_GB.UTF-8に代わってja_JP.UTF-8のロケール・パッケージがシステムへ追加されていることが確認できます。
# rpm -qa | grep locale
eglibc-binary-localedata-en-us-2.19-r0.core2_64
eglibc-binary-localedata-ja-jp-2.19-r0.core2_64
locale-base-en-us-2.19-r0.core2_64
locale-base-ja-jp-2.19-r0.core2_64
libatk-1.0-locale-ja-2.10.0-r0.core2_64
shadow-locale-ja-4.1.4.3-r14.core2_64
binutils-locale-ja-2.24-r0.core2_64
glib-networking-locale-ja-2.38.0-r0.core2_64
gdk-pixbuf-locale-ja-2.30.3-r0.core2_64
midori-locale-ja-0.5.5-r0.core2_64
alsa-utils-locale-ja-1.0.27.2-r0.core2_64
aspell-locale-ja-0.60.6.1-r1.core2_64
libsoup-2.4-locale-ja-2.45.3-r0.core2_64
libglib-2.0-locale-ja-2.38.2-r0.core2_64
rpm-locale-ja-5.4.9-r63.core2_64
leafpad-locale-ja-0.8.18.1-r2.core2_64
sudo-locale-ja-1.8.9p5-r0.core2_64
libexif-locale-ja-0.6.21-r0.core2_64
pcmanfm-locale-ja-1.1.2-r0.core2_64
avahi-locale-ja-0.6.31-r11.1.core2_64
libgpg-error-locale-ja-1.12-r0.core2_64
gst-plugins-good-locale-ja-0.10.31-r8.core2_64
gst-plugins-base-locale-ja-0.10.36-r8.core2_64
gstreamer-locale-ja-0.10.36-r2.core2_64
util-linux-locale-ja-2.24.1-r0.core2_64
gconf-locale-ja-3.2.6-r0.core2_64
gtk+-locale-ja-2.24.22-r0.core2_64
xkeyboard-config-locale-ja-2.11-r0.core2_64
libfm-locale-ja-1.1.2.2-r0.core2_64
libpopt-locale-ja-1.16-r3.core2_64
elfutils-locale-ja-0.148-r11.core2_64
vte-locale-ja-0.28.2-r6.core2_64
eglibc-locale-ja-2.19-r0.core2_64

すべてのプログラムが必ずロケール情報を持っている訳ではありません。またロケール情報を持っているプログラムでも、日本語(ja_JP.UTF-8)に対応していないものがほとんどです。

この状態でSato GUIからTerminalウィンドウを開くと、今度はsetlocaleのエラー・メッセージは表示されません。そして、日本語文字を含むテキストファイルを出力すると、ちゃんと正常に表示されます。
UBShot_20150228_192557-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
以上で、Yocto LinuxのSato Mobile Desktopの日本語表示化は終わりです。

上手く行くんだろうかろうかと思いながら、色々と下調べをしたのですが、実際に挑戦してみると、意外に簡単にYocto Linuxの日本語表示化ができてしまったので驚いています。もっと多くの障害に遭遇するんじゃないかと想像していました。LinuxやX11の多言語対応機能が進化していて、それらの成果がYocto Linuxにも盛り込まれているから、こんなに簡単にできたのでしょう。やはりLinuxは素晴らしいですね。

Yocto Linuxの日本語表示化が出来てしまったので、日本語入力機能の実装にも意欲が湧いてきました。何とかこちらも実現したいと思っています。日本語入力機能が実装できたら、私家版の日本語版Yocto Linuxディストリビューションを制作して、これをGitHub上に置いて公開しようと計画しています。いつ頃この計画を実現できるかまだ見通しは立っていませんが、そう遠くない未来には何とか実現したいです。乞うご期待ください。
posted by とみやん at 16:53| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project

2015年01月25日

[Yocto] Sato Mobile Desktopの日本語表示化 (1)

前記事では、Yocto LinuxのSato Mobile Desktop GUI環境へMidoriブラウザを組み込む方法について紹介しました。いまや一般用途向けの機器では、Webブラウザは必須のアプリケーションだと言えます。カラオケ端末機みたいな一般ユーザに操作してもらうことが前提の機器はハードの中身がPC互換機になっていて、DebianやUbuntuのようなPC向けのLinuxディストリビューションをカスタマイズして利用しているケースが結構あります。Webブラウザを組み込むことができるのなら、このような機器でYocto Linuxを利用してシステムを構築する道が拓けてくるんじゃないでしょうか。PC向けのLinuxディストリビューションと比較すると、組込みLinuxのメモリやディスク容量などのシステム動作条件はずっと低くなり、x86 PC互換機以外のARM、MIPS、PowerPCなどを搭載したハードを使って一般ユーザが操作する機器やコンシューマ向けの機器を開発することができます。いまさら言うまでもありませんが、実際にこのような機器では組込みLinuxが広く使われています。

ここ数年でSoCプロセッサの製造単価はさらに下がっていて、アマチュアの電子工作愛好家でさえ高性能なプロセッサを安価に入手できるようになっています。IntelもPCやタブレット用だけでになく組込み向けプロセッサの種類を増やしています。そのため、従来はマイコンを使っていたローエンド機器でも高性能なx86やARMコア・プロセッサへの切り換えがどんどん進んでいます。世の中ではIoT(Internet of Things)いうトレンド・ワードが持て囃されていますが、Rasberry PiやBeagleBone BlackようなLinuxやAndroidが動くボードが3〜8千円で買える時代なのに(これらの製造単価は販売価格の2/3〜4/5程度ではないかと想像できます)、マイコンやITRONを使ってIoTデバイスを開発するのはナンセンスだと思います。単機能なセンサやビーコン・デバイスならマイコンを使うのも有りだと思いますが、複合機能が要求されるIoTデバイスではLinuxを使わないと開発工数が大きくなってしまいます。IoTデバイスのデファクト・スタンダードOSはLinuxであると言い切っても良いんじゃないでしょうか。ITRONの基本構成要素はカーネルだけであり、TCP/IPプロトコル・スタックはユーザーが移植する必要があります。ファイルシステムやその他のミドルウェアもすべて同様です。LinuxならOSの移植が完了した時点でこれらがすべて揃っていて、市販のボードならメーカーが移植済みのLinuxやAndroidのBSPを必ず配布しています(LinuxやAndroidを移植しないと、ボードが売れないからですが)。アプリを開発するにしても、ITRONのシステムコールは美的センスの欠片もなく変梃りんで、C++やJavaなどのオブジェクト指向言語からITの世界に入ったプログラマとっては「なんじゃこりゃぁあ!」と叫びたくなるような世界です。Linuxならグローバル・スタンダードであるUnixの流儀でアプリを開発することができ、豊富なライブラリや上質のサンプルコードがインターネット経由でたくさん手に入ります。いま流行りのJavaScriptを使えば、アプリ開発の工数はさらに小さくなります。LinuxとITRONを比較すると、天と地ほどの差があることは一目瞭然です。私は5年前までITRON関連の開発に係わっていましたが、ここ3年ほど新規の製品開発プロジェクトでITRONが採用された例を聞いたことがありません。ローエンド組込みの世界から離脱して情報収集をしなくなったからかもしれませんが、ITRONが衰退に向かっていることには確信を持っています。

またしても話が大きく逸れてしまいました。IoTについては色々と思う所があるので別の記事でまた書きたいと思っています。話題をYocto Linuxの技術的な情報に戻します。

さて、いままでの記事にSato Mobile Desktop GUIのスクリーンショットを掲載してきましたが、それらには日本語が表示されているものが一つも存在していないことに気づいた方がいるんじゃないでしょうか。じつは、デフォルト状態のSato GUI環境は日本語表示に対応していません。日本語のフォントとロケール情報の両方がcore-image-satoイメージに組み込まれていないからです。このため、Desktopウィンドウを含むすべてのアプリにおいて日本語を表示することができません。例えば、Midoriによって日本語を含むページを開くと、下のように日本語の文字がすべて文字化けした状態で表示されてしまいます(こういう□だらけの表示を「トウフ状態表示」と呼ぶらしいです)。
UBShot_20150125_185320-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
Yocto Linuxを使い始めた当初から日本語に対応していないことには気づいていて、その対応方法をずっと探していました。やっとSato GUI環境の日本語化に成功したので、その成果を記事として公開します。ただし、本記事に書く内容は、Sato GUI環境を日本語表示に対応させる方法だけです。日本語入力の方はまだ組み込みに成功していません。じつは、本記事の結論に到達するのに試行錯誤を数回繰り返しているのですが、結論だけを読むと、Sato GUI環境の日本語表示への対応は容易に実現できることが判ります。これと比較して、日本語入力の方は結構難易度が高そうな感じです。日本語入力機能の実現方法についても調べいるのですが、まだ具体的な作業は行っていません。そのため、Sato GUI環境へ日本語入力機能を追加する方法について記事を投稿できるのは少し先になりそうです。

■ TrueTypeフォントの追加組込み


まずは、Sato GUI環境へTrueTypeフォントを追加する方法から紹介します。

じつは、Yocto Linuxの配布パッケージには以下の2種類のTrueTypeフォントしか収納されていません。
    liberation-fonts
ttf-bitstream-vera

このうち、デフォルト状態のSato GUI環境に組み込まれているのはliberation-fontsだけです。DesktopウィンドウのAppearanceアイコンを開くと、Sato GUIで利用可能なTrueTypeフォントの種類を確認できます。
UBShot_20150125_184746-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
UBShot_20150125_184811-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
上記の2つはいずれも英語文字のタイプフェースしか含まれていないフォントです。Midoriブラウザで日本語のページが文字化けしてしまう原因は、日本語のTrueTypeフォントがシステム上に存在していないからです。

それでは、Yocto Linuxで利用可能な日本語のTrueTypeフォントはどこに在るのかと言うと、じつは、OpenEmbeddedリポジトリの方に存在しています。OpenEmbeddedリポジトリに以下のTrueTypeフォントが収集されており、同リポジトリからパッケージレシピを取得すると、これらのフォントが利用できるようになります。
    ttf-arphic-uming
ttf-dejavu
ttf-droid
ttf-gentium
ttf-hunky
ttf-inconsolata
ttf-liberation
ttf-mplus
ttf-sazanami
ttf-ubuntu-font-family
ttf-wqy-zenhei

上のうち、ttf-droid, ttf-mplus, ttf-sazanamiの3つのフォントが日本語文字のタイプフェースを含んでいます。これらのフォントのいずれかをシステムへ組み込めば、Sato GUI環境で日本語の文字を表示できるようになります。以降に、その具体的な方法を説明していきます。

最初に、OpenEmbeddedリポジトリのパッケージレシピを利用可能にするために、bblayers.confに下ような変更を加えてください。
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
LCONF_VERSION = "6"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto-bsp \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-openembedded/meta-oe \
"
BBLAYERS_NON_REMOVABLE ?= " \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto \
"

これは、OpenEmbeddedリポジトリから取得したパッケージレシピ群が~/Yocto/poky-daisy-11.0.2/meta-openembedded/に格納されていることを前提としています。

そして、さらにlocal.confへ以下のような設定定義を追加すると、ttf-bitstream-veraに加えてOpenEmbeddedリポジトリの全TrueTypeフォントをcore-sato-imageイメージへ組み込むことができます(フォントは必要に応じて選択すれば良いのですが、今回はあえて全部のフォントを組み込んでみました)。
#
# TrueType fonts to be installed to images
#
IMAGE_TTF_FONTS = "\
ttf-bitstream-vera \
ttf-arphic-uming \
ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed ttf-dejavu-serif ttf-dejavu-serif-condensed ttf-dejavu-common \
ttf-droid-sans ttf-droid-sans-mono ttf-droid-sans-fallback ttf-droid-sans-japanese ttf-droid-serif \
ttf-gentium ttf-gentium-alt \
ttf-hunky-sans ttf-hunky-serif \
ttf-inconsolata \
ttf-liberation-mono ttf-liberation-sans ttf-liberation-serif \
ttf-mplus-1c-black ttf-mplus-1c-bold ttf-mplus-1c-heavy ttf-mplus-1c-light ttf-mplus-1c-medium ttf-mplus-1c-regular ttf-mplus-1c-thin \
ttf-mplus-1m-bold ttf-mplus-1m-light ttf-mplus-1m-medium ttf-mplus-1m-regular ttf-mplus-1m-thin \
ttf-mplus-1mn-bold ttf-mplus-1mn-light ttf-mplus-1mn-medium ttf-mplus-1mn-regular ttf-mplus-1mn-thin \
ttf-mplus-1p-black ttf-mplus-1p-bold ttf-mplus-1p-heavy ttf-mplus-1p-light ttf-mplus-1p-medium ttf-mplus-1p-regular ttf-mplus-1p-thin \
ttf-mplus-2c-black ttf-mplus-2c-bold ttf-mplus-2c-heavy ttf-mplus-2c-light ttf-mplus-2c-medium ttf-mplus-2c-regular ttf-mplus-2c-thin \
ttf-mplus-2m-bold ttf-mplus-2m-light ttf-mplus-2m-medium ttf-mplus-2m-regular ttf-mplus-2m-thin \
ttf-mplus-2p-black ttf-mplus-2p-bold ttf-mplus-2p-heavy ttf-mplus-2p-light ttf-mplus-2p-medium ttf-mplus-2p-regular ttf-mplus-2p-thin \
ttf-sazanami-gothic ttf-sazanami-mincho \
ttf-ubuntu-mono ttf-ubuntu-sans \
ttf-wqy-zenhei"

#
# Additional packages to be installed to the specific images
#
IMAGE_INSTALL_append_pn-core-image-sato = " \
${IMAGE_TTF_FONTS}"

ただし、このまま「bitbake core-image-sato」コマンドを実行すると、ttf-mplusのビルド時にエラーに遭遇します。これはttf-mplusのレシピの記述内容が不完全なために起きているエラーです。このエラーを解決するには、ttf-mplusのレシピに以下のような改造を加える必要があります。
require ttf.inc

SUMMARY = "MPlus font - TTF Edition"
HOMEPAGE = "http://dejavu.sourceforge.net/wiki/"
LICENSE = "${PN}"
LIC_FILES_CHKSUM = "file://LICENSE_E;md5=ac161e96eda00db9a3aec7870b5d9658 \
file://LICENSE_J;md5=a120ca8d7c8e4a475d5277c9aeb95221 \
"
PR = "r4"

SRC_URI = "http://osdn.dl.sourceforge.jp/mplus-fonts/6650/mplus-TESTFLIGHT-${PV}.tar.gz"
S = "${WORKDIR}/mplus-TESTFLIGHT-${PV}"

PACKAGESPLITFUNCS_prepend = "split_ttf_mplus_packages "

python split_ttf_mplus_packages() {
plugindir = d.expand('${datadir}/fonts/ttf-mplus/')
packages = do_split_packages(d, plugindir, '^(.*)\.ttf$', 'ttf-%s', 'TTF Font %s')
d.setVar('FONT_PACKAGES', ' '.join(packages))
}

do_install() {
install -d ${D}${datadir}/fonts/ttf-mplus
install -m 0644 *.ttf ${D}${datadir}/fonts/ttf-mplus/
}

SRC_URI[md5sum] = "d1400184b51b3871e8d2fca6c50e18ae"
SRC_URI[sha256sum] = "a20b9b9b03c2a6fb1e2137d29e8a6ce06406ba1e008906ea3c474dc048dc06a6"

TTF_FONTS = "\
ttf-mplus-1c-black ttf-mplus-1c-bold ttf-mplus-1c-heavy ttf-mplus-1c-light ttf-mplus-1c-medium ttf-mplus-1c-regular ttf-mplus-1c-thin \
ttf-mplus-1m-bold ttf-mplus-1m-light ttf-mplus-1m-medium ttf-mplus-1m-regular ttf-mplus-1m-thin \
ttf-mplus-1mn-bold ttf-mplus-1mn-light ttf-mplus-1mn-medium ttf-mplus-1mn-regular ttf-mplus-1mn-thin \
ttf-mplus-1p-black ttf-mplus-1p-bold ttf-mplus-1p-heavy ttf-mplus-1p-light ttf-mplus-1p-medium ttf-mplus-1p-regular ttf-mplus-1p-thin \
ttf-mplus-2c-black ttf-mplus-2c-bold ttf-mplus-2c-heavy ttf-mplus-2c-light ttf-mplus-2c-medium ttf-mplus-2c-regular ttf-mplus-2c-thin \
ttf-mplus-2m-bold ttf-mplus-2m-light ttf-mplus-2m-medium ttf-mplus-2m-regular ttf-mplus-2m-thin \
ttf-mplus-2p-black ttf-mplus-2p-bold ttf-mplus-2p-heavy ttf-mplus-2p-light ttf-mplus-2p-medium ttf-mplus-2p-regular ttf-mplus-2p-thin"

PACKAGES = "ttf-mplus ${TTF_FONTS}"

ALLOW_EMPTY_ttf-mplus = "1"

ここまでの変更が終わったら、あとは「bitbake core-image-sato」コマンドを実行すれば、上記の全TrueTypeフォントを追加したcore-image-satoイメージを生成できます。

このcore-image-satoイメージを起動すると、下のように、Sato GUIのDesktopウィンドウの表示フォントが変化していることに気づくでしょう(上に掲載したTrueTypeフォントを追加する前のDesktopウィンドウのスクリーンショットと比較してください)。
UBShot_20150125_230128-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
そして、Midoriを起動して日本語を含むページを開くと、日本語の文字が正常に表示されることが確認できるはずです。
UBShot_20150126_000156-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
なお、他のWebブラウザと同様に、Midoriでもデフォルトの表示フォントや文字エンコーディングを変更することができます。これらの設定を変更したい場合は、Midoriのページ・ウィンドウの右上の一番端に存在するToolsアイコンをクリックして[Preferences]というメニューを選択してください。
UBShot_20150126_000214-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
開いたウィンドウの[Fonts]タブを選ぶと、下のようなウィンドウに変わります。
UBShot_20150126_000237-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
Midoriのデフォルトの表示フォントと文字エンコーディングはこのウィンドウ内の項目を変更することで設定できます。同ウィンドウ内の[Proportional Font Family][Fixed-witdh Font Family]プルダウンメニューをクリックすると、選択可能なフォントの種類が増えていることが確認できます。
UBShot_20150126_000356-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
UBShot_20150126_000416-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
上側のスクリーンショットが[Proportional Font Family]プルダウンメニューに表示される項目で、下側が[Fixed-witdh Font Family]プルダウンメニューの項目です。

なお、インターネット経由で入手可能なフリーのTrueTypeフォントは他にもたくさん存在しており、私はこのようなフォントをMac OS Xで利用しています。Yocto LinuxのTrueTypeフォントのレシピを読むと、レシピ内に記述されているコードに一定のパターンが存在していて、それらに難しい部分は含まれていないように思えます。TrueTypeフォントのレシピを書くのは容易そうなので、そのうち他の日本語TrueTypeフォントをSato GUI環境へ組み込んでみようと思っています。この試みが成功したら、また記事として紹介するつもりです。

長くなってしまうので、Sato Mobile Desktopの日本語表示化に関する記事は2つに分けることにします。じつは、Sato GUI環境の日本語表示化を完全な形で実現するには、日本語のTrueTypeフォントを組み込むだけではダメで、他にもやらなくてはいけないことがあります。それはターゲットイメージに組み込まれるロケール情報のカスタマイズなのですが、その辺の説明は次の記事に書いていきます。


posted by とみやん at 10:06| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project

2015年01月16日

[Yocto] Sato Mobile DesktopへのMidoriブラウザの組込み

年末年始休暇もほとんど仕事関連の調査で潰してしまい、年が明けてからも多忙な日々が続いていましたが、本業の仕事もやっと終わりそうな状況になってきました。仕事だけにすべての時間を捧げる日々を過ごしていましたが、少し落ち着いてきたので、これからYocto Linux以外の研究テーマにも時間を割けるようになりそうです。とは言いながら、またしてもYocto Linuxの記事を書いてしまいます。他のネタも持ってはいるのですが、それらはまだ仕込中で、記事として公開できる状態まで練上がっていません。

ここのところハード&BSP系の情報やシステム寄りのパッケージの紹介などの所謂下周りの記事が続いたので、少し毛色を変えて、これからしばらくYocto LinuxのGUI環境のカスタマイズに関する記事を書こうと思います。組込み屋としては、デバイスドライバとかシステムの設定などをいじくり回す方が好きなのですが、GUIカスタマイズ、GUIアプリやWebサービスの導入方法や開発手法などの上周りの情報の方が需要が高いんじゃないでしょうか。Arduino、mbed、Rasberry Piなどのボードが流行っているのも、下周りをあまり弄らなくても、そこそこ高機能なシステムが構築できてしまうことが理由ではないかと思っています。Yocto Linuxの上周りの記事の第一段として、小ネタの情報になりますが、Sato Mobile Desktop環境へWebブラウザを組み込む方法について紹介しましょう。

Yocto Linuxの配布パッケージには、core-image-satoという名前のリファレンス的なイメージレシピが収納されています。いままでの記事にもスクリーンショットを掲載して紹介していますが、このcore-image-satoイメージレシピから生成できるのがYocto Linuxの標準GUI環境であるSato Mobile Desktopです。Sato Mobile Desktopはモバイル機器向けの軽量なGUI環境ですが、残念なことに、デフォルト状態ではcore-image-satoイメージにWebブラウザが組み込まれていません。しかし、WebブラウザのレシピはYocto Linuxの配布パッケージにちゃんと収納されています。Midoriという名前のWebブラウザがそれです。MidoriはレンダリングエンジンにWebKitを、ツールキットにGTK+2を使用している軽量なWebブラウザで、多くの組込みLinuxディストリビューションで採用されています。それではなぜデフォルト状態のcore-image-satoイメージにMidoriが組み込まれていないのかと言うと、これは想像になりますが、その理由はターゲットイメージのビルドに時間がかかってまうからだと思います。実際に作業をやってみて分かったのですが、core-image-satoイメージへMidoriを追加すると、クリーンビルドの時間がさらに1時間を伸びてしまいました(高性能なPCでも3時間以上、低性能なPCなら4〜6時間位かかるでしょう)。

core-image-satoレシピから生成されるイメージにMidoriを組み込む方法はすごく簡単です。以下のような変数定義をlocal.conf内に追加するだけです。
#
# Install the Midori web browser to Sato Desktop images. The WEB variable, which
# is defined in packagegroup-core-x11-sato.bb, is set to an empty value as default.
#
WEB = "midori"

たったこれだけで、core-image-satoイメージへMidoriを組み込むことができます。

Midoriを組み込むと、Sato GUI環境のDesktopウィンドウに下のようなアプリケーション・アイコンが追加されます。
UBShot_20150117_093041-Installing_Midori-Yocto_Sato_Desktop-1366x768
2つのアイコンが存在しますが、「Midori」の方が普通にWebブラウザを起動し、「Midori Private Browsing」の方はWebブラウザの起動後にURL履歴やCookie情報などを一切記録しません。この2つのアイコンをクリックした際のMidoriのスタートアップ画面を下に示します。
UBShot_20150117_093250-Installing_Midori-Yocto_Sato_Desktop-1366x768
UBShot_20150117_093317-Installing_Midori-Yocto_Sato_Desktop-1366x768
Midoriは組込みシステム向けの最低限の機能しか備えていないWebブラウザです。ChromeやSafariなどと比較すると、Midoriの操作性はとても良いとは言えません。レンダリング性能も低く、グラフィックや画像の多いページだと表示に結構時間がかかります。機能や性能が高いと、その分メモリやディスク容量を消費します。組込みシステムではメモリやディスクの容量に制限があるので、トレードオフの観点からするとこの辺は仕方がないことなのでしょう。まぁ、それでも普通にブラウジングはできます。

なお、上記のlocal.conf内に追加したWEBという変数は、packagegroup-core-x11-sato.bbというレシピファイルの中にそのデフォルト値が定義されています。その部分の抜粋を下に示します。
# pcmanfm doesn't work on mips
FILEMANAGER ?= "pcmanfm"
FILEMANAGER_mips ?= ""

WEB ?= ""
#WEB = "midori"

SUMMARY_${PN}-apps = "Sato desktop - applications"
RDEPENDS_${PN}-apps = "\
leafpad \
gaku \
x11vnc \
matchbox-terminal \
sato-screenshot \
${FILEMANAGER} \
${WEB} \
"

常にSato GUI環境にMidoriを入れておきたい場合は、上のWEB変数の設定定義を変更して、「WEB = "midori"」の方を有効にしておくと良いでしょう。その場合、local.conf側の定義は不要になります。

【2015/01/21 追記】

本記事に掲載したスクリーンショットは、XS36V4上で動いているYocto LinuxのSato Mobile Desktopから撮りました。

QEMUエミュレーション環境でもMidoriブラウザが動くのか興味があったので、試しにQEMU x86-64(64ビット版)ターゲット用にMidoriブラウザを組み込んだcore-image-satoイメージをビルドしてみました。下のスクリーンショットが、QEMU x86-64ターゲット上で動作しているSato GUIとMidoriブラウザの画面です。
UBShot_20150121_193732-Installing_Midori-Yocto_Sato_Desktop-QEMUx86_64-1026x797
UBShot_20150121_193812-Installing_Midori-Yocto_Sato_Desktop-QEMUx86_64-1026x797
試していませんが、QEMU x86(32ビット版)でもMidoriブラウザは問題なく動作するはずです。

ターゲット実機を持っていない人でも記事の内容を試せるので、Yocto LinuxのGUI環境カスタマイズに関する記事はQEMU x86-64をターゲットとして書いていきます。
posted by とみやん at 14:52| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project

2015年01月13日

[Yocto] XS36V4へのWi-Fi機能(RTL8188EEドライバ)追加

前記事に書いたとおり、Shuttle XS36V4でYocto Linuxを動かすことはトラブルに遭遇することもなくすんなりと成功してしまいました。Valley Island BSPに収納されているバイナリ・イメージと自分でビルドしたDE3815TYKHE用のイメージの2つを使いましたが、どちらでも特に問題なくXS36V4でYocto Linuxは動作しました。Valley Island BSPはデフォルト状態でRTL8168/8169/8111/8411ドライバが有効になっていたので、ドライバを組み込むことなくEthernetインターフェースも使えました。ただし、一つ大きな課題を見つけてしまいました。それは、Yocto LinuxがXS36V4の無線LANデバイスを認識していないことです。

前記事で使ったDE3815TYKHE用のcore-image-satoイメージは、カーネルレシピに主要な無線LANドライバをすべて組み込んた状態でビルドしたものです。〔2014/12/29の記事linux-yocto_3.10.bbappendを参照〕lspciコマンドの出力情報によって、XS36V4に搭載されている無線LANデバイスはRealtek RTL8188EEという物であることが判りました。しかし、dmesgコマンドのカーネル・ログを確認しても、RTL8188EE用ドライバはロードされていませんでした。Sato Mobile DesktopのGUI画面からconnman-gnomeを起動してみましが、下のとおり、やはりServicesリストに[Wireless Networks]というカテゴリ・エントリは存在していません。
UBShot_20150113_103340-YoctoLinux-Enabling_RTL8188EE_WLAN_Driver-1366x768
どうやらRTL8188EE用の無線LANドライバがカーネルへ組み込まれていないようです。

ググって調べてみると、カーネルソース・ツリーにRTL8188EE用ドライバは存在しており、これを有効にするにはCONFIG_RTL8188EEというコンフィグレーション設定項目を有効する必要があることが判りました。現状のカーネルのコンフィグレーション設定を確認すると、やはりこの項目は有効になっていませんでした。
# zcat /proc/config.gz | grep CONFIG_RTL8188EE
# CONFIG_RTL8188EE is not set

上記の情報に基いて、XS36V4のWi-Fi機能を利用可能にする作業を行ったので、その作業記録を本記事に書きます。

■ RTL8188EE無線LANドライバの組み込み


まずは、一時的にコンフィグレーション設定を変更して、カーネルへRTL8188EEドライバを組み込む作業を行いました。

bitbake linux-yocto -c menuconfig」コマンドによってカーネルのコンフィグレーション画面を開いて、以下のメニュー項目を有効にすれば、RTL8188EEドライバを組み込むことができます。〔2014/10/25の記事を参照〕
UBShot_20150113_115841-YoctoLinux-Enabling_RTL8188EE_WLAN_Driver-704x766
         Device Drivers  --->

[*] Nework device support --->

[*] Wireless LAN --->

<M> Realtek RTL8188EE Wireless Network Adapter

上の操作を行った後、以下のコマンドを実行して、RTL8188EEドライバを組み込んだcore-image-satoイメージを作成しました。
% bitbake linux-yocto -c compile -f
% bitbake linux-yocto -c deploy
% bitbake linux-yocto
% bitbake core-image-sato

core-image-satoのhddimgファイルからLive USBを作成して、このUSBメディアを使って、XS36V4でYocto Linuxを起動しました。そして、CONFIG_RTL8188EEが有効になっていることを確認しました。
# zcat /proc/config.gz | grep CONFIG_RTL8188EE
CONFIG_RTL8188EE=m

続いて、dmesgコマンドによってRTL8188EEドライバがロードされているかを確認しました。
# dmesg
.... ....
.... ....
.... ....
.... ....
[ 6.241182] cfg80211: Calling CRDA to update world regulatory domain
[ 6.375266] rtl8188ee 0000:01:00.0: enabling device (0000 -> 0003)
[ 6.383289] rtl8188ee: Using firmware rtlwifi/rtl8188efw.bin
[ 6.397905] ieee80211 phy0: Selected rate control algorithm 'rtl_rc'
[ 6.398161] rtlwifi: wireless switch is on
.... ....

connman-gnomeを起動してみると、Servicesリストにちゃんと[Wireless Networks]のエントリが追加されていました。
UBShot_20150113_123138-YoctoLinux-Enabling_RTL8188EE_WLAN_Driver-1366x768
Wi-Fiアクセスポイントへの接続を試してみると、こちらも問題なくできました。
UBShot_20150113_123405-YoctoLinux-Enabling_RTL8188EE_WLAN_Driver-1366x768

■ XS36V4用BSPの作成


上記のとおり、一時的にカーネルのコンフィグレーション設定を変更してRTL8188EEドライバを組み込めば、Yocto LinuxでXS36V4のWi-Fi機能を使えるようになることを確認できました。そこで、XS36V4用のBSPを作成して、この成果をそれに反映しました。

2014/10/25の記事にDE3815TYKHE用BSPの作成方法を書きましたが、これと同じ方法でXS36V4用のBSPを作成しました。今回作成したXS36V4 BSPのファイル構成を以下に示します。

  meta-xs36v4
|-- conf
| |-- machine
| | `-- xs36v4.conf
| `-- layer.conf
|-- recipes-bsp
| `-- formfactor
| |-- formfactor
| | `-- xs36v4
| | `-- machconfig
| `-- formfactor_0.0.bbappend
`-- recipes-kernel
`-- linux
|-- linux-yocto
| `-- add_driver-net_wlan_rtl8188ee.cfg
`-- linux-yocto_3.10.bbappend

また、以下にXS36V4 BSPのレイヤ定義ファイル、ターゲット定義ファイル、カーネルレシピの内容を示します。
#We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"

# We have a recipes directory, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "xs36v4"
BBFILE_PATTERN_xs36v4 := "^${LAYERDIR}/"
BBFILE_PRIORITY_xs36v4 = "6"

LAYERDEPENDS_xs36v4 = "intel"

LICENSE_PATH += "${LAYERDIR}/custom-licenses"

#@TYPE: Machine
#@NAME: Shuttle XS36V4

#@WEBTITLE: Intel Celeron J1900 Processor (XS36V4) 64-bit with Open Source Frame Buffer Graphics

#@DESCRIPTION: Machine configuration for XS36V4 64-bit systems, without Intel-proprietary graphics bits

PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
PREFERRED_VERSION_linux-yocto ?= "3.10%"

require conf/machine/include/intel-corei7-64-common.inc
require conf/machine/include/intel-common-pkgarch.inc
require conf/machine/include/meta-intel.inc

MACHINE_FEATURES += "pcbios efi"
MACHINE_FEATURES += "wifi"

MACHINE_EXTRA_RRECOMMENDS += "linux-firmware"

XSERVER ?= "${XSERVER_X86_BASE} \
${XSERVER_X86_EXT} \
${XSERVER_X86_FBDEV} \
${XSERVER_X86_I965} \
"

APPEND += "acpi_enforce_resources=lax video=efifb:off vga=0x318"

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

#############################
# MACHINE = xs36v4 #
#############################
COMPATIBLE_MACHINE_xs36v4 = "xs36v4"
KMACHINE_xs36v4 = "valleyisland"
KBRANCH_xs36v4 = "standard/base"
KERNEL_FEATURES_xs36v4 = " features/valleyisland-io/valleyisland-io.scc \
features/valleyisland-io/valleyisland-io-pci.scc \
features/wifi/wifi-all.scc"

LINUX_VERSION_xs36v4 = "3.10.59"
SRCREV_machine_xs36v4 = "747e1cbd12b15db8bc2ae86e2359c1b113f120d6"
SRCREV_meta_xs36v4 = "8f05306a8e6f5ee422d50c3317acce0cf9e6aada"
SRCREV_valleyisland-io_xs36v4 = "0992d01f5f382f6da60004ef87f67ebd3ca13732"

SRC_URI_xs36v4 = "git://git.yoctoproject.org/linux-yocto-3.10.git;protocol=git;nocheckout=1;branch=${KBRANCH},${KMETA},valleyisland-io-3.0;name=machine,meta,valleyisland-io"

SRC_URI_xs36v4 += "file://add_driver-net_wlan_rtl8188ee.cfg"

module_autoload_i2c-dev = "i2c-dev"

上のファイルで定義しているのは64ビット版ターゲットだけです。今回32ビット版ターゲットの定義は省略しました。XS36V4で32ビット版Yocto Linuxを動かすことはまずないだろうと思ったからです。DE3815TYKHEでも、32ビット版ターゲット用にYocto Linuxをビルドしたことはいままで一度もありません。

カーネルレシピlinux-yocto_3.10.bbappend内で参照しているコンフィグレーションフラグメントは、以下のような内容です。
++ .config	2015-01-12 15:55:39.777257022 +0900
CONFIG_RTL8188EE=m

このファイルは、カーネルのコンフィグレーション・メニュー画面で「Realtek RTL8188EE Wireless Network Adapter」の設定項目を有効にし、メニュー画面を終了した直後に「bitbake linux-yocto -c diffconfig」コマンドを実行することで作成しました。

上記のXS36V4用BSPを作成した後、このBSPを使ってcore-image-satoイメージをビルドし、XS36V4でYocto Linuxが起動することを確認しました。Wi-Fi機能も問題なく動作していました。

なお、Shuttle XS36V4にはXS35V4という姉妹モデルが存在しますが、この2つの機種のハード仕様は同一だと思われます。未確認ですが、今回作成したBSPはXS35V4でも使えるはずです。〔本記事に掲載したXS36V4 BSPを利用してXS35V4で動作確認を行った方がいれば、その結果を報告していただけると有難いです〕

【2015/01/15 追記】

本記事に掲載したXS36V4 BSPを使うと、RTL8188EEドライバと一緒に主要な無線LANドライバもすべてカーネルに組み込まれてしまいます。無線LANカードを換装したときに設定を変える必要がないので、これはこれで便利なのですが、ターゲットに搭載されていないデバイスのためのドライバが入っている状態になっています。組込みシステムではこういう状態は好ましくありません。

RTL8188EE用以外の無線LANドライバを削除したい場合は、カーネルレシピlinux-yocto_3.10.bbappendとコンフィグレーションフラグメントの内容を以下のように変更すると良いでしょう。
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

#############################
# MACHINE = xs36v4 #
#############################
COMPATIBLE_MACHINE_xs36v4 = "xs36v4"
KMACHINE_xs36v4 = "valleyisland"
KBRANCH_xs36v4 = "standard/base"
KERNEL_FEATURES_xs36v4 = " features/valleyisland-io/valleyisland-io.scc \
features/valleyisland-io/valleyisland-io-pci.scc"

LINUX_VERSION_xs36v4 = "3.10.59"
SRCREV_machine_xs36v4 = "747e1cbd12b15db8bc2ae86e2359c1b113f120d6"
SRCREV_meta_xs36v4 = "8f05306a8e6f5ee422d50c3317acce0cf9e6aada"
SRCREV_valleyisland-io_xs36v4 = "0992d01f5f382f6da60004ef87f67ebd3ca13732"

SRC_URI_xs36v4 = "git://git.yoctoproject.org/linux-yocto-3.10.git;protocol=git;nocheckout=1;branch=${KBRANCH},${KMETA},valleyisland-io-3.0;name=machine,meta,valleyisland-io"

SRC_URI_xs36v4 += "file://add_config-wifi_rtl8188ee.cfg"

module_autoload_i2c-dev = "i2c-dev"

# Common Wifi Infrastructure
CONFIG_NET=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_EXT=y
CONFIG_NETDEVICES=y
CONFIG_WLAN=y

CONFIG_CFG80211=m
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_WEXT=y

CONFIG_MAC80211=m
CONFIG_MAC80211_RC_PID=y
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_MINSTREL_HT=y
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
CONFIG_MAC80211_MESH=y
CONFIG_MAC80211_LEDS=y

CONFIG_AVERAGE=y

# Realtek RTL8188EE Wireless Driver
CONFIG_RTLWIFI=m
CONFIG_RTL8188EE=m

上のカーネルレシピでは、「KERNEL_FEATURES_xs36v4 = " ... features/wifi/wifi-all.scc"」という設定記述を削除しています。上のコンフィグレーションフラグメントで定義しているのは、このファイル内のカーネル・コンフィグレーション設定項目の一部です。
posted by とみやん at 10:59| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project

2015年01月11日

[Yocto] Shuttle XS36V4でYocto Linuxを動かす

皆様、新年明けましておめでとうございます。年が明けてもう10日も経ってしまったので、遅らせばながらの挨拶ですね。皆様どのように正月を過ごされましたか。

私の方は年末年始もずっと研究活動の調べ事をやったり、その内容をブログ記事に書いたりして過ごしていました。完全休養日は大晦日と正月一日の2日間だけで、その他の日はずっと仕事をしていたような感じです。おかげで、穏やかな正月という訳にはいかず、ぜんぜん休んだ気がしません。一応本業の仕事は休みだったですが、どうしても本業の仕事に関連した技術的な調査をやらざるをえない状況だったので、結局自主的に年末年始休暇をほぼ全部つぶして研究活動の作業をやっていました。

さて、ずっとYocto Projectの記事が続いていますが、またしても同研究テーマに関連した記事を書きます。

Yocto Linux用の新しいターゲット機を入手しました。Shuttle XS36V4という奴で、DE3815TYHKEと同様に一般向けのベアボーンPCです。
ANIMG_20150110_153042-Shuttle_XS36V4-Unboxing_ProductViews.jpg
ANIMG_20150110_153710-Shuttle_XS36V4-Unboxing_ProductViews.jpg
ANIMG_20150110_154337-Shuttle_XS36V4-Unboxing_ProductViews.jpg
ANIMG_20150110_154846-Shuttle_XS36V4-Unboxing_ProductViews.jpg
ANIMG_20150110_155413-Shuttle_XS36V4-Unboxing_ProductViews.jpg
この機種に搭載されているプロセッサはIntel J1900という奴です。J1750/1800/1900(Bay Trail-D)はE38xx(Bay Trail-I)よりは若干消費電力が高いですが、それでもTDPは10Wと十分に優れた性能です。J1900搭載PCを使ってメディア・サーバーを一台組みたいと思っていたのですが、結局組込みLinuxのターゲットとして使うことを優先して、このXS36V4を選択してしまいました。J1800/1900を搭載したベアボーンPCやMini-ITXボードは結構多くの種類の製品が販売されています。その中からXS36V4を選んだのは、この機種に外部シリアル・コネクタが搭載されていたからです(この機種にはXS35V4という姉妹モデルもあり、そちらはシリアルは無くCD/DVDドライブを搭載しています)。最近のPCには珍しく、XS36V4にはシリアルが2個も搭載されています。組込みLinuxのターゲット機はモニタやタッチパネルなしで運用することが良くあります。こういう機器でも大抵はシリアルだけは活かしておいて、メンテナンス用に使ったりします。マイコン搭載機器でもそうですが、組込み用ターゲットではシリアルはいまだに必須のインターフェースです。これはマイコンが登場した頃からずっと続いており、これからも変わらないでしょう。

■ XS36V4の組み立て


XS36V4に部品を追加してPCとして組み上げたので、その作業の様子を紹介します。DE3815TYKHEと同様にXS36V4のCPUもオンボードの直付けです。したがって、追加部品として必要なのはメモリとSATAディスクだけです。以下の2つ部品を用意しました。
  • Transcend PC3L-12800(DDR3L-1600)1.35V TS1GSK64W6H
  • Intel 320 Series SSD 120GB

ANIMG_20150110_160123-Shuttle_XS36V4-AddtionalParts_Building.jpg
ANIMG_20150110_160159-Shuttle_XS36V4-AddtionalParts_Building.jpg
SO-DIMMメモリはXS36V4と一緒にAmazonから購入し、SSDの方はオークション落札で中古品を入手しました。メモリは4GBと8GBのどちらにするか迷いましたが、今回は奮発して8GBを選びました。これは後日4GBに差し替えるかもしれません。Windowsならメモリは8GBないと苦しいですが、Linuxなら4GBもあれば十分だからです。このXS36V4でメディア・サーバーを組み上げる場合も、OSはUbuntuかCentOSを使って構築するつもりです。

部品を組み込むために、まずはXS36V4本体のケースを開けてみました。XS36V4は両面のケース・カバーがそれぞれ開くようになっています。
ANIMG_20150110_160952-Shuttle_XS36V4-AddtionalParts_Building.jpg

マザーボードが見える方の面の真中辺りにDIMMスロットが在ります。同面の右上部にはMini-PCIeスロットが在りますが、ここには無線LANカードが取り付け済みでした。この無線LANカードはRealtek製のようです。Realtekの無線LANチップはあまりの評判が良くないので、近いうちにこれはIntel製の無線LANカードに取り替えようと思っています。

メモリとSSDの取り付け作業はいずれも難しくありませんでした。メモリはDIMMスロットに挿し込むだけです。
ANIMG_20150110_161206-Shuttle_XS36V4-AddtionalParts_Building.jpg
SSDの方は専用の金具にネジ止めしてから、裏面の所定の場所に金具ごとネジで固定するだけです。
ANIMG_20150110_161408-Shuttle_XS36V4-AddtionalParts_Building.jpg
ANIMG_20150110_162349-Shuttle_XS36V4-AddtionalParts_Building.jpg
ANIMG_20150110_163508-Shuttle_XS36V4-AddtionalParts_Building.jpg
メモリとSSDを取り付けたら、両面のカバーを閉めれば組み立て作業は終わりです。XS36V4本体のカバーの開け方だけちょっとコツが要りますが、その辺の情報は製品に同梱されている組立説明書に書いてあります。一度でもベアボーンPCを組み立てたことのある人なら誰でもできるほど容易な作業だと思いますが、あらかじめ組立説明書は読んでおいた方が良いでしょう。

組み立て作業が終わったので、モニタ、キーボード、マウスを接続して、さっそくXS36V4の電源を入れてみました。すると、下のようなEFI Shellの起動画面がモニタに表示されました。
ANIMG_20150111_164357-Shuttle_XS36V4-Booting_EFIShell_Screen.jpg
XS36V4に搭載されているBIOSはAMI製のUEFIベースの物です。SSDにOSが入っていない状態なので、EFI Shellが起動したようです。「exit」というコマンドをタイプすると、EFI Shellから抜けて、BIOSの画面へ戻ることができます。
ANIMG_20150111_164532-Shuttle_XS36V4_Booting_AMIBIOS_Screen..jpg
一部のUEFI BIOSはEFI Shellを起動しないように設定できるですが、XS36V4のBIOSはできないようです。EFI Shellからできることも色々あるのですが、一般人がEFI Shellを使う必要性はまずないでしよう。一度HDD/SSDへOSをインストールしてしまうと、EFI Shellは邪魔なだけです。BIOSのデフォルト設定でEFI Shellは起動しないようになっている方が、一般人にとっては親切ではないかと思います。

■ XS36V4によるYocto Linuxの動作確認


XS36V4を入手した本来の目的は、こいつでメディア・サーバーを組み立てることだったのですが、本業の仕事が忙しすぎて、近々にはその作業やる時間を取れそうもありません。他にも優先してやりたい研究テーマもあるので、メディア・サーバーの構築はずっと先になりそうです。せっかく入手したのに全然使わないのはもったいないので、取りあえず、XS36V4でYocto Linuxを動かしてみました。

Intelのサイトに掲載されているJ1800/1900とE38xxのプロセッサ仕様情報を比較して、この2つは類似性の高いコアではないかと思っていました。そのため、Valley Island BSPからビルドしたイメージを使えば、多分XS36V4でもそのままYocto Linuxが動くじゃないかと予測していました。そこで、最初にValley Island BSPに収納されているhddimgファイルからLive USBを作成して、そのUSBメディアからYocto Linuxを起動してみました。Valley Island(Intel E38xx)用のLive USBメディアは以下のコマンドによって作成できます。
% cd ~/Yocto
% cd poky-daisy-11.0.2
% cd meta-intel/binary
% umount /dev/sdc
% sudo dd if=core-image-sato-valleyisland-64.hddimg of=/dev/sdc
% sync

上記の方法によって、特に問題なくXS36V4でYocto Linuxが起動して、Sato Mobile Desktopの画面がモニタに表示されました(予想どおりだったとは言え、ちょっと拍子抜けです)。下の写真がその様子です。
ANIMG_20150111_160012-Shuttle_XS36V4-Running_YoctoLinux.jpg
ちなみに、上の写真に写っている液晶モニタはGechic On-Lap1302という物です。このモニタの特長はUSBから電源が取れることで、PCのUSBポートから電源を供給できます。最近このメーカーの製品の再整備品が秋葉原のPCショップや通販ショップなどで広く出回っています。去年の年末に秋葉原に行ったときに、TWOTOP FreeT(BUY MORE秋葉原本店)で特価販売されているのを見つけて一台買ってしまいました。

Valley Island BSPに収納されているイメージによってYocto Linuxが正常に起動することが確認できたので、次に自分でビルドしたイメージを使ってみました。2014/12/29の記事でクリーンビルドしたDE3815TYHKE用のcore-image-satoイメージからLive USBを作成して、そのUSBメディアを使って、XS36V4の内蔵SATAへYocto Linuxをインストールしました。そして、XS36V4の内蔵SATAからYocto Linuxを起動してみましたが、こちらも特に問題なく起動できました。J1900はE38xxと同じBay Trail系コアのx86プロセッサでなので、これは当然の結果ですが、どうやらXS36V4でYocto Linuxを使うのは問題なくできるようです。

予想どおりの結果だったので一安心ですが、ここで組込み屋として気になるのは、やはりXS36V4のハードウェアの詳細仕様です。そこで、いくつかのコマンドを使ってXS36V4のハード情報を取得してみました。まずは、プロセッサ情報の確認から始めました。
# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 55
model name : Intel(R) Celeron(R) CPU J1900 @ 1.99GHz
stepping : 3
microcode : 0x320
cpu MHz : 1328.000
cache size : 1024 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp
lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm
sse4_1 sse4_2 movbe popcnt tsc_deadline_timer rdrand lahf_lm 3dnowprefetch ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms
bogomips : 4000.16
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 55
model name : Intel(R) Celeron(R) CPU J1900 @ 1.99GHz
stepping : 3
microcode : 0x320
cpu MHz : 1328.000
cache size : 1024 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 4
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp
lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm
sse4_1 sse4_2 movbe popcnt tsc_deadline_timer rdrand lahf_lm 3dnowprefetch ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms
bogomips : 4000.16
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 55
model name : Intel(R) Celeron(R) CPU J1900 @ 1.99GHz
stepping : 3
microcode : 0x320
cpu MHz : 1328.000
cache size : 1024 KB
physical id : 0
siblings : 4
core id : 2
cpu cores : 4
apicid : 4
initial apicid : 4
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp
lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm
sse4_1 sse4_2 movbe popcnt tsc_deadline_timer rdrand lahf_lm 3dnowprefetch ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms
bogomips : 4000.16
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 55
model name : Intel(R) Celeron(R) CPU J1900 @ 1.99GHz
stepping : 3
microcode : 0x320
cpu MHz : 1328.000
cache size : 1024 KB
physical id : 0
siblings : 4
core id : 3
cpu cores : 4
apicid : 6
initial apicid : 6
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp
lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm
sse4_1 sse4_2 movbe popcnt tsc_deadline_timer rdrand lahf_lm 3dnowprefetch ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms
bogomips : 4000.16
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:


プロセッサ情報が4つも表示されるのは壮観ですね。J1900が4コアのプロセッサであるメリットは、これからXS36V4を使っていくうちにきっと実感できるでしょう。

最近AES-NIの性能評価記事を続けて書いているので、じつは、一番気になっていたのはJ1900にAES-NIが搭載されているかどうかでした。上の/proc/cpuinfoの「flags」情報の中に「aes」の文字列は存在していません。IntelのJ1900のプロセッサ仕様情報にも「AES-NI: No」と掲載されているので、やはりJ1900はAES-NIを内蔵していないようです。AES-NIが内蔵されていることを期待していたので、これはかなり残念です。本件に関連してIntelのプロセッサ仕様情報を調べまわったのですが、Bay Trail系プロセッサの中でAES-NIが搭載されているのはZ374x/377xとE38xxだけのようです。

cpuinfo情報に続いて、lspciコマンドを使ってPCI-Eの情報を取得してみました。
# lspci
00:00.0 Host bridge: Intel Corporation ValleyView SSA-CUnit (rev 0c)
00:02.0 VGA compatible controller: Intel Corporation ValleyView Gen7 (rev 0c)
00:13.0 SATA controller: Intel Corporation ValleyView 6-Port SATA AHCI Controller (rev 0c)
00:14.0 USB controller: Intel Corporation ValleyView USB xHCI Host Controller (rev 0c)
00:1a.0 Encryption controller: Intel Corporation ValleyView SEC (rev 0c)
00:1b.0 Audio device: Intel Corporation ValleyView High Definition Audio Controller (rev 0c)
00:1c.0 PCI bridge: Intel Corporation ValleyView PCI Express Root Port (rev 0c)
00:1c.1 PCI bridge: Intel Corporation ValleyView PCI Express Root Port (rev 0c)
00:1c.2 PCI bridge: Intel Corporation ValleyView PCI Express Root Port (rev 0c)
00:1c.3 PCI bridge: Intel Corporation ValleyView PCI Express Root Port (rev 0c)
00:1f.0 ISA bridge: Intel Corporation ValleyView Power Control Unit (rev 0c)
00:1f.3 SMBus: Intel Corporation ValleyView SMBus Controller (rev 0c)
01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8188EE Wireless Network Adapter (rev 01)
02:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. Device 5289 (rev 01)
02:00.2 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0a)

上のlspciコマンドの出力情報から、Ethernetと無線LANデバイスはいずれもRealtek製であることが判ります。

Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. Device 5289 (rev 01)」というのは一体何なのか気になったので、ググって調べてみました。どうやらこれはRealtek製のCard Reader Controllerのようです。XS36V4の前面にSDカード・スロットが搭載されているので、これを制御しているデバイスなのでしょう。このコントローラ用のドライバも存在しているようなので、そのうちYocto Linuxに組み込んでみようと思っています。

続いて、dmesgコマンドを実行しました。長くなりますが、同コマンドの全出力情報を以下に示します(Linux関連の仕事をしている人にとって、こういう情報が役に立つこともあります)。
# dmesg
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.10.59-ltsi-yocto-standard (yuhri@hestia-vm1) (gcc version 4.8.2 (GCC) ) #1 SMP PREEMPT Sun Jan 11 13:43:17 JST 2015
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz root=/dev/sda2 rw quiet acpi_enforce_resources=lax video=efifb:off vga=0x318
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000008efff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000008f000-0x000000000008ffff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x0000000000090000-0x000000000009ffff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001effffff] usable
[ 0.000000] BIOS-e820: [mem 0x000000001f000000-0x00000000200fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000020100000-0x00000000b711bfff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000b711c000-0x00000000b714bfff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000b714c000-0x00000000b715bfff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x00000000b715c000-0x00000000b78e2fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000b78e3000-0x00000000b7bb2fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000b7bb3000-0x00000000b7bb3fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000b7bb4000-0x00000000b7bf5fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000b7bf6000-0x00000000b7d64fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000b7d65000-0x00000000b7ff9fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000b7ffa000-0x00000000b7ffffff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000e00f8000-0x00000000e00f8fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fed01000-0x00000000fed01fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000ffb00000-0x00000000ffffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000023fffffff] usable
[ 0.000000] NX (Execute Disable) protection: active
[ 0.000000] efi: EFI v2.31 by American Megatrends
[ 0.000000] efi: ACPI=0xb7153000 ACPI 2.0=0xb7153000 SMBIOS=0xf04d0 MPS=0xfd4c0
[ 0.000000] efi: mem00: type=3, attr=0xf, range=[0x0000000000000000-0x0000000000008000) (0MB)
[ 0.000000] efi: mem01: type=7, attr=0xf, range=[0x0000000000008000-0x000000000002f000) (0MB)
[ 0.000000] efi: mem02: type=3, attr=0xf, range=[0x000000000002f000-0x000000000008f000) (0MB)
[ 0.000000] efi: mem03: type=10, attr=0xf, range=[0x000000000008f000-0x0000000000090000) (0MB)
[ 0.000000] efi: mem04: type=7, attr=0xf, range=[0x0000000000090000-0x000000000009f000) (0MB)
[ 0.000000] efi: mem05: type=4, attr=0xf, range=[0x000000000009f000-0x00000000000a0000) (0MB)
[ 0.000000] efi: mem06: type=2, attr=0xf, range=[0x0000000000100000-0x0000000001310000) (18MB)
[ 0.000000] efi: mem07: type=7, attr=0xf, range=[0x0000000001310000-0x0000000002000000) (12MB)
[ 0.000000] efi: mem08: type=2, attr=0xf, range=[0x0000000002000000-0x0000000003210000) (18MB)
[ 0.000000] efi: mem09: type=7, attr=0xf, range=[0x0000000003210000-0x000000001f000000) (445MB)
[ 0.000000] efi: mem10: type=0, attr=0xf, range=[0x000000001f000000-0x0000000020100000) (17MB)
[ 0.000000] efi: mem11: type=7, attr=0xf, range=[0x0000000020100000-0x000000006e11b000) (1248MB)
[ 0.000000] efi: mem12: type=2, attr=0xf, range=[0x000000006e11b000-0x0000000098000000) (670MB)
[ 0.000000] efi: mem13: type=4, attr=0xf, range=[0x0000000098000000-0x0000000098020000) (0MB)
[ 0.000000] efi: mem14: type=7, attr=0xf, range=[0x0000000098020000-0x00000000a8a58000) (266MB)
[ 0.000000] efi: mem15: type=1, attr=0xf, range=[0x00000000a8a58000-0x00000000a8ae6000) (0MB)
[ 0.000000] efi: mem16: type=4, attr=0xf, range=[0x00000000a8ae6000-0x00000000b6b1c000) (224MB)
[ 0.000000] efi: mem17: type=7, attr=0xf, range=[0x00000000b6b1c000-0x00000000b6e76000) (3MB)
[ 0.000000] efi: mem18: type=2, attr=0xf, range=[0x00000000b6e76000-0x00000000b6e7f000) (0MB)
[ 0.000000] efi: mem19: type=3, attr=0xf, range=[0x00000000b6e7f000-0x00000000b711c000) (2MB)
[ 0.000000] efi: mem20: type=0, attr=0xf, range=[0x00000000b711c000-0x00000000b714c000) (0MB)
[ 0.000000] efi: mem21: type=9, attr=0xf, range=[0x00000000b714c000-0x00000000b715c000) (0MB)
[ 0.000000] efi: mem22: type=10, attr=0xf, range=[0x00000000b715c000-0x00000000b78e3000) (7MB)
[ 0.000000] efi: mem23: type=6, attr=0x800000000000000f, range=[0x00000000b78e3000-0x00000000b7b68000) (2MB)
[ 0.000000] efi: mem24: type=5, attr=0x800000000000000f, range=[0x00000000b7b68000-0x00000000b7bb3000) (0MB)
[ 0.000000] efi: mem25: type=4, attr=0xf, range=[0x00000000b7bb3000-0x00000000b7bb4000) (0MB)
[ 0.000000] efi: mem26: type=6, attr=0x800000000000000f, range=[0x00000000b7bb4000-0x00000000b7bf6000) (0MB)
[ 0.000000] efi: mem27: type=4, attr=0xf, range=[0x00000000b7bf6000-0x00000000b7d65000) (1MB)
[ 0.000000] efi: mem28: type=6, attr=0x800000000000000f, range=[0x00000000b7d65000-0x00000000b7ffa000) (2MB)
[ 0.000000] efi: mem29: type=4, attr=0xf, range=[0x00000000b7ffa000-0x00000000b8000000) (0MB)
[ 0.000000] efi: mem30: type=7, attr=0xf, range=[0x0000000100000000-0x0000000240000000) (5120MB)
[ 0.000000] efi: mem31: type=11, attr=0x8000000000000000, range=[0x00000000e00f8000-0x00000000e00f9000) (0MB)
[ 0.000000] efi: mem32: type=11, attr=0x8000000000000000, range=[0x00000000fed01000-0x00000000fed02000) (0MB)
[ 0.000000] efi: mem33: type=11, attr=0x8000000000000000, range=[0x00000000ffb00000-0x0000000100000000) (5MB)
[ 0.000000] SMBIOS 2.8 present.
[ 0.000000] DMI: Shuttle Inc. XS36V4/FS36V4, BIOS 1.10 x64 04/18/2014
[ 0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[ 0.000000] No AGP bridge found
[ 0.000000] e820: last_pfn = 0x240000 max_arch_pfn = 0x400000000
[ 0.000000] MTRR default type: uncachable
[ 0.000000] MTRR fixed ranges enabled:
[ 0.000000] 00000-9FFFF write-back
[ 0.000000] A0000-BFFFF uncachable
[ 0.000000] C0000-E7FFF write-through
[ 0.000000] E8000-FFFFF write-protect
[ 0.000000] MTRR variable ranges enabled:
[ 0.000000] 0 base 000000000 mask F80000000 write-back
[ 0.000000] 1 base 080000000 mask FC0000000 write-back
[ 0.000000] 2 base 0B8000000 mask FF8000000 uncachable
[ 0.000000] 3 base 100000000 mask F00000000 write-back
[ 0.000000] 4 base 200000000 mask F00000000 write-back
[ 0.000000] 5 disabled
[ 0.000000] 6 disabled
[ 0.000000] 7 disabled
[ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
[ 0.000000] e820: update [mem 0xb8000000-0xffffffff] usable ==> reserved
[ 0.000000] e820: last_pfn = 0xb8000 max_arch_pfn = 0x400000000
[ 0.000000] found SMP MP-table at [mem 0x000fd6c0-0x000fd6cf] mapped at [ffff8800000fd6c0]
[ 0.000000] Scanning 1 areas for low memory corruption
[ 0.000000] Base memory trampoline at [ffff880000087000] 87000 size 24576
[ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
[ 0.000000] [mem 0x00000000-0x000fffff] page 4k
[ 0.000000] BRK [0x02f02000, 0x02f02fff] PGTABLE
[ 0.000000] BRK [0x02f03000, 0x02f03fff] PGTABLE
[ 0.000000] BRK [0x02f04000, 0x02f04fff] PGTABLE
[ 0.000000] init_memory_mapping: [mem 0x23fe00000-0x23fffffff]
[ 0.000000] [mem 0x23fe00000-0x23fffffff] page 2M
[ 0.000000] BRK [0x02f05000, 0x02f05fff] PGTABLE
[ 0.000000] init_memory_mapping: [mem 0x23c000000-0x23fdfffff]
[ 0.000000] [mem 0x23c000000-0x23fdfffff] page 2M
[ 0.000000] init_memory_mapping: [mem 0x200000000-0x23bffffff]
[ 0.000000] [mem 0x200000000-0x23bffffff] page 2M
[ 0.000000] init_memory_mapping: [mem 0x00100000-0x1effffff]
[ 0.000000] [mem 0x00100000-0x001fffff] page 4k
[ 0.000000] [mem 0x00200000-0x1effffff] page 2M
[ 0.000000] init_memory_mapping: [mem 0x20100000-0xb711bfff]
[ 0.000000] [mem 0x20100000-0x201fffff] page 4k
[ 0.000000] [mem 0x20200000-0xb6ffffff] page 2M
[ 0.000000] [mem 0xb7000000-0xb711bfff] page 4k
[ 0.000000] BRK [0x02f06000, 0x02f06fff] PGTABLE
[ 0.000000] BRK [0x02f07000, 0x02f07fff] PGTABLE
[ 0.000000] init_memory_mapping: [mem 0xb7bb3000-0xb7bb3fff]
[ 0.000000] [mem 0xb7bb3000-0xb7bb3fff] page 4k
[ 0.000000] init_memory_mapping: [mem 0xb7bf6000-0xb7d64fff]
[ 0.000000] [mem 0xb7bf6000-0xb7d64fff] page 4k
[ 0.000000] init_memory_mapping: [mem 0xb7ffa000-0xb7ffffff]
[ 0.000000] [mem 0xb7ffa000-0xb7ffffff] page 4k
[ 0.000000] init_memory_mapping: [mem 0x100000000-0x1ffffffff]
[ 0.000000] [mem 0x100000000-0x1ffffffff] page 2M
[ 0.000000] ACPI: RSDP 00000000b7153000 00024 (v02 Shuttl)
[ 0.000000] ACPI: XSDT 00000000b7153080 0007C (v01 Shuttl Shuttle 01072009 AMI 00010013)
[ 0.000000] ACPI: FACP 00000000b715a708 0010C (v05 Shuttl Shuttle 01072009 AMI 00010013)
[ 0.000000] ACPI: DSDT 00000000b7153188 0757F (v02 XS36V4 XS36V400 01072009 INTL 20120913)
[ 0.000000] ACPI: FACS 00000000b78e2f80 00040
[ 0.000000] ACPI: APIC 00000000b715a818 00084 (v03 Shuttl Shuttle 01072009 AMI 00010013)
[ 0.000000] ACPI: FPDT 00000000b715a8a0 00044 (v01 Shuttl Shuttle 01072009 AMI 00010013)
[ 0.000000] ACPI: MCFG 00000000b715a8e8 0003C (v01 Shuttl Shuttle 01072009 MSFT 00000097)
[ 0.000000] ACPI: LPIT 00000000b715a928 00104 (v01 Shuttl Shuttle 00000003 VLV2 0100000D)
[ 0.000000] ACPI: SLIC 00000000b715aa30 00176 (v01 Shuttl Shuttle 01072009 AMI 00010013)
[ 0.000000] ACPI: HPET 00000000b715aba8 00038 (v01 Shuttl Shuttle 01072009 AMI. 00000005)
[ 0.000000] ACPI: SSDT 00000000b715abe0 00763 (v01 PmRef CpuPm 00003000 INTL 20061109)
[ 0.000000] ACPI: SSDT 00000000b715b348 00290 (v01 PmRef Cpu0Tst 00003000 INTL 20061109)
[ 0.000000] ACPI: SSDT 00000000b715b5d8 0017A (v01 PmRef ApTst 00003000 INTL 20061109)
[ 0.000000] ACPI: UEFI 00000000b715b758 00042 (v01 Shuttl Shuttle 00000000 00000000)
[ 0.000000] ACPI: Local APIC address 0xfee00000
[ 0.000000] [ffffea0000000000-ffffea0008ffffff] PMD -> [ffff880237800000-ffff88023f5fffff] on node 0
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x00001000-0x00ffffff]
[ 0.000000] DMA32 [mem 0x01000000-0xffffffff]
[ 0.000000] Normal [mem 0x100000000-0x23fffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x00001000-0x0008efff]
[ 0.000000] node 0: [mem 0x00090000-0x0009ffff]
[ 0.000000] node 0: [mem 0x00100000-0x1effffff]
[ 0.000000] node 0: [mem 0x20100000-0xb711bfff]
[ 0.000000] node 0: [mem 0xb7bb3000-0xb7bb3fff]
[ 0.000000] node 0: [mem 0xb7bf6000-0xb7d64fff]
[ 0.000000] node 0: [mem 0xb7ffa000-0xb7ffffff]
[ 0.000000] node 0: [mem 0x100000000-0x23fffffff]
[ 0.000000] On node 0 totalpages: 2056496
[ 0.000000] DMA zone: 64 pages used for memmap
[ 0.000000] DMA zone: 40 pages reserved
[ 0.000000] DMA zone: 3998 pages, LIFO batch:0
[ 0.000000] DMA32 zone: 11591 pages used for memmap
[ 0.000000] DMA32 zone: 741778 pages, LIFO batch:31
[ 0.000000] Normal zone: 20480 pages used for memmap
[ 0.000000] Normal zone: 1310720 pages, LIFO batch:31
[ 0.000000] ACPI: PM-Timer IO Port: 0x408
[ 0.000000] ACPI: Local APIC address 0xfee00000
[ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
[ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] enabled)
[ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x04] enabled)
[ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x06] enabled)
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] dfl dfl lint[0x0])
[ 0.000000] ACPI: NMI not connected to LINT 1!
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] dfl dfl lint[0x0])
[ 0.000000] ACPI: NMI not connected to LINT 1!
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] dfl dfl lint[0x0])
[ 0.000000] ACPI: NMI not connected to LINT 1!
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x04] dfl dfl lint[0x0])
[ 0.000000] ACPI: NMI not connected to LINT 1!
[ 0.000000] ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])
[ 0.000000] IOAPIC[0]: apic_id 1, version 32, address 0xfec00000, GSI 0-86
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[ 0.000000] ACPI: IRQ0 used by override.
[ 0.000000] ACPI: IRQ2 used by override.
[ 0.000000] ACPI: IRQ9 used by override.
[ 0.000000] Using ACPI (MADT) for SMP configuration information
[ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000
[ 0.000000] smpboot: Allowing 4 CPUs, 0 hotplug CPUs
[ 0.000000] nr_irqs_gsi: 103
[ 0.000000] e820: [mem 0xb8000000-0xe00f7fff] available for PCI devices
[ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:4 nr_node_ids:1
[ 0.000000] PERCPU: Embedded 27 pages/cpu @ffff88023fc00000 s80192 r8192 d22208 u524288
[ 0.000000] pcpu-alloc: s80192 r8192 d22208 u524288 alloc=1*2097152
[ 0.000000] pcpu-alloc: [0] 0 1 2 3
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 2024321
[ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz root=/dev/sda2 rw quiet acpi_enforce_resources=lax video=efifb:off vga=0x318
[ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[ 0.000000] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes)
[ 0.000000] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes)
[ 0.000000] Checking aperture...
[ 0.000000] No AGP bridge found
[ 0.000000] Memory: 7768552k/9437184k available (7985k kernel code, 1211200k absent, 457432k reserved, 5076k data, 1120k init)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[ 0.000000] Preemptible hierarchical RCU implementation.
[ 0.000000] RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=4.
[ 0.000000] NR_IRQS:4352 nr_irqs:1024 16
[ 0.000000] Console: colour dummy device 80x25
[ 0.000000] console [tty0] enabled
[ 0.000000] allocated 33030144 bytes of page_cgroup
[ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[ 0.000000] hpet clockevent registered
[ 0.000000] tsc: Fast TSC calibration using PIT
[ 0.001000] tsc: Detected 2000.082 MHz processor
[ 0.000004] Calibrating delay loop (skipped), value calculated using timer frequency.. 4000.16 BogoMIPS (lpj=2000082)
[ 0.000009] pid_max: default: 32768 minimum: 301
[ 0.000039] init_memory_mapping: [mem 0xb78e3000-0xb7b67fff]
[ 0.000043] [mem 0xb78e3000-0xb7b67fff] page 4k
[ 0.000065] init_memory_mapping: [mem 0xb7b68000-0xb7bb2fff]
[ 0.000068] [mem 0xb7b68000-0xb7bb2fff] page 4k
[ 0.000079] init_memory_mapping: [mem 0xb7bb4000-0xb7bf5fff]
[ 0.000082] [mem 0xb7bb4000-0xb7bf5fff] page 4k
[ 0.000092] init_memory_mapping: [mem 0xb7d65000-0xb7ff9fff]
[ 0.000095] [mem 0xb7d65000-0xb7ff9fff] page 4k
[ 0.001287] Security Framework initialized
[ 0.001360] Mount-cache hash table entries: 256
[ 0.001633] Initializing cgroup subsys debug
[ 0.001638] Initializing cgroup subsys memory
[ 0.001652] Initializing cgroup subsys devices
[ 0.001656] Initializing cgroup subsys freezer
[ 0.001660] Initializing cgroup subsys net_cls
[ 0.001663] Initializing cgroup subsys blkio
[ 0.001689] CPU: Physical Processor ID: 0
[ 0.001692] CPU: Processor Core ID: 0
[ 0.001697] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
[ 0.001697] ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)
[ 0.006509] mce: CPU supports 6 MCE banks
[ 0.006520] CPU0: Thermal monitoring enabled (TM1)
[ 0.006529] Last level iTLB entries: 4KB 0, 2MB 0, 4MB 0
[ 0.006529] Last level dTLB entries: 4KB 128, 2MB 0, 4MB 0
[ 0.006529] tlb_flushall_shift: 6
[ 0.006655] Freeing SMP alternatives: 32k freed
[ 0.006671] ACPI: Core revision 20130328
[ 0.018164] ACPI: All ACPI Tables successfully acquired
[ 0.032372] ftrace: allocating 29322 entries in 115 pages
[ 0.051108] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=0 pin2=0
[ 0.061117] smpboot: CPU0: Intel(R) Celeron(R) CPU J1900 @ 1.99GHz (fam: 06, model: 37, stepping: 03)
[ 0.061131] TSC deadline timer enabled
[ 0.061149] Performance Events: no PEBS fmt2+, generic architected perfmon, Intel PMU driver.
[ 0.061159] ... version: 3
[ 0.061162] ... bit width: 40
[ 0.061164] ... generic registers: 2
[ 0.061167] ... value mask: 000000ffffffffff
[ 0.061169] ... max period: 000000007fffffff
[ 0.061171] ... fixed-purpose events: 3
[ 0.061173] ... event mask: 0000000700000003
[ 0.068273] smpboot: Booting Node 0, Processors #1 #2 #3 OK
[ 0.126075] Brought up 4 CPUs
[ 0.126081] smpboot: Total of 4 processors activated (16000.65 BogoMIPS)
[ 0.126936] devtmpfs: initialized
[ 0.127354] PM: Registering ACPI NVS region [mem 0x0008f000-0x0008ffff] (4096 bytes)
[ 0.127359] PM: Registering ACPI NVS region [mem 0xb715c000-0xb78e2fff] (7892992 bytes)
[ 0.129228] xor: measuring software checksum speed
[ 0.139079] prefetch64-sse: 6648.000 MB/sec
[ 0.149100] generic_sse: 5960.000 MB/sec
[ 0.149103] xor: using function: prefetch64-sse (6648.000 MB/sec)
[ 0.149109] pinctrl core: initialized pinctrl subsystem
[ 0.149221] NET: Registered protocol family 16
[ 0.149490] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
[ 0.149495] ACPI: bus type PCI registered
[ 0.149579] PCI: Using configuration type 1 for base access
[ 0.152040] bio: create slab <bio-0> at 0
[ 0.169260] raid6: sse2x1 582 MB/s
[ 0.186240] raid6: sse2x2 660 MB/s
[ 0.203258] raid6: sse2x4 1136 MB/s
[ 0.203261] raid6: using algorithm sse2x4 (1136 MB/s)
[ 0.203264] raid6: using ssse3x2 recovery algorithm
[ 0.203362] ACPI: Added _OSI(Module Device)
[ 0.203367] ACPI: Added _OSI(Processor Device)
[ 0.203370] ACPI: Added _OSI(3.0 _SCP Extensions)
[ 0.203373] ACPI: Added _OSI(Processor Aggregator Device)
[ 0.206540] ACPI: EC: Look up EC in DSDT
[ 0.221204] ACPI: SSDT 00000000b7144c18 003BC (v01 PmRef Cpu0Ist 00003000 INTL 20061109)
[ 0.221995] ACPI: Dynamic OEM Table Load:
[ 0.222001] ACPI: SSDT (null) 003BC (v01 PmRef Cpu0Ist 00003000 INTL 20061109)
[ 0.222214] ACPI: SSDT 00000000b7143918 00433 (v01 PmRef Cpu0Cst 00003001 INTL 20061109)
[ 0.222989] ACPI: Dynamic OEM Table Load:
[ 0.222994] ACPI: SSDT (null) 00433 (v01 PmRef Cpu0Cst 00003001 INTL 20061109)
[ 0.228833] ACPI: SSDT 00000000b7145e18 0015F (v01 PmRef ApIst 00003000 INTL 20061109)
[ 0.229658] ACPI: Dynamic OEM Table Load:
[ 0.229663] ACPI: SSDT (null) 0015F (v01 PmRef ApIst 00003000 INTL 20061109)
[ 0.232507] ACPI: SSDT 00000000b7146f18 0008D (v01 PmRef ApCst 00003000 INTL 20061109)
[ 0.233282] ACPI: Dynamic OEM Table Load:
[ 0.233287] ACPI: SSDT (null) 0008D (v01 PmRef ApCst 00003000 INTL 20061109)
[ 0.236655] ACPI: Interpreter enabled
[ 0.236667] ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S1_] (20130328/hwxface-568)
[ 0.236677] ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S2_] (20130328/hwxface-568)
[ 0.236699] ACPI: (supports S0 S3 S5)
[ 0.236703] ACPI: Using IOAPIC for interrupt routing
[ 0.236762] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[ 0.849396] ACPI: Power Resource [USBC] (on)
[ 0.849831] ACPI: Power Resource [FN00] (off)
[ 0.850958] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
[ 0.851863] PCI host bridge to bus 0000:00
[ 0.851870] pci_bus 0000:00: root bus resource [bus 00-ff]
[ 0.851875] pci_bus 0000:00: root bus resource [io 0x0000-0x006f]
[ 0.851879] pci_bus 0000:00: root bus resource [io 0x0078-0x0cf7]
[ 0.851883] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff]
[ 0.851888] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff]
[ 0.851892] pci_bus 0000:00: root bus resource [mem 0x000c0000-0x000dffff]
[ 0.851896] pci_bus 0000:00: root bus resource [mem 0x000e0000-0x000fffff]
[ 0.851900] pci_bus 0000:00: root bus resource [mem 0xc0000000-0xd0816fff]
[ 0.851913] pci 0000:00:00.0: [8086:0f00] type 00 class 0x060000
[ 0.852106] pci 0000:00:02.0: [8086:0f31] type 00 class 0x030000
[ 0.852123] pci 0000:00:02.0: reg 10: [mem 0xd0000000-0xd03fffff]
[ 0.852137] pci 0000:00:02.0: reg 18: [mem 0xc0000000-0xcfffffff pref]
[ 0.852150] pci 0000:00:02.0: reg 20: [io 0xf080-0xf087]
[ 0.852361] pci 0000:00:13.0: [8086:0f23] type 00 class 0x010601
[ 0.852385] pci 0000:00:13.0: reg 10: [io 0xf070-0xf077]
[ 0.852396] pci 0000:00:13.0: reg 14: [io 0xf060-0xf063]
[ 0.852408] pci 0000:00:13.0: reg 18: [io 0xf050-0xf057]
[ 0.852419] pci 0000:00:13.0: reg 1c: [io 0xf040-0xf043]
[ 0.852430] pci 0000:00:13.0: reg 20: [io 0xf020-0xf03f]
[ 0.852442] pci 0000:00:13.0: reg 24: [mem 0xd0816000-0xd08167ff]
[ 0.852493] pci 0000:00:13.0: PME# supported from D3hot
[ 0.852676] pci 0000:00:14.0: [8086:0f35] type 00 class 0x0c0330
[ 0.852699] pci 0000:00:14.0: reg 10: [mem 0xd0800000-0xd080ffff 64bit]
[ 0.852763] pci 0000:00:14.0: PME# supported from D3hot D3cold
[ 0.852914] pci 0000:00:14.0: System wakeup disabled by ACPI
[ 0.852985] pci 0000:00:1a.0: [8086:0f18] type 00 class 0x108000
[ 0.853015] pci 0000:00:1a.0: reg 10: [mem 0xd0500000-0xd05fffff]
[ 0.853030] pci 0000:00:1a.0: reg 14: [mem 0xd0400000-0xd04fffff]
[ 0.853139] pci 0000:00:1a.0: PME# supported from D0 D3hot
[ 0.853315] pci 0000:00:1b.0: [8086:0f04] type 00 class 0x040300
[ 0.853342] pci 0000:00:1b.0: reg 10: [mem 0xd0810000-0xd0813fff 64bit]
[ 0.853418] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold
[ 0.853585] pci 0000:00:1c.0: [8086:0f48] type 01 class 0x060400
[ 0.853658] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
[ 0.853827] pci 0000:00:1c.1: [8086:0f4a] type 01 class 0x060400
[ 0.853892] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold
[ 0.854059] pci 0000:00:1c.2: [8086:0f4c] type 01 class 0x060400
[ 0.854125] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold
[ 0.854292] pci 0000:00:1c.3: [8086:0f4e] type 01 class 0x060400
[ 0.854358] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold
[ 0.854535] pci 0000:00:1f.0: [8086:0f1c] type 00 class 0x060100
[ 0.854780] pci 0000:00:1f.3: [8086:0f12] type 00 class 0x0c0500
[ 0.854819] pci 0000:00:1f.3: reg 10: [mem 0xd0814000-0xd081401f]
[ 0.854893] pci 0000:00:1f.3: reg 20: [io 0xf000-0xf01f]
[ 0.855217] pci 0000:01:00.0: [10ec:8179] type 00 class 0x028000
[ 0.855238] pci 0000:01:00.0: reg 10: [io 0xe000-0xe0ff]
[ 0.855273] pci 0000:01:00.0: reg 18: [mem 0xd0700000-0xd0703fff 64bit]
[ 0.855373] pci 0000:01:00.0: supports D1 D2
[ 0.855377] pci 0000:01:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[ 0.855423] pci 0000:01:00.0: System wakeup disabled by ACPI
[ 0.856629] pci 0000:00:1c.0: PCI bridge to [bus 01]
[ 0.856636] pci 0000:00:1c.0: bridge window [io 0xe000-0xefff]
[ 0.856642] pci 0000:00:1c.0: bridge window [mem 0xd0700000-0xd07fffff]
[ 0.856730] pci 0000:02:00.0: [10ec:5289] type 00 class 0xff0000
[ 0.856750] pci 0000:02:00.0: reg 10: [mem 0xd0600000-0xd060ffff]
[ 0.856878] pci 0000:02:00.0: supports D1 D2
[ 0.856882] pci 0000:02:00.0: PME# supported from D1 D2 D3hot D3cold
[ 0.856934] pci 0000:02:00.0: System wakeup disabled by ACPI
[ 0.857012] pci 0000:02:00.2: [10ec:8168] type 00 class 0x020000
[ 0.857032] pci 0000:02:00.2: reg 10: [io 0xd000-0xd0ff]
[ 0.857063] pci 0000:02:00.2: reg 18: [mem 0xd0614000-0xd0614fff 64bit pref]
[ 0.857083] pci 0000:02:00.2: reg 20: [mem 0xd0610000-0xd0613fff 64bit pref]
[ 0.857161] pci 0000:02:00.2: supports D1 D2
[ 0.857166] pci 0000:02:00.2: PME# supported from D0 D1 D2 D3hot D3cold
[ 0.857221] pci 0000:02:00.2: System wakeup disabled by ACPI
[ 0.858636] pci 0000:00:1c.1: PCI bridge to [bus 02]
[ 0.858643] pci 0000:00:1c.1: bridge window [io 0xd000-0xdfff]
[ 0.858649] pci 0000:00:1c.1: bridge window [mem 0xd0600000-0xd06fffff]
[ 0.858717] pci 0000:00:1c.2: PCI bridge to [bus 03]
[ 0.858786] pci 0000:00:1c.3: PCI bridge to [bus 04]
[ 0.858811] pci_bus 0000:00: on NUMA node 0
[ 0.859024] acpi PNP0A08:00: Unable to request _OSC control (_OSC support mask: 0x1e)
[ 1.060595] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 10 *11 12 14 15)
[ 1.060738] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 *10 11 12 14 15)
[ 1.060882] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 *5 6 10 11 12 14 15)
[ 1.061033] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 *10 11 12 14 15)
[ 1.061174] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 *5 6 10 11 12 14 15)
[ 1.061314] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 10 11 12 14 15) *0, disabled.
[ 1.061456] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 10 *11 12 14 15)
[ 1.061597] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 10 *11 12 14 15)
[ 1.062268] ACPI: Enabled 6 GPEs in block 00 to 3F
[ 1.062284] acpi root: \_SB_.PCI0 notify handler is installed
[ 1.062391] Found 1 acpi root devices
[ 1.062575] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none
[ 1.062582] vgaarb: loaded
[ 1.062584] vgaarb: bridge control possible 0000:00:02.0
[ 1.062688] SCSI subsystem initialized
[ 1.062693] ACPI: bus type ATA registered
[ 1.062786] libata version 3.00 loaded.
[ 1.062827] ACPI: bus type USB registered
[ 1.062863] usbcore: registered new interface driver usbfs
[ 1.062880] usbcore: registered new interface driver hub
[ 1.062925] usbcore: registered new device driver usb
[ 1.062977] pps_core: LinuxPPS API ver. 1 registered
[ 1.062980] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 1.062988] PTP clock support registered
[ 1.063147] Advanced Linux Sound Architecture Driver Initialized.
[ 1.063151] PCI: Using ACPI for IRQ routing
[ 1.063156] PCI: pci_cache_line_size set to 64 bytes
[ 1.063208] e820: reserve RAM buffer [mem 0x0008f000-0x0008ffff]
[ 1.063212] e820: reserve RAM buffer [mem 0x1f000000-0x1fffffff]
[ 1.063215] e820: reserve RAM buffer [mem 0xb711c000-0xb7ffffff]
[ 1.063219] e820: reserve RAM buffer [mem 0xb7bb4000-0xb7ffffff]
[ 1.063222] e820: reserve RAM buffer [mem 0xb7d65000-0xb7ffffff]
[ 1.063504] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0
[ 1.063513] hpet0: 3 comparators, 64-bit 14.318180 MHz counter
[ 1.065540] Switching to clocksource hpet
[ 1.075332] pnp: PnP ACPI init
[ 1.075358] ACPI: bus type PNP registered
[ 1.075439] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)
[ 1.075554] pnp 00:01: Plug and Play ACPI device, IDs PNP0103 (active)
[ 1.075740] pnp 00:02: Plug and Play ACPI device, IDs INT0800 (active)
[ 1.075827] system 00:03: [io 0x0680-0x069f] has been reserved
[ 1.075833] system 00:03: [io 0x0400-0x047f] has been reserved
[ 1.075838] system 00:03: [io 0x0500-0x05fe] has been reserved
[ 1.075843] system 00:03: [io 0x0600-0x061f] has been reserved
[ 1.075849] system 00:03: Plug and Play ACPI device, IDs PNP0c02 (active)
[ 1.076171] system 00:04: [io 0x0a00-0x0a2f] has been reserved
[ 1.076177] system 00:04: [io 0x0a30-0x0a3f] has been reserved
[ 1.076181] system 00:04: [io 0x0a40-0x0a4f] has been reserved
[ 1.076187] system 00:04: Plug and Play ACPI device, IDs PNP0c02 (active)
[ 1.076725] pnp 00:05: [dma 0 disabled]
[ 1.076821] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)
[ 1.077330] pnp 00:06: [dma 0 disabled]
[ 1.077423] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)
[ 1.277023] system 00:07: [mem 0xe0000000-0xefffffff] could not be reserved
[ 1.277029] system 00:07: [mem 0xfed01000-0xfed01fff] has been reserved
[ 1.277034] system 00:07: [mem 0xfed03000-0xfed03fff] has been reserved
[ 1.277038] system 00:07: [mem 0xfed04000-0xfed04fff] has been reserved
[ 1.277043] system 00:07: [mem 0xfed0c000-0xfed0ffff] has been reserved
[ 1.277048] system 00:07: [mem 0xfed08000-0xfed08fff] has been reserved
[ 1.277052] system 00:07: [mem 0xfed1c000-0xfed1cfff] has been reserved
[ 1.277057] system 00:07: [mem 0xfee00000-0xfeefffff] has been reserved
[ 1.277061] system 00:07: [mem 0xfef00000-0xfeffffff] has been reserved
[ 1.277068] system 00:07: Plug and Play ACPI device, IDs PNP0c02 (active)
[ 1.277450] pnp: PnP ACPI: found 8 devices
[ 1.277454] ACPI: bus type PNP unregistered
[ 1.286344] pci 0000:00:1c.0: bridge window [mem 0x00100000-0x000fffff 64bit pref] to [bus 01] add_size 200000
[ 1.286357] pci 0000:00:1c.1: bridge window [mem 0x00100000-0x000fffff 64bit pref] to [bus 02] add_size 200000
[ 1.286368] pci 0000:00:1c.2: bridge window [io 0x1000-0x0fff] to [bus 03] add_size 1000
[ 1.286373] pci 0000:00:1c.2: bridge window [mem 0x00100000-0x000fffff 64bit pref] to [bus 03] add_size 200000
[ 1.286378] pci 0000:00:1c.2: bridge window [mem 0x00100000-0x000fffff] to [bus 03] add_size 200000
[ 1.286388] pci 0000:00:1c.3: bridge window [io 0x1000-0x0fff] to [bus 04] add_size 1000
[ 1.286393] pci 0000:00:1c.3: bridge window [mem 0x00100000-0x000fffff 64bit pref] to [bus 04] add_size 200000
[ 1.286398] pci 0000:00:1c.3: bridge window [mem 0x00100000-0x000fffff] to [bus 04] add_size 200000
[ 1.286409] pci 0000:00:1c.0: res[9]=[mem 0x00100000-0x000fffff 64bit pref] get_res_add_size add_size 200000
[ 1.286414] pci 0000:00:1c.1: res[9]=[mem 0x00100000-0x000fffff 64bit pref] get_res_add_size add_size 200000
[ 1.286418] pci 0000:00:1c.2: res[8]=[mem 0x00100000-0x000fffff] get_res_add_size add_size 200000
[ 1.286423] pci 0000:00:1c.2: res[9]=[mem 0x00100000-0x000fffff 64bit pref] get_res_add_size add_size 200000
[ 1.286427] pci 0000:00:1c.3: res[8]=[mem 0x00100000-0x000fffff] get_res_add_size add_size 200000
[ 1.286432] pci 0000:00:1c.3: res[9]=[mem 0x00100000-0x000fffff 64bit pref] get_res_add_size add_size 200000
[ 1.286436] pci 0000:00:1c.2: res[7]=[io 0x1000-0x0fff] get_res_add_size add_size 1000
[ 1.286441] pci 0000:00:1c.3: res[7]=[io 0x1000-0x0fff] get_res_add_size add_size 1000
[ 1.286450] pci 0000:00:1c.0: BAR 9: can't assign mem pref (size 0x200000)
[ 1.286457] pci 0000:00:1c.1: BAR 9: can't assign mem pref (size 0x200000)
[ 1.286463] pci 0000:00:1c.2: BAR 8: can't assign mem (size 0x200000)
[ 1.286469] pci 0000:00:1c.2: BAR 9: can't assign mem pref (size 0x200000)
[ 1.286474] pci 0000:00:1c.3: BAR 8: can't assign mem (size 0x200000)
[ 1.286480] pci 0000:00:1c.3: BAR 9: can't assign mem pref (size 0x200000)
[ 1.286487] pci 0000:00:1c.2: BAR 7: assigned [io 0x1000-0x1fff]
[ 1.286492] pci 0000:00:1c.3: BAR 7: assigned [io 0x2000-0x2fff]
[ 1.286500] pci 0000:00:1c.3: BAR 8: can't assign mem (size 0x200000)
[ 1.286506] pci 0000:00:1c.3: BAR 9: can't assign mem pref (size 0x200000)
[ 1.286512] pci 0000:00:1c.2: BAR 8: can't assign mem (size 0x200000)
[ 1.286518] pci 0000:00:1c.2: BAR 9: can't assign mem pref (size 0x200000)
[ 1.286524] pci 0000:00:1c.1: BAR 9: can't assign mem pref (size 0x200000)
[ 1.286530] pci 0000:00:1c.0: BAR 9: can't assign mem pref (size 0x200000)
[ 1.286535] pci 0000:00:1c.0: PCI bridge to [bus 01]
[ 1.286540] pci 0000:00:1c.0: bridge window [io 0xe000-0xefff]
[ 1.286547] pci 0000:00:1c.0: bridge window [mem 0xd0700000-0xd07fffff]
[ 1.286557] pci 0000:00:1c.1: PCI bridge to [bus 02]
[ 1.286573] pci 0000:00:1c.1: bridge window [io 0xd000-0xdfff]
[ 1.286580] pci 0000:00:1c.1: bridge window [mem 0xd0600000-0xd06fffff]
[ 1.286589] pci 0000:00:1c.2: PCI bridge to [bus 03]
[ 1.286593] pci 0000:00:1c.2: bridge window [io 0x1000-0x1fff]
[ 1.286605] pci 0000:00:1c.3: PCI bridge to [bus 04]
[ 1.286609] pci 0000:00:1c.3: bridge window [io 0x2000-0x2fff]
[ 1.287114] pci_bus 0000:00: resource 4 [io 0x0000-0x006f]
[ 1.287120] pci_bus 0000:00: resource 5 [io 0x0078-0x0cf7]
[ 1.287124] pci_bus 0000:00: resource 6 [io 0x0d00-0xffff]
[ 1.287128] pci_bus 0000:00: resource 7 [mem 0x000a0000-0x000bffff]
[ 1.287132] pci_bus 0000:00: resource 8 [mem 0x000c0000-0x000dffff]
[ 1.287136] pci_bus 0000:00: resource 9 [mem 0x000e0000-0x000fffff]
[ 1.287140] pci_bus 0000:00: resource 10 [mem 0xc0000000-0xd0816fff]
[ 1.287145] pci_bus 0000:01: resource 0 [io 0xe000-0xefff]
[ 1.287149] pci_bus 0000:01: resource 1 [mem 0xd0700000-0xd07fffff]
[ 1.287153] pci_bus 0000:02: resource 0 [io 0xd000-0xdfff]
[ 1.287157] pci_bus 0000:02: resource 1 [mem 0xd0600000-0xd06fffff]
[ 1.287161] pci_bus 0000:03: resource 0 [io 0x1000-0x1fff]
[ 1.287165] pci_bus 0000:04: resource 0 [io 0x2000-0x2fff]
[ 1.287217] NET: Registered protocol family 2
[ 1.287555] TCP established hash table entries: 65536 (order: 8, 1048576 bytes)
[ 1.287898] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes)
[ 1.288231] TCP: Hash tables configured (established 65536 bind 65536)
[ 1.288295] TCP: reno registered
[ 1.288306] UDP hash table entries: 4096 (order: 5, 131072 bytes)
[ 1.288368] UDP-Lite hash table entries: 4096 (order: 5, 131072 bytes)
[ 1.288545] NET: Registered protocol family 1
[ 1.288740] RPC: Registered named UNIX socket transport module.
[ 1.288744] RPC: Registered udp transport module.
[ 1.288746] RPC: Registered tcp transport module.
[ 1.288749] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 1.288765] pci 0000:00:02.0: Boot video device
[ 1.289102] PCI: CLS 64 bytes, default 64
[ 1.289182] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[ 1.289188] software IO TLB [mem 0xa4ae6000-0xa8ae6000] (64MB) mapped at [ffff8800a4ae6000-ffff8800a8ae5fff]
[ 1.289471] Scanning for low memory corruption every 60 seconds
[ 1.289627] Uptime: system uptime restrictions enabled
[ 1.337796] NFS: Registering the id_resolver key type
[ 1.337824] Key type id_resolver registered
[ 1.337827] Key type id_legacy registered
[ 1.338135] bio: create slab <bio-1> at 1
[ 1.338342] Btrfs loaded
[ 1.338486] aufs 3.10-20130819
[ 1.338495] msgmni has been set to 15629
[ 1.339059] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[ 1.339064] io scheduler noop registered
[ 1.339067] io scheduler deadline registered
[ 1.339077] io scheduler cfq registered (default)
[ 1.339347] byt_gpio byt_gpio.2: GPIO interrupt error, pins misconfigured
[ 1.339507] byt_gpio byt_gpio.2: Gpio 1 interrupt flood, disabling
[ 1.339668] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[ 1.339719] intel_idle: does not run on family 6 model 55
[ 1.339838] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input0
[ 1.339847] ACPI: Power Button [PWRB]
[ 1.339915] input: Sleep Button as /devices/LNXSYSTM:00/device:00/PNP0C0E:00/input/input1
[ 1.339921] ACPI: Sleep Button [SLPB]
[ 1.339984] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
[ 1.339989] ACPI: Power Button [PWRF]
[ 1.340115] ACPI: Fan [FAN0] (off)
[ 1.340227] ACPI: Requesting acpi_cpufreq
[ 1.343233] Monitor-Mwait will be used to enter C-1 state
[ 1.343262] Monitor-Mwait will be used to enter C-2 state
[ 1.343317] ACPI: acpi_idle registered with cpuidle
[ 1.550964] thermal LNXTHERM:00: registered as thermal_zone0
[ 1.550970] ACPI: Thermal Zone [TZ01] (27 C)
[ 1.575624] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[ 1.596370] 00:05: ttyS0 at I/O 0x3f8 (irq = 3) is a 16550A
[ 1.617140] 00:06: ttyS1 at I/O 0x2f8 (irq = 4) is a 16550A
[ 1.617787] Linux agpgart interface v0.103
[ 1.617834] [drm] Initialized drm 1.1.0 20060810
[ 1.618422] [drm] Memory usable by graphics device = 2048M
[ 1.618433] i915 0000:00:02.0: setting latency timer to 64
[ 1.623040] i915 0000:00:02.0: irq 103 for MSI/MSI-X
[ 1.623058] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
[ 1.623061] [drm] Driver supports precise vblank timestamp query.
[ 1.623156] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem
[ 1.641576] [drm] failed to retrieve link info, disabling eDP
[ 1.738888] fbcon: inteldrmfb (fb0) is primary device
[ 1.985947] Console: switching to colour frame buffer device 170x48
[ 1.993260] i915 0000:00:02.0: fb0: inteldrmfb frame buffer device
[ 1.993264] i915 0000:00:02.0: registered panic notifier
[ 2.000617] acpi device:0a: registered as cooling_device5
[ 2.000659] ACPI: Video Device [GFX0] (multi-head: yes rom: no post: no)
[ 2.000723] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:00/input/input3
[ 2.000754] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0
[ 2.003145] brd: module loaded
[ 2.004417] loop: module loaded
[ 2.004510] ahci 0000:00:13.0: version 3.0
[ 2.004720] ahci 0000:00:13.0: irq 104 for MSI/MSI-X
[ 2.015593] ahci 0000:00:13.0: AHCI 0001.0300 32 slots 2 ports 3 Gbps 0x1 impl SATA mode
[ 2.015600] ahci 0000:00:13.0: flags: 64bit ncq pm led clo pio slum part deso sadm apst
[ 2.015607] ahci 0000:00:13.0: setting latency timer to 64
[ 2.015994] scsi0 : ahci
[ 2.016126] scsi1 : ahci
[ 2.016195] ata1: SATA max UDMA/133 abar m2048@0xd0816000 port 0xd0816100 irq 104
[ 2.016199] ata2: DUMMY
[ 2.016306] pcnet32: pcnet32.c:v1.35 21.Apr.2008 tsbogend@alpha.franken.de
[ 2.016344] e100: Intel(R) PRO/100 Network Driver, 3.5.24-k2-NAPI
[ 2.016347] e100: Copyright(c) 1999-2006 Intel Corporation
[ 2.016369] e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI
[ 2.016371] e1000: Copyright (c) 1999-2006 Intel Corporation.
[ 2.016392] e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
[ 2.016394] e1000e: Copyright(c) 1999 - 2013 Intel Corporation.
[ 2.016467] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 2.016470] ehci-pci: EHCI PCI platform driver
[ 2.016660] xhci_hcd 0000:00:14.0: setting latency timer to 64
[ 2.016666] xhci_hcd 0000:00:14.0: xHCI Host Controller
[ 2.016676] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 1
[ 2.017076] xhci_hcd 0000:00:14.0: cache line size of 64 is not supported
[ 2.017106] xhci_hcd 0000:00:14.0: irq 105 for MSI/MSI-X
[ 2.017328] xHCI xhci_add_endpoint called for root hub
[ 2.017332] xHCI xhci_check_bandwidth called for root hub
[ 2.017380] hub 1-0:1.0: USB hub found
[ 2.017394] hub 1-0:1.0: 6 ports detected
[ 2.018178] xhci_hcd 0000:00:14.0: xHCI Host Controller
[ 2.018186] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 2
[ 2.018343] xHCI xhci_add_endpoint called for root hub
[ 2.018346] xHCI xhci_check_bandwidth called for root hub
[ 2.018392] hub 2-0:1.0: USB hub found
[ 2.018401] hub 2-0:1.0: 1 port detected
[ 2.025634] usbcore: registered new interface driver usb-storage
[ 2.025685] i8042: PNP: No PS/2 controller found. Probing ports directly.
[ 2.291593] tsc: Refined TSC clocksource calibration: 1999.999 MHz
[ 2.291600] Switching to clocksource tsc
[ 2.546595] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[ 2.546899] ata1.00: ATA-8: INTEL SSDSA2CW120G3, 4PC10362, max UDMA/133
[ 2.546905] ata1.00: 234441648 sectors, multi 16: LBA48 NCQ (depth 31/32)
[ 2.547226] ata1.00: configured for UDMA/133
[ 2.547383] scsi 0:0:0:0: Direct-Access ATA INTEL SSDSA2CW12 4PC1 PQ: 0 ANSI: 5
[ 2.547619] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 2.547745] sd 0:0:0:0: [sda] 234441648 512-byte logical blocks: (120 GB/111 GiB)
[ 2.547899] sd 0:0:0:0: [sda] Write Protect is off
[ 2.547905] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 2.547955] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 2.550750] sda: sda1 sda2 sda3
[ 2.551305] sd 0:0:0:0: [sda] Attached SCSI disk
[ 2.799581] usb 1-3: new full-speed USB device number 2 using xhci_hcd
[ 2.811010] usb 1-3: ep 0x81 - rounding interval to 1024 microframes, ep desc says 2040 microframes
[ 2.811237] hub 1-3:1.0: USB hub found
[ 2.811337] hub 1-3:1.0: 4 ports detected
[ 2.964581] usb 1-4: new high-speed USB device number 3 using xhci_hcd
[ 2.977246] hub 1-4:1.0: USB hub found
[ 2.977486] hub 1-4:1.0: 4 ports detected
[ 3.068301] i8042: No controller found
[ 3.068488] mousedev: PS/2 mouse device common for all mice
[ 3.069013] ACPI Warning: 0x000000000000f000-0x000000000000f01f SystemIO conflicts with Region \_SB_.PCI0.SBUS.SMBI 1 (20130328/utaddress-251)
[ 3.069023] ACPI: This conflict may cause random problems and system instability
[ 3.069026] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
[ 3.069078] i801_smbus 0000:00:1f.3: SMBus using PCI Interrupt
[ 3.069149] md: linear personality registered for level -1
[ 3.069153] md: raid0 personality registered for level 0
[ 3.069156] md: raid1 personality registered for level 1
[ 3.069158] md: raid10 personality registered for level 10
[ 3.069161] md: multipath personality registered for level -4
[ 3.069164] md: faulty personality registered for level -5
[ 3.069333] device-mapper: ioctl: 4.24.0-ioctl (2013-01-15) initialised: dm-devel@redhat.com
[ 3.069468] cpuidle: using governor ladder
[ 3.069622] cpuidle: using governor menu
[ 3.069639] sdhci: Secure Digital Host Controller Interface driver
[ 3.069642] sdhci: Copyright(c) Pierre Ossman
[ 3.069729] usbcore: registered new interface driver usbhid
[ 3.069732] usbhid: USB HID core driver
[ 3.070009] snd_hda_intel 0000:00:1b.0: irq 106 for MSI/MSI-X
[ 3.070052] snd_hda_intel 0000:00:1b.0: setting latency timer to 64
[ 3.073621] usb 1-3.1: new full-speed USB device number 4 using xhci_hcd
[ 3.116694] usb 1-3.1: ep 0x81 - rounding interval to 64 microframes, ep desc says 80 microframes
[ 3.116703] usb 1-3.1: ep 0x82 - rounding interval to 64 microframes, ep desc says 80 microframes
[ 3.116709] usb 1-3.1: ep 0x83 - rounding interval to 32 microframes, ep desc says 40 microframes
[ 3.125105] oprofile: using NMI interrupt.
[ 3.125210] u32 classifier
[ 3.125214] Actions configured
[ 3.125320] TCP: cubic registered
[ 3.125511] NET: Registered protocol family 10
[ 3.125776] sit: IPv6 over IPv4 tunneling driver
[ 3.125954] NET: Registered protocol family 17
[ 3.125993] Key type dns_resolver registered
[ 3.127092] input: Chicony USB Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.0/input/input4
[ 3.127179] hid-generic 0003:04F2:0402.0001: input: USB HID v1.11 Keyboard [Chicony USB Keyboard] on usb-0000:00:14.0-3.1/input0
[ 3.127234] console [netcon0] enabled
[ 3.127238] netconsole: network logging started
[ 3.128375] ALSA device list:
[ 3.128379] #0: HDA Intel PCH at 0xd0810000 irq 106
[ 3.168416] input: Chicony USB Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.1/input/input5
[ 3.168617] hid-generic 0003:04F2:0402.0002: input: USB HID v1.11 Device [Chicony USB Keyboard] on usb-0000:00:14.0-3.1/input1
[ 3.176644] input: Chicony USB Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.2/input/input6
[ 3.177442] hid-generic 0003:04F2:0402.0003: input: USB HID v1.10 Mouse [Chicony USB Keyboard] on usb-0000:00:14.0-3.1/input2
[ 3.177646] md: Waiting for all devices to be available before autodetect
[ 3.177655] md: If you don't use raid, use raid=noautodetect
[ 3.178069] md: Autodetecting RAID arrays.
[ 3.178075] md: Scanned 0 and added 0 devices.
[ 3.178078] md: autorun ...
[ 3.178081] md: ... autorun DONE.
[ 3.181129] kjournald starting. Commit interval 5 seconds
[ 3.181349] EXT3-fs (sda2): using internal journal
[ 3.181356] EXT3-fs (sda2): mounted filesystem with ordered data mode
[ 3.181377] VFS: Mounted root (ext3 filesystem) on device 8:2.
[ 3.181884] devtmpfs: mounted
[ 3.184335] Freeing unused kernel memory: 1120k freed
[ 3.184748] Write protecting the kernel read-only data: 12288k
[ 3.186869] Freeing unused kernel memory: 200k freed
[ 3.190950] Freeing unused kernel memory: 744k freed
[ 3.262544] Adding 5860348k swap on /dev/sda3. Priority:-1 extents:1 across:5860348k SS
[ 3.298956] udevd[96]: starting version 182
[ 3.411175] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
[ 3.411492] r8169 0000:02:00.2: irq 107 for MSI/MSI-X
[ 3.411794] r8169 0000:02:00.2 eth0: RTL8411 at 0xffffc90000022000, xx:xx:xx:xx:xx:xx, XID 08800800 IRQ 107
[ 3.411799] r8169 0000:02:00.2 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
[ 3.629823] i2c /dev entries driver
[ 3.647364] cfg80211: Calling CRDA to update world regulatory domain
[ 3.650624] Intel(R) Wireless WiFi driver for Linux, in-tree:
[ 3.650630] Copyright(c) 2003-2013 Intel Corporation
[ 6.547853] r8169 0000:02:00.2 eth0: link down
[ 6.547865] r8169 0000:02:00.2 eth0: link down
[ 6.547912] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 8.180496] r8169 0000:02:00.2 eth0: link up
[ 8.180514] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 10.283515] r8169 0000:02:00.2 eth0: link down
[ 10.283525] r8169 0000:02:00.2 eth0: link down
[ 10.283573] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 11.906696] r8169 0000:02:00.2 eth0: link up
[ 11.906725] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

上のカーネル・ログには、DE3815TYKHEと比較していくつか気になる点も存在するのですが、カーネルの動作に影響を及ぼすようなエラーはないようです。

ちなみに、EthernetデバイスはRTL8411という型番のようですね。Realtekのサイトで確認すると、このデバイスはEthernet ControllerとCard Reader Controllerの統合チップのようです。上のdmesgコマンドの出力情報によると、r8169ドライバのロードと初期化処理が実行されていることが判ります。ifconfigコマンドで確認すると、やはりeth0インターフェースが生成されていました。Valley Island BSP Dasiy 1.6.2にはRTL8168/8169/8111ドライバが組み込まれていますが、このドライバはRTL8411にも対応しているのでしょう。

じつは、上記の各コマンドはシリアル端末からYocto Linuxへログインした状態で実行しました。Valley Island BSPからビルドしたイメージの/etc/inittab内には、シリアル・デバイス/dev/ttyS0(COM1に相当)に対するgetty起動設定が存在しています。そのため、シリアル経由で接続したPC側で端末ソフトを起動していれば、カーネルのブート後にログイン・プロンプトが表示されます。こういう環境を欲しかったことがXS36V4を入手した最大の目的でした。どうしてもネットワークが使えない現場が稀に存在しますが、こういう現場でも、XS36V4ならシリアル経由でコントロールすることができます。

少しはトラブルに遭遇るんじゃないかと想像していたのですが、XS36V4でYocto Linuxを動かすというゴールにすんなりと到達してしまいました。じつは、今回XS36V4を入手した目的はもう一つあります。それは、この機種でTizenを動かしてみることです。Yocto Linuxの魅力にハマってからですが、私はTizenにも注目するようになりました。その理由は、Tizenプロジェクトを主導しているのがIntelだからです。Intelが主導しているプロジェクトなら技術的に得られるものが大きいので、研究テーマとして本格的に取り組む価値が十分にあると考えています。Tizenのターゲットには、Intel E38xxを搭載した産業用PCがいくつか含まれています。Yocto Linuxと同じように、E38xxで動くならJ1800/1900でもきっとTizenが動くはずです。近いうちに、XS36V4でTizenを動かすことに挑戦するつもりです。乞うご期待ください。






posted by とみやん at 08:11| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project