emblog

webのチラ裏、linux、Qt関連はまった&はまってる事etc

同人誌イベントへの参加・執筆 未経験者が、技術書典5で頒布に至るまで

何度かアカン的な感じになりながらも、技術書典5で本を出す事ができた経緯をつらつらと語りつつふり返ってみる。


どこに参加してきたの

2018/10/8に開催された技術書典5にサークル参加してきました。

技術書典とは、達人出版会とサークルTechBoosterが主宰する技術書イベントで、技術をテーマにした同人技術書の即売会となっています。

来場者数は春の技術書典4の約6,340人から1.6倍ほどUpの10,000人超と、大盛況なイベントで初参加にもかかわらず、サークル側で参加という。
今思えば、よくサークル側で参加したなぁ感が、これ書いてて思えてきた。


スペースに集まった皆さん、いろいろ手伝って頂いたコミュニティの皆さん、
会場サイズが前回と比べ3倍の面積にもなったにも関わらず大きなトラブルもなく
最強な運営をしてくれたスタッフの皆さん本当にありがとうございました。

どんな感じだったの執筆活動

はじまり

前々から書きたい事はいろいろあって、どこかでまとめて出したい思いあったけど、背中を押すキッカケになったのはココからでしたねぇ。

何を書いたの

ちょっと前から、QtのPythonバインディングをいろいろ試していた事もあり、Technical PreView版のQt for Pythonを題材に、もっとQtを使ってもらえるような環境構築〜GUI作成までの一連の内容を網羅した、初心者向けの技術書の執筆を選んでみました。
(QtQuick系は@IoriAYANEさんが、Meta-build系は@hermit4さん辺りが書いてきそうだったので、なんとなく被らないネタがコレだった。
あと、Alexa Voice Service + Qtや、QMLやwidget系での動的多言語変換なんかも考えてたけど、いろいろな意味でコアすぎな気がしたのでやめてしまった。)

イベント当日までどうだった?

応募と当選

7/17
自分のスケジュールを確認しつつ、ちょい死亡フラグ立つぐらいだろうと軽い気持ちで
7/19応募終了日の2日前に応募。
ジャンルや頒布物の内容を書くだけかと思いきや、サークルカットの登録あり。
サークルカットとは???とソコで固まる...。
テンプレートのlinkもあったけど、そもそも何か分からない。もはや未知の世界。
とにかく応募後から、同人誌とは?の基本的な事から同人誌を出すまでの内容を学びまくる。

8/1
応募数500超えのサークルの中から、470超の枠に入ってしまったという
当選メールが届いちゃうという奇跡が起こる。
(当選できませんでした=執筆するのやめちゃおう的な、かなり後ろ向きな考えを持っていた事もあり、当選した事に衝撃を受け、後に引けない感じになる)

イラスト依頼

8/2
なんとなく会社の同僚に、イラスト書ける人紹介してもらおうとお願いしてみる。
(できれば知らない間柄の方が、なんとなくいろいろ頼みやすいなぁ的な思いはあった)
「私チョットデキル。いや私しかいない」と2つ返事でサクッと紹介を依頼した同僚に決まりプレッシャー合戦が始まる。

イラスト全体感/テーマ/日程感を伝える。
書籍内のイラストやサークルカットは日程的に厳しい感はありありなので、そこの部分をMarkdownコメントアウトしてPDFをにしたものを渡す。

「本当にコレだけですか?」

とプレられ、コメントアウトを外し書籍内のイラストやサークルカットもお願いしちゃう事に!
いつもの仕事っぷりの如く、予想を上回るクオリティと、早めの期日で圧倒的に仕上げてきてもらい、はや原稿を落とす事が許されない状況になる。

執筆活動前準備
  • 執筆環境は、Re:VIEWでやると決めてたので環境構築を速攻で済ます。(順調
  • 執筆リポジトリはなるべくお金をかけず、かつPrivateにしたかったのでGitLabを初めて使い出す。(順調すぎる
  • 執筆準備
    • 書籍のタイトルと目次 決定。 (結構、早めに決まる
    • 執筆内容に沿ったサンプルアプリも、そこそこ早くできてしまう。(順調すぎて怖い

これ、お盆休み中に完成しちゃうんじゃねぇ?って感じで、俺スゲーっと完全に安心しきってしまう。

アカン執筆時間

平日、まとまった時間が取れない事は分かってたので、週末の日数計算でスケジュールを立てる。(パパさんエンジニアは、週末の自分時間が圧倒的に無いことを、もうすっかり忘れてて絶望的なデスマが始まる。)

それでは、入稿までのパパさんエンジニアの週末を見てみましょう

7/ 23 リポジトリ Initial commit
7/ 4週目 GitLabのwikiや issuesのlist/Board/Label 作成に、無駄に時間を費やす。
8/ 1週目 子供の夏休みの宿題の進捗100%、自分の進捗0
お盆休み 気がつくと、急な海外出張でお盆休みなし - 執筆進捗0で絶望。
ただし、イラストは順調に来てしまう。
8/ 4週目 執筆以外で勉強会等参加 / 子供がケガ
- 予想外の出来事で、Total執筆進捗 数%
9/ 1週目 全力で執筆! - 遅れつつも、Total進捗30-40%
さすがに焦ってきて、ここから睡眠時間 1/2削っての平日執筆開始
神風の台風 予想外の執筆時間が確保できる - Total進捗50%
9/ 1週目 何故か子供のサッカー大会が!奇跡的に勝ち進み土日がサッカーDay (執筆どこ
9/ 2週目 身内が入院で遠征&100%子供に全力投球 (ねぇ、ねぇ執筆は?
絶望になりながらも、何とか執筆は終え校正フェーズへ
9/ 22-23 運動会 (えっと、校正は?執筆は?
9/ 22 当初の締め切り期限 (当然1回目の校正作業間に合わず!延長9/25へ)
9/ 25 延長した締め切り期限 (気持ち的にも締め切りたい!が、校正1回目しか進まず諦める)
9/ 28 これ以上過ぎたら、後ろ指刺される締め切り期限
(直前にページ数変更で、表紙のチェックをイラスト書いた人に
ギリギリに再度チェックしてもらう粗相ありながら
なんとか入稿)

 

アカン、レビュー・校正

ほんとゴメンナサイ、ゴメンナサイ
<レビュー>
僕:  「Python系のレビューお願いします!」出勤前にメッセ
友人:「Python系重点的にチェックするけど、納期何時?」
僕:  「今日中!」
友人:「逝ってこい」
校閲
僕:  「校閲お願いします!」出勤前にメッセ
友人:「100P以上あるけど、今週中(7日間))でOK?」
僕:  「今日中!」
友人:「ちね」

入稿までに諦めたこと
  • Re:VIEWでの執筆で、CI環境つくってウハウハ
    ->実現せず
  • オリジナルな組版作成
    ->まったく時間がなく、TechBoosterで利用しているRe:VIEWのテンプレート
     techbooster-doujin.styスタイルをそのまま活用
     (PDFの出力だけは、hyperrefパッケージハイパーリンク関係を変更する)
  • ページ数を80Pぐらいにしてほどよい感じに仕上げる
    ->章毎に執筆内容を確認していた為、
     気づいたら140Pオーバーとなっている事に気づく。
     1章削る。Code添付も抜粋や、サンプルコードを参照しとして減らすも120Pが限界。
     (印刷費用が1.3倍に!)

技術書典5 直前・当日どうだった?

売り子さん

10/3の段階で被チェック数*1 70ぐらい。全員が来る訳でもないので80%ぐらいの試算で55ぐらいと見積る。イベント時間が11:00-17:00の6時間なので、10人/H。
だいたい6分毎に販売すればいいと考え、当日は売り子なしのつもりで挑む覚悟を10/4にするも、


で完全にガクブルになる。
そして前日の被チェック数で140超えしてて、死亡フラグが立つ。

@nekomatuさんや@shin1_okadaさんの好意で3日前の10/5に急遽売り子が決まる!しゅごい。

@nekomatuさん -> 急遽売り子がこれなくなった@hermit4さんのサポート
@shin1_okadaさん -> 僕のサポート

と最強な布陣を手に入れる。

最終的な被チェック数が184だったので、売り子の助けがなかったら、100%死亡してました。
f:id:sazus:20181009175351p:plain

当日の運営は?

サークル

き07 eMbLogサークルとして、Qt関連のサークルが5つも並ぶ中の1角にて頒布!



頒布物

イラストが良すぎちゃった事もあり、

  • 物理本は、予算的・初技術書典でニーズも分からないから 60冊 程度しかない。
    ->表紙画像をつけたPDFのダウンロードカードを物理本に付けよう。
     ただし、ダウンロードカード単体も配るのでおまけ程度に、PDFを書籍と同じ
     モノクロPDFにする。
  • 個人的には物理本も見るけど、圧倒的にPCやタブレットで見ることが多い。
    ->表紙を多くの人に見て欲しいからダウンロードカードをポストカードサイズで印刷。
     こっちは、見ながらモクモクできるように、見やすいカラーのPDFを配布。
     せっかく技術書典5に足を運んで見てくれるので、後日のWebでの販売よりは
     ちょっとでも安く提供したい。
  • サブキャラQtちゃんもっと認知させたい。
    ->ステッカーを刷ろう

っと財布が盛大に緩み、頒布は

  • 物理本 + ダウンロードカード(モノクロPDF) 60冊
  • カラーPDF ダウンロードカード 100部 (50部刷るつもりが、100部でも値段が変わらなかった)
  • オマケ用 Qtちゃんシール 100部

という、無謀は数を準備することに

支払い方法

どのくらいキャッシュレスの需要があるかも知りたかったので
現金以外にも、技術書典 かんたん後払いpixiv PAYを登録。(他のメジャーな決済方式って無いんですかねぇ)

頒布結果

一度、入場制限があったものの、基本的に制限なしでかつ、ある程度参加者が見て回れるぐらいの絶妙な混み具合だったことや、


Python人気もあり、

  • 物理本
    - 開始後1:15ぐらいで 60冊 完売。
  • カラーPDF ダウンロードカード 71部
    - おつりの¥100が無くなって終了。

と予想を上回る販売でした!


支払いの比率は、

現金 73%
技術書典 かんたん後払い 23%
pixiv PAY 4%

の割合でキャッシュレスの支払いは、ほとんど技術書典 かんたん後払いが多かったです。
公式Toolって事もあるけど、UIも含め使い方がシンプルで、レスポンスもよく頒布のオペレーションもスムーズにやれたのが技術書典 かんたん後払いが多く使われた理由ではないかと思います。

まとめ

良かった点、次も続けたい点

  • Re:VIEWでの執筆は、文章を書くにはMarkdownを書く感じで集中して書ける、次も使いたい。
  • 表紙をお願いする。もしくは誰かと共同で執筆する。
    一緒に物を作り上げていく中で自分以外からOutputが出ると、
    原稿落とせない適度なプレッシャーと、何がなんでも世に出さいといけない
    気持ちになりいい感じにいろいろな作業に締まりがでてくる。

反省点

  • 時間をつくって、もっといろいろな人に書いたもののレビューや校閲を頼めば良かった。
  • デザイン等は、もう少しイメージをシェアした方が、イラストを書く人の負担が減るみたいな事を言ってたので、自分の嗜好も込みでもっとディスカッションすればよかった。
  • 技術本は一つの技術をまとめていくので、wikiやQiitaと違う事を痛感。
    事前の調査内容や、サンプルアプリをつくれても執筆する時間は
    ちゃんと確保するのは必要。
    技術書典の季報の言葉に重みが凄いある。

「残りの日数ではなく、休日(自分が本当に休みになる日)を数えるんだ」

次にすること

  • 執筆をする前までの日程を含めた段取り大事。
    もっと細かくある程度のマージン持った日程間をもって
    スケジュールを作って印刷20%UPの期限や、翌日便締切期限の
    誘惑に惑わされない。
    執筆以外のタスクも、ちゃんと把握しておく。
  • ダウンロードカードの運用方法なんかは、結局どれがベストプラクティスか
    分からなくて短縮URLQRコードにして配布したけど
    技術書典でダウンロード頒布している所をみると
    • concaや、対面電書などのサイトを活用。(印刷は、自前だったり、バリアブル印刷だったり)ダウンロード自体に制限をかけていた。
    • パスワードとBOOTH経由でのダウンロード先を配布
      配布物にパスワードをかけて、ダウンロードは誰でもできるけど、
      閲覧制限をかけてる。

っと何かしら制限方法をかけていたので、次回はちょっとやり方を考えたい。

さいごに

自分的には執筆作業とかは70点ぐらいの点数しかつけれないけど、自分の伝えたい技術を多くの人に伝える事ができたことだけは、100点満点という気持ちで終われる技術書典最高です!


イラストを描いてもらった同僚には、いろいろと教えてもらう事が多く
また多分、自分一人なら落としてたかもしれない状態だったのを、最後までいろいろとフォローしてもらったおかげで、今回無事本が出たと思ってて、感謝しきれないです。ありがとう。

*1:参加者が、当日チェックしたいサークルをチェックする機能があり、自分のサークルが加えられた数、だいたいの頒布予測がつく。

Raspberry PiでのQt5日本語表示

リツイート等もして頂いたので、blogに書いておく。

はじめに

Raspbianを日本語にがんばってローカライズしたとしても、
Qt5で日本語表示した場合に、日本語の文字列が豆腐にすらならず
非常に残念極まりない表示になります。
Widgetの場合
(対応前)
f:id:sazus:20130509024400j:plain
(対応後)
f:id:sazus:20130509024442j:plain
QMLの場合
(対応前)
f:id:sazus:20130509024553j:plain
(対応後)
f:id:sazus:20130509024625j:plain


動作確認 環境

  • Raspberry Pi導入OS
    • Raspbian "wheezy(Hard-float)”2013-02-09-wheezy-raspbian
  • Qt5 :
    • gitのtag v5.0.2
    • configureにて、-prefix /usr/local/qt5piと設定してbuild



対応方法

  • Qt5のlib以下の/fontディレクトリに日本語のフォントを入れる。
  • Code上にて、導入した日本語フォントのfontfamilyをセットする。

ことにより対応可能です。

Qt5のlib以下の/fontディレクトリに日本語のフォントを入れる

私の環境では、"-prefix /usr/local/qt5pi"としているので、
/usr/local/qt5pi/lib/fonts/
に日本語フォントを入れちゃえばOKです。
導入先は、各自で環境設定を読み替えてください。

- 日本語フォントの取得

とりあえず、今回はtakao fontあたりを取得してみました。

$ sudo apt-get install fonts-takao

これで、Raspbianに
fonts-takao-gothic fonts-takao-mincho

/usr/share/fonts/truetype/takao-gothic/
/usr/share/fonts/truetype/takao-mincho/
以下に導入されます。

- 日本語フォントをQt5のフォントディレクトリーにコピーする

先ほどのフォント(今回は、takao-gothicの方)をコピーします。

$ sudo cp /usr/share/fonts/truetype/takao-gothic/TakaoGothic.ttf /usr/local/qt5pi/lib/fonts/


Code上にて、導入した日本語フォントのfontfamilyをセットする

QApplicationに対して、QFontクラスにてfontfamilyを指定します。

  QApplication a(argc, argv);
  ・・・
  QFont font;
  // 導入した日本語のフォントファミリーを指定します。
  font.setFamily("TakaoGothic");
  a.setFont( font );
  ・・・
  • QMLの場合

Text Elementのfont.familyのPropertiesを指定する。

  Text {
       ・・・
       // 導入した日本語のフォントファミリーを指定する。
       font.family: "TakaoGothic"    //[*]
       ・・・
  }



確認に使ったソース

Widget

  • main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QLabel>
#include <QFont>

MainWindow::MainWindow(QWidget *parent) :
	QMainWindow(parent)
{
	QLabel *label = new QLabel("Hello RaspberryPi \n\
こんにちはRaspberryPi");
	setCentralWidget(label);
}

MainWindow::~MainWindow()
{
}


int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	QFont font;
        // 導入した日本語のフォントファミリーを指定する。
	font.setFamily("TakaoGothic");    //[*]
	font.setPointSize( 48 );
	a.setFont( font );

	MainWindow w;
	w.show();
	
	return a.exec();
}
  • mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
	Q_OBJECT
	
public:
	MainWindow(QWidget *parent = 0);
	~MainWindow();
};

#endif // MAINWINDOW_H

QML版

  • Sample_Raspberrypi_Qt5_qml.qml
Rectangle {
   width:  800
   height: 600
   Text {
         anchors.centerIn: parent
         font.pointSize: 48
          // 導入した日本語のフォントファミリーを指定する。
         font.family: "TakaoGothic"    //[*]
         text: "Hello RaspberryPi \n こんにちはRaspberryPi"
   }
}

QML実行方法

$ qmlscene ./Sample_Raspberrypi_Qt5_qml.qml

RaspberryPi@Raspbian(wheezy)用にQt5beta1をCrossCompileする(その2)

RaspberryPiのRaspbian(wheezy)にて、Qt5beta1をCrossCompileする

Qt5beta1をRaspbian(wheezy)にてCrossCompileした時の覚書です。

前回の続きから

***環境構築Dir構成***

(諸事情でRaspberryPi_Beginners_guide | Qt Wiki | Qt Developer Networkと構築Dir先やDir名は変えています。)

/
|--/opt
|   '--/DeveloperTool
|   |  |--/Qt
|   |  |  '--/qt5-rpi-min/ - Qt5beta1 checkout先
|   |  '-- /RaspberryPi
|   |      '--/Raspbian    - Raspbian (wheezy)のimage置き場
|   '--/toolchain          - RaspberryPi用 Hardfloat CrossCompiler
/mnt
 '--/rpi-rootfs            - RaspberryPi用rootfsマウント先


***cross-compile-toolsの実行***

fixQualifiedLibraryPathsを使用します。
usage:
./cmd target-rootfs path-to-target-toolchain-compiler

$ cd /opt/DeveloperTool/RaspberryPi/Raspbian/cross-compile-tools
$ sudo ./fixQualifiedLibraryPaths /mnt/rpi-rootfs /opt/toolchain/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc

必ずsudoをつけて実行します。(/mnt/rpi-rootfs/内にてlibraryのシンボリックリンクを生成させる為)
OKな時のlog

Passed valid toolchain
Adjusting the symlinks in /mnt/rpi-rootfs/usr/lib to be relative
./libudev.so
../../lib/arm-linux-gnueabihf/libudev.so.0.13.0
Testing for existence of potential debian multi-arch dir: /mnt/rpi-rootfs/usr/lib/arm-linux-gnueabihf
Debian multiarch dir exists, adjusting
Adjusting the symlinks in /mnt/rpi-rootfs/usr/lib/arm-linux-gnueabihf to be relative
./libglib-2.0.so
../../../lib/arm-linux-gnueabihf/libglib-2.0.so.0
./libcidn.so
../../../lib/arm-linux-gnueabihf/libcidn.so.1
./libanl.so
../../../lib/arm-linux-gnueabihf/libanl.so.1
./libnss_nisplus.so
../../../lib/arm-linux-gnueabihf/libnss_nisplus.so.2
./libnss_nis.so
../../../lib/arm-linux-gnueabihf/libnss_nis.so.2
./libnss_compat.so
../../../lib/arm-linux-gnueabihf/libnss_compat.so.2
./libnss_files.so
../../../lib/arm-linux-gnueabihf/libnss_files.so.2
./libutil.so
../../../lib/arm-linux-gnueabihf/libutil.so.1
./libdbus-1.so
../../../lib/arm-linux-gnueabihf/libdbus-1.so.3.7.1
./libz.so
../../../lib/arm-linux-gnueabihf/libz.so.1.2.7
./libnss_dns.so
../../../lib/arm-linux-gnueabihf/libnss_dns.so.2
./libcrypt.so
../../../lib/arm-linux-gnueabihf/libcrypt.so.1
./libexpat.so
../../../lib/arm-linux-gnueabihf/libexpat.so.1.6.0
./libdl.so
../../../lib/arm-linux-gnueabihf/libdl.so.2
./libthread_db.so
../../../lib/arm-linux-gnueabihf/libthread_db.so.1
./libm.so
../../../lib/arm-linux-gnueabihf/libm.so.6
./libnsl.so
../../../lib/arm-linux-gnueabihf/libnsl.so.1
./libnss_hesiod.so
../../../lib/arm-linux-gnueabihf/libnss_hesiod.so.2
./librt.so
../../../lib/arm-linux-gnueabihf/librt.so.1
./libresolv.so
../../../lib/arm-linux-gnueabihf/libresolv.so.2
./libpcre.so
../../../lib/arm-linux-gnueabihf/libpcre.so.3
./libBrokenLocale.so
../../../lib/arm-linux-gnueabihf/libBrokenLocale.so.1

NGな時のlog
(sudo をつけないで実行した場合)

Passed valid toolchain
Adjusting the symlinks in /mnt/rpi-rootfs/usr/lib to be relative
Testing for existence of potential debian multi-arch dir: /mnt/rpi-rootfs/usr/lib/arm-linux-gnueabihf
Debian multiarch dir exists, adjusting
Adjusting the symlinks in /mnt/rpi-rootfs/usr/lib/arm-linux-gnueabihf to be relative

となり、あとのqtbaseのCompileにてerrorになります。(→やってしまった人...)

***Qt5のqtbaseチェックアウト***

今回は、qt5 in Qt - Qt by Nokiaから一気にQt5のリポジトリから
取得するのではなく、1つずつモジュールをmakeする事にし、最近ベータ版がリリースされたので、
v5.0.0-beta1のtagにてbuildを進めて行きます。
まずは、qtbaseをチェックアウトしてmakeしていく事にします。
qtbaseをgitから取得

$ mkdir -p /opt/DeveloperTool/Qt/qt5-rpi-min  /* Dir作成 */
$ cd /opt/DeveloperTool/Qt/qt5-rpi-min        /* Dir移動 */
$ git clone git://gitorious.org/qt/qtbase.git
$ cd ./qtbase/
$ git tag                                     /* tagを調べます */
qt-v5.0.0-alpha1
v5.0.0-beta1
/* v5.0.0-beta1 のタグでbranchを作ります */
$ git checkout -b branch-v5.0.0-beta1 v5.0.0-beta1 
Switched to a new branch 'branch-v5.0.0-beta1'
$ git branch                                 /* branchの確認 */
* branch-v5.0.0-beta1
  master

configureの実行

./configure -no-pch -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=/opt/toolchain/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/rpi-rootfs -opensource -confirm-license -optimized-qmake -reduce-relocations -reduce-exports -release -make libs -prefix /usr/local/qt5rpi 2>&1 | tee ../qtbase_configure.log

configure logです。(詳細log)

Building on:   linux-g++-64
Building for:  devices/linux-rasp-pi-g++
Architecture:  arm, features:
Host architecture: x86_64, features: mmx sse sse2
Platform notes:

            - Also available for Linux: linux-kcc linux-icc linux-cxx
        
Build ..................  libs
Configuration ..........  cross_compile qpa largefile neon pcre  minimal-config small-config medium-config large-config full-config fontconfig libudev evdev linuxfb c++11 accessibility egl eglfs opengl opengles2 shared qpa reduce_exports reduce_relocations clock-gettime clock-monotonic mremap getaddrinfo ipv6ifname getifaddrs inotify png system-freetype system-zlib nis iconv glib gstreamer dbus openssl rpath icu concurrent audio-backend v8 release
Debug .................. no
C++11 support .......... yes
pkg-config ............. yes
QtDBus module .......... yes (run-time)
QtConcurrent code ...... yes
QtGui module ........... yes
QtWidgets module ....... yes
JavaScriptCore JIT ..... To be decided by JavaScriptCore
QML debugging .......... yes
PCH support ............ no
iWMMXt support ......... no
NEON support ........... yes
IPv6 ifname support .... yes
getaddrinfo support .... yes
getifaddrs support ..... yes
Accessibility .......... yes
NIS support ............ yes
CUPS support ........... no
Iconv support .......... yes
Glib support ........... yes
GStreamer support ...... yes
PulseAudio support ..... no
Large File support ..... yes
GIF support ............ plugin
JPEG support ........... plugin (qt)
PNG support ............ yes (qt)
zlib support ........... system
Session management ..... auto
libudev support ........ yes
OpenGL support ......... yes (OpenGL ES 2.x)
OpenVG support ......... no
XShape support ......... auto
XVideo support ......... auto
XSync support .......... auto
Xinerama support ....... runtime
Xcursor support ........ runtime
Xfixes support ......... runtime
Xrandr support ......... runtime
Xi support ............. runtime
Xi2 support ............ auto
MIT-SHM support ........ auto
FontConfig support ..... yes
XKB Support ............ auto
immodule support ....... yes
GTK theme support ...... no
SQLite support ......... plugin (qt)
OpenSSL support ........ yes (run-time)
Alsa support ........... no
libICU support ......... yes
PCRE support ........... qt
Xcb support ............ no
Xrender support ........ no
EGLFS support .......... yes
DirectFB support ....... no
LinuxFB support ........ yes
KMS support ............ no

makeの実行

$ make 2>&1 | tee ../qtbase_make.log

qtbase make logです。(詳細log)
Build Bad How to
僕のハマった内容です。

  • ハマりどころ1
qlibrary_unix.cpp:(.text+0xf84): warning: Using `dlopen' in statically linked applications requiresion used for linking
/mnt/rpi-rootfs/usr/lib/arm-linux-gnueabihf/libdl.a(dlopen.o): In function `dlopen':
/mnt/rpi-rootfs/usr/lib/arm-linux-gnueabihf/libdl.a(dlclose.o): In
function `dlclose':
(.text+0x0): undefined reference to `__dlclose'
/mnt/rpi-rootfs/usr/lib/arm-linux-gnueabihf/libdl.a(dlsym.o): In
function `dlsym':
(.text+0xc): undefined reference to `__dlsym'
/mnt/rpi-rootfs/usr/lib/arm-linux-gnueabihf/libdl.a(dlerror.o): In
function `dlerror':
(.text+0x0): undefined reference to `__dlerror'
/mnt/rpi-rootfs/usr/lib/arm-linux-gnueabihf/libm.a(feholdexcpt.o): In
function `feholdexcept':
(.text+0x48): undefined reference to `_dl_hwcap'
/mnt/rpi-rootfs/usr/lib/arm-linux-gnueabihf/libm.a(fesetenv.o): In
function `fesetenv':
(.text+0x64): undefined reference to `_dl_hwcap'
collect2: error: ld returned 1 exit status
make[2]: *** [../../lib/libQtCore.so.5.0.0] エラー 1
make[2]: Leaving directory `/opt/DeveloperTool/Qt/qt5-rpi-min/qtbase/src/corelib'
make[1]: *** [sub-corelib-make_first] エラー 2
make[1]: Leaving directory `/opt/DeveloperTool/Qt/qt5-rpi-min/qtbase/src'
make: *** [sub-src-make_first] エラー 2

→ ./fixQualifiedLibraryPathsが、sudoをつけずに実行した等により正常に実行されなかった場合にでる。

  • ハマりどころ2
cc1: fatal error: .pch/release-shared/QtGui: No such file or directory
or
cc1: fatal error: .pch/release-shared/QtGui: そのようなファイルやディレクトリがありません。

ここのTroubleshootingにあるように、configureにて“-no-pch”をつけなかった場合にでる。
installの実行
わたしの場合には、configureの-prefixにて、”/usr/local/qt5rpi”と設定しているため
/usr/local/qt5rpiにinstallされました。

$ sudo make install 2>&1 | tee ../qtbase_make_install_.log

(詳細log)

つっ疲れた...、次回にてQt5の残りのモジュールについて記載をしていきます。
next (その3)

RaspberryPi@Raspbian(wheezy)用にQt5beta1をCrossCompileする(その1)

RaspberryPiのRaspbian(wheezy)にて、Qt5beta1をCrossCompileする

Qt5beta1をRaspbian(wheezy)にてCrossCompileした時の覚書です。

既に、@IoriAYANEさんが、既にサクっとcross compileされちゃってます。
(Qt5をRaspberry Pi用にビルドする (理ろぐ))

こちらでは、Qt5のモジュールを個別にmakeした時のログと
けっこうトラブったので、トラブった事項の記載等をしておきます。

  • The Raspberry Pi Foundation

  RasberryPi HP

  • Qt5 CrossCompile参考サイト

  RaspberryPi | Qt Wiki | Qt Developer Network
  RaspberryPi_Beginners_guide | Qt Wiki | Qt Developer Network

***構成***

Host PC : Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz ASUS U24
Host OS : Ubuntu12.04(precise) 64-bit

$ cat /proc/version_signature
    Ubuntu 3.2.0-30.48-generic 3.2.27
$ cat /proc/version
    Linux version 3.2.0-30-generic (buildd@batsu) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #48-Ubuntu SMP Fri Aug 24 16:52:48 UTC 2012

Target board : RasberryPi model B
Target OS : Raspbian (wheezy) Hardflort (2012-08-16-wheezy-raspbian)

***Compile環境設定***

実は、X11のQt5beta1を先にしちゃっていたので、何が必要かわからなかったりするw とりあえず、X11でのQt5 コンパイル時に入れたのは下記サイトを参考にして
参考:http://qt-project.org/wiki/Building_Qt_5_from_Git

$ sudo apt-get install build-essential perl python git
$ sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev

あとは、他ボードのCrossCompileも同じPCで行なっていたりしているので、
個別で必要そうなのは、

  • GNU C Library
$ sudo apt-get install libc6-dev  
  • 32-bit shared libraries
  • Embedded GNU C Library: 32-bit development libraries
$ sudo apt-get install ia32-libs libc6-dev-i386

こちらのTroubleshooting
に記載があったので64bitだと

sudo apt-get install lib32z1-dev

ぐらい?(本当に必要かわかりませんが、@IoriAYANEさんが64bitだとエラーになるとの記載をされていたのですが、僕の方でエラーにならなかったのは、この辺りを入れていたからかもしれません。)

***環境構築Dir構成***

(諸事情でRaspberryPi_Beginners_guide | Qt Wiki | Qt Developer Networkと構築Dir先やDir名は変えています。)

/
|--/opt
|   '--/DeveloperTool
|   |  |--/Qt
|   |  |  '--/qt5-rpi-min/ - Qt5beta1 checkout先
|   |  '-- /RaspberryPi
|   |      '--/Raspbian    - Raspbian (wheezy)のimage置き場
|   '--/toolchain          - RaspberryPi用 Hardfloat CrossCompiler
/mnt
 '--/rpi-rootfs            - RaspberryPi用rootfsマウント先


***CrossCompile環境を整える***

RaspberryPIで使用するimageの展開
The Raspberry Pi Foundationのサイトから、Downloadをクリック。
Downloads | Raspberry Piから
2012-08-16-wheezy-raspbian.zipをダウンロードしていきます。
ダウンロード後に、ダウンロードサイトに記載しているSHA-1と一致しているか確認する。

$ sha1sum 2012-08-16-wheezy-raspbian.zip
63d16fd28369b6e05bf97f2d1758d56df6ed0ba9  2012-08-16-wheezy-raspbian.zip

imageを置くディレクトリに移動し、解凍する。

$ sudo mkdir -p /opt/DeveloperTool/RaspberryPi/Raspbian
$ cd /opt
$ sudo chown <USER>:<GROUP> -R ./DeveloperTool/RaspberryPi/Raspbian
$ cd /opt/DeveloperTool/RaspberryPi/Raspbian
$ mv ~/Downloads/2012-08-16-wheezy-raspbian.zip /opt/DeveloperTool/RaspberryPi/Raspbian
$ unzip ./2012-08-16-wheezy-raspbian.zip

マウント先のディレクトリを作成して、マウントしておく。

$ sudo mkdir /mnt/rpi-rootfs
$ sudo mount -o loop,offset=62914560 2012-08-16-wheezy-raspbian.img /mnt/rpi-rootfs

(memo)
パーティションの開始バイトで62,914,560byteとしているのは、

$ fdisk -l ./2012-08-16-wheezy-raspbian.img

ディスク ./2012-08-16-wheezy-raspbian.img: 1939 MB, 1939865600 バイト
ヘッド 255, セクタ 63, シリンダ 235, 合計 3788800 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x000108cb

                     デバイス ブート      始点        終点     ブロック   Id  システム
./2012-08-16-wheezy-raspbian.img1            8192      122879       57344    c  W95 FAT32 (LBA)
./2012-08-16-wheezy-raspbian.img2          122880     3788799     1832960   83  Linux

となっており、FAT32のパーティションには、booterやkernel image。
ex4にはroot file systemが入っています。
今回はroot file systemを参照したい為、2パーティション目の開始からマウントしています。
マウントのbyteは、
セクタサイズが512byteから
512✕122880=62,914,560
といった計算でoffset開始アドレスを算出しています。

CrossCompileを行うToolChainをダウンロードする。

$ cd /opt
$ sudo mkdir ./toolchain
$ sudo chown <USER>:<GROUP> ./toolchain
$ cd ./toolchain
$ wget http://blueocean.qmh-project.org/gcc-4.7-linaro-rpi-gnueabihf.tbz
$ tar -xf gcc-4.7-linaro-rpi-gnueabihf.tbz

(memo)
このToolchainは、Hard float用のものなので、The Raspberry Pi Foundationのサイトのdownloadにある
Soft-float Debian “wheezy”には使用できません。Arch Linux ARMやQtonPiについては、どっちを使っているか不明・・・。
いちおコンパイラについて晒しておきます。

$ /opt/toolchain/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -v
組み込み spec を使用しています。
COLLECT_GCC=/opt/toolchain/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++
COLLECT_LTO_WRAPPER=/opt/toolchain/gcc-4.7-linaro-rpi-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/4.7.2/lto-wrapper
ターゲット: arm-linux-gnueabihf
configure 設定: /opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/src/gcc-linaro-4.7-2012.07/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install --with-sysroot=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fortran --enable-multilib --with-arch=armv6zk --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=hard --with-pkgversion='crosstool-NG linaro-1.13.1-2012.07-20120720 - Linaro GCC 2012.07' --with-bugurl=https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --with-gmp=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpc=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-ppl=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-libelf=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-host-libstdcxx='-L/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static/lib -lpwl' --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-gold --with-local-prefix=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long
スレッドモデル: posix
gcc バージョン 4.7.2 20120701 (prerelease) (crosstool-NG linaro-1.13.1-2012.07-20120720 - Linaro GCC 2012.07) 

cross-compile-toolsのチェックアウト(root file system)

$ cd /opt/DeveloperTool/RaspberryPi/Raspbian 
$ git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git
$ git log -n 1   /*今回使用したハッシュ値です*/
commit d49f517eaa3bc819f78a01a5eead9e1a697ce6f5
Author: Johannes Zellner <johannes.zellner@nokia.com>
Date:   Mon Aug 20 20:34:36 2012 -0700

    people like me need more specific usage description

とりあえず、次回にて、Qt5のチェックアウトおよびbuildについての
記載をしていきます。
next (その2)

BeagleBoard DE Ubuntu (起動後のupdate作業)

BeagleBoard に Ubuntu11.10 インストール後の起動後にする事HowTo

SDカードへのubuntuのイメージの入れ方等はBeagleBoard DE Ubuntu (SDカードにイメージのインストール) - emblogを参照してください。
基本は、elinux.org(BeagleBoardUbuntu)に書いてある通りだったりする。

***構成***

使用Host PC OS : Ubuntu12.04
使用BeagleboardBeagleBoard C4 (xMじゃないよw)
USBハブ : USB2.0ハブ4ポート(¥700ぐらい)
USB/LAN変換 : USB2.0 有線LANアダプタ(¥1,000ぐらい)
BeagleBoard用シリアルケーブル : BBC01(¥1,600ぐらい 高!)
SDカード : 8GbyteSDカード(最小で4GBは欲しい)

何はともあれ起動させる。

beagleboardに、

  1. USBハブ
  2. USB/LAN変換
  3. シリアルケーブル
  4. SDカード(Ubuntuプレインストールイメージを入れたもの)
  5. USBminiBケーブル(PCに接続し、とりあえず基板への電源供給用に使用)

を接続します。

シリアル通信設定

Tera Term等のシリアル通信できるソフトを用意します。
シリアルポート設定
ボーレート 115,200bps
データ 8bit
パリティ none(なし)
ストップbit 1bit
フロー制御 none(なし)
に設定しておき、シリアルケーブルを事前に接続しておきます。

火入れ

USERボタンを押しながら、USBminiBケーブルをPCに接続して電源供給させてみます。
下記に起動時のkernel起動前までのログを表示しておきます。

USERボタンを何故押しながら起動させるの?

beagleboardのOMAP3530(beagle board Ver.C4の場合)は、I/OのSYS_BOOT0~6のポートのbit設定にて内部ROM(たしか書き換え不可じゃなかったかな?)に書き込んでいるbooterが第一,第二のbooterであるx-loader,u-bootを読み出す先の順番を変更できます。
デフォルトの状態では、
SYS_BOOT0 H
SYS_BOOT1 H
SYS_BOOT2 H
SYS_BOOT3 H

SYS_BOOT4 L
SYS_BOOT5 (USERボタン downで H)
SYS_BOOT6 H

となっていますので、

  • USERボタンを押さない時 b100 1111 (NAND USB UART3 MMC1)
  • USERボタンを押している時 b110 1111 (USB UART MMC1 NAMD)

となり、USERボタンを押さない時には、
通常はNANDからx-loader/u-bootが読み出されます。
今回は、SDカードからの起動させる為に、USERボタンを押し
NANDより先にMMC1からbooterを読み出すようにしました。
(マニュアルの5.14 User/Boot Button参照)


(起動ログ)

40W      <- [40Wと表示されればOKです。これが出たときにUSERボタンを離してください。]
U-Boot SPL 2011.12-00005-g0a44c98 (Feb 13 2012 - 18:49:45)
Texas Instruments Revision detection unimplemented
OMAP SD/MMC: 0
reading u-boot.img
reading u-boot.img


U-Boot 2011.12-00005-g0a44c98 (Feb 13 2012 - 18:49:45)

OMAP3530-GP ES3.1, CPU-OPP2, L3-165MHz, Max CPU Clock 720 mHz
OMAP3 Beagle board + LPDDR/NAND
I2C:   ready
DRAM:  256 MiB
NAND:  256 MiB
MMC:   OMAP SD/MMC: 0

In:    serial
Out:   serial
Err:   serial
Beagle Rev C4
timed out in wait_for_pin: I2C_STAT=0
I2C read: I/O error
Unrecognized expansion board: 0
timed out in wait_for_pin: I2C_STAT=0
I2C read: I/O error
Unrecognized expansion board: 0
Die ID #13f400040000000004036abc07007018
Net:   Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot:  2,1,0    <-   [ここで、何かを押せばu-bootで止まります。]
The user button is currently NOT pressed.
SD/MMC found on device 0
reading uEnv.txt

796 bytes read
Loaded environment from uEnv.txt
Importing environment from mmc ...
reading uImage

3014528 bytes read
reading uInitrd

3087353 bytes read
Booting from mmc ...
## Booting kernel from Legacy Image at 80300000 ...
   Image Name:   3.2.3-x4
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3014464 Bytes = 2.9 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 81600000 ...
   Image Name:   initramfs
   Image Type:   ARM Linux RAMDisk Image (uncompressed)
   Data Size:    3087289 Bytes = 2.9 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

Kernel起動後

ログインする

初期でのログイン名とパスワードは
login name : ubuntu
password : temppwd
となっていますので、これでログインしてみます。

Ubuntu 11.10 omap ttyO2

omap login: ubuntu  <-    ログイン名(デフォルト ubuntu)を入力
Password: temppwd   <-    パスワード(デフォルト temppwd)を入力
Welcome to Ubuntu 11.10 (GNU/Linux 3.2.3-x4 armv7l)

 * Documentation:  https://help.ubuntu.com/

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@omap:~$ 

ネットワークに接続してみる。

とりあえず、ubuntuのアップデートを行いたいので
ネットワークに接続します。
今回は、DHCPにてさくっと接続させます。
sudoをつけて、rootの特権レベルで実行させます。

$ sudo dhclient eth0
[sudo] password for ubuntu: ****** <- password(デフォルトならtemppwd を入れる。)

接続できたか確認してみる。

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:11:22:33:44:55
          inet addr:172.16.0.1  Bcast:172.16.0.255  Mask:255.255.255.0
          <- IPアドレスが割振られていればOKかと思います。
          inet6 addr: ffff::1111:ffff:1111:20b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1198 (1.1 KB)  TX bytes:1382 (1.3 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

ubuntuのアップグレード

とりあえず、パッケージリストを取得・更新する
$ sudo apt-get update
インストール済みのパッケージをアップグレードする
$ sudo apt-get upgrade

その他いろいろ作業する前に入れておきたいものを入れる。

  • 検索するファイルを含むパッケージをよく探すので
$ sudo apt-get install apt-file

パッケージが入ったら

$ sudo apt-file update
  • わたし、vim派なので真っ先にいれる(これがないと、きついっす)
$ sudo apt-get install vim
  • 後述のkernelupdateに使用するので、 HTTPやFTP経由にてファイル

取得をするためのwgetを入れる。

$ sudo apt-get install wget
  • いちいちシリアルで接続するのもめんどくさいのでSSHも入れる
$ sudo apt-get install ssh
  • Windowsから接続も行いたいのでsambaも入れる。
$ sudo apt-get install samba

ネットワーク接続の設定を行う。

起動してから、dhclientコマンドにて毎回ネットワーク接続しても
いいのですが、めんどくちゃいので自動でDHCP接続をするようにします。

/etc/network/interfacesを編集する
$ sudo vim /etc/network/interfaces

で開いて
(書き換え前)

auto lo
iface lo inet loopback

# The primary network interface
#auto eth0
#iface eth0 inet dhcp
# Example to keep MAC address between reboots
#hwaddress ether DE:AD:BE:EF:CA:FE

上記の
#auto eth0
#iface eth0 inet dhcp
の"#"を消して上書きします。
※vimでのファイルの編集・保存について
ファイルの編集 キーボードのiを押して挿入モードにて編集する。
ファイルの保存 ESCを押してから:wqにてファイルを上書き保存します。

(書き換え後)

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp
# Example to keep MAC address between reboots
#hwaddress ether DE:AD:BE:EF:CA:FE

これで一旦再起動します。

kernelのアップデート

ここまでは、主にUbuntuのパッケージ関連をいじってきましたが次はkernelのアップデートを行います。
Ubuntu のイメージをインストール時に作成したkernelは最新版でないので最新版に上げます。

アップデート用の作業ディレクトリの作成

/opt/ディレクトリに./LatestKernelImageを作成してこのディレクトリで作業を行います。
ディレクトリを作成します。

$ sudo mkdir -p /etc/LatestKernelImage

/optディレクトリに移動し、./LatestKernelImageの所有者を変更します。

$ cd /opt/
$ sudo chown ubuntu:ubuntu ./LatestKernelImage

所有者の変更ができたか確認してみる。

$ ls -l
drwxr-xr-x 2 ubuntu ubuntu 4096 2012-03-XX XX:XX LatestKernelImage
kernelのupdate(uImageを上書きする)

環境変数として、DIST名をUpdateするUbuntuのバージョンを入れる。
Ubuntu10.04なら、lucid
Ubuntu10.10なら、maverick
Ubuntu11.04なら、natty
Ubuntu11.10なら、oneiric
Ubuntu12.04なら、precise
を入れる。

export DIST=oneiric

環境変数として、ARCH名で、アーキテクチャ名を入れる。

export ARCH=armel

環境変数として、BOARD名で、使用しているボード名を入れる。
Beagleboardや、Pandaboardなら、omap
BeagleBoneなら、omap-psp

export BOARD=omap

インストールで使用するシェルスクリプトのリストを取得します。

$ wget http://rcn-ee.net/deb/${DIST}-${ARCH}/LATEST-${BOARD}
--2012-03-XX XX:XX:XX--  http://rcn-ee.net/deb/oneiric-armel/LATEST-omap
Resolving rcn-ee.net... 69.163.149.169
Connecting to rcn-ee.net|69.163.149.169|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 229 [text/plain]
Saving to: `LATEST-omap'

100%[======================================>] 229         --.-K/s   in 0s

2012-03-XX XX:XX:XX (916 KB/s) - `LATEST-omap' saved [229/229]

インストールで使用するシェルスクリプトを取得します。

$ wget $(cat ./LATEST-${BOARD} | grep STABLE | awk '{print $3}')
--2012-03-XX XX:XX:XX--  http://rcn-ee.net/deb/oneiric-armel/v3.2.10-x6/install-me.sh
Resolving rcn-ee.net... 69.163.149.169
Connecting to rcn-ee.net|69.163.149.169|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3095 (3.0K) [application/x-sh]
Saving to: `install-me.sh'

100%[======================================>] 3,095       --.-K/s   in 0.001s

2012-03-XX XX:XX:XX (4.21 MB/s) - `install-me.sh' saved [3095/3095]

インストールします。

$ /bin/bash install-me.sh

以下のインストール時のログを添付します。

Mounting Fat partition
Downloading Recommended Kernel
--2012-03-XX XX:XX:XX--  http://rcn-ee.net/deb/oneiric-armel/v3.2.10-x6/linux-image-3.2.10-x6_1.0oneiric_armel.deb
Resolving rcn-ee.net... 69.163.149.169
Connecting to rcn-ee.net|69.163.149.169|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16501650 (16M) [application/x-debian-package]
Saving to: `/tmp/deb/linux-image-3.2.10-x6_1.0oneiric_armel.deb'

100%[======================================>] 16,501,650   257K/s   in 76s

2012-03-XX XX:XX:XX (213 KB/s) - `/tmp/deb/linux-image-3.2.10-x6_1.0oneiric_armel.deb' saved [16501650/16501650]

Installing linux-image
Selecting previously deselected package linux-image-3.2.10-x6.
(Reading database ... 14190 files and directories currently installed.)
Unpacking linux-image-3.2.10-x6 (from .../linux-image-3.2.10-x6_1.0oneiric_armel.deb) ...
Setting up linux-image-3.2.10-x6 (1.0oneiric) ...
update-initramfs: Generating /boot/initrd.img-3.2.10-x6
Backing up Previous uImage and uInitrd
`/tmp/boot/uImage' -> `/tmp/boot/uImage_old'
`/tmp/boot/uInitrd' -> `/tmp/boot/uInitrd_old'
Creating uImage from vmlinuz
Image Name:   3.2.10-x6
Created:      Tue Mar XX XX:XX:XX 2012
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3016696 Bytes = 2945.99 kB = 2.88 MB
Load Address: 80008000
Entry Point:  80008000
Creating uInitrd
Image Name:   initramfs
Created:      Tue Mar XX XX:XX:XX 2012
Image Type:   ARM Linux RAMDisk Image (uncompressed)
Data Size:    3097714 Bytes = 3025.11 kB = 2.95 MB
Load Address: 00000000
Entry Point:  00000000
-rwxr-xr-x 1 root root 2.9M 2012-03-XX XX:XX /tmp/boot/uImage
-rwxr-xr-x 1 root root 2.9M 2012-03-XX XX:XX /tmp/boot/uImage_old
-rwxr-xr-x 1 root root 3.0M 2012-03-XX XX:XX /tmp/boot/uInitrd
-rwxr-xr-x 1 root root 3.0M 2012-03-XX XX:XX /tmp/boot/uInitrd_old
Please Reboot
$

次は、日本語や時間の設定・x11デスクトップ環境構築までを記載する予定・・・。。

おまけ
毎度、USERボタンを押してだとしんどかったりするので
NANDにはいっているX-loderとU-bootの書き換えを行います。

X-loader/u-bootのアップグレード

※注意
ここで利用するSDカードは、上記で用いているKernel Imsgeの入っている
SDカードを利用しないでください。
上書きされて、起動できなくなり涙目になります。 by涙目になった人よりw

母艦(PC)にてファイルを取得しSDカードにファイルを入れる。

ファイルをgitから取得する

$ cd
$ git clone git://github.com/RobertCNelson/flash-omap.git
$ cd ./flash-omap

SDカードにインストールする

$ sudo ./mk_mmc.sh --mmc /dev/sdb --uboot beagle_cx

ここで、記載している/dev/sdbがSDカードの場所になります。
人によっては、/dev/sdcだったり/dev/mmcblk0しますので
実行する前に一度かくにんしてみてください。

NANDのデータを消去する。

u-bootの実行でとめます。

・・・
Hit any key to stop autoboot:  0 <- ここでEnterなどを押してautobootを止めます。
OMAP3 beagleboard.org #           <- このプロンプトがu-bootのプロンプトになります。

NANDの消去の実行

nand erase 260000 20000

完了したら、ここで電源を落とします。

x-load/u-bootのNANDの書き込み

SDカードをいれてておきます。
USERボタンを押しながら電源投入。
そのままUSERボタンをホールド状態にする。
u-bootのカウントダウンが0になれば、USERボタンを離す。
コマンドプロンプトの点滅が出れば、update完了です。

起動時のログが変わっていることを確認してみましょう。
わたしの場合は、この様にへんこうされました。
(旧)
U-Boot 2009.11-rc1-00601-g3aa4b51 (Jan 05 2010 - 20:56:38)
(新)
U-Boot SPL 2011.12-00005-g0a44c98 (Feb 13 2012 - 18:49:45)

BeagleBoard DE Ubuntu (SDカードにイメージのインストール)

BeagleBoardUbuntu のイメージをインストールする。

基本は、elinux.org(BeagleBoardUbuntu)に書いてある通りだったりする。

***構成***

使用Host PC OS : Ubuntu12.04
使用BeagleboardBeagleBoard C4 (xMじゃないよw)
USBハブ : USB2.0ハブ4ポート(¥700ぐらい)
USB/LAN変換 : USB2.0 有線LANアダプタ(¥1,000ぐらい)
BeagleBoard用シリアルケーブル : BBC01(¥1,600ぐらい 高!)
SDカード : 8GbyteSDカード(最小で4GBは欲しい)

Ubuntu 11.10最小構成のプレインストールイメージをSDカードに作成する。

Host PC(Ubuntu)での作業になります。

  • プレビルドイメージの取得
$ wget http://rcn-ee.net/deb/rootfs/oneiric/ubuntu-11.10-r6-minimal-armel.tar.xz
    • wgetをinstallしていない場合は、
$ sudo apt-get install wget

を実行する。


  • ダウンロードファイルの解凍

bzip2をまず取得したのち、解凍

$ sudo apt-get install bzip2
$ tar xJf ubuntu-11.10-r6-minimal-armel.tar.xz


  • 解凍先へ移動
$ cd ./ubuntu-11.10-r5-minimal-armel/


  • SDカードにインストールする。
  1. SDカードがどこにあるかを調査する。(分かってる人は読み飛ばして)
$ sudo ./setup_sdcard.sh --probe-mmc

Are you sure? I Don't see [/dev/idontknow], here is what I do see...

fdisk -l:
Disk /dev/sda: 53.7 GB, 53687091200 bytes
Disk /dev/sdb: 7948 MB, 7948206080 bytes

mount:
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
/dev/sdb1 on /media/3239-3836 type vfat (rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,flush)

ここでは、
/dev/sda が母艦のファイルシステムがあるHDD
/dev/sdb がSDカード(8GB)になります。

人によっては、/dev/mmcblk0 だったりするので各自の環境で確認してみてください。

  1. SDカードをアンマウント
$ sudo umount /dev/sdb1

(ここでは、上記の/dev/sdb1になります。)

$ df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda1             49448752   6305620  40631212  14% /
none                   1026580       280   1026300   1% /dev
none                   1030820       224   1030596   1% /dev/shm
none                   1030820        88   1030732   1% /var/run
none                   1030820         0   1030820   0% /var/lock
none                   1030820         0   1030820   0% /lib/init/rw
shared               1953382396 766780772 1186601624  40% /media/sf_shared
   ←マウントされていないことを確認。
  1. インストール前に下記のコマンドを実行
$ sudo apt-get install uboot-mkimage wget pv dosfstools btrfs-tools parted

母艦にインストールされていないとインストールスクリプトを実行しても下記のエラーが出ます。

Your System is Missing some dependencies
Ubuntu/Debian: sudo apt-get install uboot-mkimage wget pv dosfstools btrfs-tools parted
Fedora: as root: yum install uboot-tools wget pv dosfstools btrfs-progs parted
Gentoo: emerge u-boot-tools wget pv dosfstools btrfs-progs parted
  1. SDカードにイメージをインストール
$ sudo ./setup_sdcard.sh --mmc /dev/sdb --uboot beagle_cx

※/dev/sdb (sdb1ではない。)に BeagleBoard Ver.C4用のイメージをインストール。

 (usage)
 sudo ./setup_sdcard.sh --mmc /dev/sdX --uboot "board"
 
 /dev/sdX ・・・SDカードの場所
 "board"  ・・・BeagleBoard Ax/Bx   - beagle_bx
                BeagleBoard Cx      - beagle_cx
                BeagleBoard xMA/B/C - beagle_xm
                BeagleBone Ax       - bone
    1. 下記にインストールログを晒しておきます。
I see...
fdisk -l:
Disk /dev/sda: 53.7 GB, 53687091200 bytes
Disk /dev/sdb: 7948 MB, 7948206080 bytes

mount:
/dev/sda1 on / type ext4 (rw,errors=remount-ro)

Are you 100% sure, on selecting [/dev/sdb] (y/n)? y  ← SDカード全領域つかっちゃうよ?OKならyを入れる。

Downloading Device's Bootloader
-----------------------------
64 bytes from rcn-ee.net (69.163.149.169): icmp_seq=1 ttl=50 time=163 ms
2012-03-13 00:04:27 URL:http://rcn-ee.net/deb/tools/latest/bootloader [4846/4846] -> "/tmp/tmp.d1cJP0cMFi/dl/bootloader" [1]
2012-03-13 00:04:28 URL:http://rcn-ee.net/deb/tools/beagleboard/MLO-beagleboard-v2011.12-r1 [44104/44104] -> "/tmp/tmp.d1cJP0cMFi/dl/MLO-beagleboard-v2011.12-r1" [1]
SPL Bootloader: MLO-beagleboard-v2011.12-r1
2012-03-13 00:04:31 URL:http://rcn-ee.net/deb/tools/beagleboard/u-boot-beagleboard-v2011.12-r1.img [330372/330372] -> "/tmp/tmp.d1cJP0cMFi/dl/u-boot-beagleboard-v2011.12-r1.img" [1]
UBOOT Bootloader: u-boot-beagleboard-v2011.12-r1.img

Unmounting Partitions
-----------------------------

Using fdisk to create BOOT Partition
-----------------------------

警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
      強く推奨します。 and change display units to
         sectors (command 'u').

コマンド (m でヘルプ): コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
パーティション番号 (1-4): 最初 シリンダ (1-1021, 初期値 1): Last シリンダ, +シリンダ数 or +size{K,M,G} (1-1021, 初期値 1021): 
コマンド (m でヘルプ): 選択した領域 1
16進数コード (L コマンドでコードリスト表示): 領域のシステムタイプを 1 から e (W95 FAT16 (LBA)) に変更しました

コマンド (m でヘルプ): 
ディスク /dev/sdb: 7948 MB, 7948206080 バイト
ヘッド 245, セクタ 62, シリンダ 1021
Units = シリンダ数 of 15190 * 512 = 7777280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x0008d997

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1               1          10       75919    e  W95 FAT16 (LBA)

コマンド (m でヘルプ): パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。

警告: DOS 6.x パーティションを作成、または変更してしまった場合は、
fdisk マニュアルの追加情報ページを参照してください。
ディスクを同期しています。
Setting Boot Partition's Boot Flag
-----------------------------
Creating rootfs ext4 Partition
-----------------------------
Formating Boot Partition
-----------------------------
mkfs.vfat 3.0.7 (24 Dec 2009)
Formating rootfs Partition as ext4
-----------------------------
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=rootfs
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
480496 inodes, 1921492 blocks
96074 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1971322880
59 block groups
32768 blocks per group, 32768 fragments per group
8144 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information:  done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
Populating Boot Partition
-----------------------------
`/tmp/tmp.d1cJP0cMFi/dl/MLO-beagleboard-v2011.12-r1' -> `/tmp/tmp.d1cJP0cMFi/disk/MLO'
`/tmp/tmp.d1cJP0cMFi/dl/u-boot-beagleboard-v2011.12-r1.img' -> `/tmp/tmp.d1cJP0cMFi/disk/u-boot.img'
Using mkimage to create uImage
-----------------------------
Image Name:   3.2.3-x4
Created:      Tue Mar 13 00:06:21 2012
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3014464 Bytes = 2943.81 kB = 2.87 MB
Load Address: 0x80008000
Entry Point:  0x80008000
Using mkimage to create uInitrd
-----------------------------
Image Name:   initramfs
Created:      Tue Mar 13 00:06:23 2012
Image Type:   ARM Linux RAMDisk Image (uncompressed)
Data Size:    3087289 Bytes = 3014.93 kB = 2.94 MB
Load Address: 0x00000000
Entry Point:  0x00000000
Copying uEnv.txt based boot scripts to Boot Partition
-----------------------------
`/tmp/tmp.d1cJP0cMFi/bootscripts/normal.cmd' -> `/tmp/tmp.d1cJP0cMFi/disk/uEnv.txt'
bootfile=uImage
bootinitrd=uInitrd
address_uimage=0x80300000
address_uinitrd=0x81600000

vram=12MB

console=ttyO2,115200n8

defaultdisplay=dvi
dvimode=1280x720MR-16@60

mmcroot=/dev/mmcblk0p2 ro
mmcrootfstype=ext4 rootwait fixrtc
optargs=console=tty0

mmc_load_uimage=fatload mmc 0:1 ${address_uimage} ${bootfile}
mmc_load_uinitrd=fatload mmc 0:1 ${address_uinitrd} ${bootinitrd}

mmcargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} buddy2=${buddy2} camera=${camera} vram=${vram} omapfb.mode=${defaultdisplay}:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype} musb_hdrc.fifo_mode=5

loaduimage=run mmc_load_uimage; run mmc_load_uinitrd; echo Booting from mmc ...; run mmcargs; bootm ${address_uimage} ${address_uinitrd}
-----------------------------
`/tmp/tmp.d1cJP0cMFi/readme.txt' -> `/tmp/tmp.d1cJP0cMFi/disk/tools/readme.txt'
`/tmp/tmp.d1cJP0cMFi/update_boot_files.sh' -> `/tmp/tmp.d1cJP0cMFi/disk/tools/update_boot_files.sh'
`/tmp/tmp.d1cJP0cMFi/minimal_xfce.sh' -> `/tmp/tmp.d1cJP0cMFi/disk/tools/minimal_xfce.sh'
`/tmp/tmp.d1cJP0cMFi/get_chrome.sh' -> `/tmp/tmp.d1cJP0cMFi/disk/tools/get_chrome.sh'
Finished populating Boot Partition
-----------------------------
Populating rootfs Partition
Please be patient, this may take a few minutes, as its transfering a lot of files..
-----------------------------
 383MB 0:03:00 [2.12MB/s] [=========================================================>] 100%            
Transfer of Base Rootfs Complete, syncing to disk
-----------------------------
Tweak: On selected board, theres no guarantee eth0 is connected or exists, so removing boot assumption...
-----------------------------
Finished populating rootfs Partition
-----------------------------
setup_sdcard.sh script complete

とりあえず、これでオシマイ。
次は、シリアルから起動して、初期設定を行うまでを記載していきます。

[Qt] QtCreatorのコンパイラにMicrosoft Visual C++ Compilerを追加する

Microsoft Visual C++ Compilerを追加する

Windows板のQtSDKには、C++のコンパイラとして、
MinGWが含まれているのですがSDKパッケージ(v1.1.3)に含まれている
QtのCreator(v2.3.1)は、Microsoft Visual Studioのコンパイラ
使用して構築されています。
(どこかで見たのですが、確かVS2008だったはず。)


この為、QtDesignerプラグインを作成して登録する場合には
VSコンパイラでコンパイルしたものしか駄目みたいです。
(ここで、1week程度はまってたwwww)


ここでは、無償公開された統合開発ツールである
Visual Studio Express Editionを使用します。
Adding Qt Designer Plugins(To use Qt Designer plugins~)
VIVA Freeeeeeeeeee!!!!!!


Visual Studio 2010 Express Editionが最新版ですが、
上記の事もあり、Visual Studio 2008 Express Edition
を今回使用しました。

f:id:sazus:20111122005427p:image:w400
ダウンロード先:
Visual Studio 2008 Express Edition


Visual C++ 2008 Express Editionのインストール

DAEMON Tools等で
VS2008ExpressWithSP1JPNX1504866.iso
をマウントまたは、CDに焼いてインストール。
f:id:sazus:20111122005428p:image:w400
Visual C++ 2008 Express Editionを選択。
あとは、よしなにインスコ。

環境変数の追加

デスクトップのコンピュータ
右クリック プロパティを選択
システムの詳細設定を選択
f:id:sazus:20111122005429p:image:w400

システムのプロパティの 詳細設定タブ
f:id:sazus:20111122005430p:image:w400

環境変数をクリック。
f:id:sazus:20111122005431p:image:w400

変数名: INCLUDE
変数値: C:\Program Files\Microsoft Visual Studio 9.0\VC\include;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include;
変数名: LIB
変数値: C:\Program Files\Microsoft Visual Studio 9.0\VC\lib;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib;

を追加する。

環境変数を追加しないと・・・

コンパイル時に以下のようなエラーになるので
環境変数は、確認したほうがいいかも
(ここでも、1~2時間程度はまってたのは内緒wwww)
f:id:sazus:20111122005432p:image:w400

jom 1.0.6 - empower your cores

command faild with exit code 2
command faild with exit code 2
プロセス "C:\QtSDK\QtCreator\bin\jom.exe"はコード2で終了しました。
プロジェクト ***をビルド中にエラー(ターゲット: デスクトップ)
ビルドステップ'Make'実行中

(正直、コンパイルのログだけだと意味不明orz)
ビルドの問題点を参照して、エラーの原因を確認
f:id:sazus:20111122005433p:image:w400
これで、includeのパスが通っていないことが分かる。

Qt4.7.4 for Desktop - MSVC2008(Qt SDK)の確認

QtCreatorを起動。
ツール→オプション
Qt4およびツールチェインに
MSVCが自動検出されているのを確認する。
f:id:sazus:20111122005434p:image:w400
f:id:sazus:20111122005435p:image:w400
f:id:sazus:20111122005436p:image:w400
上記では、デバッガが認識されていませんが、
32 ビット版 Debugging Tools for Windows
をインストールする事により、認識されます。
f:id:sazus:20111122005437p:image:w400


これで、やっとカスタムプラグインを作成できるw
Adding Qt Designer Plugins