最近两周都在弄这三个的移植,其中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
/home/liubonan/source/apache-1.3.39/src/main/gen_test_char >test_char.h
这里借用了刚才编译生成的本机代码里的工具,然后
#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
#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)/s
api/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
里的文件,把它改成
/home/liubonan/source/php-4.4.8/sapi/cli/php
@/home/liubonan/source/php-4.4.8/s
api/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
将
/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 ServerAdmincosine@126.com 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 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|