移植MySQL到嵌入式ARM平台
1)下载mysql5.1.51:
http://www.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-5.1/mysql-5.1.51.tar.gz
2)安装编译器:用的是4.3.2的交叉编译器。gcc之类的都是ubuntu10.10自带的。
3)编译PC版本的mysql备用
a)解压mysql-5.1.51到/opt/mysql-5.1.51: tarzxvfmysql-5.1.51.tar.gz
b)cdmysql-5.1.51
c)./configure-prefix=/usr/local/mysql
d)make注意,这里无需运行makeinstall,以为主要是为了用pc版本里的gen_lex_hash库。(注意一定要先make后,再去修改文件夹名称)
e)将文件夹mysql-5.1.51改名为mysql-5.1.51-pc备用。(将gen_lex_hash单独备份保存一下)
f)文档上说这里会出错,但我在编译的过程中没有碰到,唯一的问题是编译了arm版本的,重新通过改文件夹的名字回头编译pc版本的时候会报错。
4)编译arm版本的ncurses
a)下载ncurses-5.9.tar.gz:ftp://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz
b)解压到/opt/中:tarzxvfncurses-5.9.tar.gz
c)cdncurses-5.6
d)./configure–host=arm-linux-prefix=/usr/local/ncurse–enable-static
e)make
f)makeinstall之所以安装这个,是因为对mysql的交叉编译过程需要该库的支持
(此步在用sudo make install时出错,原因是环境变量和原来不同了,解决办法:sudo -i;make install)
5)编译arm版本的mysql
a)tarzxvfmysql-5.1.51.tar.gz
b)cdmysql-5.1.51
c)修改配置文件:打开configure,可以使用geditconfigure分别在第26453行、48175行、48282行、48485行附近有类似代码:
iftest"$cross_compiling"=yes;then
{{$as_echo"$as_me:$LINENO:error:in\`$ac_pwd:">&5$as_echo"$as_me:error:in\`$ac_pwd:">&2;}
{{$as_echo"$as_me:$LINENO:error:cannotruntestprogramwhilecross
compilingSee\`config.logformoredetails.">&5
$as_echo"$as_me:error:cannotruntestprogramwhilecrosscompilingSee\`config.logformoredetails.">&2;}
{(exit1);exit1;};};}
Else
将这些代码改为:
iftest"$cross_compiling"=yes; then
echo“skip…..!”
#{{$as_echo"$as_me:$LINENO:error:in\`$ac_pwd:">&5#$as_echo"$as_me:error:in\`$ac_pwd:">&2;}
#{{$as_echo"$as_me:$LINENO:error:cannotruntestprogramwhilecrosscompilingSee\`config.logformoredetails.">&5
#$as_echo"$as_me:error:cannotruntestprogramwhilecrosscompilingSee\`config.logformoredetails.">&2;}
#{(exit1);exit1;};};}
Else
一定注意,这样的代码有4部分,要全部改掉。
d)配置,直接套用了人家的配置方式:
./configure --host=arm-linux --enable-static --with-named-curses-libs=/usr/local/ncurse/lib/libncurses.a --prefix=/usr/local/mysql --without-debug --without-docs --without-man --without-bench --with-charset=gb2312 --with-extra-charsets=ascii,latin1,utf8
e)修改opt/mysql-5.1.51/sql/sql_parse.cc:在5646行之前添加#defineSTACK_DIRECTION1
如果不修改该语句,则会出现如下错误:sql_parse.cc:5646:21:operator
f)PC版本的gen_lex_hash文件到当前文件夹:
cp/opt/mysql-5.1.51-pc/sql/gen_lex_hashsql/
touch–msql/gen_lex_hash
cp/opt/mysql-5.1.51-pc/sql/lex_hash.hsql/
touch–msql/lex_hash.h
否则会出现错误:
make[2]:Leavingdirectory`/opt/mysql-5.5.3-m3/sql./gen_lex_hash>lex_hash.h-t
/bin/sh:./gen_lex_hash:cannotexecutebinaryfile因为arm版的无法在pc上运行。
注意:别人的文档上说只要拷贝gen_lex_hash即可,但我试了好多次,都仍然会出现上面的报错信息,把lex_hash.h也拷贝过来后,就不再报错了。另外,touch一定要做,原因就是让编译器不要再编译覆盖拷贝过来的文件了。
g)Make
h)Makeinstall
6)移植相应文件到ARM平台
a)拷贝pc的/usr/local/mysql到开发板的相同目录
我使用了nfs调试,所以需要使用如下指令:
cp-r/usr/local/mysql/opt/EmbedSky/root_nfs/usr/local/mysql
b)把编译出的arm的mysql库打包备份一下,考到主机的目录里:
tar–zcvfmysql-arm-5.1.51.tar.gzmysql
c)到源码中拷贝配置文件模版Copiesfilesfromonelocationtoanother.配置文件模版)
移植MySQLARM平 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)