blog www.php63.cc,移植sqlite+apache+php

移植sqlite+apache+php

重新移植php-5.2.9

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

移植sqlite+apache+php

最近两周都在弄这三个的移植,其中Php的移植更是花了快两周的时间,着实让我头疼,不过好在功夫不负有心人,在各种论坛上积极发帖询问,最终得到了好人的帮助,成功把php也移植到板子上,所以现在把步骤详细写出来,方便跟我一样的菜鸟们~

开发板:友善之臂micro2440

交叉编译工具版本:arm-linux-gcc 4.3.2

本地系统:ubuntu 11.04

一、交叉编译sqlite

sqlite是一个小型数据库,适合在嵌入式系统中使用,本次移植的Sqlite3.3.8版本,可以从上下载,移植方法如下:

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

ServerAdminDocumentRoot

"/home/webroot"

Options FollowSymLinks

AllowOverride

None

Options Indexes FollowSymLinks MultiViews

AllowOverride None

Order allow,deny

Allow from all

UserDir public_html

DirectoryIndex index.htmlDirectoryIndex index.php

DirectoryIndex

index.php3

DirectoryIndex

index.phtmlAccessFileName

.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 .tgzAddType application/x-httpd-php .php3

AddType

application/x-httpd-php .php

AddType

application/x-httpd-php .phtmlAddEncoding x-compress .Z

AddEncoding x-gzip

.gz .tgzAction

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!!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值