最近两周都在弄这三个的移植,其中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,这就是所需要的两个文件了。
将这两个文件拷贝到开发板上。
移植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/
配置Apache和PHP 接下来就需要修改配置文件,让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 cosine@126.com DocumentRoot
"/home/webroot" <Directory />
Options FollowSymLinks AllowOverride
None </Directory> <Directory "/home/webroot">
Options Indexes FollowSymLinks MultiViews
AllowOverride None Order allow,deny
Allow from all </Directory> <IfModule mod_userdir.c>
UserDir public_html </IfModule> <IfModule
mod_dir.c> DirectoryIndex index.html
DirectoryIndex index.php DirectoryIndex
index.php3 DirectoryIndex
index.phtml </IfModule> AccessFileName
.htaccess <Files ~ "^/.ht"> Order
allow,deny Deny from all Satisfy
All </Files> UseCanonicalName On <IfModule
mod_mime.c> TypesConfig
/usr/local/apache/conf/mime.types </IfModule> DefaultType
text/plain <IfModule mod_mime_magic.c>
MIMEMagicFile
/usr/local/apache/conf/magic </IfModule> 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 <IfModule mod_alias.c> Alias /icons/
"/usr/local/apache/icons/" <Directory
"/usr/local/apache/icons">
Options Indexes MultiViews
AllowOverride None Order
allow,deny Allow from all
</Directory> Alias /manual/
"/usr/local/apache/htdocs/manual/"
<Directory "/usr/local/apache/htdocs/manual">
Options Indexes FollowSymlinks
MultiViews AllowOverride
None Order allow,deny
Allow from all
</Directory> ScriptAlias /cgi-bin/
"/usr/local/apache/cgi-bin/"
ScriptAlias /php4/ "/usr/local/php/bin/"
# 注意
"/usr/local/php/bin/"
中最后一个"/"不可少
<Directory "/usr/local/apache/cgi-bin">
AllowOverride None
Options None Order
allow,deny Allow from all
</Directory> </IfModule> <IfModule
mod_autoindex.c> 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 </IfModule> <IfModule
mod_mime.c> 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
<IfModule mod_negotiation.c>
LanguagePriority en da nl et fr de el it ja kr no
pl pt pt-br ru ltz ca es sv tw </IfModule>
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 </IfModule> Action
application/x-httpd-php "/php4/php" <IfModule
mod_setenvif.c> 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 </IfModule>
|