組み込みLinuxカーネルの構築時にこれだけは知っておかなければならない項目

1. 組み込みLinuxカーネルの構築時にこれだけは知っておかなければならない項目

1.1 コンフィグレーションの項目

それでは、カーネルのコンフィグレーションの項目を順番にみていきましょう。もちろん、誌面の都合によりすべてを網羅することは出来ませんので、最低限知っておかなければならない項目について説明します。本原稿執筆時点では、バージョン2.4.18がリリースされていますのでそれをもとに説明します。
まず、前回と同様に図1のように入力してコンフィグレーション画面を表示させましょう(図2)。ここで、なぜmake xconfigではないのかと、いきなり疑問に思われた方もいるかと思います。なぜならば、make xconfigの場合、アーキテクチャにも依存しますがコンフィグレーションスクリプト自身にバグがある場合が認められるためです。本章では、コンフィグレーションの信頼性を重視するために、make menuconfigを使用することとします(コンフィグレーションに慣れてくると、マウス操作を伴うmake xconfigよりもmake menuconfigのほうが作業効率が良くなります)。

図1. make menuconfig

$ tar jxvf linux-2.4.18.tar.bz2
$ mv linux linux-2.4.18
$ cd linux-2.4.18
$ cp arch/ppc/configs/mbx_defconfig .config
$ make ARCH=ppc menuconfig

図2. コンフィグレーション画面(make ARCH=ppc menuconfigの場合)

menuconfig_ppc.png

前回の復習を兼ねて表1にコンフィグレーションの項目例を示します。
まず、最初の項目である「Code maturity level options」では、「Prompt for development and/or incomplete code/drivers」という項目のみが選択できます。これは、開発中もしくは実験的に実装されている機能を表示させるかどうかを選択する項目です。ちなみに、HELPを選択するとその項目の説明が表示されます。デフォルトでは、*印がつき、ON(選択)になっていますが、これをOFF(非選択)にすると、(EXPERIMENTAL)という記述がついている項目(表1を参照)が表示されなくなります。例えば、「The IPv6 protocol (EXPERIMENTAL)」という項目が表示されなくなり、IPv6に関するコンフィグレーションが出来ないようになります。よって、IPv6を使用する必要がある方は、これをONにしておかなければいけません。

表1. コンフィグレーションの項目例(MBX860の場合)

コンフィグレーション項目内容
Code maturity level options Prompt for development and/or incomplete code/drivers
Loadable module support Enable loadable module support
Set version information on all module symbols
Kernel module loader
Platform support Processor Type
Machine Type
Symmetric multi-processing support
Math emulation
General setup High memory support (experimental)
QSpan PCI
Networking support
Sysctl support
System V IPC
BSD Process Accounting
Kernel support for MISC binaries
Support for hot-pluggable devices
Parallel port support
 Support for /dev/rtc
 Default bootloader kernel arguments
Memory Technology Devices(MTD) Memory Technology Device (MTD) support
Plug and Play configuration Plug and Play support
Block devices Normal PC floppy disk support
Loopback device support
Network block device support
RAM disk support
Multi-device support(RAID and LVM) Multiple devices driver support (RAID and LVM)
Networking options Packet socket
Netlink device emulation (NEW)
Network packet filtering (replaces ipchains)
Socket Filtering
Unix domain sockets
TCP/IP networking
 IP: multicasting
 IP: advanced router
 IP: kernel level autoconfiguration
  IP: DHCP support
  IP: BOOTP support
  IP: RARP support
 IP: tunneling
 IP: GRE tunnels over IP
 IP: ARP daemon support (EXPERIMENTAL) (NEW)
 IP: TCP Explicit Congestion Notification support
 IP: TCP syncookie support (disabled per default)
 The IPv6 protocol (EXPERIMENTAL)
 Kernel httpd acceleration (EXPERIMENTAL)
Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)
802.1Q VLAN Support (EXPERIMENTAL)
The IPX protocol
Appletalk protocol support
DECnet Support
802.1d Ethernet Bridging
CCITT X.25 Packet Layer (EXPERIMENTAL)
LAPB Data Link Driver (EXPERIMENTAL)
802.2 LLC (EXPERIMENTAL)
Frame Diverter (EXPERIMENTAL)
Acorn Econet/AUN protocols (EXPERIMENTAL)
WAN router
Fast switching (read help!)
Forwarding between high speed interfaces
QoS and/or fair queueing
ATA/IDE/MFM/RLL support ATA/IDE/MFM/RLL support
SCSI support SCSI support
Network device support Network device support
ARCnet devices
 Dummy net driver support
 Bonding driver support
 EQL (serial line load balancing) support
 Universal TUN/TAP device driver support
 Ethertap network tap (OBSOLETE) (NEW)
Ethernet (10 or 100Mbit)
Ethernet (1000 Mbit)
 FDDI driver support
 HIPPI driver support (EXPERIMENTAL)
 PPP (point-to-point protocol) support
 SLIP (serial line) support
Wireless LAN (non-hamradio)
 Token Ring devices
 Fibre Channel driver support
 Traffic Shaper (EXPERIMENTAL)
Wan interfaces
Amateur Radio support Amateur Radio support
IrDA(infrared) support IrDA subsystem support
ISDN subsystem ISDN support
Old CD-ROM drivers(not SCSI, not IDE) Support non-SCSI/IDE/ATAPI CDROM drives
Console drivers Frame-buffer support
Input core support Input core support
Macintosh device drivers  
Character devices Virtual terminal
Standard/generic (8250/16550 and compatible UARTs) serial support
Non-standard serial port support
Unix98 PTY support
I2C support
Mice
Joysticks
QIC-02 tape support
Watchdog Cards
/dev/nvram support
Enhanced Real Time Clock Support
Double Talk PC internal speech card support
Siemens R3964 line discipline
Applicom intelligent fieldbus card support
Ftape, the floppy tape device driver
/dev/agpgart (AGP Support)
Direct Rendering Manager (XFree86 DRI support)
Multimedia devices Video For Linux
File systems Quota support
Kernel automounter support
Kernel automounter version 4 support (also supports v3)
Reiserfs support
ADFS file system support
Amiga FFS file system support (EXPERIMENTAL)
Apple Macintosh file system support (EXPERIMENTAL)
BFS file system support (EXPERIMENTAL)
Ext3 journalling file system support (EXPERIMENTAL) (NEW)
DOS FAT fs support
EFS file system support (read only) (EXPERIMENTAL)
Compressed ROM file system support
Virtual memory file system support (former shm fs)
Simple RAM-based file system support
ISO 9660 CDROM file system support
Minix fs support
FreeVxFS file system support (VERITAS VxFS(TM) compatible)
NTFS file system support (read only)
OS/2 HPFS file system support
/proc file system support
/dev file system support (EXPERIMENTAL)
QNX4 file system support (read only) (EXPERIMENTAL)
ROM file system support
Second extended fs support
System V/Xenix/V7/Coherent file system support
UDF file system support (read only)
UFS file system support (read only)
Network File Systems
Partition Types
Sound Sound card support
USB support USB Controllers
USB Device Class drivers
SCSI support is needed for USB Storage
USB Human Interface Devices (HID)
Input core support is needed for USB HID
USB Imaging devices
USB Multimedia devices
Video4Linux support is needed for USB Multimedia device support
USB Network adaptors
USB port drivers
USB Serial Converter support
USB Miscellaneous drivers
Bluetooth support Bluetooth subsystem support
Kernel hacking Magic SysRq key
Include kgdb kernel debugger
Include xmon kernel debugger

1.2 Loadable module support

ここでは、「Enable loadable module support」という項目をONにすると、「Set version information on all module symbols」と「Kernel module loader」という項目が選択できるようになります。カーネルがブートする度に、接続されているデバイスが異なるような場合、デバイスドライバも異なりますので、カーネルの実行時のメモリサイズを最小限にするためにもこれをサポートすべきでしょう。ただ、カーネルのブート時にモジュールのロードという作業が発生しますので、あるシステムにとってはオーバーへッドになるかもしれません。一般的な組み込みシステムの場合、デバイスが変わることはほとんどありませんので、デバイスドライバはモジュールにせずにカーネル内に組み込むべきでしょう。

1.3 Platform support

ここでは、Processor Typeによって異なるメニューが表示されます。PowerPCの場合は、8xx、4xx、6xx/7xx/74xx/8260などというようにわけられています(図3, 図4, 図5)。8xxを選択すると、MPC823,850,860などを搭載するボード(MBX860ボードなど)がMachine Type欄で選択できるようになります。4xxを選択すると、IBM PowerPC 403GCX, 405GPを搭載するOak, Walnutボードが選択できるようになります。6xx/7xx/74xx/8260を選択すると、PowerMacなどを選択できるようになります。PowerPCの場合、ここで注目すべき項目は、Altivec supportという項目でしょう。これにより、Altivec拡張命令を使用することが出来るようになり、Altivecレジスタの読み書きはもちろん、AltivecイネーブルビットをONにすることができます。つまり、ユーザーのプロセスは、Altivec命令を実行出来るようになります。いわゆるG4と呼ばれているPowerPC 74xxを利用しているユーザーには、このオプションが特に有効でしょう。というのも、今までAltivecテクノロジーを使いたくても、一般の商用RTOSではAltivec命令に対応していないがためにその性能を十分に引き出すことが難しかったのですが、LinuxカーネルがAltivec命令をサポートしたことにより、PowerPCを採用した画像処理システムなどでLinuxを採用する意義が一気に高まりました。

図3. Platformの選択画面(8xxの場合)

menuconfig_8xx.png

図4. Platformの選択画面(4xxの場合)

menuconfig_4xx.png

図5. Platformの選択画面(6xx/7xx/74xx/8260の場合)

menuconfig_6xx.png

1.4 General setup

ここで最低限必要なのは、「Networking support」と「System V IPC」の二つでしょう。これらにより、ネットワーク機能とプロセス間通信を利用出来るようになります。パラレルポート接続のプリンタを接続する場合や、IEEE1284が必要な場合は、「Parallel port support」もONにします。

1.5 Memory Technology Devices (MTD)

MBX860のコンフィグレーションではデフォルトは非選択となっていますが、一般的な組み込みシステム向けのボードでは、ROMからブートしてROM上のファイルシステムをマウントするのが一般的です。よって、そのような場合にはこの項目を選択し、「Flash ROMを使用する場合、どのチップを使用するのか?使用するならば、NAND型Flash ROMを使用するのか?」などを細かく設定します。

1.6 Block devices

ここで重要なのは、「RAM disk support」という項目でしょう。その名の通り、RAMディスクを使用するかどうかの設定ができます。これをONにすると「Default RAM disk size (NEW)」(デフォルトでは4096KBに設定)と「Initial RAM disk (initrd) support」(デフォルトでは非選択)という項目が表示されるようになります。カーネルのブート後にROMファイルシステムやネットワークファイルシステムなどをマウントする場合、これは特に必要ありませんが、カーネルのブート時にイニシャルラムディスク(initrd)をマウントさせる場合、必要となります。

1.7 Multi-device support (RAID and LVM)

RAIDコントローラなどを使用せずに、RAIDシステムを組みたい場合は、「Multiple devices driver support (RAID and LVM)」をONにします。すると、RAID-0/1/4/5モードなどが選択できるようになります。

1.8 Networking options

ここで必要なのは、「Unix domain sockets」「TCP/IP networking」「IP: kernel level autoconfiguration」です。これを選択しておかないと、カーネルのブート時にカーネルパラメータを与えても自分のIPアドレスを設定できず、NFSをマウントすることが出来ないなどの障害が生じます。また、カーネルのブート時に自動的にIPアドレスを取得させたい場合は、「IP: DHCP support」や「IP: BOOTP support」を選択します。さらに、ルーターなどに利用したい場合は、「IP: advanced router」なども選択します。ここでは、その他にもQoSスケジューラなども選択することができます。

1.9 ATA/IDE/MFM/RLL support

IDE/ATAPI接続のハードディスクドライブ、CD-ROMドライブ、TAPEドライブ、FLOPPYディスクドライブなどを接続する場合、ONにします(もちろん、ターゲットボードや拡張カードがIDEをサポートしている場合に限ります)。IDEのRAIDコントローラを利用する場合も、この項目をONにします。

1.10 SCSI support

SCSI接続のハードディスクドライブ、CD-ROMドライブ、TAPEドライブなどを接続する場合、ONにします(もちろん、ターゲットボードや拡張カードがSCSIをサポートしている場合に限ります)。

1.11 Network device support

10Mbit, 100Mbit, 1Gbitなどハードウェアに実装されているネットワークデバイスを選択します。ダイヤルアップルーターなどに利用する場合は、「PPP (point-to-point protocol) support」を802.11Bなどの無線LANシステムに対応する場合は、「Wireless LAN (non-hamradio)」を選択します。

1.12 Console drivers

LCDが接続されている(LCDコントローラのデバイスドライバが存在する)場合、「Frame-buffer support」を選択します。このフレームバッファをカーネルでサポートすることにより、Qt/Embedded、Microwindowsなどの組み込み機器向けのGUIを実装することが可能になります。

1.13 Character devices

一般的なボードであれば、8250や16550互換のコントローラが実装されている場合が多いので、「Standard/generic (8250/16550 and compatible UARTs) serial support」を選択しておけばよいでしょう。これを選択すると、「Support for console on serial port」が選択できるようになるので、システムの出力を見たい場合には、これも選択します。おそらく、デバッグ時やメンテナンス時に必要となることが多いでしょう。なお、kgdbでデバッグする場合には、kgdbはシリアル接続しかサポートしていませんのでこれは必須となります。

1.14 File systems

Linuxシステムが動作するためには何らかのファイルシステムが必要になってきます。従来の一般的な組み込みシステムはROMで動作するものがほとんどですので、そのようなシステムではROMファイルシステムが必要となります。ROMファイルシステムを使用するには「ROM file system support」を、圧縮ROMファイルシステムを使用するには「Compressed ROM file system 」を選択します。
現在では、Flash ROMを搭載し、読み込みだけではなく書き込みも行うようなシステムも増えてきています。よって、安全に書き込むことが出来、突然の電源断にも耐えうるファイルシステムが求められています。そのような要求を満たすのが、JFFS2と呼ばれるJournalling Flash File Systemバージョン2です。JFFS2形式のファイルシステムを作成するのには、mkfs.jffs2というユーティリティが必要ですが、このコマンドはRed Hat Linux 7.2では標準コマンドとして含まれていませんので、http://www.linux-mtd.infradead.org/からダウンロードする必要があります。
また、最近では、大容量データを扱う処理が増えてきたことと、ハードディスクドライブの低価格化の影響もあってか、ハードディスクドライブを搭載する機器も増えてきています。サーバー、ワークステーション用のRed Hat Linux 7.2では、Ext3と呼ばれるExtended File Systemバージョン3が標準のファイルシステムとして採用されています。Ext2と呼ばれる一つ前のバージョンでは、ジャーナリング機能がなかったので予期しない電源断の場合、ファイルシステムが壊れたり、リブートにファイルシステムの不具合をすべてチェックするのでシステムのブートに時間がかかるという問題がありました。Ext3では、これらの問題が解決されましたので、 今後ハードディスクドライブを搭載する組み込みLinuxシステムの標準のファイルシステムとなるでしょう。Ext3を使用するには「Ext3 journalling file system support (EXPERIMENTAL) (NEW)」を選択します。
これらは、システム上にファイルシステムを実装するのか、ネットワーク越しにストレージを用意するのかによって異なります。通常の開発時には、一般的にネットワークファイルシステムを利用するのが賢明でしょう。ネットワークファイルシステムを使用するには、「NFS file system support」を選択し、さらに「Root file system on NFS」を選択します。そして、図6のようにカーネルのブート時にカーネルパラメータを与えてブートします。

図6. カーネルパラメータの与え方

Linux/PPC load: ip=192.168.0.1 root=/dev/nfs rw nfsroot=192.168.0.2:/export_directory init=/test_application

また、Windowsの共有ディレクトリをマウントするためのSMB(Server Message Block)ファイルシステムを利用する場合は、「SMB file system support (to mount Windows shares etc.)」を、NetwareのボリュームをマウントするためのNCP(Netware Core Protocol)ファイルシステムを利用する場合は、「NCP file system support」を選択します。

以上、カーネルの構築時に知っておかなければならない最低限の項目について説明しましたが、紹介しきれない項目がたくさんありますのでいろいろと試されていただければと思います。



[ 次のページ | 前のページ | 目次へ ]
お問い合わせは info@embedded.jp まで