さえきさんの ホームページ  -  Armadillo のページ -


その6 - カーネル再構築 と ユーザランドプログラムの再構成-


さて colinuxの活用で より本格的な組み込みLinuxの応用装置を と 進展させます

組み込み装置としては コンソールキーボード操作無しで 電源オンオフのみでの起動・終了の出来ることが
必須の要件 と 考えています  その実現には  カーネルの再構築に加えて RAMDISK上だけで動作をする
ユーザランドプログラムの再構成までも 敢えて手を染めるという大きな決断をすることになりました
(すごい挑戦です − まだまだ 修行不足で どうなるやら ということではありますが...)

起動時に オンボードフラッシュのユーザランドイメージをramdisk上に展開マウントして自動実行させる形を
取ることになりますが 一気に完成させることは出来ませんので 何度も繰り返しの加工・確認手順をとります
このとき オンボードフラッシュへの書き込みを繰り返す手順には 時間と根気を要します 結局 諦めました

追加・加工を楽にする手法として 起動時 一時的に外部CFメモリをマウントし CF上の動作確認済みの
プログラムをramdisk上にコピーしてゆき 完成されたイメージに出来たところで CFメモリーをアンマウントし
実動作時はramdiskでけで動いている形をとりました  これらの手順を自動的に行わせる方法を考えよう  そこで

まず カーネルを再構築し オンボードフラッシュ内の空きエリア(mtdblock3)を読み書き可能に設定しました
厄介なオンボードフラッシュ上のユーザランドイメージの書き換えは繰り返さず このmtdblock3を一時マウントし
そのプログラムをramdisk上に取り込み そして 切り離し そのプログラムをramディスク上で実行させるという
起動イニシャル部分だけの加工をしたユーザランドイメージを作成してオンボードフラッシュに収納 加工修正を
mtdblock3のプログラムの改修だけで 全体動作を確認しながら CFメモリのプログラムの追加コピーにしました

その目処がついてきましたので ここに その様子を記す次第です:

この先 最近 PC/104規格対応拡張ボードのなかに PLA搭載のすごいものもあって入手し 検討をすすめています
それには ドライバソフトの開発が伴いますし また PLAを加工して.. と 次なる目標も固まりつつあります


A.colinuxの活用 − クロスコンパイル カーネルの再構築

その5 - colinuxでのクロスコンパイル環境 -によって Armadilloよりずっと高速なパソコンでの
試しのhello.cのコンパイルは 一瞬でした 早いです  そして  実行可を確認 (これ 肝心)
armadilloの方で 実行です −− 当然ですけど これも OK !! ホッ です

armadilloでntfdサーバを機能させたくて Armadilloのカーネルを再構築しようと試みました 
カーネルソースを Armadillo HP から DL し、make menuconfig を指示したところ 先へ進みません
対話式にパラメータを設定するための 追加のインストール apt-get install libncurses5-dev
要しました このあと make dep 、make r 、make clean は順調に進み ImageImage.gzを得ました

念願のカーネル再構築にも目処がつき この開発環境は 今後大いに活用できます  さらに
加えて ArmadilloHPにあるように    LinuxからオンボードFlashを読み書きするを参考にしながら
オンボードFlashサポートを有効にしたカーネルの作成も 行いました  これで カーネルについてはOKだ
カーネルの再構築_20060117.txtに記録を残してあります

B.ユーザランドの再構成 − コンパクトなLinuxで、 Busyboxって?

さて CFメモリをHD(ハードディスク)代りにつかって Debian WoodyのレベルのLINUXで 楽しんできたが
組み込み装置としての応用では このままでは支障がありそう  電源が突然落とされても びくともしない
頑丈さを 持たせねば実用とは言えない  CFメモリのマウントをさせたままでは電源を突然には落とせない
シャットダウン処理をどう行わせるか いろいろ考え方はありそうですが  今回のやり方は 起動時だけは
少なくも 人が介在している ということで 様子を見ていられるので 一時的なCFメモリのマウントはし
立ち上がりで ramdiskだけのマウントにされる  そのあとは たとえ無人になっても 安定な動作を続ける
そのような 応用レベルでまとめてみることにしました

Armadilloのramdiskは6.5Mバイトほどで そこに展開する圧縮イメージ保持のオンボードのフラッシュメモリは
2.5Mバイトほど という制約がある  そこで ArmadilloHPのダウンロードページから 2.4Mバイトの
initrd-1.1.2.img.gz
を 使わせて頂くことにしました  展開しますと ramdisk上で6MBのイメージです

さて このコンパクトなLINUXは どんな性格なんでしょう?    Armadilloのソフトマニュアルにあるように
"のみ"とか"小さな"でして 制約のある代物です  シェルは ashというもので bashと比べると かなり違う
というのが実感です  これまでに作成した bashのシェルスクリプトは 頭を ashに変えただけでは まず
動かない という感じでした  いろいろ調べまして Busyboxなるソフトの存在を確認しました
シャープさんのザウルスに関係するHPがかなり参考になりました  リナザウ というんですね
コマンドも ほとんどが busyboxというなかで扱われる ちょっと 機能が少ないもののようです

bashで書いたシェルスクリプトを幾つか書き換えてゆくうちに ashの性質は少しは見えてきた だが awkが
無いのは ちょっと参った  最近のバージョンのbusyboxには awkも備わっているようで ソースからコンパイル
すれば とも思いましたが サイズが大きくなるようで 途中で諦め (colinuxでのクロスコンパイルは高速でいいが
大掛かりなソースからのbuildでは ときとして途中で引っ掛かる経験を何度もしました ソースになにか手を加えて
ゆかないと なかなかスンナリとは行かないようです  また busyboxもバージョン新しいようで やっては見たい
が。 サイズは かなり大きくなってオンボードフラッシュには載らなくなる? とか考え 今回はArmadillo-Linuxは
かなりコンパクトで これに 手を加えてゆくのも いいのかな ‥ ということにしました) 足りないのは追加で
行けるものかと これまでwoodyDebianに入っていたmawkというのを awkとしてコピーしてみたら動作しましたので
そういうことにしました   ところが このあと まだまだ いろいろ.. と コツみたいのがあるようですが

さて 具体的にやったことを記しましょう  ベースのinitrd_imgの様子をみて
まず なぜか 妙なところに かなりでかい無用なのがあったので
home/ftp/lib/ 89904 Dec 20 2001 ld-linux.so.2や903104 Dec 20 2001 libc.so.6を削除、
home/ftp/bin/の407852 Dec 20 2001 lsも削除し 限られたエリアに余裕を確保しました

そして このように  /etc/rc.d/rc.sysinitに kokokara〜kokomadeの追記をしました
# BySae 20060123 kokokara
echo -n "Config by CF_ext.conf : "起動時の動作の様子をコンソールに表示
rm -f /etc/CF_ext.conf
mount -t minix /dev/mtdblock3 /mntここで オンボードフラッシュ フリー部マウント
if [ -x /mnt/CF_ext.conf ] ;then
cp -a /mnt/CF_ext.conf /etc/そこのファイルを ramdiskにコピー
fi
umount /mnt   ここで マウント解除
if [ -x /etc/CF_ext.conf ];then
. /etc/CF_ext.conf      ramdisk上で コピーしたプログラムを実行
echo -n " ** Revised by CF_ext.conf **: "
check_statusその処理の様子を コンソールに表示
else
echo -n " No conf_file, not revised: "
check_status
fi
# kokomade By Sae

つまり mtdblock3に CFから拾ってくる拡張作業手順のプログラム、CF_ext.confが置かれることを想定していて
この追加部分は それを ramdisk上の/etc/CF_confにコピーし そして それを実行する という形になっています
これだけのことで  ユーザランド書き換え  の繰り返しは 終わりに出来ました  結構な効率アップです

オンボードフラッシュ上の/devmtdblock3に置いた CF_ext.conf と _CFのrc.99.auto_start は 以下のとおりです
saekisan@armadillo:/$ cat /mnt/CF_ext.conf
#/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
TZ=JST-9
. /etc/rc.d/rc.functions
echo -n "Mounting CF Memory;: "動作の様子をコンソールに表示
mkdir /ext    ramdisk上に /ext と
chmod 777 /ext
mkdir /ext_CF       /ext_CF ディレクトリを作成
chmod 777 /ext_CF
mount -t ext2 /dev/hda1 /ext/ext/にCFメモリを一時マウントし
if [ -d /ext/_CF ];then
cp -a /ext/_CF/* /ext_CF/  _CFの記入内容を ramdiskにコピー
cp -a /ext/bin/bash /bin/  potatoには無いbashを取り込み
cp -a /ext/_CF/rc.99.auto_start /etc/rc.d/rc.start/ 自動起動の部分も加えた後
echo -n "** Added Prog from CF **"    コンソールに表示
check_status
else
echo -n "No CF_Prog"
check_status
fi
umount /ext    一時マウントのCFメモリを開放 
   _CFの内容で加筆修正 の自動実行 おわる
−−−−−−
saekisan@armadillo:/$ cat /_CF/rc.99.auto_start これは
#!/bin/sh    /etc/rc.d/rc.sysinitの最後で
. /etc/rc.d/rc.functions   実行される 自動起動ですね
PATH=/bin:/sbin:/usr/bin:/usr/sbin
TZ=JST-9
echo -n "Starting auto_start script: "
cd /ext_CF/
./loop &   この例では この自動実行
# ntpdate 133.100.9.2
check_status
saekisan@armadillo:/$

これで JP1オフでarmadilloパワーオンで 最終的に ramdiskだけで ./loop が自動起動し
以前作成しHPにても紹介しているリモート操作装置 にメニュー表示して 操作待ち になっています

一方 JP1オンでパワーオンしますと CFマウントでのpotato開発バージョンでarmadilloが起動します
httpdサーバも立ち上がっていて 処理させるプログラムの開発は Webブラウザでの対話編集なども
可能です  確認済んだところで  ramdiskだけの動作で 組み込み機器らしく? 動作する という次第
(ここまで固まれば すべてを織り込んだオンボードフラッシュイメージにし CFなし起動も出来ますね)


lddとかfileコマンドで解析しながら コンパイル作業を億劫がらずに進めることにしましょう Potatoではありますが
Armadilloで file や ldd とか objdump -x や objcopy --strip-all が使用できるなんて うれしいことです
現在 CFは256MBを使用しています パーティションを2つ作り hda1でpotatoが働き hda2には次項で
触れていますが カーネルソースとか参照資料なども置いてあります 参照資料は オンラインHELPのように
外部PCのブラウザでリファーも出来る仕掛けにしてあります  電子化操作マニュアルですね  いいでしょう


C.ドライバの整備  - ソースから ht2020ボード用デバイスドライバ を作成

これまでに 一応の動作を確認してきたが potato化で カーネルも再構築し 2.4.21バージョンにしました
この結果 2.4.16で動作していたドライバが カーネル依存性があるようで 動作せず という現象に出会ってしまった
そこで 改めて potatoの開発バージョンを導入したことでもあり 手順をはっきりさせるべく 記録を ここに残します

potatoにて /dev/hda2を/ext/とマウントdev/にht2020.cやmakefileなど置いている  また nasもnfsマウントして 
カーネルソース展開済みを置いておき makefile の INCLUDEDIR=/EXT_NAS/... と書き換え セルフでコンパイルし 
新たに ht2020.o を得た  (colinuxのクロスではどうも途中でエラーを出してくる エラー表示内容の部分は 確かに 
前のカーネルのその部分とは若干書き換えてあって それが問題なのか?  セルフではすんなりノーエラーで作業終わって
.oが出来ていました ところで  カーネルソースは linux-2.4.21-rmk1-armadillo-2.tgz 01-Jun-2004 18:46 34.9M ですが 
これ展開すると170MBほどのどでかいファイルです  このままではCF上にはセーブ無理だし ドライバの開発はたまに
しか行なわないでしょう そのときはnfsマウントすればいいのではとも思ったが 中味調べて 本当に必要なものは?
を探った .../include下だけですと 24Mちょっとですね これだけ 拾っておけばいいはずで /dev/hda2/下に置きました

それで 以下のようにソースのDIR指定を書き換え make やってみた  うまく行きました  同じサイズの ht2020.oが
コンパイルに結構時間が掛かりますが-1分? が 出来ました  これで potatoのみで本当のセルフが可能になりました
−− make ファイルの中味 −−
INCLUDEDIR = ../kernel_source/linux-2.4.21-rmk1-armadillo-2/include <-ここ 作った
#INCLUDEDIR = /ext_nas/linux-2.4.21-rmk1-armadillo-2/include <-カーネルソース全体なら
#CC = arm-linux-gcc <-ここは
CC = gcc <-このようにセルフに
CFLAGS = -D__KERNEL__ -I$(INCLUDEDIR) \
-Wall -Wstrict-prototypes -Wno-trigraphs \
-O2 -fno-strict-aliasing -fno-common -pipe \
-mapcs-32 -march=armv4 -mtune=arm7tdmi -mshort-load-bytes \
-DMODULE
OBJS = ht2020.o
all: $(OBJS)
ht2020: ht2020.c ht2020.h
$(CC) $< -o $@
clean:
rm -f *.o *~ core *.bak
−−−−−−−


ところで http://download.atmark-techno.com/armadillo/readme.txt は:以下のようになっています
   
downloadのディレクトリ構成 9:52 2006/01/17 再整理してみた
|
|-- armadillo-linux                   ArmadilloLinuxユーザランド
|    |
|    |-- cf -- rootimage-1.1.2.tgz 02-Jul-2003 20:20 2.4M CompactFlash用ルートイメージ(tgz圧縮)
|    |
|    |-- initrd                            オンボードFlash用initrdイメージ
|    |  |--initrd-1.1.2.img.gz 02-Jul-2003 20:20 2.4M
|    |  `--initrd_ttyAM1-1.1.2.img.gz 02-Jul-2003 20:20 2.4M
|    |
|    |-- old_version                 以前のバージョン
|    |
|    `-- source   ソースファイル群
|        |-- application   アプリケーションソース(tgz圧縮)とビルドメモ
|        |-- from-debian   debian2.2(arm)と共用のバイナリ(tgz圧縮)
|        `-- other   その他の設定ファイルなど(tgz圧縮)
| 
上のリストの太字のinitrd-1.1.2.img.gz を 貰ってきましてベースにしました このソースファイルのメモを
読みますと (上のリストの最後の部分にもその様子が記されていますように)コンパクトにまとめる為に 幾つかの
目的毎に取捨選択を行なっています  ということは このあと 実際の応用の場面でも取捨選択を随時行なえるのだ
と 解釈しまして 早速 bashを追加してみたり perlを一時的に持って来てWebアクセスでcgi画面を表示させてみたり
やってみました コマンドやライブラリをコピーしてくるときに 注意深く管理しながらやらないと 動作panicで停止
します その都度原因を探って ほぼ解明できてきたかな? というハッピーなところに漕ぎ着けました

これまで Linuxはディストリビューション毎に差異があることは感じていましたが また 足りないと apt-getという
重宝なコマンドで拾ってきて 積み上げてきました  その成果からちょっとコピーして借りてくる というのは
かなり 虫が良過ぎる感じですね  落とし穴のポイントは 次のようなことのようです:

2006年2月3日午後5時57分 かなり判ってきた  Debian-potatoをDLして
 以下と同じようにチェックした

その結果 オリジナルバージョンでは GLIB2.0と2.1であることが確認できた
apt-getで Woodyのにアップしたときに 更新され GLIB2.2とかが混じり込んできていた
bashにしても 同じことでした  オリジナルのバージョンのbashは サイズも小さく
明らかに別物でした  早速 それで disp_tのbashバージョンのものを動かしたら
ちゃんと動いた  sleepだけは 3e-1は認識されず 3秒毎ということだったので
usleep 300000 と書き直した

これで 必要な perlなども ここから拾ってくればいいということになりました



Armadillo(192.168.1.20)での コンパイルされたファイルの動作の様子 の記録です
    2006/02/03 さえき

Armadillo側での作業のディレクトリで /mnt/saekisan/work です
armadillo:/mnt/saekisan/work# ls -l
-rwxr-xr-x 1 guest guest 4269 Dec 10 16:08 hello  <−このファイルを調査してみます
-rw-r--r-- 1 guest guest 78 Dec 10 15:42 hello.c   これがCのソース

armadillo:/mnt/saekisan/work# file hello           fileコマンド
hello: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically
l inked (uses shared libs), not stripped
armadillo:/mnt/saekisan/work# ldd hello           lddコマンド
libc.so.6 => /lib/libc.so.6 (0x4001d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
armadillo:/mnt/saekisan/work# objdump -x hello       objdump −xコマンド
hello: file format elf32-littlearm             file format elf32-littlearm
hello
architecture: arm, flags 0x00000112:              architecture: arm
EXEC_P, HAS_SYMS, D_PAGED
start address 0x02000288
Program Header:
PHDR off 0x00000034 vaddr 0x02000034 paddr 0x02000034 align 2**2
filesz 0x000000c0 memsz 0x000000c0 flags r-x
INTERP off 0x000000f4 vaddr 0x020000f4 paddr 0x020000f4 align 2**0
filesz 0x00000013 memsz 0x00000013 flags r--
LOAD off 0x00000000 vaddr 0x02000000 paddr 0x02000000 align 2**15
filesz 0x00000422 memsz 0x00000422 flags r-x
LOAD off 0x00000424 vaddr 0x02008424 paddr 0x02008424 align 2**15
filesz 0x000000bc memsz 0x000000bc flags rw-
DYNAMIC off 0x00000458 vaddr 0x02008458 paddr 0x02008458 align 2**2
filesz 0x00000088 memsz 0x00000088 flags rw-
NOTE off 0x00000110 vaddr 0x02000110 paddr 0x02000110 align 2**4
filesz 0x00000020 memsz 0x00000020 flags r--
Dynamic Section:
NEEDED libc.so.6                    NEEDED libc.so.6ですね
INIT 0x2000230
FINI 0x20003fc
HASH 0x2000130
STRTAB 0x20001a8
SYMTAB 0x2000158
STRSZ 0x39
SYMENT 0x10
DEBUG 0x0
PLTGOT 0x2008440
PLTRELSZ 0x18
PLTREL 0x11
JMPREL 0x2000218
VERNEED 0x20001f8
VERNEEDNUM 0x1
VERSYM 0x20001ec
Version References:
required from libc.so.6:                    required from libc.so.6
0x0d696910 0x00 02 GLIBC_2.0                  GLIBC_2.0 ということだ
private flags = 0: [APCS-32] [FPA float format]
Sections:
Idx Name Size VMA LMA File off Algn
0 .interp 00000013 020000f4 020000f4 000000f4 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.ABI-tag 00000020 02000110 02000110 00000110 2**4
CONTENTS, ALLOC, LOAD, READONLY, DATA, LINK_ONCE_SAME_CONTENTS
2 .hash 00000028 02000130 02000130 00000130 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .dynsym 00000050 02000158 02000158 00000158 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .dynstr 00000043 020001a8 020001a8 000001a8 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .gnu.version 0000000a 020001ec 020001ec 000001ec 2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .gnu.version_r 00000020 020001f8 020001f8 000001f8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .rel.plt 00000018 02000218 02000218 00000218 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .init 00000018 02000230 02000230 00000230 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
9 .plt 00000040 02000248 02000248 00000248 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
10 .text 00000174 02000288 02000288 00000288 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
11 .fini 00000014 020003fc 020003fc 000003fc 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .rodata 00000012 02000410 02000410 00000410 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
13 .data 0000000c 02008424 02008424 00000424 2**2
CONTENTS, ALLOC, LOAD, DATA
14 .ctors 00000008 02008430 02008430 00000430 2**2
CONTENTS, ALLOC, LOAD, DATA
15 .dtors 00000008 02008438 02008438 00000438 2**2
CONTENTS, ALLOC, LOAD, DATA
16 .got 00000018 02008440 02008440 00000440 2**2
CONTENTS, ALLOC, LOAD, DATA
17 .dynamic 00000088 02008458 02008458 00000458 2**2
CONTENTS, ALLOC, LOAD, DATA
18 .sbss 00000000 020084e0 020084e0 000004e0 2**0
CONTENTS
19 .bss 00000000 020084e0 020084e0 000004e0 2**0
ALLOC
20 .comment 0000011a 00000000 00000000 000004e0 2**0
CONTENTS, READONLY
SYMBOL TABLE:
020000f4 l d .interp 00000000
02000110 l d .note.ABI-tag 00000000
02000130 l d .hash 00000000
02000158 l d .dynsym 00000000
020001a8 l d .dynstr 00000000
020001ec l d .gnu.version 00000000
020001f8 l d .gnu.version_r 00000000
02000218 l d .rel.plt 00000000
02000230 l d .init 00000000
02000248 l d .plt 00000000
02000288 l d .text 00000000
020003fc l d .fini 00000000
02000410 l d .rodata 00000000
02008424 l d .data 00000000
02008430 l d .ctors 00000000
02008438 l d .dtors 00000000
02008440 l d .got 00000000
02008458 l d .dynamic 00000000
020084e0 l d .sbss 00000000
020084e0 l d .bss 00000000
00000000 l d .comment 00000000
00000000 l d *ABS* 00000000
00000000 l d *ABS* 00000000
00000000 l d *ABS* 00000000
020002bc l .text 00000000 gcc2_compiled.
00000000 l df *ABS* 00000000 crtstuff.c
02000384 l .text 00000000 gcc2_compiled.
02000384 l F .text 00000000 __do_global_ctors_aux
02008434 l O .ctors 00000000 __CTOR_END__
020003dc l F .text 00000000 init_dummy
02008430 l O .data 00000000 force_to_data
0200843c l O .dtors 00000000 __DTOR_END__
020003ec l .text 00000000 gcc2_compiled.
00000000 l df *ABS* 00000000 crtstuff.c
020002bc l .text 00000000 gcc2_compiled.
02008428 l O .data 00000000 p.3
02008438 l O .dtors 00000000 __DTOR_LIST__
0200842c l O .data 00000000 completed.4
020002bc l F .text 00000000 __do_global_dtors_aux
02000350 l F .text 00000000 fini_dummy
02008430 l O .data 00000000 force_to_data
02008430 l O .ctors 00000000 __CTOR_LIST__
00000000 l df *ABS* 00000000 hello.c
02000360 l .text 00000000 gcc2_compiled.
02008458 g O .dynamic 00000000 _DYNAMIC
020084e0 g O *ABS* 00000000 _bss_end__
020084e0 g O *ABS* 00000000 __bss_start__
02000230 g F .init 00000000 _init
02000258 F *UND* 000001ec abort@@GLIBC_2.0
00000000 w *UND* 00000000 __deregister_frame_info
020084e0 g O *ABS* 00000000 __bss_end__
02000288 g .text 00000000 _start
020084e0 g O *ABS* 00000000 __bss_start
02000360 g F .text 00000024 main
02000268 F *UND* 00000178 __libc_start_main@@GLIBC_2.0
020084e0 g O *ABS* 00000000 __end__
02008424 w .data 00000000 data_start
02000278 F *UND* 00000040 printf@@GLIBC_2.0
020003fc g F .fini 00000000 _fini
020084e0 g O *ABS* 00000000 _edata
02008440 g O .got 00000000 _GLOBAL_OFFSET_TABLE_
020084e0 g O *ABS* 00000000 _end
02000410 g O .rodata 00000004 _IO_stdin_used
02008424 g O .data 00000000 __data_start
00000000 w *UND* 00000000 __register_frame_info
020003ec w F .text 00000000 __gmon_start__
armadillo:/mnt/saekisan/work# objcopy --strip-all hello hello_strip    stripします
armadillo:/mnt/saekisan/work# ls -l hello:*               l   
-rwxr-xr-x 1 guest guest 4269 Dec 10 16:08 hello      これをstripして
-rw-r--r-- 1 guest guest 78 Dec 10 15:42 hello.c
-rwxr-xr-x 1 guest guest 4325 Dec 10 15:35 hello0
-rwxr-xr-x 1 guest guest 4350 Dec 11 15:56 hello_saekisan
-rw-r--r-- 1 guest guest 146 Dec 10 16:06 hello_saekisan.c
-rwxr-xr-x 1 nobody nogroup 2624 Feb 3 2006 hello_strip   これが出来ました 6割に
armadillo:/mnt/saekisan/work# ./hello_strip
Hello World!         ちゃんと実行しました

armadillo:/mnt/saekisan/work# file hello_strip
hello_strip: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamic
ally linked (uses shared libs), stripped          strippedですね
armadillo:/mnt/saekisan/work# ldd hello_strip
libc.so.6 => /lib/libc.so.6 (0x4001d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
armadillo:/mnt/saekisan/work# objdump -x hello_strip

hello_strip: file format elf32-littlearm
hello_strip
architecture: arm, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x02000288

Program Header:
PHDR off 0x00000034 vaddr 0x02000034 paddr 0x02000034 align 2**2
filesz 0x000000c0 memsz 0x000000c0 flags r-x
INTERP off 0x000000f4 vaddr 0x020000f4 paddr 0x020000f4 align 2**0
filesz 0x00000013 memsz 0x00000013 flags r--
LOAD off 0x00000000 vaddr 0x02000000 paddr 0x02000000 align 2**15
filesz 0x00000422 memsz 0x00000422 flags r-x
LOAD off 0x00000424 vaddr 0x02008424 paddr 0x02008424 align 2**15
filesz 0x000000bc memsz 0x000000bc flags rw-
DYNAMIC off 0x00000458 vaddr 0x02008458 paddr 0x02008458 align 2**2
filesz 0x00000088 memsz 0x00000088 flags rw-
NOTE off 0x00000110 vaddr 0x02000110 paddr 0x02000110 align 2**4
filesz 0x00000020 memsz 0x00000020 flags r--

Dynamic Section:
NEEDED libc.so.6
INIT 0x2000230
FINI 0x20003fc
HASH 0x2000130
STRTAB 0x20001a8
SYMTAB 0x2000158
STRSZ 0x39
SYMENT 0x10
DEBUG 0x0
PLTGOT 0x2008440
PLTRELSZ 0x18
PLTREL 0x11
JMPREL 0x2000218
VERNEED 0x20001f8
VERNEEDNUM 0x1
VERSYM 0x20001ec

Version References:
required from libc.so.6:
0x0d696910 0x00 02 GLIBC_2.0
private flags = 0: [APCS-32] [FPA float format]

Sections:
Idx Name Size VMA LMA File off Algn
0 .interp 00000013 020000f4 020000f4 000000f4 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.ABI-tag 00000020 02000110 02000110 00000110 2**4
CONTENTS, ALLOC, LOAD, READONLY, DATA, LINK_ONCE_SAME_CONTENTS
2 .hash 00000028 02000130 02000130 00000130 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .dynsym 00000050 02000158 02000158 00000158 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .dynstr 00000043 020001a8 020001a8 000001a8 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .gnu.version 0000000a 020001ec 020001ec 000001ec 2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .gnu.version_r 00000020 020001f8 020001f8 000001f8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .rel.plt 00000018 02000218 02000218 00000218 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .init 00000018 02000230 02000230 00000230 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
9 .plt 00000040 02000248 02000248 00000248 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
10 .text 00000174 02000288 02000288 00000288 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
11 .fini 00000014 020003fc 020003fc 000003fc 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .rodata 00000012 02000410 02000410 00000410 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
13 .data 0000000c 02008424 02008424 00000424 2**2
CONTENTS, ALLOC, LOAD, DATA
14 .ctors 00000008 02008430 02008430 00000430 2**2
CONTENTS, ALLOC, LOAD, DATA
15 .dtors 00000008 02008438 02008438 00000438 2**2
CONTENTS, ALLOC, LOAD, DATA
16 .got 00000018 02008440 02008440 00000440 2**2
CONTENTS, ALLOC, LOAD, DATA
17 .dynamic 00000088 02008458 02008458 00000458 2**2
CONTENTS, ALLOC, LOAD, DATA
18 .sbss 00000000 020084e0 020084e0 000004e0 2**0
CONTENTS
19 .bss 00000000 020084e0 020084e0 000004e0 2**0
ALLOC
20 .comment 0000011a 00000000 00000000 000004e0 2**0
CONTENTS, READONLY
SYMBOL TABLE:
no symbols

armadillo:/mnt/saekisan/work#         とりあえず以上です 



−−−−−−−−−−−−−−−−−

以上
−−−−−−−−−−−−−−−−−−−−

  

  作成:2006-2-9 最終更新日:2006-2-27