シリアル通信によりLinuxを監視する
BeagleBoardには、RS232-Cコネクタが搭載されており、ここからRS232-CケーブルでホストPCと接続することにより、ホストPCからAndroidのカーネルであるLinuxのログを監視することが出来るようになる。今回は、その方法を紹介する。
Linuxシリアル通信設定
AndroidのカーネルとなっているLinuxは、U-Bootを使ってブートされている。
現在、私がU-Boot向けに使用しているブートスクリプトは以下の通り:
mmc init fatload mmc 1 80200000 uImage setenv bootargs 'console=ttyS2,115200n8 androidboot.console=ttyS2 buddy=none mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init rw mpurate=1000 omap_vout.vid1_static_vrfb_alloc=y vram=16M omapfb.vram=0:8M,1:4M,2:4M omapfb.mode=dvi:1024x768MR-16@60 omapdss.def_disp=dvi' bootm 0x80200000
このスクリプトは、androside.comのページを参考にさせて頂いています。
スクリプト中の、
setenv bootargs 'console=ttyS2,115200n8 androidboot.console=ttyS2 buddy=none ...'
と設定している行が今回重要な部分。これは、U-Bootの環境変数bootargsを設定しているのだが、この変数で設定された値は、カーネルパラメータとしてLinuxカーネルに渡たる(U-Bootドキュメントの環境変数ページ参照)。
パラメータの中で、"console=ttyS2,115200n8"という部分が、シリアル通信の設定を行っている部分。Linuxのカーネルパラメータのドキュメントのconsoleに関する説明を参照すると、consoleの値は、ttyS
今回の指定値の場合、"デバイスはttyS2、ボーレート115200、パリティなし、データビット8ビット、フロー制御なし"となる。
シリアル通信向けコンソールのインストールと設定
シリアル通信の情報をホストPC上で閲覧するためには、専用のコンソールが必要である。
今回ホストPCとして利用しているのは、Ubuntu 10.04.1 LTSなので、シリアルコンソールとしてminicomを利用することにする。
minicomがまだインストールされていない場合は、以下のインストールコマンドにより、インストールをする:
> sudo apt-get install minicom
インストールが完了したら、以下のコマンドを実行して、minicomの設定を行う:
> sudo LANG=C minicom -s
configurationメニューから"Serial port setup"を選択する。
シリアル通信の設定は、以下の通りにする:
A - Serial Device : /dev/ttyS2
B - Lockfile Location : /var/lock
C - Callin Program :
D - Callout Program :
E - Bps/Par/Bits : 115200 8N1
F - Hardware Flow Control : No
G - Software Flow Control : No
今回は、ホストPC側も/dev/ttyS2を利用するものとする。
minicom上でのログの監視
設定が完了したら、ホスト側で指定したデバイスに該当するRS-232Cポートと、BeagleBoardのポートをRS-232Cケーブルで接続する。
続いて、以下のコマンドを実行してminicomを起動し、BeagleBoardに電源を投入すると、minicom上でログを監視することが出来る:
> LANG=C minicom Welcome to minicom 2.4 OPTIONS: I18n Compiled on Jan 25 2010, 07:02:36. Port /dev/ttyS2 Press CTRL-A Z for help on special keys Texas Instruments X-Loader 1.47 (Jan 14 2011 - 15:43:37) Unsupported Chip! Beagle xM Rev A Starting X-loader on MMC Reading boot sector 208660 Bytes Read from MMC Starting OS Bootloader from MMC... Starting OS Bootloader... U-Boot 2010.06 (Jan 14 2011 - 15:46:27) OMAP34xx/35xx-GP ES2.0, CPU-OPP2 L3-165MHz OMAP3 Beagle board + LPDDR/NAND I2C: ready DRAM: 384 MiB NAND: 0 MiB *** Warning - bad CRC or NAND, using default environment In: serial Out: serial Err: serial Beagle xM Rev A Die ID #32da00019ff80000015eeaa10202a006 Hit any key to stop autoboot: 0 mmc1 is available reading boot.scr 418 bytes read Running bootscript from mmc ... ## Executing script at 82000000 mmc1 is available reading uImage 2457412 bytes read ## Booting kernel from Legacy Image at 80200000 ... Image Name: Linux-2.6.32 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2457348 Bytes = 2.3 MiB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Uncompressing Linux............................................................. Linux version 2.6.32 (hide@hide-desktop) (gcc version 4.4.0 (GCC) ) #58 Sat Jun1 CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7f CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache Machine: OMAP3 Beagle Board Memory policy: ECC disabled, Data cache writeback OMAP3630/DM3730 ES1.0 (l2cache iva sgx neon isp 192mhz_clk ) SRAM: Mapped pa 0x40200000 to va 0xfe400000 size: 0x100000 Reserving 16777216 bytes SDRAM for VRAM . . .
これでLinuxが出力するログをホストPC上でリアルタイムに監視出来るようになった。