2013/07/14(日)LInux開発入門(外部URL参照)

初学者のためのLinux起動シーケンス概要

題名はもっともらしいですが、とりあえずURL貼っておくだけで。。。
Linux kernelが起動するまで、と、起動してからユーザランドに渡るまで、
ユーザランドの起動処理、くらいに分類できるかな、と思います。
最後のユーザランド起動処理の手前までは、Androidも一緒でしょう。(未確認)

京都マイクロコンピュータ様のblogリンクが多いのは、それを見てまとめておこうと感じたからです(^^;
他にもネタが出てきたら追加しいこうと思います。オレオレメモってやつですね(ぉ

起動シーケンス(uboot/barebox)

ちょうどこの切り替わりに遭遇していました。
昔からのマイコンは、外部メモリからbootしていましたよね。
ワンタイムROM、UVEPROM、EEPROM・・・と来ていますね。

昨今は原低のため、外部記憶にSD card/NAND Flashのみという構成を取るようになってきているので、
SoC内のMaskROMに埋め込まれているbootloaderから起動してくれます。
このへんの設定は、SoC次第ですし、boot modeでNORからの起動するようなものもいます。
かならずMaskROMからしか起動しないのもきた気がする。
U-bootのデバッグ

ユーザランドの処理(Linux版)

initrd有効の場合は、initramの/linuxrcから起動したはず。
process id=1として、最初に起動されるのは、kernel parameterにinit=で指定したもの、
それがなければ、/sbin/initの順にチェックして、rootfsがmount出来なかったり、init実行ファイルが
なければ、OOPS吐いて止まります。ポーティング作業とか疲れてくるとよく見かけます(謎

ユーザランドの処理(Android版)

Androidのinit処理の流れ。Linuxの普通?のinitとはフローが違うので参考に。
いきなり渡されて流用できるとは思っていなかったからなぁ。こちらと別のblogを参考にさせていただいた記憶が…。
Androidのinit

その他紹介したい記事

「組み込みエンジニアのためのLinux入門 仮想メモリ編」

kernel documentも見ておきましょう。最後はソースコードが正義です。。

LInux開発入門

2013/06/09linux::入門編import
冒頭から逃げを書いておきますが・・・
手探り状態、読者対象が具体的に見えない状況下で記載を始めます。
昨今、マトモな出版物も増えてきているので、需要がないかもしれませんが、少しでも道標になれば幸いです。

Linux OSを用いた開発

以前までは、組み込みといえばuITRON系のRTOSが幅をきかせていましたが、
プロセッサ能力向上・メモリ単価の減少、要求要件の拡大などの要因により、
見直されてきているように思います。
最も影響があるのはNetwork Protocol Stackや、複数プラットフォームで共通的に使えるソフトでしょう。

もちろん、ITRON系のリソースも現役です。少ないROM/RAM、軽量なマイコンでも動くので、住み分けができるでしょう。
より低機能であればOSレスもありますし、畑は広大です。

さておき、ひとことでLinux OS開発といっても、OSはもよとり、コンパイラ・アセンブラ・リンカその他ツール類すべてがOpen Source Softwareを使用します。自らソースコードを元に開発環境や実行環境を用意することができます。MicrosoftのVisual Cのように、コンパイラに対価を支払うのとは対照的ですが、何か問題が起きたとき、起きそうなとき、それを知るための方法を、どのように確保するのか、が課題となります。これを商売にしている会社もありますね。

構成

以下に、クロス開発環境を前提としたソフトの構成例を記します。
開発ツールを買えば、裏ではこれらのソフトを準備してくれたりします。
MSDOSやWindows、商用UNIXでやってきた方には、高い金でコンパイラや統合開発環境を買った記憶があることでしょう。

Linux_SW_001.png


黄色い部分が、ターゲットに載せるべきものです。
右下にある、libraryを除く開発ツールは、必須ではありません。必要に応じてセルフ開発環境やデバッグツールを取り込むのがよいでしょう。

ubuntoやdebianの各arch向けディストリを使う場合は、セルフ環境も必要になりそうな気はします。いや、基本はバイナリインストールになっているしょうか。

ベンダ提供

あえてドライバ・アプリのところへ、ベンダ提供〜を記載しました。
実務で使っていると、必ずしもすべてをopenにしているのでは無いですから、ね。各社の製造ソフトに関しても、GPL伝播していないものは公開義務を負いませんから公開されることは無いです。GPLv2までの場合は、その再配布責任を追うことから、なんらかの手段で製品で使用したtarballなどの提供を受けることができます。
液晶テレビ・レコーダ・STB・そのほかそれっぽい家電の説明書を眺めてみれば、Open Source使用の旨と、その製品で使用したものの入手方法が記載されているでしょう。
尤も、オンラインでさくっと手に入るところもあれば、電話問い合わせ・郵送による配送もあります。
エンドユーザから公開の依頼が頻繁にはないのでしょう、かねぇ?

ライセンスの話が出てきましたが、これだけで深いネタになります。
僕も把握しきれておらず、法的な問題になる場合は判例を調べた上で判断したほうが良いでしょう。
個人で楽しむ分にも、価値が認められ、公開義務を追うような作りをした場合は、開示を迫る人がでてくるかもしれません。

toolchain

いわゆるコンパイル環境、です。ソースコードをターゲットで動くバイナリに変換します。
最近は LLVMというのが注目を集めているようです?

汎用性を考慮されたソフトの配布では、Makefileを利用していることでしょう。
また、autoconfや独自のconfigrationツールを用意して、buildするホスト環境差分を自動的に検出・適切に変更するような手段を提供しています。

しばらくしてわかったこと

何事も過去の経緯を知ることが理解への早道に繋がることがあります。同じようなものがなぜ複数存在するのか、ディストリビューションのそれぞれの目的、本当に全てが無料なのか。製品に搭載するために必要なことは?などなど。いまだにわからない事だらけですが、所詮個人がわかる範囲なんてのはしれてるわけで。

必要なとき、必要なところで、短時間でほしい情報に辿りつけるハナ・直感力を持てるようにしておくのが、対策となろうかと思います。もしくは大まかに畑を分割して、担当範囲を分けておくか、です。ですよね・・・?
後半は妄想でしかないので...

2013/05/22(水)DisplayLink社のチップを使う

DisplayLink社のUSB-Display出力インタフェースは、kernel mode driverが
main lineに投入されている。

以下を信用するならば、ubuntuでは標準で投入されているようだ。
http://cateee.net/lkddb/web-lkddb/FB_UDL.html
http://whitesc3.blog7.fc2.com/blog-entry-106.html

更新頻度が低いのと、有効活用?のため、ちまちま更新しておくかな...

x86-64環境

PCに接続してデバイス情報を見てみる。kernel driverも認識しているけれども、
どうもうまく表示されない。
今回はなんとか画像を表示したい、てことで、libdloで簡易確認。
ディスプレイ解像度1280x1024設定では、ディスプレイがついてこなかった。
テストプログラムを1024x768に強制指定して何とか動く程度。
自動では解像度の認識をせず、1600x1200にしようとしてくれた。無念。
突貫工事ができるスキルも欲しいですね。あとで綺麗にしないといけないので、
メモは重要・・・。そして尾蔵入り(ェー
Bus 002 Device 008: ID 17e9:032e Newnham Research 

T:  Bus=02 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#=  8 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=17e9 ProdID=032e Rev=01.02
S:  Manufacturer=DisplayLink
S:  Product=I-O DATA USB-RGB_D2
S:  SerialNumber=0031A9
C:  #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=udlfb
リンク先メモ
http://libdlo.freedesktop.org/wiki/
Libdlo
Working version (git): http://cgit.freedesktop.org/libdlo/
http://whitesc3.blog7.fc2.com/blog-category-13.html

libdlo,libusb,libusb-compat

BuildRootでもパッケージとして提供されているので、チェックするだけ。
古いものだと入っていないかもしれないので、そのへんは適当に拝借すると良い。

2013/05/18(土)ubunto12.01TLS install

メインマシンのWin7が不調になってきたのと、buildまわすのに仮想マシンがきついので
思い切ってメインマシンにLinux OSを持ってきた。
本家から64bit版のinstall diskを持ってきてインストール。GUIでサクサク…。
$ uname -a
Linux UD02Ubuntu 3.5.0-30-generic #51~precise1-Ubuntu SMP Wed May 15 08:48:19 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
winとちがって、64bitの恩恵が受けられるのはprocess空間のメモリサイズのようで、
物理メモリは4GBを越えても認識。利用される模様。

まぁ時代の流れってことで、64bit環境になれておきましょう、ということにしましょう(ぉ

日常利用ソフトの用意

chromeインストール

sudo apt-get install libxss1
sudo dpkg -i google-chrome-stable_current_amd64.deb

普段使いのコマンド

よもやtreeが無いとは思わなかった.. orz
sudo apt-get install tree

mikutter

twitter clientとして。Ruby + ruby-gtk2が必要なので、Ubuntu11ではソースインストールが必要ぽい。
サイトから付ぃアルを拾ってきて、展開する。Ruby-gtk2入れておけば実行される。

usr/local/bin/mikutter/

ruby

http://jurakudai.blog92.fc2.com/blog-entry-19.html
http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz/
$ wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
$ ./configure -prefix=/usr/local
$ make
$ make install
$ sudo make install
$ tar xf ruby-2.0.0-p195.tar.bz2 
$ cd ruby-2.0.0-p195/

$ ./configure --prefix=/home/yuichi/vroot
$ make
$ make test
$ make install


http://ruby-gnome2.sourceforge.jp/ja/

ほか

これからvimになれていきましょう
sudo apt-get install vim


cross compiler

$ sudo apt-get install ia32-libs ia32-libs-gtk
$ sh arm-2011.03-41-arm-none-linux-gnueabi.bin
っと、インストール前に環境がアカン言われますね。
The installer has detected that your system uses the dash shell
as /bin/sh.  This shell is not supported by the installer.
You can work around this problem by changing /bin/sh to be a
symbolic link to a supported shell such as bash.
For example, on Ubuntu systems, execute this shell command:
   % sudo dpkg-reconfigure -plow dash
   Install as /bin/sh? No
Please refer to the Getting Started guide for more information,
or contact CodeSourcery Support for assistance.
$ ./CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc --version
arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2011.03-41) 4.5.2
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
最新は、以下の版になる模様。環境混在も厄介だけど、どうするかな-。
少し様子見してみるか。Coretex-A9をターゲットと考えると、新しいほうが初期の不具合が落ちてるかな...?
Sourcery CodeBench Lite 2013.05-24
This release was made on 7 May 2013.

git

最新版に追いついていないけれども、とりあえず手を抜いてapt-getしておく。
不都合が出はじめたら移行を考えます(こればっかりかよ)
sudo apt-get install git
[b:git-completion]は、関連パッケージでinstallされる模様。
入らなければ、以下のように個別に追加...
sudo apt-get install bash-completion

$HOME/.profile に、次の行を追加
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi
参考:
https://github.com/bobthecow/git-flow-completion/wiki/Install-Bash-git-completion

2013/04/21(日)TLブクマ

ブックマーク

ジャンル小分けしてblog書いていくのはキツいですね...
linux/VM系のネタなのでこちらへ.

uARM

TLで楽しそうなことがあったので回収.
8bitマイコンでARM emulateして Linuxうごかそうぜ、というcoolなネタ.
Linux on an 8-bit micro?

経歴を見てみると納得というか、VMwareに関わっていてgoogleに雇用してもらえるようなsoftware developperですな.
VM作る参考ネタにもなるので、エンジョイしましょう(ぉ

昔、ワンパスのZ80ディスアセンブラ作ったのと似たようなかんじですね。
淡々とバイナリを拾って、命令を解釈して、内部レジスタやペリフェラルに埋め込んでいく。
コプロやペリフェラルの挙動をエミュレートするのがキモになるでしょうし、
ハードウェアとの協調設計を考慮すると、絶妙な割り込みタイミングとか、クリティカルな挙動を
どこまでエミュレートできるか、ですね。インプリマターな部分もあるので、
チップベンダがOK出してこないと、コンパチにはならないのかもしれませんが。

まぁ、そんなこと気になるような実装するなよと云う気がするのですが…