移植sqlite+apache+php

最近兩週都在弄這三個的移植,其中Php的移植更是花了快兩週的時間,着實讓我頭疼,不過好在功夫不負有心人,在各種論壇上積極發帖詢問,最終得到了好人的幫助,成功把php也移植到板子上,所以現在把步驟詳細寫出來,方便跟我一樣的菜鳥們~

開發板:友善之臂micro2440

交叉編譯工具版本:arm-linux-gcc 4.3.2

本地系統:ubuntu 11.04

一、交叉編譯sqlite

sqlite是一個小型數據庫,適合在嵌入式系統中使用,本次移植的Sqlite3.3.8版本,可以從http://www.sqlite.org/download.html上下載,移植方法如下:

1/解壓,進入目錄

2/手動修改Makefilecp Makefile.linux-gcc Makefile

3/vim makefile

 首先找到Makefile文件中的下面這樣一行:cd

TOP = ../sqlite

將其修改爲:

TOP = .

找到下面這樣一行:

TCC = gcc -O6

將其修改爲:

TCC = /usr/local/arm/4.3.2/bin/arm-linux-gcc -O6

找到下面這樣一行:

AR = ar cr

將其修改爲:

AR = /usr/local/arm/4.3.2/bin/arm-linux-ar cr

找到下面這樣一行:

RANLIB = ranlib

將其修改爲:

RANLIB = /usr/local/arm/4.3.2/bin/arm-linux-ranlib

找到下面這樣一行:

MKSHLIB = gcc -shared

將其修改爲:

MKSHLIB = /usr/local/arm/4.3.2/bin/arm-linux-gcc -shared

註釋掉下面這一行:

TCL_FLAGS = -I/home/drh/tcltk/8.4linux

註釋掉下面這一行:

LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm –ldl

注意:在Makefile的上面有一個BCC,這裏就不要修改成交叉編譯鏈,這裏生成的文件需要是gcc編譯的。

原則上,對Makefile的修改主要包括兩個方面:首先是將編譯器、歸檔工具等換成交叉工具鏈中的對應工具,比如,gcc換成/usr/local/arm/4.3.2/bin/arm-linux-gccar換成/usr/local/arm/4.3.2/bin/arm-linux- arranlib換成/usr/local/arm/4.3.2/bin/arm-linux-ranlib等等;其次是去掉與TCL相關的編譯選項,因爲默認情況下,將會編譯SQLite3Tcl語言綁定,但是在移植到ARM-Linux的時候並不需要,因此將兩個與TCL有關的行註釋掉。

4/修改main.mk,因爲makefile包含這個文件。找到這個文件中的下面一行:63: select.o table.o tclsqlite.o tokenize.o trigger.o /,去掉tclsqlite.o這樣編譯的時候將不會編譯SQLite3Tcl語言綁定。

5/make,若報錯

./lemon -DSQLITE_OMIT_CURSOR           parse.y

./lemon: ./lemon: cannot execute binary file

 make: *** [parse.c] Error 126

這是因爲gcc沒有生成lemon文件,所以在這裏執行一下gcc –O2 –o lemon ./tool/lemon.c指令;再次執行make,就生成庫函數文件libsqlite3.a和頭文件sqlite3.h這就是所需要的兩個文件了。

將這兩個文件拷貝到開發板上。



移植apache1.3.39 
交叉編譯工具:arm-linux-gcc 4.3.2 
總體上需要兩個步驟: 
1、編譯本機代碼 
2、利用本機代碼進行交叉編譯 
這是因爲在編譯apache時,需要使用編譯生成的工具製作後續編譯使用的頭文件,交叉編譯工具沒法在本地運行,因此需要本地編譯生成的工具。將apache-1.3.39分別解壓到/home/liubonan/source/(本地編譯用)/home/liubonan/arm/(交叉編譯用):
#cd /home/liubonan/source/apache-1.3.39 
#./configure 所有參數都默認 
#make 
應該沒什麼問題,默認的安裝目錄爲/usr/local/apache,我們這裏不用安裝 準備交叉編譯:
#cd /home/liubonan/arm/apache-1.3.39 
先修更新環境變量,在/etc/profile的最後面加export PATH=/usr/local/arm/4.3.2/bin/:$PATH source /etc/profile;運行arm-linux-gcc -v可以查看環境變量已修改 
#CC=arm-linux-gcc ./configure --prefix=/usr/local/apache 
修改src/main/Makefile這個文件: 
uri_delims.h: gen_uri_delims 
./gen_uri_delims >uri_delims.h 
test_char.h: gen_test_char 
./gen_test_char >test_char.h 
修改爲 uri_delims.h: gen_uri_delims 
/home/liubonan/source/apache-1.3.39/src/main/gen_uri_delims >uri_delims.h
test_char.h: gen_test_char
/home/liubonan/source/apache-1.3.39/src/main/gen_test_char >test_char.h 
這裏借用了剛纔編譯生成的本機代碼裏的工具,然後 
#make
#make install
最後將/usr/local/apache拷貝到板子上的/usr/local/ 以上所有步驟都是在root權限下執行的,修改/usr/local/apache/conf/httpd.conf User nobody Group nobody 
#cd /usr/local/apache/bin 
#./apachectl start 用瀏覽器訪問看是否可以,配置一會再說。。。

移植php-4.4.8 
交叉編譯php同樣需要兩個步驟: 
1.編譯本機代碼
2.利用本機代碼進行交叉編譯
php源碼已經解壓到/home/liubonan/source/(本地編譯用), /home/liubonan/arm/(交叉編譯用) #cd /home/liubonan/source/php-4.4.8/ 
#./configure 
#make 
#cd /home/liubonan/arm/php-4.4.8/
#vim configure 
修改這個文件,註釋掉不必要的錯誤:搜索“can not run test program while cross compiling”,會搜索到很多個這樣的結果: { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } 把它們都改爲 { echo "configure: error: can not run test program while cross compiling" 1>&2; } 這樣做的目的是直接無視交叉編譯測試程序錯誤。
#CC=arm-linux-gcc ./configure –prefix=/usr/local/php –host=ubuntu –target=arm-linux 
#vim Makefile
修改Makefile,找到這段
install-pear-packages: $(top_builddir)/sapi/cli/php @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) /home/liubonan/arm/php-4.4.8/pear/install-pear.php -d "$(peardir)" -b "$(bindir)" /home/liubonan/arm/php-4.4.8/pear/packages/*.tar 
 用上我們剛纔編譯的本機php裏的文件,把它改成
install-pear-packages: /home/liubonan/source/php-4.4.8/sapi/cli/php @/home/liubonan/source/php-4.4.8/sapi/cli/php $(PEAR_INSTALL_FLAGS) /home/liubonan/arm/php-4.4.8/pear/install-pear.php -d "$(peardir)" -b "$(bindir)" /home/liubonan/arm/php-4.4.8/pear/packages/*.tar 
#make 
#make install 
/usr/local/php整個目錄拷貝到板子的/usr/local/ 

配置ApachePHP
接下來就需要修改配置文件,讓apachephp能夠鏈接起來工作。這個配置過程和Windows下使用apache+php的過程類似,因爲我不是把apachephp一起編譯的,只是讓apache認識“.php”這個擴展名,然後調用php。爲了方便,直接給出apache的配置文件,配置文件的位置在ARM Linux文件系統的/usr/local/apache/conf/httpd.conf,其中紅色字是在默認配置文件基礎上修改或添加的內容。

ServerType standalone
ServerRoot "/usr/local/apache"
PidFile /usr/local/apache/logs/httpd.pid
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 0
Port 80
User nobody
Group nobody
ServerAdmin 
[email protected]
DocumentRoot "/home/webroot"

    Options FollowSymLinks
    AllowOverride None


    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all


    UserDir public_html


    DirectoryIndex index.html
    DirectoryIndex index.php
    DirectoryIndex index.php3
    DirectoryIndex index.phtml


AccessFileName .htaccess

    Order allow,deny
    Deny from all
    Satisfy All

UseCanonicalName On

    TypesConfig /usr/local/apache/conf/mime.types

DefaultType text/plain

    MIMEMagicFile /usr/local/apache/conf/magic

HostnameLookups Off
ErrorLog /usr/local/apache/logs/error_log
LogLevel warn
LogFormat "%h %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combined
LogFormat "%h %l %u %t /"%r/" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /usr/local/apache/logs/access_log common
ServerSignature On

    Alias /icons/ "/usr/local/apache/icons/"
    
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    
    Alias /manual/ "/usr/local/apache/htdocs/manual/"
    
        Options Indexes FollowSymlinks MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    
    ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
    ScriptAlias /php4/ "/usr/local/php/bin/"
    # 
注意 "/usr/local/php/bin/" 中最後一個"/"不可少
    
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
    


    IndexOptions FancyIndexing
    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
    AddIconByType (TXT,/icons/text.gif) text/*
    AddIconByType (IMG,/icons/image2.gif) image/*
    AddIconByType (SND,/icons/sound2.gif) audio/*
    AddIconByType (VID,/icons/movie.gif) video/*
    AddIcon /icons/binary.gif .bin .exe
    AddIcon /icons/binhex.gif .hqx
    AddIcon /icons/tar.gif .tar
    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
    AddIcon /icons/a.gif .ps .ai .eps
    AddIcon /icons/layout.gif .html .shtml .htm .pdf
    AddIcon /icons/text.gif .txt
    AddIcon /icons/c.gif .c
    AddIcon /icons/p.gif .pl .py
    AddIcon /icons/f.gif .for
    AddIcon /icons/dvi.gif .dvi
    AddIcon /icons/uuencoded.gif .uu
    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
    AddIcon /icons/tex.gif .tex
    AddIcon /icons/bomb.gif core
    AddIcon /icons/back.gif ..
    AddIcon /icons/hand.right.gif README
    AddIcon /icons/folder.gif ^^DIRECTORY^^
    AddIcon /icons/blank.gif ^^BLANKICON^^
    DefaultIcon /icons/unknown.gif
    ReadmeName README.html
    HeaderName HEADER.html
    IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t


    AddLanguage da .dk
    AddLanguage nl .nl
    AddLanguage en .en
    AddLanguage et .ee
    AddLanguage fr .fr
    AddLanguage de .de
    AddLanguage el .el
    AddLanguage he .he
    AddCharset ISO-8859-8 .iso8859-8
    AddLanguage it .it
    AddLanguage ja .ja
    AddCharset ISO-2022-JP .jis
    AddLanguage kr .kr
    AddCharset ISO-2022-KR .iso-kr
    AddLanguage nn .nn
    AddLanguage no .no
    AddLanguage pl .po
    AddCharset ISO-8859-2 .iso-pl
    AddLanguage pt .pt
    AddLanguage pt-br .pt-br
    AddLanguage ltz .lu
    AddLanguage ca .ca
    AddLanguage es .es
    AddLanguage sv .sv
    AddLanguage cs .cz .cs
    AddLanguage ru .ru
    AddLanguage zh-TW .zh-tw
    AddCharset Big5         .Big5    .big5
    AddCharset WINDOWS-1251 .cp-1251
    AddCharset CP866        .cp866
    AddCharset ISO-8859-5   .iso-ru
    AddCharset KOI8-R       .koi8-r
    AddCharset UCS-2        .ucs2
    AddCharset UCS-4        .ucs4
    AddCharset UTF-8        .utf8
    
        LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
    
    AddType application/x-tar .tgz
    AddType application/x-httpd-php .php3
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php .phtml

    AddEncoding x-compress .Z
    AddEncoding x-gzip .gz .tgz

Action application/x-httpd-php "/php4/php"

    BrowserMatch "Mozilla/2" nokeepalive
    BrowserMatch "MSIE 4/.0b2;" nokeepalive downgrade-1.0 force-response-1.0
    BrowserMatch "RealPlayer 4/.0" force-response-1.0
    BrowserMatch "Java/1/.0" force-response-1.0
    BrowserMatch "JDK/1/.0" force-response-1.0




++++++++++++++++++++++++++++++++++

重新移植php-5.2.9

上篇博客移植的Php4.4.8+sqlite3+apache放到板子上後各項功能單獨運行還好,沒有什麼問題,但是我需要的是他們可以協同工作,動態的調用,在php動態調用sqlite時發現了不能調用這個問題,這兩天着手解決這個問題。查資料發現,php5以後的版本支持sqlite2如果想支持sqlite3,必須要有個pdo-sqlite這個東西,具體是什麼意思,大家可google之。於是,我準備重新移植Php,並把版本升級到php-5.2.9.具體過程簡略如下: 

1,首先交叉編譯zlib-1.2.5 

#CC=arm-linux-gcc ./configure --sahred –prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/ #make #make install 

2,繼續編譯libxml2 

#CC=arm-linux-gcc ./configure --host=arm-linux –prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/ 

#make 

#make install 

3交叉編譯php-5.2.9 

#CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/usr/local/php --enable-pdo --with-sqlite –with- pdo-sqlite --with-zlib=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/ --without-iconv 

#make 

#make install 

install時會提示sapi/cli/php不可執行,這是肯定的,因爲make後生成的是arm版的php,在本地執行不了,這時利用上篇博客的方法在相應的地方修改路徑,或者將arm版的php備份php-backup,再將本地編譯好的php拷貝到sapi/cli/下,再make install,就可已安裝成功了 最後將php-backup拷貝到/usr/local/php/bin/下,覆蓋原來的php,再將php.ini-dist貝到/usr/local/php/lib/下,並改名爲php.ini 

4,因爲目前的/php/文件過大,貌似20+M吧,放到板子上太佔空間,所以strip下,什麼意思google之。 

#Arm-linux-strip /usr/local/php/bin/php 

#Arm-linux-strip /usr/local/php/bin/php-cgi 

再看/php的大小,變小了吧?:-) 

5,將整個/usr/local/php/文件拷貝到板子上 

6,最後修改apache的配置文件httpd.conf,本文是基於上篇博客寫的,由於只動了php所以修改部分是針對上篇而言,請大家注意! 

scriptalias /php4/ “/usr/local/php/bin/”

改爲: 

scriptalias /php5/ “/usr/local/php/bin/” 

Action application/x-httpd-php "/php4/php-cgi" 

改爲: 

Action application/x-httpd-php "/php5/php-cgi" 

寫個phpinfo測試頁面測試下吧,應該可以的,如果有問題,仔細看看哪裏錯了。。 要想php能動態使用sqlite3,還需要做些工作 

1,下載php-sqlite3的壓縮包,解壓 

2,進入該目錄, #/usr/local/php/bin/phpize 

3#CC=arm-linux-gcc ./configure –with-php-config=/usr/local/php/bin/php-config –with-sqlite3=/usr/local/sqlite 

4,#make&&make install 

5,把生成的sqlite3.so放到板子上/usr/local/php/lib 

6,修改php.ini 增加如下語句: extenstion=sqlite3.so 

OK!!!!!!

轉載:http://blog.chinaunix.net/uid-14735472-id-2978639.html

發佈了5 篇原創文章 · 獲贊 37 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章