シリアル通信により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[,bbbbpnf]というフォーマットで記述しろと書かれている。ここで、ttySは、シリアル通信に利用するデバイスの指定であり、bbbbはボーレート、pはパリティ、nはデータビット数、fはフロー制御指定である。
今回の指定値の場合、"デバイスは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上でリアルタイムに監視出来るようになった。