体験!マイコンボードで組込みLinux

第19回Fedoraでのネットワークサーバ設定

ネットワーク設定

SH3向けFedora 7ではデフォルトの設定ではネットワークを起動するようになっていません。追加でネットワーク設定をしなければなりません。今回はまずネットワークを設定し、次にWebサーバを立ち上げて、PHPで制御プログラムを作成する方法について紹介します。

IP指定

IPアドレスを直接指定する場合は、/etc/sysconfig/network-scripts/ifcfg-eth0 というファイルを新規作成します。ifcfg-eth0 の設定内容は、たとえばリスト1のようになります。

リスト1 ifcfg-eth0の例
DEVICE=eth0
IPADDR=192.168.1.2
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
GATEWAY=192.168.1.1
ONBOOT=yes
BOOTPROTO=static

DNSを利用する場合は、/etc/resolv.conf を、たとえばリスト2のように記述します。

リスト2 resolv.confの例
search sh7706lsr.co.jp
nameserver 192.168.1.1

DHCP

DHCPサーバにより自動でネットワーク設定をする場合も /etc/sysconfig/network-scripts/ifcfg-eth0 というファイルを新規作成します。この場合のifcfg-eth0の設定内容はリスト3のようになります。DNSを利用する場合もDHCPサーバーがDNS設定をサポートしている場合は特に設定は不要です。

リスト3 DHCPを利用する場合のifcfg-eth0の例
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp

共通設定

/etc/sysconfig/network というファイルを作成してリスト4のようにホスト名を記述します。ホスト名は、ここではshlinuxとしていますが、任意の名称で構いません。

リスト4 networkファイルの例
HOSTNAME=shlinux

IPv6を使わない場合は、/etc/sysconfig/network-scripts/network-functions-ipv6 を削除します。これでネットワークの設定が完了です。

コマンドで個別にネットワークの起動をするには以下のようにします。

# /etc/init.d/network start

コマンドで個別にネットワークを停止させるには以下のようにします。

# /etc/init.d/network stop

コマンドで個別にネットワークの再起動をするには以下のようにします。

# /etc/init.d/network restart

システム起動時に自動的にネットワーク設定をするには以下のようにします。

# chkconfig network on

もし、システム起動時のネットワーク設定を解除する場合は以下のようにします。

# chkconfig --del network

システム起動時におけるサービス起動リストを得るには以下のようにします。

# chkconfig --list

Webサーバ

デフォルトの状態ではApacheを起動するだけでWebサーバが起動するようになっています。ただし、Apacheのユーザが作成されていないので、以下のようにユーザとグループを新規作成します。

# groupadd -g 48 apache
# useradd -u 48 -g apache -s /sbin/nologin -d /var/www apache

ここでは適当に48番を使いましたが、空いている任意の番号でいいです。

PHPを使えるようにする

SH3版Fedora 7のApacheは、PHPモジュールだけは外して使えないようになっています。実はPHPに必要なパッケージがSH3版Fedora 7に全部は含まれていないので、必要なパッケージをSH3版FedoraCore 6から持ってきます。

具体的には、以下のパッケージを持ってきます。

gmp-4.1.4-7.sh3.rpm
gmp-devel-4.1.4-7.sh3.rpm
libgcc-4.1.1-30.sh3.rpm
libstdc++-4.1.1-30.sh3.rpm
libstdc++-devel-4.1.1-30.sh3.rpm

また、これ以外にSH3版Fedora 7のaspelという名称を含むパッケージも追加する必要があります。追加インストールはPC上でFedore 7がインストールされたSDカードへ、以下のように行います。

# rpm --root [SDカードのフォルダ] -ivh --nodeps --ignorearch aspel*.rpm
# rpm --root [SDカードのフォルダ] -ivh --nodeps --ignorearch gmp-4.1.4-7.sh3.rpm
# rpm --root [SDカードのフォルダ] -ivh --nodeps --ignorearch gmp-devel-4.1.4-7.sh3.rpm
# rpm --root [SDカードのフォルダ] -ivh --nodeps --ignorearch libgcc-4.1.1-30.sh3.rpm
# rpm --root [SDカードのフォルダ] -ivh --nodeps --ignorearch libstdc++-4.1.1-30.sh3.rpm
# rpm --root [SDカードのフォルダ] -ivh --nodeps --ignorearch libstdc++-devel-4.1.1-30.sh3.rpm

ApacheでPHPを使えるようにするには、/etc/httpd/conf/httpd.confを以下のように追加、変更します。

まずLoadModuleが記述されているあたりに

LoadModule php5_module modules/libphp5.so

を追加します。

次に、以下の内容を検索して

Include conf.d/*.conf

以下のようにコメントにして無効にします。

#Include conf.d/*.conf

“ServerName⁠を検索して、以下のようにWebサーバ名を設定します。特に名称がない場合は、当ボードのIPアドレスを指定します。

ServerName [サーバー名]:80

最後に適当な箇所に以下の記述を追加します。

<IfModule mod_dir.c>
   DirectoryIndex index.html index.php index.cgi
</IfModule>
AddType application/x-httpd-php .php

Apacheの起動と自動起動

コマンドで個別にApacheを起動するには以下のようにします、

# /sbin/service httpd start

コマンドで個別にApacheを停止させるには以下のようにします、

# /sbin/service httpd stop

コマンドで個別にApacheの再起動をするには以下のようにします、

# /sbin/service httpd restart

システム起動時に自動的にApache起動させるには以下のようにします。

# chkconfig httpd on

もし、システム起動時のApache起動を解除する場合は以下のようにします。

# chkconfig --del httpd

システム起動時におけるサービス起動リストを得るには以下のようにします。

# chkconfig --list

ApacheとPHPの確認

コンテンツは/var/www/html以下のフォルダに格納します。Apacheの簡単な確認は、/var/www/html/index.html をリスト5の内容にして、外部からブラウザで行います。

リスト5 Apache動作確認用のindex.html
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <p>T-SH7706LSR</p>
    </body>
</html>

PHPの動作は/var/www/html/info.phpをリスト6の内容にして、外部からブラウザで確認をします。図1のようにPHPに関する情報が表示されます。

リスト6 PHP動作確認用のinfo.php

<html>
    <head>
        <title>PHP Test</title>
    </head>
    <body>
        <?php phpinfo(); ?>
    </body>
</html>

図1 ブラウザからPHPの動作を確認
図1 ブラウザからPHPの動作を確認

Webサーバによるコンピュータ制御

T-SH7706LSRは制御ボードなので、I/Oポートによる制御も可能となっています。本来はデバイスドライバで制御部分は実装すべきですが、今回は簡単なコマンドで制御を代用します。今回の対象のI/Oポートはボード付属のLEDとします。

LED制御のコマンド

ユーザプログラムによるLEDの点滅制御についてはすでに解説済みです。そのLEDの自動点滅処理を引数による点滅指定に変更を加えた内容がリスト7となります。

リスト7 LED点滅制御処理プログラム(Fedora版)
 1  #include <sys/types.h>
 2  #include <sys/stat.h>
 3  #include <fcntl.h>
 4  #include <unistd.h>
 5  #include <stdlib.h>
 6  #include <stdio.h>
 7  #include <string.h>
 8  #include <sys/mman.h>
 9  #include <asm/page.h>
10  
11  #define SCPDR 0x136
12  #define LED 0x10
13  
14  int main(int argc, char **argv) {
15      volatile unsigned char  *mmaped, scpdr;
16      int                     fd, i;
17  
18      if(argc != 2) return 0;
19      
20      fd = open("/dev/mem",O_RDWR);
21      if(fd < 0) {
22              fprintf(stderr,"cannot open /dev/mem\n");
23              return 1;
24      }
25      mmaped = (volatile unsigned char*)mmap(0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0xa4000000);
26      close(fd);
27      if(mmaped == MAP_FAILED) {
28              fprintf(stderr,"cannot mmap\n");
29              return 1;
30      }
31  
32      if(argv[1][1] == 'N') {
33              mmaped[SCPDR] |= LED;
34              printf("LED is ON\n");
35      }
36      if(argv[1][1] == 'F') {
37              mmaped[SCPDR] &= ~LED;
38              printf("LED is OFF\n");
39      }
40  
41      munmap((char*)mmaped, PAGE_SIZE);
42      return 0;
43  }

リスト7のプログラムはPC上で以下のようにクロスコンパイルします。

$ sh3-linux-gcc -o led led.c

できあがった実行ファイルを/var/www/html/led に置き、以下のようにモードを変更します。

# chmod +s /var/www/html/led

コマンドラインからのLEDの点灯は以下のようにします。

$ /var/www/html/led ON
LED is ON

コマンドラインからのLEDの消灯は以下のようにします。

$ /var/www/html/led OFF
LED is OFF

LED制御のスクリプト

今回はPHP言語でフォームとLED制御のスクリプトをリスト8のように記述し、/var/www/html/led.phpに置きます。このURLにアクセスすると図2のようにLED制御ができるフォームが表示されます。

リスト8 led.php(PHPによるLED制御スクリプト)
 1 <html>
 2     <head>
 3         <title>Control</title>
 4     </head>
 5     <body>
 6         <?php
 7              $op = htmlspecialchars($_POST['led']);
 8              if($op != 'ON') {
 9                  $op = 'OFF';
10              }
11              $cmd = "./led $op";
12              exec($cmd);
13         ?></p>
14         <form action="led.php" method="post">
15              LED: <input type="checkbox" name="led" value="ON" />
16              <input type="submit" />
17         </form>
18     </body>
19 </html>
図2 led.phpをブラウザから実行したところ
図2 led.phpをブラウザから実行したところ

もし、制御情報の表示を追加したい場合はリスト9のように記述します。このURLにアクセスすると図3のようにLEDの制御結果の表示とLED制御ができるフォームが表示されます。

リスト9 LEDの表示状態を追加した例
 1  <html>
 2      <head>
 3          <title>Control</title>
 4      </head>
 5      <body>
 6          <?php
 7               $op = htmlspecialchars($_POST['led']);
 8               if($op != 'ON') {
 9                   $op = 'OFF';
10               }
11               $cmd = "./led $op";
12               system($cmd);
13          ?></p>
14          <form action="led.php" method="post">
15               LED: <input type="checkbox" name="led" value="ON" />
16               <input type="submit" />
17          </form>
18      </body>
19  </html>
図3 リスト9をブラウザから実行したところ
図3 リスト9をブラウザから実行したところ

次回は

次回は雑多なFedora 7の設定について解説します。

おすすめ記事

記事・ニュース一覧