2004年12月25日

クロス開発環境の構築 for RTLinux

クロス開発とは、プログラムを開発する環境と実行する環境が
異なる場合を云います。(同じ場合はセルフ開発)
開発する環境をホスト、実行する環境をターゲットと呼びます。
今回は、図のように、
・ホスト  :Window2000/XP インテル系CPU
・ターゲット:linux-2.4.20&RTLinux Pentium-M
の環境を構築します。
003.gif

本説明では、「cygwin$」をホスト側のシェルプロンプト、
「linux#」をターゲット側のシェルプロンプトとします。
開発環境の構築は次の4段階で行いました。

1.cygwinのインストール
  Window2000やXP上でUNIX環境を実現するツール
  をインストールします。

2.Linux用、includeとlibファイルの取得
  ターゲットマシンから、クロス開発に必要な、
  Linux用、includeとlibファイルを集め、
  ホストにインストールします。

3.RTLinux用、includeファイルの取得
  ターゲットマシンから、クロス開発に必要な、
  RTLinux用、includeファイルを集め、
  ホストにインストールします。

4.クロス開発環境(gcc)のインストール
  GNUの次のツールをcygwin上にインストールします。
   1) binutils-2.13.tar.gz
   2) gcc-3.2.2.tar.gz
   3) gcc-g++-3.2.2.tar.gz
  当初、
   1) binutils-20040725-2-src.tar.bz2
   2) gcc-core-3.4.1-1-src.tar.bz2
   3) gcc-g++-3.4.1-1-src.tar.bz2
  をインストールしましたが、RTLinuxのコードが旨く出来なかったので、
  上記バージョンを使いました。


1.cygwinのインストール
1.1. cygwinのsetup.exeを
  http://www.cygwin.com/setup.exe
  からダウンロード
  例えば、C:\tool\cygwin にダウンロードします。

1.2. setup.exeを実行
  http://pcweb.mycom.co.jp/special/2002/cygwin/
  の手順でインストール(次の点に注意)
   1) C:\cygwinをインストールディレクトリに指定。
    (説明の都合上、C:\cygwinとします。D:\cygwin
     などでも問題ありません。)
   2) ミラーサーバーを選ぶ。
     私は、ftp://ring.aist.go.jp にしました。
   3) "Devel"項目を、"Install" にする。
   4) Cygwinアイコンをディスクトップに作成にする。

   インストール完了で、Cygwinアイコンがディスクトップに
   作成されるが、ここではまだCygwinを開かない。

1.3. パソコンの環境変数を設定
  次の環境変数を設定します。
  CYGWIN ntsec smbntsec glob
  HOME /home/ishizumi
  MAKE_MODE UNIX
  SHELL /bin/bash

  Windows2000の場合次の手順で設定します。
   1) [マイコンピュータ]を右クリック
   2) [システムのプロパティ」を起動
   3) [詳細]タブをクリック
   4) [環境変数(E)]ボタンを押す
   5) XXXのユーザー環境変数に設定する

1.4. Cygwinを開く
  ディスクトップのCygwinアイコンをダブルクリックして
  Cygwinを開きます。
  1回目の操作で、/home/ishizumiディレクトリに次のファイルが作成されます。
  .bash_profile
  .bashrc
  .inputrc

1.5. cygwinの環境変数の設定
  C:\cygwin\home\ishizumi\.bashrcファイルに
  次の環境変数をセットします。
  (この変数は、2.以下の作業を行う上で必要)
  export host=i686-pc-cygwin
  export build=i686-pc-cygwin
  export target=i686-pc-linux-gnu
  export prefix=/usr/local/linux
  export src_root=/usr/local/src/gnu
  export PATH=$PATH:$prefix/bin

1.6. cygwinの起動
  ディスクトップに出来た、Cygwinアイコンをダブルクリック
  することで、Cygwinが起動します。
   cygwin$ ls
   cygwin$ pwd
  などと入力してみましょう。


2.Linux用、includeとlibファイルの取得とインストール
2.1. ターゲットマシンから Linux ランタイムを取得
  「RTLinux/Freeのインストール」の手順でインストールした
  Linux(ターゲット)側マシンからLinux用includeとlibファイルを
  取得します。(ホスト側からtelnetで操作するのが楽です。)

  以下の操作をLinux(ターゲット)側のroot権限で行います。
  ・includeファイルに関する作業
  linux# mkdir -p /tmp/linux-target-runtime
  linux# cd /tmp/linux-target-runtime
  linux# (cd /usr; tar cf - include) | tar xf -
  linux# ln -s include sys-include
  linux# (cd /usr; tar cf - lib) | tar xf -
  linux# (cd /; tar cf - lib) | tar xf -
  linux# cd /tmp/linux-target-runtime/include
  linux# rm linux asm (2005-03-03に 削除)
  linux# (cd /usr/src/linux/include; tar cf - linux asm-i386) | tar xf -
  linux# ln -s asm-i386 asm

  ・libファイルに関する作業
  linux# cd /tmp/linux-target-runtime
  linux# ls -F lib
  linux# vi lib/libc.so ←エディタによるファイル変更

   GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a )
       ↓
   GROUP ( /usr/local/linux/i686-pc-linux-gnu/lib/libc.so.6 /usr/local/linux/i686-pc-linux-gnu/lib/libc_nonshared.a )

  ・linux-target-runtime.tar.gzファイルの作成
  linux# cd /tmp/linux-target-runtime
  linux# tar -zcvf /tmp/linux-target-runtime.tar.gz .

  ・linux-target-runtime.tar.gzファイルの転送
  linux-target-runtime.tar.gzファイルをFTPなどを使用して、
  ホスト(cygwinマシン)の、C:\cygwin\tmpディレクトリに送ります。


2.2. ホスト側にインストール
  以下の操作をパソコン側でCygwinを起動して行います。
  cygwin$ mkdir -p $prefix/$target
  cygwin$ cd $prefix/$target
  cygwin$ tar zxvf /tmp/linux-target-runtime.tar.gz


3.RTLinux用、includeファイルの取得とインストール
3.1. ターゲットマシンから RTLinux用includeファイルの取得
  「RTLinux/Freeのインストール」の手順でインストールした
  Linux(ターゲット)側マシンからRTLinux用、includeファイルを
  取得します。

  以下の操作をLinux(ターゲット)側のroot権限で行います。
  linux# mkdir -p /tmp/rtlinux/linux-2.4.20
  linux# mkdir -p /tmp/rtlinux/rtlinux-3.2-pre3
  linux# cd /tmp/rtlinux/linux-2.4.20
  linux# (cd /usr/src/rtlinux/linux-2.4.20; tar cf - include) | tar xf -
  linux# cd /tmp/rtlinux/rtlinux-3.2-pre3
  linux# (cd /usr/src/rtlinux/rtlinux-3.2-pre3; tar cf - include) | tar xf -
  linux# cd /tmp/rtlinux/rtlinux-3.2-pre3
  linux# ln -s /usr/src/rtlinux/linux-2.4.20 linux

  ・rtlinux.tar.gzファイルの作成
  linux# cd /tmp/rtlinux
  linux# tar -zcvf /tmp/rtlinux.tar.gz .

  ・rtlinux.tar.gzファイルの転送
  rtlinux.tar.gzファイルをFTPなどを使用して、
  ホスト(cygwinマシン)の、C:\cygwin\tmpディレクトリに送ります。

3.2. ホスト側にインストール
  以下の操作をパソコン側でCygwinを起動して行います。
  cygwin$ mkdir -p /usr/src/rtlinux
  cygwin$ cd /usr/src/rtlinux
  cygwin$ tar zxvf /tmp/rtlinux.tar.gz .


4.クロス開発環境(gcc)のインストール
  ここでの操作は全てパソコン(ホスト)側で行います。
4.1. src_root ディレクトリの作成
  cygwin$ mkdir -p $src_root

4.2. gcc,g++とbinutilsの取得
  次のソースをC:\cygwin\tmpディレクトリにダウンロードする。
  http://ftp.gnu.org/pub/gnu/gcc/gcc-3.2.2/gcc-3.2.2.tar.gz
  http://ftp.gnu.org/pub/gnu/gcc/gcc-3.2.2/gcc-g++-3.2.2.tar.gz
  http://ftp.gnu.org/gnu/binutils/binutils-2.13.tar.gz

4.3. gccとbinutilsの解凍
  cygwin$ cd $src_root
  cygwin$ tar zxvf /tmp/gcc-3.2.2.tar.gz
  cygwin$ tar zxvf /tmp/gcc-g++-3.2.2.tar.gz
  cygwin$ tar zxvf /tmp/binutils-2.13.tar.gz

4.4. binutilsのビルドとインストール
  cygwin$ mkdir -p $src_root/BUILD/binutils
  cygwin$ cd $src_root/BUILD/binutils
  cygwin$ $src_root/binutils-2.13/configure \
--with-included-gettext \
--target=$target --host=$host --build=$build \
--prefix=$prefix -v
  cygwin$ make > make.log 2>&1
  cygwin$ make install > install.log 2>&1

  チェック
  cygwin$ $target-ld --version

4.5. bccのビルドとインストール
  cygwin$ mkdir -p $src_root/BUILD/gcc
  cygwin$ cd $src_root/BUILD/gcc
  cygwin$ $src_root/gcc-3.2.2/configure \
--enable-languages=c,c++ \
--with-included-gettext --enable-shared --enable-threads \
--target=$target --host=$host --build=$build \
--prefix=$prefix -v
  cygwin$ make > make.log 2>&1
  cygwin$ make install > install.log 2>&1

4.6. Linuxプログラムのコンパイルと実行
  cygwin$ mkdir -p /home/ishizumi/linux/sample
  cygwin$ cd /home/ishizumi/linux/sample
  このディレクトリに、hello.cプログラムを入れ、
  次のコマンドでコンパイルします。
  cygwin$ $target-gcc -o hello hello.c
   または、
  cygwin$ /usr/local/linux/bin/i686-pc-linux-gnu-gcc -o hello hello.c

  hello ファイルが出来るのでターゲットへダウンロード
  して実行する。
  linux# hello
   「Hello, world!」と表示されればOK

4.7. RTLinuxプログラムのコンパイルと実行
  cygwin$ mkdir -p /home/ishizumi/RTlinux/sample
  cygwin$ cd /home/ishizumi/RTlinux/sample
  このディレクトリに、
   1) hello.c
   2) Makefile
   3) rtl.mk
  を入れ、次のコマンドでコンパイルします。
  cygwin$ make

  hello.o ファイルが出来るのでターゲットへダウンロード
  して実行する。

  以下の操作をLinux(ターゲット)側のroot権限で行います。
  linux# tail -f /var/log/messages &
  linux# insmod hello.o
   「Hello, world!!」と表示されればOK
  linux# rmmod hello
   「bye bye」と表示されればOK


参考サイト
1) http://pcweb.mycom.co.jp/special/2002/cygwin/
2) http://www.sixnine.net/cygwin/translation/devel/cygwin-to-linux-cross-howto.html
3) http://ftp.gnu.org/
4)http://yama-tabi.net/blog/archives/2004/12/rtlinuxfree_1.html

 ←クリックしてもらうと嬉しいです。

投稿者 山旅人 : 08:34 | コメント (0) | トラックバック

2004年12月18日

RTLinuxの基本構造

002.gif

RTLinux(RealTime Linux)とは、Linuxでリアルタイム処理を可能にするOSです。
RTLinuxにもいくつかの種類があるのですが、ここで扱うRTLinuxは
FSMLabs社のRTLinux/Freeとします。

図1Linuxの基本構造、図2RTLinuxの基本構造に示すとおり、RTLinuxは
ハードウェアとLinuxカーネルの間に、RTLinuxカーネルを置くことでリアルタイム
性能を実現します。
このRTLinuxカーネルが、プライオリティスケジューリング機能を持っており、
リアルタイムスレッドに対して、高優先順位でCPUの割り当てを行います。
また、標準のLinuxは、このスケジューラが最も低いプライオリティーを与える
ことで動作します。
このような仕組みにより、RTLinuxでは、リアルタイムスレッドと通常のLinux
プロセスが動作することが可能となります。

RTLinuxカーネルは、全てのハードウェア割り込みをインターセプトし、必要に応じて、
リアルタイムインタラプトサービスルーチンを起動するか、ソフトウェア割り込みとして、
Linuxカーネルに渡します。

 図1 Linuxの基本構造
001.gif

 図2 RTLinuxの基本構造
002.gif

 ←クリックしてもらうと嬉しいです。

投稿者 山旅人 : 13:37 | コメント (5) | トラックバック

2004年12月14日

USBエラー

RTlinux起動時にUSB関係のエラーが表示されるので、
このエラー表示が出ないようにしてみました。
USBを使おうとしているところをコメントアウトしただけなので、
この方法では、エラー表示は出ませんがUSBは使えません。

/etc/rc.d/rc.sysinit ファイルに次の太字の部分を追加。

# Initialize USB controller and HID devices
usb=0
if ! LC_ALL=C grep -iq "nousb" /proc/cmdline 2>/dev/null && ! LC_ALL=C grep -q "usb" /proc/devices 2>/dev/null ; then
aliases=`/sbin/modprobe -c | awk '/^alias usb-controller/ { print $3 }'`
if [ -n "$aliases" -a "$aliases" != "off" ]; then
modprobe usbcore
for alias in $aliases ; do
[ "$alias" != "off" ] && action $"Initializing USB controller ($alias): " modprobe $alias
done
[ $? -eq 0 -a -n "$aliases" ] && usb=1
fi
fi

if ! LC_ALL=C grep -iq "nousb" /proc/cmdline 2>/dev/null && LC_ALL=C grep -q "usb" /proc/devices 2>/dev/null ; then
usb=1
fi
usb=0  ←これを追加

if [ $usb = 1 -a ! -f /proc/bus/usb/devices ]; then
action $"Mounting USB filesystem: " mount -t usbdevfs usbdevfs /proc/bus/usb
fi
   ・
   ・


 ←クリックしてもらうと嬉しいです。

投稿者 山旅人 : 07:45 | コメント (2) | トラックバック

2004年12月11日

RTLinux/Freeのインストール

RTLinux/Free(rtlinux-3.2-pre3)と云うOSをPentium Mの
パソコンに入れてみました。
これでちゃんと動いてますが、起動時にUSB関係のエラー
が出るので、この解決が今後の課題です。

RTLinux公式サイト
 http://www.fsmlabs.com/

RTLinux-gpl FTP repository
 http://www.rtlinux-gpl.org/

Linuxカーネルのダウンロードサイト
 http://www.kernel.org/

kgccのダウンロードサイト
 http://rpm.pbone.net/index.php3/stat/4/idpl/12210/com/kgcc-1.1.2-40.i386.rpm.html

RTLinuxインストール参考サイト
 http://daq.rikkyo.ac.jp/rtlinux/installation-ver32.html
 http://www-arailab.sys.es.osaka-u.ac.jp/~takubo/howto_rtlv3_install_2.html


1.Redhat9のインストール
  RTLinuxをインストールするには、Linuxカーネルの再構築(コンパイル)
  を行う開発環境が必要です。
  今回は、Redhat9を開発環境にしたので、Redhat9をインストールする必要
  があります。
  (Redhat9はlinux-2.4.20系を使用しており、rtlinux-3.2-pre3にも
   linux-2.4.20系のパッチが含まれているので、Redhat9を使用)

 1) ファイルシステムは、ext2 を使用
 2) ネットワーク関係はDHCPを使用せず手動で設定
   今回は次のように設定
   ・ ホストIPアドレス 192.168.20.236
   ・ ホスト名 mckinley
   ・ デフォルトゲートウェイ 192.168.20.254
   ・ プライマリDNSサーバ  192.168.10.240
   ・ セカンダリDNSサーバ  192.168.30.240
 3) カスタムセットアップで、
   ・X Window環境 2005-03-01 削除
   ・telnetサーバ
   ・ftpサーバ
   ・開発ツール
   ・カーネル開発
   を含んでインストール
   (不必要なものはできるだけインストールしない。)

 4) rootとishizumi ユーザーを登録

2.ファイルの転送
  Redhat9のインストールが終わったら次のファイルをFTPで
  /home/ishizumi/rtlinuxに転送します。
  1) kgcc-1.1.2-40.i386.rpm (Redhat用コンパイラ)
  2) rtlinux-3.2-pre3.tar.bz2 (リアルタイムリナックス)
  3) linux-2.4.20.tar.gz   (リナックス 2.4.20)

3.kgccのインストール
  Redhat9の場合、gccでのカーネルの再構築がうまく出来ないため、
  kgccを使用します。
  ルート権限で次の手順でインストール
   # cd /home/ishizumi/rtlinux/
   # rpm -ivh kgcc-1.1.2-40.i386.rpm
   # rpm -q kgcc (インストール出来たかの確認)


4. RTLinuxのインストール (Kernleの構築)
・/usr/src に移動して,RTlinux用のディレクトリを作り,その中で、
ソースを展開します。
# cd /usr/src
# mkdir /usr/src/rtlinux
# cd /usr/src/rtlinux
# tar xzf /home/ishizumi/rtlinux/linux-2.4.20.tar.gz
# tar --bzip2 -xvf /home/ishizumi/rtlinux/rtlinux-3.2-pre3.tar.bz2

・展開したrtlinuxのディレクトリからリンクをはります。
# cd /usr/src
# ln -sf rtlinux/linux-2.4.20 linux

・/usr/src/rtlinux/linux-2.4.20 に移動して、パッチをあてます。
# cd /usr/src/rtlinux/linux-2.4.20
# patch -p1 < ../rtlinux-3.2-pre3/patches/kernel_patch-2.4.20-rtl3.2-pre3

・カーネルの再構築を行う。
# cd /usr/src/rtlinux/linux-2.4.20
# vi Makefile (kgccを使うように変更する。)

CC = $(CROSS_COMPILE)gcc
     ↓
CC = $(CROSS_COMPILE)kgcc

# make menuconfig
ここで、自分の使っているパソコンの環境に合わせて設定する。
(今回はデフォルト値を使用)
X Window環境が無い場合
「make menuconfig」 もしくは、
「make config」

# make dep
# make bzImage
# make modules
# make modules_install
# depmod -a

・カーネルイメージを起動するローダの設定。
# cd /boot
# cp /usr/src/rtlinux/linux-2.4.20/arch/i386/boot/bzImage /boot/rtlinuz
# cd /boot/grub
# cp grub.conf grub.conf.org
# vi grub.conf (grub.confファイルを次のように変更)

####### ここから ########
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/hdd
default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-8)
root (hd0,0)
kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
initrd /initrd-2.4.20-8.img

title RTLinux V3.2
root (hd0,0)
kernel /rtlinuz ro root=/dev/hda2

####### ここまで ########

・再起動
# reboot


5. RTLinuxモジュールなどのインストール
・RTLinuxのモジュールの作成
# cd /usr/src/rtlinux/rtlinux-3.2-pre3
# ln -s /usr/src/rtlinux/linux-2.4.20 linux
# make xconfig
# make menuconfig
# make
# make devices
# make install

・RTLinuxのモジュールのインストール
# cd /usr/src/rtlinux/rtlinux-3.2-pre3
# sh scripts/insrtl
# lsmod (インストールの確認)

・RTLinuxのモジュールの自動起動の設定
# cd /etc/rc.d/rc3.d
# ln -s ../init.d/rtlinux S99rtlinux
# cd /etc/rc.d/rc5.d
# ln -s ../init.d/rtlinux S99rtlinux

・サンプルの実行
# cd /usr/src/rtlinux/rtlinux-3.2-pre3/examples/frank
# insmod frank_module.o
# ./frank_app

 ←クリックしてもらうと嬉しいです。

投稿者 山旅人 : 08:19 | コメント (0) | トラックバック

 
Copyright (C) 2004-2007 Shingo Ishizumi All Right Reserved (メール)       ここで一言