2012年2月26日日曜日

Armadillo-440でgdbserverを使う

Armadillo-440でgdbserverを使うときのメモです。
440にmicroSDで
linux-a400-1.08.bin.gz
debian-lenny-armel-1.tgz
debian-lenny-armel-2.tgz
debian-lenny-armel-3.tgz
debian-lenny-armel-4.tgz
debian-lenny-armel-5.tgz
debian-lenny-armel-a4x0.tgz
を使って構築後にgdbserverを起動させます。

1. gdbserverのインストール(ボード側)
# apt-get update
# apt-get upgrade
の実行後
# apt-get install gdb でインストールします。

2. デバッグ用プログラムの準備
開発用PCでdebug.cを用意します。
[debug.c]


#include
#include

int main(){
char *ptr = NULL;
strcpy(ptr, "hello debug\n");
return 0;
}



ターゲット側:デバッグ情報のない実行ファイル
開発側:デバッグ情報のある実行ファイル

開発側でまずターゲット用の実行ファイル作成(デバッグ -gなし)をして転送しておきます。
開発側
$ arm-linux-gnueabi-gcc -o debug debug.c
$ lftp ターゲットIP -u guest
~> cd /tmp                 
cd 成功、cwd=/tmp                
lftp guest@ターゲットIP:/tmp> put debug
7446 bytes transferred          

今度はデバッグ情報のある実行ファイルを用意します。
開発側
$ gcc -Wall -g -o debug debug.c
またarm-linux-gdb を実行できる場所においておきます

3. デバッグ開始
[ターゲット側]
debian:/tmp# gdbserver 開発側IP:1234 hello
Process hello created; pid = 4800
Listening on port 1234

[開発側]
$ arm-linux-gdb debug
(gdb) target remote ターゲット側IP:1234

このときターゲット側で
Remote debugging from host 開発側IP がでている

ただし今回は
(gdb) target remote ターゲットのIP:1234
Remote debugging using ターゲットのIP:1234
[New Thread 4829]
Cannot access memory at address 0x0
0x400007c0 in ?? ()
と出てしまいgdbの実行ができない。

継続的に検証です。

2012年2月25日土曜日

yumでMoodleをインストール

MoodleがEPELを使ってインストールするメモです。

1. EPELの設定
# wget http://ftp.riken.jp/Linux/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm
# rpm -Uvh epel-release-5-4.noarch.rpm

2. Moodleのインストール
# yum -y --enablerepo=epel install moodle-ja

3. Moodleの初期設定
# vi /var/www/moodle/web/config.php


$CFG->dbtype    = 'mysql'; // Valid values include: mysql postgres7
$CFG->dbhost    = 'localhost';
$CFG->dbname    = 'moodle';     ←設定
$CFG->dbuser    = 'moodle';       ←設定
$CFG->dbpass    = 'moodle';       ←設定
$CFG->dbpersist =  false;
$CFG->prefix    = 'mdl_';

$CFG->wwwroot   = 'http://サーバのIPまたはホスト名/moodle';



4. MySQLの設定
今回はphpMyAdminで設定します。
ログイン-> 特権->新しいユーザ を作ります。3で設定したものと同じものを作成します
ユーザ名:moodle
ホスト:すべてのホスト
パスワード:任意
ユーザ専用データベース:同名のデータベースを作成しすべての特権を与える

5. Moodleにアクセス
# service httpd restart
http://サーバのIPアドレスまたはホスト名/moodle/









無人モードを有効にすることですぐに完了します。

CentOS:yumでphpMyAdminのインストール

CentOSでyumを利用しphpMyAdminのインストールするメモです。
テキストに書いてありますが、使うことも多いので書いておきます。
テキストでは
88ページ:リポジトリの追加→63ページ:phpMyAdminのインストール
Apache,MySQLは設定済みとします。テキストの前にのっているので確認してください。

1. rpmforgeの設定(デフォルト以外のリポジトリを入れておきます。
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
(できるだけ最新版にしてください)
# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
# vi /etc/yum.repos.d/rpmforge.repo
8行目 enabled = 0 としておく。デフォルトでは用いない設定

2. phpMyAdminのインストール
yum --enablerepo=rpmforge install phpMyAdmin

これで
http://サーバアドレス/phpMyAdmin/ でアクセスできます。

※もしMySQLのパスワードでひっかかったら
http://sdc.sangi.jp/2009/12/it.html
を参照

2012年2月19日日曜日

gdbを使ったデバッグメモ

gdbを使ったデバッグメモ

1. 次のコードを作成します。
あえてNULLポインタをいれて、エラーがでるようにしてあります

[debug.c]
#include
#include

int main(void){
    char *ptr = NULL;
    strcpy( ptr, "Hello Debug\n");
    printf("%s", ptr);
    return 0;
}

2. 準備
コアダンプするため、ユーザの制限を外しておきます
$ ulimit -c unlimited

3. コンパイル
-gはデバッグする場合は必要です。
-Wallは-Wオプションがすべて(すべてで警告をだします)
$ gcc -g -Wall -o debug debug.c

4. 実行してみます。
$ ./debug
セグメンテーション違反です (core dumped)

5. gdbを使ってデバッグしてみます。
$ gdb debug core
GNU gdb 6.8-debian
...
warning: Can't read pathname for load map: Input/output error.
Reading symbols from /lib/i686/cmov/libc.so.6...done.
Loaded symbols for /lib/i686/cmov/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./debug'.
Program terminated with signal 11, Segmentation fault.
[New process 3012]
#0  0xb7eeec15 in memcpy () from /lib/i686/cmov/libc.so.6

さらに詳しく見ていきます
(gdb) where
#0  0xb7eeec15 in memcpy () from /lib/i686/cmov/libc.so.6
#1  0x08048407 in main () at debug.c:6

6行目に問題があるようです
(gdb) up
#1  0x08048407 in main () at debug.c:6
6        strcpy( ptr, "Hello Debug\n");

ptrの内容を出してみます。
(gdb) print ptr
$1 = 0x0

6. gdbでソースを細かく見ていきます。listでソースを表示し、runで実行します。
(gdb) list
1    #include
2    #include
3   
4    int main(void){
5        char *ptr = NULL;
6        strcpy( ptr, "Hello Debug\n");
7        printf("%s", ptr);
8        return 0;
9    }

(gdb) run
Starting program: /home/atmark/workspace/work/debug

Program received signal SIGSEGV, Segmentation fault.
0xb7e27c15 in memcpy () from /lib/i686/cmov/libc.so.6

7. ブレークポイントを設定してみます。nextで1行ずつ実行、continueで最後まで実行します。
(gdb) break 6
Breakpoint 1 at 0x80483ec: file debug.c, line 6.
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/atmark/workspace/work/debug

Breakpoint 1, main () at debug.c:6
6        strcpy( ptr, "Hello Debug\n");
(gdb) next

Program received signal SIGSEGV, Segmentation fault.
0xb7e91c15 in memcpy () from /lib/i686/cmov/libc.so.6

(gdb) continue
Continuing.

Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.

2012年2月16日木曜日

Galaxy tab sc01で画面ロックをさせない

Galaxy tab sc01で画面ロックをさせないようにします。

メニュー->設定->位置情報とセキュリティ->スクリーンロック設定->なし を選択

メニュー->設定->画面設定->バックライト消灯->1時間(最長) を選択

2012年2月11日土曜日

MacでのJavaのパス

Mac10.7でインストールしたときのJavaのパスは
/System/Library/java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin
でした。

2012年2月6日月曜日

MacのVirtualBoxでATDE3を動かす

MacにVirtualboxをインストールして、ATDEを動かすときのメモです。
Macでの仮想化は大きくわけてVMware Fusion、Parallels Desktop for Mac(ともに8000円位?),VirtualBoxの3つが有名です。
今回はMac上でATDEを動かすことが目的です。
VMware Fusionは以前にトライアルで試したことがあり、動作実証済み(シリアル接続もOK)ですが、有料ですのでVirtualboxで試してみました。
ATDEはVMwareイメージですが、VirtualboxもVMwareイメージに対応しています。
ただしVirtualboxは32ビット版にしか対応していません(VMwareは64ビットOK)

1. Virtualboxをダウンロード、インストール(デフォルトOK)
https://www.virtualbox.org/

2. ATDE3をダウンロード、解凍
http://armadillo.atmark-techno.com/atde

3. Virtualboxで仮想イメージを atde3.vmdkを指定、起動

4. X serverが起動できないとエラーになる。次を実行
ログイン:atmark
VirtualBoxの「デバイス」-「Guest Addisionsのインストール」メニューを選択
$ sudo mount -t iso9660 /dev/hdc /mnt    
sudo /mnt/VBoxLinuxAdditions.run
$ sudo reboot 
 これでGUIがみれます。

参考資料には
VirtualBox を使用した場合、シリアルポートの使用に一部問題があります。今回は、仮想マシン
(ATDE3)上のシリアルポートは使用しないでください。
とあります。要検証です。


参考資料
http://www.plathome.co.jp/seminar/pdf/install_atde3_virtualbox.pdf


2012/02/07 追記
VirtualBoxのATDE3からシリアル接続を検証してみました。
IO DATA USB-RSAQ5を使っています。
5. Oracle VM VirtualBox Extension Packをダウンロードしてインストールします。

6. 仮想マシンを停止後、
設定->ポート->USB->USB2.0コントローラを有効化

7. USBを接続->2番目の+のボタンをクリックし、有効にしたいものを選択


8. 仮想マシンを起動し、USBが有効になっていることを確認

9. ターゲットボードへ接続
http://sdc.sangi.jp/2011/12/linuxscreen.html を参考


参考:http://d.hatena.ne.jp/isogame/20110526

2012年2月4日土曜日

Java基本:Appletでのアクションリスナー設定

Javaの授業でやったアクションリスナーの処理の振り分けです。
線形探索で対象データを探し出し、add,edit,deleteをやっています。
どこのアクションリスナーが呼び出されたか、actionPerformed(ActionEvent e)で
if(e.getSource() == fafter1){
として処理を分けています。


import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Sec5_1_3 extends Applet implements ActionListener{

TextField fbefore1,fafter1,fbefore2, fafter2,tf;
int [] a = {5, 4, 6, 7, -5, -4, 2};

public void init(){
add(new Label("どのデータを更新しますか"));
fbefore1 = new TextField("",4);
add(fbefore1);

add(new Label("変更後の値は"));
fafter1 = new TextField("",4);
add(fafter1);
fafter1.addActionListener(this);

add(new Label("どのデータの後ろに追加しますか"));
fbefore2 = new TextField("",4);
add(fbefore2);

add(new Label("挿入するデータの値は"));
fafter2 = new TextField("",4);
add(fafter2);
fafter2.addActionListener(this);

add(new Label("どのデータを削除しますか"));
tf = new TextField("",4);
add(tf);
tf.addActionListener(this);
}

public void actionPerformed(ActionEvent e){

if(e.getSource() == fafter1){
int x = Integer.parseInt(fbefore1.getText());
int y = Integer.parseInt(fafter1.getText());


for(int i=0; i < a.length; i++){
if(a[i] == x){
a[i]=y;
break;
}
}
System.out.println("更新");
  for(int i=0; i < a.length; i++){
  System.out.print(a[i]+" ");
}
  System.out.println("");
}
else if(e.getSource() == fafter2){
int x = Integer.parseInt(fbefore2.getText());
int y = Integer.parseInt(fafter2.getText());

for(int i=0; i < a.length; i++){
if(a[i] == x){
for(int j=a.length - 1; j>i+1; j--){
a[j] = a[j-1];
}
a[i+1]=y;
break;
}
}
System.out.println("挿入");
for(int i=0; i < a.length; i++){
System.out.print(a[i]+" ");
}
System.out.println("");

}

else if(e.getSource() == tf){

int z = Integer.parseInt(tf.getText());

for(int i =0; i< a.length;i++){
if(a[i] ==z){
for(int j=i; j
a[j]  = a[j+1];
}
break;
}
}
System.out.println("削除");
for(int i=0; i < a.length; i++){
System.out.print(a[i]+" ");
}
System.out.println("");
}

}
}

2012年2月2日木曜日

Eclipse CDT利用

Eclipse CDTを利用する時のメモです。

Eclipse for Javaの場合でCygwinやgccがある場合
(検証はMacでやっています。xcode導入時にgccも入った状態です)
1. ヘルプ->新規ソフトウェアのインストール->サイトでIndigo指定->プログラム言語->C/C++ Development Tools をインストール

2. パースペクティブをC/C++に切り替える

3. 新規->Cプロジェクト->実行可能(空のプロジェクト)

4. プロジェクトを右クリックし、新規->ソースファイル(拡張子.c必要)

5. ビルド(トンカチの図)->実行 でOKです。

2012/02/04 追加
cygwinのパスとして
c:\cygwin\bin;c:\cygwin\sbin;c:\cygwin\usr\bin;c:\cygwin\usr\sbin;
をpathに設定します。