ホームページ>mini2440>その4・Debianをインストールしてみる
目次
その4・Debianをインストールしてみる
はじめに
現状手詰まりなのと、システムのリカバリ方法を学習したことで原状復帰のメドが立ったことから、mini2440にDebianをインストールしてみることにしました。
なお、今回は主にUbuntu 10.04/14.04マシンとWindows XPマシンを使用しました。(Macは開発ツールのテストのみ。)
また、各バージョンは試行時のもので、最新版とは異なる場合があります。
方針
mini2440にDebian 5.0 lennyをインストールする方法については、以下のサイトに詳しく書かれていることから、その通りに進めさせて頂くこととしました。
(その後は例によって、行き当たりばったりで…(笑)
参考サイト(1):mini2440にDebian環境をインストール
Debian 5.0 lennyをインストールする
参考サイト(1)の通りです。
以下、気になったことのメモなど。
通常、この手の作業は大抵どこかで引っ掛かるものですが、全く問題ありませんでした。
- 事前に開発環境の準備を済ませておく。(自分はUbuntuを別マシンで用意した。)
- 作業は大きく、本体側(UBoot)と、SDカード(カーネルとファイルシステム)に分かれる。
(本体側作業ではUSB転送を行うのにWindowsが必要だが、SDカードはLinux上で作業が完結する。)- 手順はステップバイステップで書かれているので、基本はコピー&ペースト。
(各自の設定に合わせるところは、あらかじめgedit等で編集して、それをコピー&ペースト。)- ファイルシムテムは、参考サイト(1)内のリンクから取得させて頂いた。
- 自分のmini2440は、W35というディスプレイを搭載したモデルで、N35等が240x320(すなわち縦長)であるのに対し、320x240(すなわち横長)という違いがある。
そのため、設定を変更する必要があるが、スペック表が見つからなかったので、とりあえず現物合わせで以下の通りとした。(重要:あくまで現物合わせなので無保証です。再利用される場合は自己責任でお願いします。)追記:改めてググってみたら、以下がヒットしました。(以前は何をチェックしていたのだろう…)(2016.01.14)
arch/arm/mach-s3c2440/mach-mini2440.c 231行目(あたり)
320, 3, 65, 6, /* x timing */ 240, 12, 4, 2, /* y timing */
参考サイト(10):[PATCH] arm mach-s3c2440 mach-mini2440: New LCD-W35i support | Linux | Kernel
- インストール終了後、mini2440にXをインストールの「あると便利なもののインストール>SSHできるようにする」を済ませておくと、いろいろ便利。
高品質の情報を提供頂いている作者様に感謝です。
使用感
ディスプレイの表示範囲の確認のため、USBキーボードを繋いでlsとか打ち込んでみましたが、上記の設定値で全面を使い切る感じです。
(実は、上記値に辿り着くまで、嫌という程ソースの書き換え/カーネルの再作成/コピーを繰り返しました。)
次いで、本題である開発ツールの実行テストを行いました。
<eclipse>
<Qt Creator>
- sshの導入に伴い、リモートシステムが使えるようになったので、試してみた。
- eclipseの設定は、参考サイト(2)の通りだが、あらかじめプラグインの導入が必要。(現状、以下を導入しているが、過不足があるかも。)
・Dynamic Languages Toolkit(リモートマシンとの接続に必要だった?詳細失念)
・C/C++ Development Tools(C/C++開発ツール)
・C/C++ GCC Cross Compiler Support(クロスコンパイル用)
・C/C++ Remote Launch(クロス実行用)
・Remote System Explorer(リモートマシンとの接続用)
- 前回のサンプルを実行したところ、実機で動作することを確認した。
- 通常の実行だとログが一瞬で消えるが、Debug付の方で実行するとログが残ったままとなった。(使い方が正しくない?)
IDE上でソース編集して直ちに実機で動作テスト、というXcode + iOSデバイスっぽいことができるようになったのは魅力があります。
- こちらもssh導入に伴い、前回作成した怪しげなQt(!)を使って実機テストしてみた。
- 当初、デバイスの指定方法がわからなかったが、プロジェクトファイル(.pro)にテキストを書き込む、というGUIツールっぽくないやり方だった。
(参考サイト(2)にも解説があるが、参考サイト(3)(INSTALLSの項)の方が分かり易いかも。)
target.path = /root INSTALLS += target
- 実行結果は、やはりライブラリのエラーで止まる。それも、より深刻。(lennyでは古すぎるということか)
./test1: /usr/lib/libstdc++.so.6: version `CXXABI_ARM_1.3.3' not found (required by /usr/local/Qt4.8.6-arm/lib/libQtGui.so.4) ./test1: /lib/libc.so.6: version `GLIBC_2.9' not found (required by /usr/local/Qt4.8.6-arm/lib/libQtGui.so.4) ./test1: /lib/libc.so.6: version `GLIBC_2.10' not found (required by /usr/local/Qt4.8.6-arm/lib/libQtNetwork.so.4) ./test1: /usr/lib/libstdc++.so.6: version `CXXABI_ARM_1.3.3' not found (required by /usr/local/Qt4.8.6-arm/lib/libQtNetwork.so.4) ./test1: /usr/lib/libstdc++.so.6: version `CXXABI_ARM_1.3.3' not found (required by /usr/local/Qt4.8.6-arm/lib/libQtCore.so.4) ./test1: /lib/libc.so.6: version `GLIBC_2.9' not found (required by /usr/local/Qt4.8.6-arm/lib/libQtCore.so.4)
とはいえ、GUIベースのアプリ作成までは先が長いですが。
Debian 7.0 wheezyに移行する
ひとまず動作する環境は入手したので、後継バージョンへの移行を試みることとしました。
wheezyは(最新ではないが)現行バージョンであり、移行の対象としては妥当と思われます。
パッケージ化されているものはカーネルが3.2ですが、2.6.26以降であればいいという情報を得たことから、まずはこれまでのカーネル(2.6.32)のままとしました。
やり方はlennyと同様、ホストマシンでdebootstrapを実行し、その後実機でsecond-stageを実行することになります。
注:debootstrapは、ホスト側のOSのバージョンによって取得できるバージョンが異なるようです。(/usr/share/debootstrap/scripts/で確認可)ただし、ここで気をつけなければならないのが、second-stageのために実機を起動する際、カーネルのオプションを(参考サイト(1)「ボードでの起動実験」における)初回のものにする、という点です。
メインで使っているUbuntu 10.04はsqueeze迄しか対応していないため、14.04を用いました。
手動でdebootstrapの最新版をインストールすれば、旧OSでもいけるという情報もありましたが、今回それは試していません。
これを二回目のものにする(lennyインストール時にsaveenvしてあるので、何もしないと二回目が適用される)と、runlevelの入力を求められ、何を入力しても先に進まないという事態に陥ります。(当初、これに気付かずに、ドツボにはまりました。)
second-stageを実行したところ、以下のエラーで止まってしまいました。(ググると、どうもバグっぽいです。)初回 setenv bootargs 'console=ttySAC0,115200 noinitrd root=/dev/mmcblk0p2 rootwait=4 rw ip=dhcp init=/bin/sh' 二回目 setenv bootargs 'console=ttySAC0,115200n8 rootdelay=3 root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait'
ここでバグ対策する手もあったのですが、実は検索の最中に度々「QEMU」なる単語を目にしていて、当初は気に留めていなかったのですが、改めて調べ直してみると、CPUのエミュレータであることが分かりました。W: Failure while installing base packages. This will be re-attempted up to five times.
また、その関連でqemu-debootstrapなるものも知りました。これを使うと、ホスト上でARM用パッケージのインストールが(つまりはsecond-stageをホスト上で)できる、ということのようでした。
参考サイト(4):qemu-debootstrapを使ってユーザモードQEMUで動くDockerイメージを作ってみる - ももいろテクノロジー
手間としてはこちらの方が簡便そうだったので、(ダメ元で)qemu-debootstrapを導入して実行してみたところ、インストールまで終了してしまいました。
なので、このファイルシステムをtarしてSDカードに持って行き、(lennyの時に行った)second-stageは省略することとしました。
(その後の「追加の作業」はSDカード上で行いましたが、ホスト上で済ませておいた方がよかったかも。)
実機で起動(カーネルオプションは、上述の二回目のもの)してみると、以下のエラーが延々と出続け、仕方なく強制電源offしました。どうもカーネルのバグらしく、patchが公開されていたりします。
udevd[XXX]: unable to receive ctrl connection: Function not implemented
ですが、以下のサイトに「3分したらプロンプトが」とあったので、待ってみたら本当に出ましたので、現状、ひたすら待つという消極策を取っています。
参考サイト(5):#648325 - udevd[XXX]: unable to receive ctrl connection: Function not implemented - Debian Bug report logspatchの内容は(改めて確認すると)以下のようなシンプルなものだったので、手作業で追加してみたところ、エラーが出なくなりました。(2015.12.26)
参考サイト(9):[ARM] wire up sys_accept4() on ARM · genesi/linux-legacy@a84fac7 · GitHub
さて、ログインしようとしたら、パスワードを要求されてしまいました。
ルートのパスワードは設定していない筈なのに、あれと思ったのですが、パスワードのファイル(/etc/shadow)を書き換えることで入れるようになりました。
参考サイト(6):第4章 認証
あと、(実際にはQt実行時に分かったことですが)以下のエラーが出ました。
これは、以下のサイトに従って.profileを書き換えたところ、解消されました。stdin: is not a tty
参考サイト(7):bash - "stdin: is not a tty" mails for running scripts as cron jobs - Unix & Linux Stack Exchange
また、macからsshしたのですが、以下の警告が出て入れませんでした。これは、mac側の設定をクリアすることで、入れるようになりましたした。
参考サイト(8):SSHサーバーが変わったら - profaim.jp@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ …
最後に確認として、開発ツールの実行テストをしてみました。
eclipseは、lenny同様、前回のサンプルが動作することを確認しました。
Qtは以下の通り出力されました。
このことから、libc.so.6の問題は解決したと見てよさそうですが、エラー原因がQt(のビルド)なのかアプリ本体なのかはまだ不明です。bash: line 1: 2755 Illegal instruction DISPLAY=':0.0' /root/test1
(>その3a・MacでのQtクロス開発できた)(2016.02.10)
以上、紆余曲折はあったものの、とりあえず動く環境は手に入りました。(本当にこれでいいかは、ちょっと怪しいですが…)
おわりに
Debianが動いたことで、拡張性は大幅に向上しました。ソフトウェアの開発環境としても、それなりに使えそうではあります。
Qtが不完全であることが判明したのは一歩前進ですが、依然、完動までのメドが立っていないのは今後の課題です。
(>その3a・MacでのQtクロス開発できた)(2016.01.02)
なお、できるだけ整理して書きましたが、実際の作業は手戻りの嵐でした。
出来上がったシステム(wheezy)は、かなりとっちらかったもので、使っていくうちに問題が出てくるかもしれません。
(まぁ、Linuxのことがよく分からずに、やみくもに手を出しているのがそもそもの問題ですが…)
時間ができたら、続きをやってみたいです。
追記:暫くQtのテストを繰り返していたところ、容量が一杯で書き込めない旨のメッセージが出るようになりました。
変だなと思って調べたら、/var/log/syslogと/var/log/daemon.logが計350MB程度に膨れ上がっていました。
単純に削除してしまうと問題があるようなので、ひとまず4GBのカード(ファイルシステム領域を3倍ぐらいに取ってある)を新規作成して使うようにしました。
とはいえ、こちらでもやがて同じ問題に直面することは明らかなので、何らかの対策が必要になりそうです。(2015.12.26)
お世話になったサイト
有用なソフトウェアおよび貴重な情報をご提供頂いている皆様に、お礼申し上げます。(以下、順不同)
参考サイト(1):mini2440にDebian環境をインストール
参考サイト(2):ARM Cross Compiling with Mac OS X | Wel!s Blog(補足サイト:Illuminux/arm-cross-sysroot · GitHub)
参考サイト(3):Configuring qmake's Environment | Qt 4.8
参考サイト(4):qemu-debootstrapを使ってユーザモードQEMUで動くDockerイメージを作ってみる - ももいろテクノロジー
参考サイト(5):#648325 - udevd[XXX]: unable to receive ctrl connection: Function not implemented - Debian Bug report logs
参考サイト(6):第4章 認証
参考サイト(7):bash - "stdin: is not a tty" mails for running scripts as cron jobs - Unix & Linux Stack Exchange
参考サイト(8):SSHサーバーが変わったら - profaim.jp
参考サイト(9):[ARM] wire up sys_accept4() on ARM · genesi/linux-legacy@a84fac7 · GitHub
参考サイト(10):[PATCH] arm mach-s3c2440 mach-mini2440: New LCD-W35i support | Linux | Kernel
更新履歴
2016.02.10 章番号を変更。
2016.02.10 「Debian 7.0 wheezyに移行する」のQtについての記述を改訂。
2016.01.14 「Debian 5.0 lennyをインストールする」に追記を追加。
2016.01.02 「おわりに」のQtについての記述を改訂。
2015.12.26 「おわりに」に追記を追加。
2015.12.26 「Debian 7.0 wheezyに移行する」にpatchのその後と参考サイト(9)を追加。
2015.12.09 新規作成
[Home] [MacSoft] [Donation] [History]