rm-033-04-403 creator-pxa270...

42
-1- DOC Number RM-033-04-403 DOC Version V1.01 Release Date 2008-01-10 Module Name 網路應用程式實習 Platform Creator XScale-PXA270 Category Embedded Linux programming Difficulty Basic Experiment time Lectur xx minutes Operation xx minutes Key Word Author Microtime Computer Inc. http//www.microtime.com.tw

Upload: others

Post on 13-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-1-

DOC Number : RM-033-04-403

DOC Version : V1.01

Release Date : 2008-01-10

Module Name : 網路應用程式實習

Platform : Creator XScale-PXA270

Category : Embedded Linux programming

Difficulty : Basic

Experiment time : Lectur : xx minutes

Operation : xx minutes

Key Word :

Author : Microtime Computer Inc. http://www.microtime.com.tw

Page 2: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-2-

Copyright Notice

Copyright ©2007~2008 Microtime Computer Inc. All right reserved.

No part of this publication may be reproduced, translated into another language, store in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, or otherwise without the prior written consent of Microtime Computer Inc.

Disclaimer

This information in this document is subject to change without notice.

Every precaution has been taken in the preparation of this publication. Microtime assumes no responsibility for error or omission. Neither is any liability assumed for damages resulting from the use of the information contained herein.

Trademarks

Carrier ICE , Pocket-ARM and DOMINGO are trademarks of Microtime computer Inc.

All other product names are trademarks or registered trademarks of their respective owners.

Reversion History

Version Descriptions Date

V1.00 Initial release 2007-08-30

V1.01 文件修正 2008-01-10

Page 3: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-3-

實驗目的.....................................................................................................................................5

實驗規格.....................................................................................................................................5

實驗關聯.....................................................................................................................................5

實驗背景需求.............................................................................................................................5

實驗設備需求.............................................................................................................................5

1. 實驗簡介.....................................................................................................................................7

2. 系統說明.....................................................................................................................................8

2.1 系統架構...........................................................................................................................8

2.2 電路架構...........................................................................................................................9

2.3 程式流程...........................................................................................................................9

3. 基礎知識................................................................................................................................... 10

3.1 網路介面驅動程式......................................................................................................... 10

3.1.1. 網路介面驅動程式簡介 .............................................................................................10

3.1.2. 網路驅動程式架構圖.................................................................................................11

3.1.3. 註冊網路裝置 ...........................................................................................................11

3.1.4. 網路介面的初始化 ....................................................................................................13

3.1.5. 卸載網路模組 ...........................................................................................................14

3.1.6. 開啟與關閉 ...............................................................................................................14

3.1.7. 封包的傳送與接收 ....................................................................................................15

3.1.8. 中斷處置 ..................................................................................................................18

3.2 TCP/IP 通訊協 .............................................................................................................. 19

3.2.1. TCP/IP 的階層架構..................................................................................................19

3.2.2. 什麼是 IP 位址? ....................................................................................................20

3.2.3. 認識網域名稱 ...........................................................................................................20

3.2.4. 新一代的 IP 位址 ....................................................................................................22

3.3 HTTP—超文件傳輸協定(HyperText Transport Protocol) ................................23

Page 4: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-4-

3.3.1. HTTP 規範沿革 ........................................................................................................24

3.3.2. HTTP 功能及用途.....................................................................................................25

3.3.3. ghttpd.......................................................................................................................26

3.4 CGI 程式設計 ................................................................................................................26

3.4.1. CGI 架構圖...............................................................................................................27

3.4.2. 撰寫 CGI 程式需要那些工具 ...................................................................................27

3.4.3. CGI 程式設計如何入門 ............................................................................................28

3.4.4. 第一支 CGI 程式 .....................................................................................................29

3.4.5. CGI 如何取得傳遞資料? .........................................................................................30

3.4.6. CGI 如何將傳遞資料解碼? ......................................................................................31

4. 實作...........................................................................................................................................32

4.1 系統設置.........................................................................................................................32

4.1.1. 系統硬體設置 ...........................................................................................................32

4.1.2. 系統軟體設置 ...........................................................................................................32

4.1.3. 實驗程式碼設置........................................................................................................32

4.1.4. 重要檔案說明 ...........................................................................................................33

4.2 實作進行.........................................................................................................................34

4.2.1. 原始碼檔案瀏覽........................................................................................................34

4.2.2. 編輯 Source Code....................................................................................................34

4.2.3. Make Kernel Image..................................................................................................34 4.2.4. Make Device Driver/ User Application......................................................................35

4.2.5. 編輯 Root Filesystem ...............................................................................................36

4.2.6. 驗證 .........................................................................................................................37

4.2.7. 修改與驗證 ...............................................................................................................40

4.2.8. 實驗環境復原 ...........................................................................................................40

4.3 程式碼註解.....................................................................................................................40

4.3.1. 程式流程圖 ...............................................................................................................41

5. 結論........................................................................................................................................... 41

6. 習作........................................................................................................................................... 41

Page 5: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-5-

7. 參考資料................................................................................................................................... 41

前言

實驗目的 瞭解網路驅動程式的原理與程式架構,及如何在 Linux Target 端架設 ghttp server 並作相

關的運用。

實驗規格 無

實驗關聯 1.) RM-033-04-300_Creator-PXA270_Development-Environment-And-Linux-Host-Sid

e-Install

2.) RM-033-04-303_Creator-PXA270_Linux-Kernel-Install-Compiler

3.) RM-033-04-304_Creator-PXA270_U-Boot-And-Linux-Kernel-image-Download-Flash.

4.) RM-033-04-404_Creator-PXA270_Creator-IO

實驗背景需求 1.) 具 C 語言程式設計基礎

實驗設備需求 H/W requirements :

1.) PC Host,COM port,網路 Hub,

1.) Creator XCsale-PXA270 Development Kit

S/W requirements :

1.) Linux for Creator XScale-PXA270 user guide:檔案在 Linux for Creator XScale-PXA270 光碟中 Linux\Doc 路徑下。

2.) Create-XScale-PXA270 User’s Guide。

Page 6: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-6-

3.) 通訊軟體:例如 Windows 的超級終端機。

Page 7: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-7-

1. 實驗簡介

本章實習將介紹網路的應用程式,內容包含網路介面驅動程式的說明和如何在 Linux Target端建立 ghttp server 及相關的應用。以下是本實驗的實習重點:

在理論部分將針對下列幾點加以說明:

1. 網路介面驅動程式

2. TCP/IP 通訊協

3. HTTP—超文件傳輸協定(HyperText Transport Protocol)

4. CGI 程式設計

在實作部分將包含下列幾點:

1. 編譯和安裝 ghttp server。

2. 利用 Windows Host 的 browser 連結上 ghttp server。

3. 利用 gpttp 完成影音檔案的傳輸和播放。

4. 利用 gpttp 完成遠端控制 Linux Target 端 LED 的明亮。

Page 8: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-8-

2. 系統說明

2.1 系統架構

ICE / JTAG

mtdd/gdbserver

Linux target

CodeLyzer

Domingo

Window Host

Samba Server

NFS Server

Linux Host

Ethernet

Print port

port / mount

Linux Kernel Source

Flash: Linux kernel

RootFS

TFTP Server

TFTP Client

Page 9: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-9-

2.2 電路架構

1 2 3 4 5 6

7 8 9101112

AB

12x

6x

8x

2x

9x

3x

10x

4x

11x

5x

7x

1x

Ethe

rnet

A

12x

6x

8x

2x

9x

3x

10x

4x

11x

5x

7x

1x

C

POWERFAULT DATA ALARM

2.3 程式流程

WebLed 程式流程圖,如下:

Page 10: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-10-

3. 基礎知識

3.1 網路介面驅動程式

3.1.1. 網路介面驅動程式簡介

不同於字元式裝置和區塊式裝置,網路裝置並不依附在檔案系統中,而是在核心層就直

接處理封包的傳遞與接收,因此也不為行程所開啟的檔案所限制。

網路介面和掛載的區塊式裝置的異同網路介面的角色和已掛載的(mounted)區塊式裝置

相似,區塊式裝置暫存它的一些特色在 blk_dev 陣列和其它核心結構內,然後它便可以

根據需求傳送與接收區塊資料;網路介面也以類似的方式運作,它會暫存資料在特定的

資料結構,當需要跟外界交換封包時便可正常運作。雖說類似,已掛載的磁碟和封包傳

遞介面仍存有一些不同之處,首先,磁碟是以特殊檔案的形式存在於/dev 的目錄下,而

網路介面則無如此的進入點,由於網路介面不是資料流導向的裝置,因此無法輕易地依

附在檔案系統的節點上,檔案系統的一般操作,如開、關、讀、寫,當應用至網路介面

時並不合理,網路介面和應用程式之間的資料傳遞不是透過和檔案相關的標準系統呼

Linux target

Browser

Window Host

Ghttp server

CGI程式

CGI 程式流程

free()

subll_opensubll_release

Main()

getcgivars()

testLED()Open led device

LED_IOCTL_SET:1 : 亮, 0 : 不亮

Page 11: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-11-

叫,而是像 socket()、bind()、listen()、accept()和 connect()這類的系統呼叫,所以

在 Unix 系統裡"任何東西都是檔案"的觀念,在網路裝置並不適用;再者,區塊裝置驅動

程式只對來自核心的要求(request)有反應,然而,網路驅動程式必須非同步

(asynchronously)地接收外界的封包,因此,區塊裝置驅動程式會"被要求"送一個緩衝

到核心;相對地,網路驅動程式會‘要求’將進來的封包推向核心,應付網路的核心介面其

操作模式的設計是不同的。

3.1.2. 網路驅動程式架構圖

3.1.3. 註冊網路裝置

alloc_netdev( ) / alloc_etherdev( )

struct net_device *netdev;

struct nic *nic;

int err;

if(!(netdev = alloc_etherdev(sizeof(struct nic)))) {

return -ENOMEM;

Page 12: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-12-

}

alloc_etherdev 會負責配置一個 siezeof(struct net_device) + siezeof(struct nic) 的連續空間並初始化相關參數。 net_device 本身代表一個通用的網路介面,

記錄相關參數與 handler,而 nic 則是用來記錄網路卡的專有資料結構。 alloc_ethernet 在配置後會呼叫 ether_setup(net/ethernet/eth.c)來預先初始化

乙太網路裝置的通用參數。

void ether_setup(struct net_device *dev)

{

dev->change_mtu = eth_change_mtu;

dev->hard_header = eth_header;

dev->rebuild_header = eth_rebuild_header;

dev->set_mac_address = eth_mac_addr;

dev->hard_header_cache = eth_header_cache;

dev->header_cache_update= eth_header_cache_update;

dev->hard_header_parse = eth_header_parse;

dev->type = ARPHRD_ETHER;

dev->hard_header_len = ETH_HLEN;

dev->mtu = ETH_DATA_LEN;

dev->addr_len = ETH_ALEN;

dev->tx_queue_len = 1000; /* Ethernet wants good queues */

dev->flags = IFF_BROADCAST|IFF_MULTICAST;

memset(dev->broadcast,0xFF, ETH_ALEN);

}

register_netdev( )

1、 struct net_device snull_dev = { init : snull_init, }; //初始化函式

Page 13: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-13-

2、 if((result = register_netdev(snull_dev)))) printk(“error”);

呼叫前, 先設定 name 為“eth%d”, 以便其配置 “ethX”

函式內部會呼叫 dev init()

3.1.4. 網路介面的初始化

snull_init( )

1、 Probe function

2、 Called when register_netdev()

3、 Usually avoid registering I/O and IRQ, delay until dev open() time

4、 To fill in the “dev” strcuture

5、 ether_setup(dev)

6、 設定私有資料結構 “priv”; 網路介面生命期與系統一樣長, 可放統計資料

struct net_device

struct net_device {

char name[IFNAMSIZ]; // eth%d

Page 14: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-14-

unsigned long base_addr, unsigned char irq;

unsigned char broadcast[], dev_addr[MAX_ADDR_LEN];

unsigned short flags; // IFF_UP, IFF_PROMISC, IFF_ALLMULTI

Function pointers:

(*init) 初始化

(*open) 開啟介面

(*stop) 停用介面

(*do_ioctl)( )

(*tx_timeout) 逾時處理

(*get_stats) 結算統計資訊

(*hard_start_xmit) 送出封包

(*set_multicast_list) 群播及 flag 變動處理

unsigned long trans_start, last_rx;// for watchdog and power management

struct dev_mc_list *mc_list; // multicast address list

netdev_priv( )

3.1.5. 卸載網路模組

unregister_netdev( )

3.1.6. 開啟與關閉

在介面傳輸封包之前,必須先以 ifconfig 開啟介面,並賦予 IP 位

Page 15: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-15-

ifconfig 設定 IP 位址給介面時:

1、 ioctl(SIOCSIFADDR) 設定軟體位址給介面

2、 ioctl(SIOCSIFILAGS) 要求驅動程式開啟、關閉介面 觸動 open 及 stop

open()

1、 設法取得必要的系統資源(佔領 IRQ, IObase, buffer)

2、 要求介面硬體起動

3、 讀出 MAC, 複製到 dev dev_addr (也可作在 init 或 probe 時)

4、 將 dev dev_addr 設定至介面 MAC 暫存器中

stop()

1、 停止介面硬體

2、 歸還系統資源

3.1.7. 封包的傳送與接收

net_device 將網路介面抽像化,向上連繫 Linux kernel,向下連接硬體特定的實作。 Kernel 只要是呼叫已定義好的介面(handler),而這些 handler 該做什麼時,則是由

driver 的部份去實作。

Page 16: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-16-

資料傳送

1、 將資料排入出境封包佇列(outgoing queue)

2、 呼叫作業方法

hard_start_transmit(struct sk_buff *skb, struct net_device *dev)

僅將封包交付網卡。網卡後續會再將封包傳送至網路(例如 RTL8139)

Page 17: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-17-

Spinlock_t xmit_lock; 只有在返回後才有可能再被呼叫

實務上,於返回之後,網路卡仍忙著傳輸剛交付的封包。

網卡緩衝區小,滿了必須讓核心知道,不接收新的傳輸要求。 netif_stop_queue()與 netif_wake_queue(),netif_start_queue()

註: 還有 Carrier loss detection/Watchdog 的 netif_carrier_on/off() 跟 Hot-plugging/power management 的 netif_device_attach/detach()

3、 核心經手的每一封包,都是包裝成一個 struct sk_buff

4、 指向 sk_buff 的指標,通常取名為 skb

5、 skb data 指向即將被送出的封包

6、 skb len 是該封包的長度,單位是 octet

資料接收

1、 封包接收事件通常是從網路硬體觸發中斷開始

多半寫在 interrupt handler

配置一個 sk_buff,並交給核心內部的網路子系統

Page 18: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-18-

Interrupt-based 較 polling 方式有效率

2、 Example: snull_rx()

skb = dev_alloc_skb(len+2); // 採用 GFP_ATOMIC,可在 ISR 中用

skb_reserve(skb, 2); // 16 byte align the IP field

memcpy(skb_put(skb, len), receive_packet, len); //skb_put()參考 sk_buff

填寫相關資訊

skb dev = dev;

skb protocol = eth_type_trans(skb, dev);

skb ip_summed = CHECKSUM_UNNECESSARY; /* 不必檢查 */

CHECKSUM_HW(硬體算了)/NONE(待算,預設)/UNNECESSARY(不算)

netif_rx(skb); // 交給核心內部的網路子系統

3.1.8. 中斷處置

Interrupt happen when

1、 A new packet has arrived

2、 Transmission of an outgoing packet is completed

3、 Something happened: PCI bus error, cable length change, time out

Interrupt status register (ISR)

1、 Packet reception

Pass to the kernel

2、 Packet transmission is completed

Reset the transmit buffer of the interface

3、 Statistics

Page 19: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-19-

3.2 TCP/IP 通訊協 「TCP/IP」是 Transmission Control Protocol (TCP) 和 Internet Protocol (IP) 的簡稱,

為網路上的一種通訊協定,是上網時大家都遵循的一些規則。有了這些規則,即使是不同的

電腦設備與作業環境,都可以透過這些通訊協定來互通訊息。同時也是因為這些規則,

Internet 才可能有這麼多應用 ( WWW、E-Mail、FTP、Telnet 等 )。TCP/IP 是一個開

放的標準,任何人均可自由的下載和 TCP/IP 相關的技術標準和文件;同時 TCP/IP 也鼓

勵使用者評論這些標準,一同來幫忙改善網路的執行效率。

誰來定技術標準呢?IAB (Internet Activities Board) 提供網際網路的發展方向和訂定技

術標準。IAB 下設有兩個單位:Internet Engineering Task Force (IETF) 和 Internet Research Task Force (IRTF)。Internet Engineering Task Force (IETF) 專責於技術標準

之制定;Internet Research Task Force (IRTF) 則努力於研究 Internet 上的未來方向。

TCP/IP 通訊協定所使用的文件、技術以及通訊協定標準(任何 Internet 上的技術),

都會經過實驗性、推薦使用、評論修訂、標準化,四個步驟來形成,而這些步驟皆是經由 Internet RFC (Requests For Comments) 來實行。RFC 提供了一個實驗性的環境,將新的

技術、文件、通訊協定推薦出來,再經過各種專家的評論調節之後,發表出標準化的技術、

文件及通訊協定。

TCP/IP 通訊協定的標準文件目前都放在 RFC 當中,可以透過檔案傳輸方式來取得,主

機名稱為是:NIC.DDN.MIL,輸入使用者名稱:guest,密碼:anonymous 即可進入。RFC 文件都是以數字來編號,所以必須先知道 RFC 文件編號才可以取得想要的文件。像一篇 TCP/IP 的手冊,其編號是 RFC 1180("TCP/IP Tutorial" by T.J. Socolofsky and C.J. Kale)可下載來看看

3.2.1. TCP/IP 的階層架構

TCP/IP 的階層架構最上層稱為「應用層」,它提供各種網路應用程式(如 WWW、FTP、E-Mail 等);最底層則是「實體層」,它提供實際網路線(如乙太網路、光纖電纜等)上

的傳輸服務。參見下圖。

當我們使用 Internet 上的應用程式時(如用瀏覽器觀看網頁),訊息產生後,會從最

上層,經過一層層的通訊協定,送到最底層,然後經由網路線傳送出去;當對方收到後,

則反向操作,依次往上通過一層一層協定,最後由最上層的應用程式來解釋訊息。像瀏

覽網頁這樣簡易的事,整個傳輸過程卻是靠複雜的 TCP/IP 通訊協定才完成的。更詳盡

的 TCP/IP 知識請參考 TCP/IP 協定堆疊。

Page 20: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-20-

3.2.2. 什麼是 IP 位址?

每一台連上 Internet 的電腦都有一個獨一無二的位址,以方便彼此區分與辨識,這

樣資料才不會送錯,這個位址就是 IP 位址 (IP Address)。目前 IP 位址的長度為 32 位元,通常以四組數字來表達 (xxx.xxx.xxx.xxx),每組數字就是 8 位元長度。但電

腦只認識【0】與【1】,所以每組有 2 的 8 次方 256 個位址,因為在標示上採用 10 進位法,所以每組數字介於 0 跟 255 之間(參見 Internet Protocol ,RFC 791)。

例如,【140.111.2.195】就是一個 IP 位址,它分成【140】、【111】、【2】、【195】四組

數字,中間以【.】點來分隔。IP 位址區分為 A、B、C 三級, D 級目前為實驗性多

點投射 (multicast) 位址,E 級則保留作為未來發展之用。A 級網路只定義第一個數

字,例如 140.0.0.0,後面則讓 A 級網路自行再分配,B 級網路則是前兩位數字,如 140.96.0.0,後面則讓 B 級網路自行再分配,C 級網路則是前三位數字(請參考 IP 位址分級及其他)。

3.2.3. 認識網域名稱

IP 位址有時候實在很難記住,所以有人想出了用英文字來代表數字的方法,因而有了

網域名稱 (Domain Name)。但是如何確保 IP 位址與網域名稱的單一性呢?為了保持 IP 位址的單一性與統一管理,所有的 IP 位址都由 Internet Assigned Numbers Authority (IANA) 來分配與管理,而網域名稱則由 Internet Network Information Center (InterNIC)來掌管,不同的國家與區域均有不同的 NIC 來管理網域名稱,如

亞太地區有 APNIC (Asia-Pacific Network Information Center),而在台灣則由 TWNIC 來負責。網域名稱由右唸至左,表現方式如下:

domain names:在最左邊,為最上層網域名稱 (top-level domain name,TLD),可分為 Generic Domains 和 Country Code。

Generic Domains:區分如下 名稱 單位類別

net 網路管理機構或 ISP,如:Hinet、Acernet

Page 21: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-21-

edu 學術研究單位,如台大,交大等

com 公司行號,如 IBM 公司,微軟公司

org 財團法人等非官方組織,如基金會

int 國際性的組織

gov 政府官方單位,如教育部、行政部

mil 軍事單位,例如美國國防部

firm 公司

store 銷售商

web 全球資訊網有關事業

arts 與文化或娛樂事業相關的活動

rec 與休閒和娛樂事業相關的活動

info 資訊服務業者

nom 個人網址

Country Code Domains (國碼):除了美國之外,每個國家都要加上國碼,例如: tw 台灣

ca 加拿大

jp 日本

au 澳洲

hk 香港

fr 法國

First level subdomain name:表明身分,就是該公司或組織的全名或縮寫,

如: NTU.........National Taiwan University 台灣大學

NCTU.......National Chiao-Tung University 交通

大學

IBM..........IBM 公司

Microsoft....微軟公司

Additional level subdomain names (optional):該公司或組織中某一

個單位,如: ee.ntu.edu.tw..........台灣大學電機系

Page 22: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-22-

ccl.itri.org.tw..........工研院中的電通所

Machine names:表明這台機器是什麼伺服器 (server) ,用來當 WWW 服務機器,還是用來做 FTP,均可由此看出,不過它的名稱沒有一定的限制,WWW 也可稱為 W3,或是任何其他名稱。

1984 年網域名稱系統 (Domain Name System,DNS) 正式出爐,廣泛地運用在網際

網路上。DNS 伺服器負責網域名稱與 IP 位址的轉換工作,也就是當我們輸入網域名

稱之後,透過 DNS 伺服器即可找到相對應的 IP 位址,這就是為什麼當我們可以輸入 www.acer.net 可以代表 203.66.109.2,用 www.hinet.net 可以代表 168.95.192.1 的原因了。所以在設定撥號網路時,如果沒有正確設定好 DNS 伺服器位址,就可能發

生無法連上任何網站的情形,因為你在瀏覽器中輸入的是網址,但電腦找不到 DNS 伺服器去轉換成 IP 位址;不過如果你輸入的是 IP 位址,就不會有任何問題。

利用 DNS 的基本功能,即使不知道 IP 位址,也可很快的猜出要找的對象名稱,如要

上台大的網站,就是 www.ntu.edu.tw,要找微軟公司的資料就到 www.microsoft.com;而台灣微軟就再加上 tw 國碼,成為 www.microsoft.com.tw。而 ftp.nctu.edu.tw 則是交通大學的 FTP 伺服器了。同樣的,Acernet 的 WWW 伺服器就叫做 www.acer.net,而 AcerNet 的 E-mail 伺服器就叫做 email.acer.net 了。很容易吧?

雖然網域名稱使用已多年,但是面對 IP 位址有限,或是有人先行註冊等管理上的問

題,最近更因為收費問題,使得 NIC 在管理上面臨很大的挑戰,您可參考「網域名稱

系統紛爭不斷」、「申請網域名稱仍以一公司一 Domain Name 為原則」。而握有台灣網

域名稱政策大權的 TWNIC 則受到很大的質疑。若您要申請 .com.tw, .org.tw, 及 .net.tw 等網域名稱,請至 Domain Name 註冊系統看看。另外如果您需要更進一步

了解 DNS,交通大學領域名稱伺服系統網頁有很詳盡的說明。

3.2.4. 新一代的 IP 位址

目前所使用的 32 位元的 IP 源於 80 年代早期,其位址介於 0.0.0.0 到 255.255.255.255 之間,有限的位址顯然不敷全世界的網際網路所使用。所以在 1995 年時,有人開始提出 128 位元的 IP version 6 (IPv6),也有人稱之為 IPng ( Next Generation Internet Protocol ),希望能增加更多的 IP 位址,同時也能進一步提高網

路的傳輸品質與安全性。

Page 23: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-23-

3.3 HTTP—超文件傳輸協定(HyperText Transport Protocol) 1994 年 5 月 Mosaic 瀏覽器問世剛一年,此時全球資訊網(Worldwide Web, WWW)的使

用量及安裝量突然開始暴漲,根據資策會整理的資料,至 1996 年底為止,全球已有 186 個

國家連上了網際網路,而全球曾用過或可以用網際網路的使用人口,據網際網路協會

(Internet Society)的估計約為七千萬人。如果是較嚴格的定義,則使用者人數的估計由

二千三百萬人至三千萬人不等。同時,網際網路上的主機數,至 1997 年一月地為止,共有

一千六百萬個,比 1996 年七月底成長 13%;連上網際網路的網路至 1996 年七月底時已達

134,265 個,比 1996 年一月成長 43%。在台灣地區,十大商業網路中心(如 Hinet、SeedNet等)截至 1997 年一月底,已經在一年內成長到 34 萬戶,再加上台灣學術網路(TAnet)的

35 萬使用人口,台灣地區 Internet 用戶人口應已超過 70 萬人。同時連上網際網路的主機

數已達 34,668 個,網際網路即將成為數據通訊的全球網路,並發展為未來的全球資訊基礎

架構(Global Information Infrastructure, GII)。

另一方面,WWW 是一個真正的開放系統,因為它符合開放系統的三大要件:可攜性

(portability)、互通性(interoperability)、及可擴充性(scalability)。先說可攜性及互通

性,在 WWW 的架構裡,不但 CPU 廠牌不重要、伺服器廠牌不重要、用戶端的電腦廠牌不

重要,連作業系統及視窗系統都可以隨意、隨時替換,只要由伺服器到用戶端遵循一定的規

格(CGI, TCP/IP, HTTP, HTML)。而這些規格雖然還沒有國際標準,卻有比一般國際標準

更加實際與一致的業界標準,並由強大的市場力量加以約束。事實上,在 Web 的世界裏,我

們看到各個廠牌的電腦、網路、甚至軟體都能實際上互通。可見,WWW 的架構具有高度可

攜性及互通性。

WWW 的架構又有極大的可擴充性,這是因為 Web 的用戶端送到伺服器的每一個要求都是

獨立的,而伺服器可以隨時經由網路重送到網路上其他任何可以處理此要求的伺服器。也就

是說,Web 伺服器可以採「螞蟻雄兵」的方式,由許多散佈在網路上的小伺服器合作作業,

而不一定非要把所有資料集中處理不可,同時,只要伺服器能量足夠,也可以將許多應用放

在同一部機器上處理。不僅此也,這些調度不須經過任何移植(porting)的手續,因此,

WWW 架構有極大的可擴充性。

既然 WWW 是真正的開放系統,除了適合做為全球資訊網的基礎架構外,自然也是企業內、

或企業間最好的私有網路架構,此方面的發展雖然較 Web 在公共網際網路上的應用為晚,但

其潛力不可低估。

以政府機關資訊處理工作來看,Web 在公開的網際網路上將對民眾提供的服務預期將依以下

步驟逐步發展:(1)線上查詢以提供介紹性及業務性資訊,(2)線上送件以提供線上申報、線上

申請等服務,(3)線上作業以提供幾乎所有對民眾的服務,包括線上發證、線上查證、線上繳

費、等等。除此之外,Web 還可在政府機關內部或政府機關間提供更好的線上作業方式。預

計在三至五年內政府機關電腦化步調將因 Web 在相關法令、資訊安全、及資訊系統應用技術

快速的成熟而加速進行。

依此看來,除了 Web 的應用正在急速成長外,Web 的架構本身甚至有可能造成新的資訊革

命。因此其相關標準自然值得我們注意。

Page 24: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-24-

超文件傳輸協定(HyperText Transport Protocol, HTTP)與其他 Web 上所使用的主要標

準規範的關係,HTTP 是用來規範資料的傳輸的、HTML 及 VRML 是用來規範在用戶端展示

文件的、而 CGI 則是規範伺服器端與應用程式的介面的。

3.3.1. HTTP 規範沿革

目前最成熟的 HTTP 規格是 HTTP/1.1(RFC2068), January 1997, 是在演變成網際

網路正式標準過程中的一份草案,這是由 IETF(Internet Engineering Task Force)下所屬 HTTP Working Group(HTTP-WG)所編訂。按照 IETF 的工作規則,所有的

標準草案可分為 Internet Drafts 及 Request for Comments(RFC)。前者為工作文件,

有效期六個月,可隨時更改或取消;後者為 IETF 所屬 IAB 的永久性文件,有些會發展

成為標準,稱為網際網路標準(Internet Standard),故 HTTP/1.1 正在成為網際網路

標準的過程中。

HTTP 規格可在 http://www.w3.org/pub/WWW/protocols 取得,此外,由 http://www.ietf.cnri.reston.va.us/home.html 可察看其他相關規格與消息。

HTTP 雖早自 1990 年起就已被普遍使用,但過去許多年並無統一規範,此項不明確的

規範後來通稱為 HTTP/0.9。直到 1996 年 6 月一份僅供參考的文件方才由 Internet Society 的 HTTP Working Group 出版,稱為 HTTP/1.0。HTTP/1.0 雖有正式文號

(RFC1945),但僅為一臨時性文件,有效期為六個月,此文件到 1996 年年底已到期。

到 1997 年一月,一份正式的文件,RFC2068 適時出爐,至此 HTTP 才算有了一份正式

的標準草案。

評估項目

規範項目

規範共

識程度

產品可

獲得性

規範穩

定性

規格完

整性

技術成

熟性

業界使

用狀況

使用自

由度

HTTP ● ● ● ● ● ● ●

●:高 ○:中 △:低 規範共識程度: Level of Consensus 技術成熟性: Maturity

產品可獲得性: Product Availability 業界使用狀況: De Facto Usage

規範穩定性: Stability 使用自由度: Freedom of Usage

規格完整性: Completeness

Page 25: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-25-

3.3.2. HTTP 功能及用途

HTTP(HyperText Transport Protocol)自 1990 年以來就被全球資訊網採用為基礎

通訊協定,它是一種應用階層(Application-level)的通訊協定,特性是輕便、快速,

特別適合如 Web 這種分散式、合作式的超媒體資訊系統。HTTP 具通用性(generic)、無記憶性(stateless),且為物件導向,HTTP 特別具有資料型態(typing),並可協商

資料表徵(data representation),所以依此建造的系統可以不受傳輸資料內容的影響。

HTTP 規範用戶(client)與伺服器(server)之間的通訊,用戶是一個程式,它按照

HTTP 的規範建立一個通達伺服器(另一個程式)的連結(connection)以送出其「要

求」(request);所謂「要求」就是對在某一伺服器上的「資源」(resource)請其做某

種動作,例如「取极」(retrieve),伺服器收到要求後,則將其「回覆」(response)送

回。

HTTP/1.1 在實際應用時其用戶與伺服器會有一些分工,原始的要求通常由「使用者代理

人」(user agent)提出,而最終的回覆則由「源伺服器」(origin server)取出或造出

所要的資源加以送回。這些在使用者代理人與源伺服器之間的要求與回覆往往會經歷若

干「中介者」(intermediaries)的處理,這些中介者兼具在 HTTP 協定所規定的用戶與

伺服器兩種角色,介於兩個連結之間發揮作用。最常見的中介者有三種:代行者伺服器

(proxies)、閘道伺服器(gateways)、與管道伺服器(tunnels)。

「代行者」為轉送者,它接收對資源的要求,加以改寫、再傳到要求所指定的伺服器。

「閘道」則為要求的接收者,必要時將要求轉譯成對其他伺服器的要求。

「管道」為兩個連結之間的接力者,不對其傳輸信息作任何更改,管道的使用主要在不

須瞭解所傳輸的信息的應用上,例如防火牆或利用網際網路做機密通訊。

除了管道外,另外兩種中介者都可以提供暫存(caching)的服務以縮短回應的時間或減

少網路的負擔,所謂暫存就是將連結中所傳輸的物件加以儲存,在下次再需要時就可直

接傳回,不必再向源伺服器取得。HTTP/1.1 對何種物件可以暫存、暫存的要件、如何確

認可以暫存等等有詳盡的規定。

HTTP 倚賴其下層的傳輸通訊協定來完成通訊,因為 HTTP 主要在網際網路上使用,最

常見的傳輸通訊協定就是 TCP/IP。但是 HTTP/1.1 的規範並未規定 TCP/IP 為其唯一可

用的傳輸協定,因此理念上任何能提供可靠傳輸的機制都可使用。HTTP 與其下層通訊

的介面不在 HTTP/1.1 規範內。

HTTP 事實上提供了一種可供傳輸含有超媒體連結物件的基礎通訊協定,所以除了 Web的應用外,HTTP 也被其他網際網路的應用系統廣為採用,這些應用系統採用 SMTP、NNTP、FTP、Gopher、及 WAIS 等通訊協定。

HTTP/0.9 是一個簡單的「要求/回覆」通訊規範,其目的僅在傳輸原資料。HTTP/1.0主要的改進在於允許所傳輸的資料可以採取類似 MIME 的格式,也就是說,可以指定所

傳輸資料的格式,資訊也可以允許使用「修飾語」(modifiers)改變要求與回覆的運作

意義。如此一來就大大的擴展 HTTP 可應用的範圍。

Page 26: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-26-

HTTP/1.1 主要的改進在:具分層架構的代行者(hierarchical proxies)、傳送物件的暫

存(caching)、常續的連結(persistent connections)、擬真主機(virtual hosts)。

HTTP/1.1 除了以上主要是效能上的改進外,另一項主要的功能就是允許用戶、伺服器等

之間互相交換各自能力的資訊,同時也規範了同一物件的多種表現方式,例如多國語言、

不同顯像解析度、等等。如此一來,自大型主機、手持 PDA(個人數位助理)、乃至電

視機、電話機等各種各樣的設備,以及複雜與簡單的程式均有可能以各自最適合的方式

提供網際網路應用服務。這項功能主要是透過在「標頭」(header)中的資訊,以及所

謂「內容交涉」(content negotiation)的機制來提供的。

HTTP/1.0 的另一個問題是許多號稱合乎 HTTP/1.0 的建置其實並不完整。因此

HTTP/1.1 對所謂「必有」(required)、「應有」(should)、及「得有」(may)的各種性

能規定得十分嚴謹,因此所謂符合 HTTP/1.1 的定義就比較清楚了。

3.3.3. ghttpd

ghttpd—Gaztek HTTP Daemon 是 UNIX 系系下的 web 伺服器程式,它是,系下系的

軟體並公開原始程式碼。ghttpd 支持 CGI 是一款容易配置的 HTTP 服務器。

3.4 CGI 程式設計 CGI 是 Common Gateway Interface 的簡稱,一般中譯為:共通閘道介面。

Common 是指共通的、不限於一種作法的意思,在這裡指的是語言的獨立性,換言之,可以

用任何一種程式語言來實作。

Gateway 是說伺服器的應用能力是經由擴充得到的,它將查詢等要求交由外部程式處理,處

理完了之後,再將結果傳回。

Interface 是指一種介面的意思,符合此一介面標準,便可以輕鬆地製作外部程式,而無需

去擔心或處理低階的問題。

由於網際網路上的 WEB 伺服器 (我們稱為 Server 端) 採用 HTTP 協定,該協定只是單

純的回應客戶端 (我們稱為 Client 端,通常是使用者的瀏覽器) 的文件要求,即 Client 端要求什麼,Server 就傳回什麼,因此在 HTTP 協定下,Server 只有傳回靜態文件的能力

而已,無法像各種平台上的伺服器一樣,藉由執行各類應用程式,來達成客戶端的各種查詢

或交易等要求。

為了彌補此一缺點,WEB 伺服器勢必要藉助外部程式來執行 Client 端的要求,再將處理結

果傳回給 Client 端。例如:使用者輸入一個關鍵字,要求列出某些書籍的作者或書名,Server 接收到這個關鍵字之後,交由外部程式去處理,通常是由資料庫中去尋找,最後將尋著的結

果回應給 Server,Server 再將它傳回給瀏覽器端的使用者。

Page 27: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-27-

CGI 就是提供給外部程式的一種介面,只要符合此一介面標準,程式設計師便可以輕鬆地使

用該平台上支援的任何一種程式語言來撰寫外部程式,於是我們說:凡是符合 CGI 介面標

準的外部程式,就稱之為 CGI 程式。

撰寫 CGI 程式,常見的語言有 Perl、Python、C、C++、VB,甚至某些 UNIX 中的 shell script 都有人使用。

我們可以這樣來看待 CGI 以及 CGI 程式:

CGI 程式是 WEB 伺服器應用能力的擴充(Extension),而 CGI 則是此一擴充能力的介

面,熟悉瞭解此一介面的原理及運作方式,我們便可以為 WEB 伺服器建立即時互動的能

力,以滿足客戶端的要求。

3.4.1. CGI 架構圖

3.4.2. 撰寫 CGI 程式需要那些工具

一般而言,撰寫 CGI 程式,所需要的工具並不多,也不需要花大錢,各項工具都可以

輕鬆找到。

純文字的編輯器,例如:

Win95/98 中的記事本

PE II

Page 28: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-28-

漢書

UltraEditor(推薦)

vi (Unix 系統中的編輯器,推薦)

Emacs (Unix 系統中的編輯器,推薦)

其它

選用一套語言編譯器,例如:

若打算用 Perl 來撰寫 CGI 程式,則需 Perl 編譯器通常,若想在自己的機器上

測試 CGI 程式,才需要自行安裝一套。

C/C++ 編譯器。

其它語言編譯器,視你所選用的語言而定。

3.4.3. CGI 程式設計如何入門

1、 您必須有點程式語言的基礎,不需要太高深,但至少基本的觀念要了解,若無,那

麼您就應該先行補足這一方面的知識,否則 CGI 程式設計對您而言,可能會是一

種很痛苦的挫折。

2、 了解 CGI 程式的基本觀念和原理,最好找一本 CGI 的入門書籍來看看。

3、 觀摩別人的程式,由模仿開始。CGI 資源索引 這個站台是您取得 CGI 觀摩程式的

好地方!

4、 動手實作 CGI 小程式,由實作中磨鍊紮實的實務經驗,並將各種情況記錄下來,

不管成功或失敗。

5、 不斷地培養 CGI 偵錯的能力和經驗,CGI 程式設計比其它程式設計需要更多一點

的耐心和細心,因為 CGI 程式的偵錯,並不是很容易,只要一點小小的不注意,

便可能產生錯誤的結果,而且可能找了老半天也找不出錯誤之處何在?!因此,剛

入門時,錯誤的情況是彌足珍貴的磨鍊機會,千萬不要灰心喪志,輕言放棄,最好

將它記錄下來,然後先將問題單純化,分割問題成小單位,再逐步檢查。這部份的

經驗是 CGI 程式設計的入門功夫,切切不可小看它喔!

6、 多和別人討論並交換心得經驗,多看相關的 News 信區。

7、 自定一個中型程式為目標,轉變模仿的作法,加入自己的創意和想法,開始建立自

己的風格。

8、 不斷地看書、吸收新知,尋求突破和進階。

Page 29: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-29-

3.4.4. 第一支 CGI 程式

一個簡單的 CGI 程式碼,如下:

#! /usr/bin/perl

# (第一列用來指出 perl 的路徑)

# (第二列開始,若有出現 # ,則表示該列為註解,# perl 將不會執行它)

print "Content-type:text/html\n\n";

# 這是 MIME 表頭,用來告訴瀏覽器要送出的資料型態是什麼?

# 一定要寫出這一行,否則會出現 Error 500 錯誤

# 注意:每列命令用 ; 做為結束!

# 接下來印出欲顯示的網頁內容

print "<html><head><title>CGI 哈囉!</title></head>";

print "<body bgcolor='white'>";

print "<h1>Hello, world!!</h1>";

print "</body></html>";

執行方法

1、 將 CGI 程式用 FTP 軟體送上網頁 cgi-bin 目錄中

2、 附屬檔名通常為 .cgi 或 .pl

3、 注意一定要用 ASCII 模式上傳,否則會出現 Error 500 錯誤

4、 將 CGI 程式屬性改為 755

5、 在您的瀏覽上位址列處鍵入:http://主機位址/cgi-bin/hello.cgi

Page 30: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-30-

3.4.5. CGI 如何取得傳遞資料?

一般而言,欲將處理資料傳遞給伺服器,大多使用以下二種方法:

1、 GET:

此法會將資料以鍵和值(Key-Value)成對的方式,附加在 URL 之中,若有兩項以上

的資料,則各對鍵值之間用 & 隔開。

例如:

http://主機位址/cgi-bin/test.cgi?name=John&age=18

即是將 (name, John) 以及 (age, 18) 二組鍵值以 GET 的方式傳遞。當然也可以

利用 HTML 語法中的 Form 表單,將 method (傳遞方法)設為 GET。

所謂鍵值,其實就是變數的概念,鍵(Key)就是變數的名稱,值(Value)就是變數的內

含。如果您要將一個內含為 John 的變數 name,傳遞給伺服器,那麼只要在 URL 之後加上個問號(?),並以 name=John 的方式附加上去即可。

GET 的缺點是:URL 字串長度有一定的限制,若鍵值太多太長,可能會使得部份

資料被截掉,而無法傳送至伺服器。

以 GET 的方式傳遞時,伺服器會將資料放入環境變數 QUERY_STRING 之中,

我們必須由這個環境變數來取得資料。

2、 POST:

這種方式和 GET 作法迴異,POST 利用 HTML 語法的 Form 表單,由瀏覽器將

鍵值傳給伺服器,並放入伺服器的標準輸出入機制中,由於它沒有 GET 的缺點,

因此可以傳送較多的資料,一般而言,我們大多使用 POST 的方式。欲使用 POST 方式,要在表單中將方法 (method) 設為 POST 才行。以 POST 的方式傳遞時,

我們必須由標準輸出入來取得資料,資料的長度,伺服器將它記錄在環境變數 CONTENT_LENGTH 中。

3、 範例:

若以 GET 的方式傳遞,例如 http://www.ols3-cgi.com/cgi-bin/test.cgi?name=John&age=18

則以下列方式來取得資料:

$temp = $ENV{'QUERY_STRING'};

此時 $temp 中的內含即為 name=John&age=18

若以 POST 的方式傳遞,則以下列方式來取得資料:

read(STDIN, $temp, $ENV{'CONTENT_LENGTH'});

Page 31: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-31-

此時 $temp 中的內含即為 name=John&age=18

若您使用 CGI.pm 模組的話,那麼取得資料的方法更是十分簡單易懂,方法如下:

use CGI; # 宣告使用 CGI.pm 模組

$q=CGI->new(); # 要求配置一個 CGI 物件

$user_name=$q->param('name'); # 取得變數 name 的內含

$user_age=$q->param('age'); # 取得變數 age 的內含

此時,$user_name 的內含即為 John,$user_age 的內含則為 18

3.4.6. CGI 如何將傳遞資料解碼?

某些字元對伺服器而言具有特殊意義,若欲傳遞給 CGI 程式處理的資料中含有這些字

元,那麼瀏覽器會對這些字元予以編碼,CGI 程式在取得這些經過編碼的資料後,必須

進行解碼的動作,才能將傳遞的資料予以還原。

範例如下:

解碼的方法:

if ($ENV{'REQUEST_METHOD'} eq 'POST') {

read(STDIN, $temp, $ENV{'CONTENT_LENGTH'});

} else {

$temp=$ENV{'QUERY_STRING'};

}

@key_value=split(/&/,$temp);

foreach $item(@key_value) {

($key,$value)=split (/=/,$item,2);

$value=~tr/+/ /;

$value=~ s/%(..)/pack("c",hex($1))/ge;

$data{$key}=$value;

Page 32: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-32-

}

此時 %data 這個雜湊陣列即取得了解碼後的資料。

4. 實作

4.1 系統設置

4.1.1. 系統硬體設置

請參考[1] 4.1.1、System H/W、S/W setup。

4.1.2. 系統軟體設置

請參考[1] 4.1.1、System H/W、S/W setup。

註:以下操作平台若沒有特別說明時,都是在 Linux host 端。

4.1.3. 實驗程式碼設置

注意事項

本實習所有原始程式碼都將解壓縮到/usr/src/microtime 的路徑下,所以在開始本實習

之前請使用者檢查目前 linux kernel source 的編譯環境是否也是在

/usr/src/microtime 路徑下,如果目前 inux kernel source 的編譯環境是

/usr/src/creator/pxa270 路徑下,請執行下列命令修改 inux kernel source 的編譯路

徑,如下: SHELL> mv /usr/src/creator/pxa270 /usr/src/microtime

解壓縮 RM-033-04-403_Creator-PXA270_ Linux_Network_Application.zip

檔,其包含下列檔案:

Page 33: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-33-

RM-033-04-403_XXX.pdf

RM-033-04-403_XXX.ppt

RM-033-04-403.tar.gz

user application code setup—Linux_NetWork_Application:

開啟 Windows Host 端檔案總管,將 RM-033-04-403.tar.gz 檔複製到 S:\。

接下來要安裝程式碼,請在 Linux Host 端鍵入下列命令,如下: SHELL>cd /usr/src SHELL>tar -zxvf RM-033-04-403.tar.gz SHELL>cd microtime/build-src/output SHELL>./runme.bat

此時在/usr/src/microtime/package 目錄下產生 RM-CGI、RM-ghttpd、RM-netap 這

幾個目錄。

註 1:XXX 代表實習的檔案描述。

註 2:”S:\”代表 Samba server 所所建立的網路機磁碟。

註 3:在 SHELL>提示符號之後均為同一行。

4.1.4. 重要檔案說明

<目錄>/檔案 說明

</usr/src/microtime/pro/host/src/BUILD/RM-CGI > <HelloCGI> 包含 Hello CGI 相關的程式碼 <video> 包含 video 相關的程式碼 <WebLed> 包含 WebLed 相關的程式碼

</usr/src/microtime/pro/host/src/BUILD/RM-ghttpd > <ghttpd> Ghttpd-1.4 預設的安裝路徑 <ghttpd-1.4> 包含 ghttpd-1.4 相關的程式碼 <ghttpd-sample> 包含 ghttpd-1.4 編譯產生的相關檔案

</usr/src/microtime/pro/host/src/BUILD/ > <RM-netap> 包含 video 相關的程式碼

Page 34: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-34-

4.2 實作進行

4.2.1. 原始碼檔案瀏覽

4.2.2. 編輯 Source Code

建立環境變數: 1. 建立$HOME/bin/目錄,要查詢$HOME 所對應的路徑,可利用”echo $HOME”

命令來查詢。 2. 加入 microtime 檔案

export MICROTIME_BASE_DIR=/usr/src

export MICROTIME_ROOT_DIR=microtime

export MICROTIME_LINUX_DIR=$MICROTIME_BASE_DIR/$MICROTIME_ROOT_DIR/pro/devkit/lsp/create-pxa270/linux-2.6.15.3

export MICROTIME_TARGET_DIR=$MICROTIME_BASE_DIR/$MICROTIME_ROOT_DIR/pro/devkit/arm/pxa270/target

export MICROTIME_ROOTFS_DIR=$MICROTIME_BASE_DIR/$MICROTIME_ROOT_DIR/rootfs

export MICROTIME_BUILD_PACKAGE_DIR=$MICROTIME_BASE_DIR/$MICROTIME_ROOT_DIR/pro/host/src/BUILD

export MICROTIME_USR_LOCAL_DIR=$MICROTIME_TARGET_DIR/usr/local

export MICROTIME_USR_DIR=$MICROTIME_TARGET_DIR/usr

export MICROTIME_HOST_DIR=$MICROTIME_BASE_DIR/$MICROTIME_ROOT_DIR/pro/host

註:儲存檔案格式請用 unix format

Page 35: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-35-

4.2.3. Make Kernel Image

4.2.4. Make Device Driver/ User Application

編譯 Linux_Network_Application:

1、 針對 RM-CGI/HelloCGI 的編譯如下:

SHELL> cd /usr/src/microtime/package/RM-CGI/HelloCGI

SHELL> make

此時在 RM-CGI/HelloCGI 目錄下產生 HelloCGI 相關的範例程式執行檔。

2、 針對 RM-CGI/video 的編譯如下:

SHELL> cd /usr/src/microtime/package/RM-CGI/video

SHELL> make

此時在 RM-CGI/video 目錄下產生 video 相關的範例程式執行檔。

3、 針對 RM-CGI/WebLed 的編譯如下:

SHELL> cd /usr/src/microtime/package/RM-CGI/WebLed

SHELL> make

此時在 RM-CGI/Webled 目錄下產生 WebLed 相關的範例程式執行檔。

4、 針對 RM-ghttpd 的編譯如下:

SHELL> cd /usrs/rc/microtime/package/RM-ghttpd/ghttpd-1.4

SHELL> make

SHELL> make install

此時在 RM-ghttpd/ghttpd 目錄下安裝 ghttpd 相關的範例程式執行檔。

Page 36: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-36-

4.2.5. 編輯 Root Filesystem

[1] 建立目錄 SHELL>cd /usr/src/mirotime

SHELL> mdkdir rootfs/usr/local

SHELL> mdkdir rootfs/usr/local/ghttpd

SHELL> mdkdir rootfs/usr/local/ghttpd/cgi-bin

SHELL> mdkdir rootfs/usr/local/ghttpd/htdocs

SHELL> mdkdir rootfs/opt/microtime/RM-netap

[2] 備份 rootfs 目錄和刪除檔案: 請勿缺少’.’ SHELL>cd /usr/src/mirotime

SHELL>tar cvzf rootfs_backup.tar.gz rootfs

SHELL>find ./rootfs –type f|xargs rm –f

SHELL>find ./rootfs –type l|xargs rm -f [3] 執行複製,步驟如下:請勿缺少’.’和”..”

注意事項:本步驟執行後,會將本實習的相關檔案安裝到 rootfs 目錄當中,為了避,

重複安裝所造成的問題,如果是第二次執行本步驟,在執行之前請先執

行”4.2.8 實驗環境復原”。 SHELL>cd /usr/src/mirotime/build-linux

SHELL>./mt-handle_rootfs.sh install RM-033-04-403

[4] 減少多餘檔案 SHELL>./mt-delete_garbage_file.sh

[5] 產生壓縮檔: 請勿缺少’*’

SHELL>cd ../rootfs

SHELL>tar cvzf ../RM-033-04-403_rootfs.tar.gz *

此時在/usr/src/microtime 目錄下,產生一個壓縮檔 RM-033-04-403_rootfs.tar.gz,這個壓

縮檔包含了上一節編譯好的 image 檔和執行時所需要的 resource,請使用者依照下一節的介紹,

再啟動 Linux Kernel 之前把這個檔案解壓縮到合適的位置。

Page 37: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-37-

4.2.6. 驗證

本小節將示範在 Linux Target 端的 Embedded Linux 啟動後,如何執行及驗證本章所介紹的

Linux 基本應用程式,操作步驟如下:

1、 參考[1] 4.2.6、驗證的說明”啟動 Kernel”。

2、 將 cgi 檔的屬性改成 nobody,請在 Domingo 的 UART form 中執行如下:

root@Creator:/$ cd /usr/local/ghttp

root@Creator:/$ chown nobody ./cgi-bin/HelloCGI.cgi

root@Creator:/$ chown nobody ./cgi-bin/video.cgi

root@Creator:/$ chown nobody ./cgi-bin/led_flash.cgi

root@Creator:/$ chown nobody creator-pxa270-lcd.ko

root@Creator:/$ chown nobody /dev/lcd

3、 載入 Creator 母板周邊 I/O 驅動程式:

root@Creator:/$ insmod creator-pxa270-lcd.ko

4、 Linux Target 端啟動 ghttpd server:

root@Creator:/$ ./ghttpd &

5、 Login 到 Linux Target 端 ghttpd server:

請在 Windows Host 端,開啟 IE 並在網址欄鍵入「http://xxx.xxx.xxx.xxx:1234」,則開啟下列畫面,如下:(註:xxx.xxx.xxx.xxx 代表 Linux Target 端 IP)

Page 38: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-38-

6、 RM-CGI/vodeo 測試:

請在 Windows Host 端,開啟 IE 並在網址欄鍵入

「http://xxx.xxx.xxx.xxx:1234/video.html」,則開啟下列畫面,如下:(註:

xxx.xxx.xxx.xxx 代表 Linux Target 端 IP)

7、 RM-CGI/WebLed 測試:

請在 Windows Host 端,開啟 IE 並在網址欄鍵入

「http://xxx.xxx.xxx.xxx:1234/webled.html」,則開啟下列畫面,如下:(註:

xxx.xxx.xxx.xxx 代表 Linux Target 端 IP)

Page 39: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-39-

在 Web Led Form 中有 Lighted LED 0~7 的 checked box,使用者可以藉由 checked box的設定來控制 Linux Target端Creator母板 LED的亮或滅。設定完成後按 « Do it !« button,則出現下列畫面,如下:

Page 40: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-40-

此時觀察 Linux Target 端 Creator 母板的 LED,是否依照設定來顯示。

4.2.7. 修改與驗證

4.2.8. 實驗環境復原

請在 Linux Host 端執行命令,如下: SHELL> cd usr/src/mirotime/build-linux

SHELL>./mt-handle_rootfs.sh uninstall RM-033-04-403

Page 41: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-41-

4.3 程式碼註解

4.3.1. 程式流程圖

5. 結論

6. 習作

Exe-1:

7. 參考資料

[1] RM-033-04-401 字元裝置驅動程式實習.pdf

[2] Intel PXA270 Processor Family Developer's Manual

Page 42: RM-033-04-403 Creator-PXA270 Network-Applicationdns2.asia.edu.tw/~rikki/soc107/week17/RM-033-04-403_Creator-PXA… · -1- DOC Number : RM-033-04-403 DOC Version : V1.01 Release

-42-

[3] Creator PreSOCes Development Kit User's Guide