700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > mysql 客户端 交叉编译_移植mysql到嵌入式ARM平台

mysql 客户端 交叉编译_移植mysql到嵌入式ARM平台

时间:2022-01-25 03:34:15

相关推荐

mysql 客户端 交叉编译_移植mysql到嵌入式ARM平台

移植MySQL到嵌入式ARM平台

MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档:/space.php?uid=9701860&do=blog&id=285428,因为MySQL5.5之后,编译是用的cmake不再使用./configure,因此,只好倒回支持./configure的版本来用,这里使用了文档上的5.1.51版本。进行如下步骤完成移植:

1)下载mysql5.1.51:

/sites//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:///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.log'formoredetails.">&5

$as_echo"$as_me:error:cannotruntestprogramwhilecrosscompilingSee\`config.log'formoredetails.">&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.log'formoredetails.">&5

#$as_echo"$as_me:error:cannotruntestprogramwhilecrosscompilingSee\`config.log'formoredetails.">&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/:在5646行之前添加#defineSTACK_DIRECTION1

如果不修改该语句,则会出现如下错误::5646:21:operator'

注意:这里的“#defineSTACK_DIRECTION1”一句,不能随便加在的开头处,而应该根据出错信息的提示添加在相应的行上,我所遇到的行号和别人文档上所遇到的行号并不相同。

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.配置文件模版)

cp/opt/mysql-5.1.51/support-files/my-f/opt/EmbedSky/root_nfs/etc/f(这里的目录指的是nfs调试的路径设置),这里的f存放的路径是按照手册上的建议,前面编译pc版本的MySQL中所述的路径并非全局配置。该文档的注释中说:“#Youcancopythisfileto/etc/ftosetglobaloptions,mysql-data-dir/ftosetserver-specificoptions(inthisinstallationthisdirectoryis /usr/local/mysql/var)or~/.ftosetuser-specificoptions.”该配置文件的修改详见mysql5.1的英文手册的4.2.3.3.UsingOptionFiles节中的叙述。

数据目录是在:/var/lib/mysql (默认)

安装目录是在:/usr/local/mysql (默认)

试图反注释了关于InnoDB的一些配置,其它没有动。但是修改了这些设置后,报错,于是又改了回来。

d)运行mysql_install_db(参见手册的2.13.Post-InstallationSetupandTesting)

cd/usr/local/mysql/bin(开发板路径),运行mysql_install_db-uroot结果出现了如下错误:Neitherhost'EmbedSky'nor'localhost'couldbelookedupwith/usr/local/mysql/bin/resolveipPleaseconfigurethe'hostname'commandtoreturnacorrecthostname.Ifyouwanttosolvethisatalaterstage,restartthisscriptwiththe--forceoption这主要的原因是开发板环境中的hostname是EmbedSky,而不是通常的Federa14等,所以mysql自动认为可能在该操作系统中的运行会不兼容,有两种办法解决:

第一种,运行hostnamefedora14,就是欺骗一下hostname;

第二种,运行mysql_install_db-uroot–force

我使用了第二种方式:bin/mysql_install_db--user=root--force--basedir=/usr/local/mysql--datadir=/usr/local/mysql/var/lib/mysql (我修改了datadir的路径)

中间出现过一次错误:15071321:06:39[ERROR]/usr/local/mysql/libexec/mysqld:unknownvariable'innodb_data_home_dir=/usr/local/mysql/var/',查明原因是f中反注释了和InnoDB相关的配置。

e)手动建立mysqld/mysqld.pid,手工建立: (这一步不需要,制定到/tmp/mysqld.pid就行)

mkdir/usr/local/mysql/var/run/mysqld

touch/usr/local/mysql/var/run/mysqld/mysqld.pid

这一步不知道是不是必须的。但我这样做了。(不需要)

f)到源码中拷贝启动文件

cp/opt/mysql-5.1.51/support-files/mysql.server/opt/EmbedSky/root_nfs/etc/init.d/mysqld

修改该mysqld

详见手册中4.3.1.mysqld—TheMySQLServer的叙述

加上了basedir和datadir,

还有pid-file=/tmp/mysqld.pid

还有service-pid-file=/tmp/mysqld.pid

修改完后,要给新的mysqld附以足够的权限:Chmod+xmysqld

g)在开发板开启MySQL服务

开发板不支持service指令,所以servicemysqlstart无效。

采用的方法是运行./etc/init.d/mysqldstart

但最初运行该指令后出现下面的错误:

StartingMySQL...ERROR!Managerofpid-filequitwithoutupdatingfile.

困扰我好久,到开发板目录/var/lib/mysql下查阅错误日志文件[hostname].err,在我的系统中该错误日志文件为EmbedSky.err,从中看到下面的记录:

15071321:04:49[ERROR]Fatalerror:Can'tchangetorunasuser'mysql';Pleasecheckthattheuserexists!

可能的原因是:在arm的linux上无法执行groupaddmysql,因此需要采用如下方法解决该问题:cd /usr/local/mysql/var/lib/mysql

ls–la可以看到里面的属性中没有mysql,于是使用下面的命令:addusermysql

chownmysql:mysql-R/var/lib/mysql

然后开启mysql服务,还是出现了ERROR!Managerofpid-filequitwithoutupdatingfile.又查看EmbedSky.err日志,其中多了一条:

1507142:48:04[ERROR]Can'tstartserver:BindonTCP/IPport:Addressalreadyinuse

1507142:48:04[ERROR]Doyoualreadyhaveanothermysqldserverrunningonport:3306?

很显然是因为已经有mysql的进程尝试打开3306端口,因此就被占用了,需要杀进程,索性重启开发板,然后运行./etc/init.d/mysqldstart,可以完美打开。

(我使用的时候,还有另外的一个问题,由于客户端和服务器都要访问/tmp目录,所以每次开机都要chmod 777 /tmp ,以便于都能访问)

h)设置软连接使mysql,mysqldump,mysqladmin这三个命令能在开发板的shell中直接运行

ln-s/usr/local/mysql/bin/mysql/usr/bin

ln-s/usr/local/mysql/bin/mysqldump/usr/bin

ln-s/usr/local/mysql/bin/mysqladmin/usr/bin

其他的还有:链接库文件

ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.16 /lib

7)测试ARM平台下的MySQL

a)mysqladmin-urootpasswordhahaha最后一项为我的密码(设置密码)

b)mysql-h127.0.0.1-uroot-p或mysql-hlocalhost-uroot-p这样便可以进入mysql环境。

c)mysql>showdatabases;

mysql>create databases at91;

mysql>use at91;

mysql>create table node (id int(5) auto_increment not null primary key, node_ID char (40), param_ID_values varchar(900));

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。