<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[mysql数据库在arm+linux平台上的移植]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 04 Dec 2008 07:38:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	最近需要在pxa270的嵌入式平台上应用数据库进行通信信息管理,客户要求使用mysql数据库,接下任务后,在网上一查才知道mysql 根本很少用于嵌入式环境,而且支持的少数几种芯片中并没有arm的分发包!继续搜索有没有mysql在arm平台移植的相关文章,几乎找不到相关资料.而自己在网上发了一些帖却没有收到一个回复,没办法,只能硬着头皮自己动手了.幸好经过一番”苦战”,今天终于克服了所有障碍,让mysql在270板子上跑了起来!而且简单的测试也都收到了预期的效果,不过还要看客户的经一步测试了.<br/><br/>现在将mysql 的arm+linux移植经验贴出来,希望对以后做相关方面工作的人有所帮助.<br/><br/>首先是要从网上获取mysql的源码包,官方网址如下:<br/><br/>http://ftp.plusline.de/mysql/Downloads/<br/><br/>我用的是mysql-5.0.22.tar.gz<br/><br/>采用的交叉编译器是适合于270板子的codesourcery这要根据具体的情况来进行修改.<br/><br/>以下分几个阶段来介绍:<br/><br/> <br/><br/>一: configure<br/><br/>解开包以后得到文件夹mysql-5.0.22我将其改名为mysql-pc,进入目录后,首先要做configure 来生成交叉编译的Makefile文件,编译的时候一般configure是都能通过的但我用./configure --host=arm-none-linux-gnueabi来生成Makefile时却出现了多个错误,如下:<br/><br/>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return type of sprintf : error: cannot run test program while cross compiling<br/><br/>检查configure脚本,发现脚本在检测到在做cross-compile时就提示以上错误并退出,说明至少是这个版本的mysql并不支持交叉编译,但我用了最新的版本试了也还是有同样的错误,基本可以肯定mysql还没有支持交叉编译的版本出现.但为了让编译继续,我在configure脚本中将多处这样的命令全都注释掉以让configure通过.<br/><br/>2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error: Your compiler cannot convert a longlong value to a float!<br/><br/>这个问题在较低版本的mysql中是一个bug,但5.0的版本已经修复了这个问题,有可能是交叉编译器的问题,找不到解决的方法,这里我也将它注释屏蔽了.<br/><br/>3) error: No curses/termcap library found<br/><br/>缺少curses和termcap的库,反复安装了各种相关的软件包,还是解决不了这个问题,最后是在configure的参数里直接指定了安装的ncurses-5.6下的libncurses.a库根据我的路径参数设置如下:<br/><br/> --with-named-curses-libs=/home/huaming/mysql/ncurses-arm-d501/lib/libncurses.a<br/><br/>(这里要注意的是ncurses的安装也要采用交叉编译的方式在pc上装好,否则后面做make的时候编译器会指出libncurses.a的格式不对)<br/><br/>经过反复尝试我最后使用的参数如下:<br/><br/>./configure --host=arm-none-linux-gnueabi --with-named-curses-libs=/home/huaming/mysql/ncurses-arm-270/lib/libncurses.a --prefix=/home/huaming/mysql/mysql_arm_270 --without-debug --without-docs --without-man --without-bench --with-extra-charset=gbk,gb2312<br/><br/> <br/><br/>二: make<br/><br/>这一步遇到的问题最难解决:<br/><br/>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;../extra/comp_err: ../extra/comp_err: cannot execute binary file<br/><br/>编译过程中要运行comp_err命令,但这个命令是arm格式的在pc机上运行不起来,解决方法是要编译好一个在pc上运行的mysql,从相应的目录下拷出comp_err命令覆盖extra下的这个arm格式的comp_err命令(这里要注意的是这个pc机上运行的mysql编译路径要和现在这个arm上运行的mysql路径完全相同,否则后面同样的问题中执行命令时涉及到路径问题,解决办法是先把现在编译的mysql-pc目录改为其他名称,再解一个mysql包改名为mysql-pc将其编译成pc上运行的版本,只要简单的用./configure &#124;make就行了,再把现在这个mysql-pc改为别的名称,将原来的那个名称改回mysql-pc)<br/><br/>2) /home/huaming/mysql/mysql-pc/sql 目录下出现:<br/><br/>./gen_lex_hash: cannot execute binary file<br/><br/>原因和解决方法基本和上面遇到的问题相同,但这里还要加一命令:<br/><br/>touch –m sql/gen_lex_hash<br/><br/>上面的命令是改变gen_lex_hash的最后修改时间,这样做的目的是告诉编译器gen_lex_hash已经是最新的了,不要重新生成它,否则编译器检查gen_lex_hash和它的依赖文件的最后修改时间会发现gen_lex_hash比它的依赖文件更旧,就会重新交叉编译生成它,这样不管我们做几次覆盖的工作错误都还会再现.<br/><br/>3)还是在sql这个目录下出现了类似如下的错误:<br/><br/>gen_lex_hash.o: could not read symbols: File in wrong format或<br/><br/>./gen_lex_hash > lex_hash.h<br/><br/>g++: ../zlib/.libs/libz.so: No such file or directory<br/><br/>经过对Makefile文件的观察,发现这些错误都是在生成lex_hash.h文件的时候产生的,所以直接从pc上运行的版本中拷贝这个文件到此目录下,同样要执行touch –m lex_hash.h<br/><br/>否则会陷入一个循环的需要arm上运行的文件和pc上运行的文件的错误中出不来.<br/><br/>Make 的过程总结起来主要就是以上几个错误,但我的configure参数中已经去掉了几个模块的编译,如果不去掉这几个模块还会有更多错误出现.<br/><br/> <br/><br/>三: make install<br/><br/>这一步很顺利,在指定的目录下生成了可以移植的文件,但进入这个目录的bin目录下可以看到这里有一个comp_err命令,用file命令可以看出这个命令就是前面拷进来的在pc上运行的命令,移植到arm的板子上还要把arm版的comp_err命令重新拷回来覆盖它,如果前面没有备份arm版的这个命令,可以进入extra目录,运行make clean &#124; make 出现上面提到的错误停止的时候就可以把里面的arm版的comp_err命令拷出来了.<br/><br/> <br/><br/>四:移植<br/><br/>将install产生的文件夹整个拷贝到板子上,这一步要注意的是,板子上放置mysql的路径和pc上安装的路径要完全相同,比如我在pc上的安装路径是:/home/huaming/mysql/mysql_arm_270 则在板子上也要是同样的目录,此路径上没有的目录可以用mkdir来建立.<br/><br/>在板子上启动数据库服务遇到的与移植有关的问题如下:<br/><br/>1)&nbsp;&nbsp;&nbsp;&nbsp;使用命令:&nbsp;&nbsp;./mysql_install_db --user=root 执行数据库安装的时候出现如下警告:<br/><br/>WARNING: The host 'master_card' could not be looked up with resolveip.<br/><br/>This probably means that your libc libraries are not 100 % compatible<br/><br/>with this binary MySQL version. The MySQL daemon, mysqld, should work<br/><br/>normally with the exception that host name resolving will not work.<br/><br/>This means that you should use IP addresses instead of hostnames<br/><br/>when specifying MySQL privileges !<br/><br/>mysql启动的时候会检查/etc下的hosts文件,从中查看检测到的处理器名称是否登记过,未登记的则有可能运行的版本与处理器不兼容,将hosts文件拷到板子上,并在里面加入 master_card(要根据以上的出错信息来定),这样启动时警告没了,是否100%的兼容那就要看测试的结果了.<br/><br/>2)&nbsp;&nbsp;&nbsp;&nbsp;还有一个与移植有关的是/etc/my.cnf文件,这个文件设置了mysql的相关文<br/><br/>件的存放路径,可以修改它来方便系统的管理,将这个文件也拷贝到/etc目录下.<br/><br/>在板子上运行的过程中还遇到了许多其他的问题,但个人认为这些问题已经基本与移植无关,而是使用mysql数据库的问题,问题的解决办法可以参考pc上运行遇到同样问题的解决办法,这里就不赘述了.<br/><br/>中文官方网址如下:<br/><br/>http://www.mysql.cn/<br/><br/>最后按照mysql中文官方网站上的参考手册运行了一些测试命令,都收到了预期的效果,感觉很不错!<br/><br/>在移植的过程中,得到了同事的极大参与和帮助,这里不便提名字,在此一并谢过了!
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] mysql数据库在arm+linux平台上的移植]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>