資訊家電網路伺服器設計
2016 年 6 月
目 錄
第三章 嵌入式平台開發環境
3.2 軟體開發環境
3.2.1 交叉編譯開發環境的建立
第二步 安裝交叉工具鏈
2.解壓arm-linux-gcc-3.4.1.tar.bz2
#tar -jxvf arm-linux-gcc-3.4.1.tar.bz2
3.進入該資料夾,將arm資料夾拷貝到/usr/local/下
# cd usr/local/
#cp -rv arm /usr/local/現在交叉編譯程式集都在/usr/local/arm/3.4.1/bin下面了
3.修改環境變數,把交叉編譯器的路徑加入到path。修改/etc/bash.bashrc檔案 #vim /etc/bash.bashrc
在最後加上:export path=$path:/usr/local/arm/3.4.1/bin
4.立即使新的環境變數生效,不用重啟電腦:
#source /root/.bashrc
5.檢查是否將路徑加入到path:
# echo $path 顯示的內容中有/usr/local/arm/bin,說明已經將交叉編譯器的路徑加入path。至此,交叉編譯環境安裝完成。
6.測試是否安裝成功
# arm-linux-gcc –v
7.編譯hello world程式,測試交叉工具鏈
寫下下面的hello world程式,儲存為hello.c
#include
intmain()
執行下面的命令:
# arm-linux-gcc -o hello hello.c
第四章 嵌入式web伺服器的移植與實現
4.3 boa伺服器的移植
4.3.1 boa的編譯
2. 解壓:tar xzfboa-0.94.13.tar.gz
3. 進入解壓後的資料夾boa-0.94.13內部的 src資料夾,對原始檔進行如下修改
1 由於arm-linux-gcc 編譯器版本過高,對語法的支援有一些改變,所以需要修改compat.h中的
2 #define timezone_offset(foo) foo##->tm_gmtoff
3 為:
4
5 #define timezone_offset(foo) foo->tm_gmtoff4. 然後生成makefile:./configure
5. 修改生成的makefile:預設生成的makefile針對x86平台,我們的目標是針對嵌入式平台,所以需要修改編譯器.
1 更改makefile的31行和32行:
2 cc = gcc
3 cpp = gcc -e
4 更改為
5 cc = arm-linux-gcc
6 cpp = arm-linux-gcc –e6. 在當前目錄下編譯boa原始檔:make
7. 將生成好的boa可執行檔案去掉冗餘資訊: arm-linux-strip boa.
4.3.2 boa移植到ok6410中
1 (1) 修改25行的port埠,用來設定伺服器監聽的埠:
2 # port: the port boa runs on. the default port for http servers is 80.
3 # if it is less than 1024, the server must be started as root.
4
5 port 80
7 #listen 192.68.0.5
8 (3) 修改53、54行的user和group 啟動的uid和gid,使其以root身份啟動
9 # user: the name or uid the server should run as.
10 # group: the group name or gid the server should run as.
11
12 user root
13 group root
14 (4) 修改116行的documentroot位址,即客戶端要顯示的html頁面存放位置
15 # documentroot: the root directory of the html documents.
16 # comment out to disable server non user files.
17
18 documentroot /usr/local/boa
19 (5) 修改輸入網頁輸入主機ip時要顯示的頁面:這裡設為index.html
20 # directoryindex: name of the file to use as a pre-written html
21 # directory index. please make and use these files. on the
22 # fly creation of directory indexes can be _slow_.
23 # comment out to always use directorymaker
24
25 directoryindex index.html
26 (6) 修改cgi程式存放的位置:以http://ip/cgi-bin/cginame 的方式執行cgi 程式時將在/usr/local/boa/cgi-bin 目錄下尋找該程式
27 # scriptalias: maps a virtual path to a directory for serving scripts
28 # example: scriptalias /htbin/ /www/htbin/
29
30 scriptalias /cgi-bin/ /usr/local/boa/cgi-bin/
2. 將配置檔案boa.conf 移動到ok6410的 /etc/boa/ 目錄下。
3. 建立/var/log/boa/ 目錄,這樣boa伺服器啟動時會在該目錄下建立日誌檔案。
4. 將linux系統上/etc/mime.types 檔案複製到ok6410的/etc 目錄下,否則boa伺服器啟動不起來。4.3.3 測試boa伺服器
1. 靜態頁面測試:
2. cgi
程式測試:
#include
int main()4.4 sqlite資料庫的移植
4.4.1 sqlite的編譯
2.解壓#tarxvfz sqlite-3.5.6.tar.gz
3. #./configure--prefix=/home/user_name/sqlite/sqlite-arm --disable-tcl --host=arm-linux--prefix=/home/sqlite-3.6.18/sqlite-arm-linux/
4.編譯並安裝 #make && make install
6.為了減小執行檔案大小,去掉其中的除錯資訊#arm-linux-strip sqlite3
4.4.2 sqlite移植到ok6410中
1.將bin目錄下的sqlite3拷貝到根檔案系統的bin目錄下。
2.將lib目錄下的.so系列檔案和pkgconfig目錄拷貝到根檔案系統的usr/lib目錄下
第五章 armlinux下實現動態頁面的cgi技術
5.2 登入實現
index.html
請登入
$flag3s
led燈的配置檔案
config.ini
led1=0,led2=1,led3=0,led4=1
顯示結果如下:
關於網路伺服器
假如我有數千萬甚至是上億的使用者資料,我想把使用者自增id和使用者名稱username放到快取裡。我的需求是,當要查詢使用者的資訊時,我想先從快取裡根據使用者名稱username獲取到使用者的id,然後再通過id在資料庫裡查詢使用者的資訊。我想當乙個使用者表達到上億的數量級別時,用自增id來查詢肯定...
網路伺服器宕機
1.伺服器程序終止 當伺服器程序終止時,伺服器傳送fin給客戶端,客戶端回以ack,客戶端進入close wait狀態,但還沒有結束連線。此時客戶端阻塞於fgets,客戶端繼續傳送buffer,伺服器傳送rst,客戶端readline返回0。而如果客戶端不理睬readline返回的rst,繼續wri...
linux網路伺服器
在本次中,學習了乙個簡單的基於tcp ip的伺服器 客戶端。在例子中,利用的是af inet域。在linux下,最常用就是af inet,af unix.af unix是linux檔案系統實現的本地要借字。後面的是可以用於包括英特網在內的tcp ip網路通訊的程式。下面來看乙個簡單的基於tcp ip...