最近兩週都在弄這三個的移植,其中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/手動修改Makefile,cp 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-gcc,ar換成/usr/local/arm/4.3.2/bin/arm-linux- ar,ranlib換成/usr/local/arm/4.3.2/bin/arm-linux-ranlib等等;其次是去掉與TCL相關的編譯選項,因爲默認情況下,將會編譯SQLite3的Tcl語言綁定,但是在移植到ARM-Linux的時候並不需要,因此將兩個與TCL有關的行註釋掉。
4/修改main.mk,因爲makefile包含這個文件。找到這個文件中的下面一行:63行: select.o table.o tclsqlite.o tokenize.o trigger.o /,去掉tclsqlite.o這樣編譯的時候將不會編譯SQLite3的Tcl語言綁定。
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,這就是所需要的兩個文件了。
將這兩個文件拷貝到開發板上。
接下來就需要修改配置文件,讓apache和php能夠鏈接起來工作。這個配置過程和Windows下使用apache+php的過程類似,因爲我不是把apache和php一起編譯的,只是讓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