移植MySQL到嵌入式ARM平台
2011年7月20日星期三
Wuyoujieji@gmail
MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档:
blog.chinaunix/space.php?uid=9701860&do=blog&id=285428,因为MySQL5.5之后,编译是用的cmake不再使用./configure,因此,只好倒回支持./configure的版本来用,这里使用了文档上的5.1.51版本。进行如下步骤完成移植:
1) 下载mysql5.1.51:
/sql/Downloads/MySQL-5.1/mysql-5.1.
2) 安装编译器:用的是EmbedSky提供的4.3.3的编译器。gcc之类的都是Fedora14自带的。
3) 编译PC版本的mysql备用
a) 解压mysql-5.1.51到/opt/mysql-5.1.51: tar zxvf mysql-5.1.
b) cd mysql-5.1.51
c) ./configure -prefix=/usr/local/mysql
d) make 注意,这里无需运行make install,以为主要是为了用pc版本里的gen_lex_hash库。
e) 将文件夹mysql-5.1.51改名为mysql-5.1.51-pc备用。(将gen_lex_hash单独备份保存一下)
f) 文档上说这里会出错,但我在编译的过程中没有碰到,唯一的问题是编译了arm版本的,重新通过改文件夹的名字回头编译pc版本的时候会报错。
4) 编译arm版本的ncurses
a) 下载ncurses-5.:ftp:///gnu/ncurses/ncurses-5.
b) 解压到/opt/中:tar zxvf ncurses-5.
c) cd ncurses-5.6
d) ./configure –host=arm-linux -prefix=/usr/local/ncurse –enable-static
e) make
f) make install
之所以安装这个,是因为对mysql的交叉编译过程需要该库的支持
5) 编译arm版本的mysql
a) tar zxvf mysql-5.1.
b) cd mysql-5.1.51
c) 修改配置文件:打开configure,可以使用gedit configure
分别在第26453行、 48175行、 48282行、 48485行附近有类似代码:
if test "$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: cannot run test program while cross compiling See \`config.log' for more details." >&5
$as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }; }
Else
将这些代码改为:
if test "$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: cannot run test program while cross compiling See \`config.log' for more details." >&5
#$as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;}
#{ (exit 1); exit 1; }; }; }
Else
一定注意,这样的代码有4部分,要全部改掉。
d) 配置,直接套用了人家的配置方式:
configure ./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/:在5646行之前添加#define STACK_DIRECTION 1
如果修改该语句,则会出现如下错误::5646:21: operator '<' has no left operand,原因是宏变量STACK_DIRECTION没有定义初值,arm中定义STACK_DIRECTION为1。
注意:这里的“#define STACK_DIRECTION 1”一句,不能随便加在的开头处,而应该根据出错信息的提示添加在相应的行上,我所遇到的行号和别人文档上所遇到的行号并不相同。
f) 复制PC版本的gen_lex_has件到当前文件夹:
cp /opt/mysql-5.1.51-pc/sql/gen_lex_hash sql/
touch –m sql/gen_lex_hash
cp /opt/mysql-5.1.51-pc/sql/ lex_hash.h sql/
touch –m sql/ lex_hash.h
否则会出现错误:
make[2]: Leaving directory `/opt/mysql-5.5.3-m3/sql'
./gen_lex_hash > lex_hash.h-t
/bin/sh: ./gen_lex_hash: cannot execute binary file
因为arm版的无法在pc上运行。
注意:别人的文档上说只要拷贝gen_lex_hash即可,但我试了好多次,都仍然会出现上面的报错信息,把lex_hash.h也拷贝过来后,就不再报错了。另外,touch一定要做,原因就是让编译器不要再编译覆盖拷贝过来的文件了。
g) Make
h) Make install
6) 移植相应文件到ARM平台
a) 拷贝pc的/usr/local/mysql到开发板的相同目录
我使用了nfs调试,所以需要使用如下指令:
cp -r /usr/local/mysql /opt/EmbedSky/root_nfs/usr/local/mysql
b) 把编译出的arm的mysql库打包备份一下,考到主机的目录里:
mysql下载starting the servertar –zcvf mysql-arm-5.1. mysql
c) 到源码中拷贝配置文件模版 Copies files from one location to another. 配置文件模版)
cp /opt/mysql-5.1.51/support-files/my-mediumf /opt/EmbedSky/root_nfs/etc/myf (这里的目录指的是nfs调试的路径设置),这里的myf存放的路径是按照手册上的建议,前面编译pc版本的MySQL中所述的路径并非全局配置。该文档的注释中说:“# You ca
n copy this file to /etc/myf to set global options, mysql-data-dir/myf to set server-specific options (in this installation this directory is /usr/local/mysql/var) or ~/.myf to set user-specific options.”该配置文件的修改详见mysql5.1的英文手册的4.2.3.3. Using Option Files节中的叙述。
数据目录是在:/var/lib/mysql
安装目录是在:/usr/local/mysql
试图反注释了关于InnoDB的一些配置,其它没有动。但是修改了这些设置后,报错,于是又改了回来。
d) 运行mysql_install_db(参见手册的2.13. Post-Installation Setup and Testing)
Cd /usr/local/mysql/bin(开发板路径),运行mysql_install_db -u root
结果出现了如下错误:Neither host 'EmbedSky' nor 'localhost' could be looked up with /usr/local/mysql/bin/resolveip Please configure the 'hostname' command to return a corre
ct hostname. If you want to solve this at a later stage, restart this script with the --force option 这主要的原因是开发板环境中的hostname是EmbedSky,而不是通常的Federa14等,所以mysql自动认为可能在该操作系统中的运行会不兼容,有两种办法解决:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论