移植mysql到嵌入式ARM平台

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

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: tar zxvf mysql-5.1.51.tar.gz 

    b) cd mysql-5.1.51 
    c) ./configure -prefix=/usr/local/mysql 

    d) make 注意,这里无需运行make install,以为主要是为了用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/中:tar zxvf ncurses-5.9.tar.gz 

    c) cd ncurses-5.6 
    d) ./configure –host=arm-linux -prefix=/usr/local/ncurse –enable-static 

    e) make 
    f) make install之所以安装这个,是因为对mysql的交叉编译过程需要该库的支持

      (此步在用sudo make install时出错,原因是环境变量和原来不同了,解决办法:sudo -i;make install) 

 

5) 编译arm版本的mysql 
    a) tar zxvf mysql-5.1.51.tar.gz 

    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 --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行之前添加#define STACK_DIRECTION 1 
        如果不修改该语句,则会出现如下错误:sql_parse.cc:5646:21: operator '<' has no left operand,原因是宏变量STACK_DIRECTION没有定义初值,arm中定义STACK_DIRECTION为1。 
        注意:这里的“#define STACK_DIRECTION 1”一句,不能随便加在sql_parse.cc的开头处,而应该根据出错信息的提示添加在相应的行上,我所遇到的行号和别人文档上所遇到的行号并不相同。 
    f) 复制PC版本的gen_lex_hash文件到当前文件夹:

       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库打包备份一下,考到主机的目录里: 
       tar –zcvf mysql-arm-5.1.51.tar.gz mysql 
   c) 到源码中拷贝配置文件模版  Copies files from one location to another. 配置文件模版) 

       cp /opt/mysql-5.1.51/support-files/my-medium.cnf /opt/EmbedSky/root_nfs/etc/my.cnf (这里的目录指的是nfs调试的路径设置),这里的my.cnf存放的路径是按照手册上的建议,前面编译pc版本的MySQL         中所述的路径并非全局配置。该文档的注释中说:“# You can copy this file to /etc/my.cnf to set global options, mysql-data-dir/my.cnf to set server-specific options (in this installation this directory is   /usr/local/mysql/var) or ~/.my.cnf 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 correct hostname. If you want to solve this at a later stage, restart this script with the --force option 这主要的原因是开发板环境中的hostname是EmbedSky,而不是通常的Federa14等,所以mysql自动认为可能在该操作系统中的运行会不兼容,有两种办法解决: 
         第一种,运行hostname fedora14,就是欺骗一下hostname;

         第二种,运行mysql_install_db -u root –force 

         我使用了第二种方式: bin/mysql_install_db --user=root --force --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var/lib/mysql (我修改了datadir的路径) 
         中间出现过一次错误:150713 21:06:39 [ERROR] /usr/local/mysql/libexec/mysqld: unknown variable 'innodb_data_home_dir=/usr/local/mysql/var/',查明原因是my.cnf中反注释了和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 — The MySQL Server的叙述 
       加上了basedir和datadir,

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

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

       修改完后,要给新的mysqld附以足够的权限: Chmod +x mysqld 
    g) 在开发板开启MySQL服务 
       开发板不支持service指令,所以service mysql start无效。

       采用的方法是运行./etc/init.d/mysqld start 
       但最初运行该指令后出现下面的错误: 
       Starting MySQL... ERROR! Manager of pid-file quit without updating file. 
       困扰我好久,到开发板目录/var/lib/mysql下查阅错误日志文件[hostname].err,在我的系统中该错误日志文件为EmbedSky.err,从中看到下面的记录: 
      150713 21:04:49 [ERROR] Fatal error: Can't change to run as user 'mysql' ;  Please check that the user exists! 
      可能的原因是:在arm的linux上无法执行groupadd mysql,因此需要采用如下方法解决该问题: cd /usr/local/mysql/var/lib/mysql 
      ls –la可以看到里面的属性中没有mysql,于是使用下面的命令: adduser mysql 
      chown mysql:mysql -R /var/lib/mysql 
      然后开启mysql服务,还是出现了ERROR! Manager of pid-file quit without updating file.又查看EmbedSky.err日志,其中多了一条: 
      150714  2:48:04 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use 
      150714  2:48:04 [ERROR] Do you already have another mysqld server running on port: 3306 ? 
      很显然是因为已经有mysql的进程尝试打开3306端口,因此就被占用了,需要杀进程,索性重启开发板,然后运行./etc/init.d/mysqld start,可以完美打开。 

  (我使用的时候,还有另外的一个问题,由于客户端和服务器都要访问/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 -u  root   password   hahaha 最后一项为我的密码   (设置密码) 

    b) mysql -h  127.0.0.1  -u root  -p 或mysql -h  localhost  -u root  -p 这样便可以进入mysql环境。 

    c) mysql>show databases;

        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));

 

 

 

转载于:https://www.cnblogs.com/Charles-Zhang-Blog/p/3529980.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

'./mysql-bin.index' not found (Errcode: 13) 的解决方法

将文件系统复制到PC机上&#xff0c;然后再拷贝到别的SD卡后&#xff0c;发现mysql无法启动了&#xff0c;首先检查了一下mysql的错误日志&#xff0c;发现最后出现以下错误&#xff1a;/usr/local/mysql/libexec/mysqld: File ./mysql-bin.index not found (Errcode: 13)提示.…

Unity Hub安装Android Build Support报错:Failed to delete old Unity Android Supprtinstallation files

安装失败&#xff1a; 解决方法&#xff1a; 需要先安装 Android Build Support &#xff0c;再安装 Android SDK & NDK Tools 和 OpenJDK 其他情况&#xff1a; 如果已经安装了Android SDK & NDK Tools 和 OpenJDK&#xff0c;只剩Android Build Support 未安装成功…

红米5 Plus刷开发版/小米手机刷开发版

到官网选择对应手机型号下载Rom包&#xff1a;MIUI下载 下载完成后手机打开&#xff1a;设置→我的设备→MIUI版本→右上角选择【手动选择安装包】&#xff0c;找到下载的包等待手机重启就行了。 PS&#xff1a;如果是像下面这样 小米手机找不到手动选择安装包 选项的话&#…

小米手机开启Root权限

1.开启权限前手机先要刷成开发版&#xff0c;可以看 → 小米手机刷开发版 2.设备解锁&#xff0c;先在 设置→我的设备→全部参数→开启开发者模式→多击MIUI版本 开启开发者模式&#xff0c;然后进入 设置→更多设置→开发者选项→设备解锁状态 &#xff0c;根据操作提示解锁…

小米手机Linux Deploy安装Ubuntu

1.Linux Deploy 2.4版本之后无需再安装Busy Box&#xff0c;所以BusyBox安装报错失败的不需要再安装了。直接GooglePlay下载inux Deploy最新版进行安装即可&#xff0c;或 点击此处下载。 2.下载安装Linux Deploy之后进行Ubuntu的安装。 我的配置如下&#xff1a; 引导设置&a…

Linux Deploy Ubuntu安装samba服务

1.更新软件源&#xff1a;sudo apt-get update 2.安装samba服务&#xff1a;sudo apt-get install samba 3.备份原配置文件&#xff1a;sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak 4.创建共享目录&#xff1a;sudo mkdir -p /共享文件夹路径 5.更新目录权限&…

摄像头监控录像保存到手机(旧手机/废弃手机)本文使用手机为红米Note5 Plus

本文为使用旧手机安装linux Ubuntu系统之后安装samba服务&#xff0c;用作NAS网络存储&#xff0c;需要摄像头软件可以将录像保存至NAS。 1.手机需要先开启 Root权限&#xff0c;小米手机可参考&#xff1a;小米手机开启Root权限-CSDN博客 2.小米手机正常开启的Root权限不是完整…

通过Blender将PMX模型转为FBX导入Unity

一、下载Blender&#xff08;建议2.83版本不要太高的&#xff09; 官网下载网址&#xff1a;Blender 2.83 LTS — blender.org 二、之后安装Blender&#xff0c;安装后下载插件 下载地址&#xff1a;https://codeload.github.com/GiveMeAllYourCats/cats-blender-plugin/zip/…

Git理论、原理、操作

Git理论、原理、操作 Git简介&#xff1a; 一个开源的分布式版本控制系统。用于处理任何大大小小的项目&#xff0c;是一个开放源码的版本控制软件。Git与SVG的区别&#xff1a; 1、git是分布式的 2、git把内容按元数据方式存储&#xff0c;svg按文件 3、git分支和svg分支不同…

我在Facebook的十点经验分享[转载]

转载自 http://blog.sina.com.cn/s/blog_70c9335b010144kc.html 我是2007年初加入Facebook, 那时大概150人; 2011年9月底离开, 当时3200多人. 经历了很多稀奇古怪但影响很大的项目, 像Application Platform, Social Ads, News Feed, Gift Shop, Facebook Credits等等. 碰到的很…

Android中让Service被关闭后再重新启动

2019独角兽企业重金招聘Python工程师标准>>> --------------------------------------------------------------------------- 转载&#xff1a;http://blog.csdn.net/arui319 --------------------------------------------------------------------------- 如何做…

CloudStack学习-3

此次试验主要是CloudStack结合openvswitch 背景介绍 之所以引入openswitch&#xff0c;是因为如果按照之前的方式&#xff0c;一个网桥占用一个vlan&#xff0c;假如一个zone有20个vlan&#xff0c;那么岂不是每个vlan都要创建一个桥&#xff0c;维护很麻烦 openvswitch是由Nic…

JavaScript将负数转换为正数

负负得正 .vue里的写法&#xff1a; <div v-if"num < 0">{{-(num)}}<div> <div v-if"num > 0">{{num}}<div> 使用过滤器&#xff1a; <div >{{num | absNum}}<div> filters: {absNum(value) {if(a < 0)…

EIGRP中非等价负载均衡的实现

Eigrp为思科私有协议&#xff0c;其协议号为88&#xff0c;采用组播&#xff08;224.0.0.10&#xff09;和单播的方式发送路由更新&#xff0c;并且支持等价和非等价负载均衡。首先来看下Eigrp选择路由的过程&#xff1a;Eigrp中有三张表&#xff0c;分别为Eigrp邻居表、Eigrp拓…

方法覆盖(方法重写)

package com.qingfeng;/** * * author win7 * 功能&#xff1a;方法覆盖(方法重写):子类的某个方法覆盖父类的某个方法 */public class Demo3_8 { public static void main(String[] args) { // TODO Auto-generated method stub Animal animal1 new Animal…

webpack+vue实现项目

webpackvue实现TODO慕课网课程笔记 课程目的&#xff1a; 前端工程&#xff1a;讲明一些前端基础的概念&#xff1b;如何搭建一个工程&#xff0c;一个工程解决了哪些问题 webpack&#xff1a;预计未来前端开发必备的基础 vue&#xff1a;相对于react使用比较简单方便&#xf…

oracle数据库导入和导出

主机ip&#xff08;192.168.0.1&#xff09; 192.168.0.1 (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.0.1 )(PORT 1521)) ) (CONNECT_DATA (SERVICE_NAME TLPM) )) Oracle数据导入导出imp/exp 功能&#xff1a;Oracle数…

myysql 不能远程访问的解决办法

1.通过navicat或者命令行&#xff0c;将user表中原来hostlocalhost的改为host% 命令行方式&#xff1a; mysql> update user set host % where host localhost; 2.授权访问给root用户 mysql>grant all privileges on *.* to root% identified by password with grant op…

递归和非递归的区别

递归好处&#xff1a;代码更简洁清晰&#xff0c;可读性更好 递归可读性好这一点&#xff0c;对于初学者可能会反对。实际上递归的代码更清晰&#xff0c;但是从学习的角度要理解递归真正发生的什么&#xff0c;是如何调用的&#xff0c;调用层次和路线&#xff0c;调用堆栈中…

IOS背景半透明渐变问题

IOS背景半透明渐变问题 问题描述&#xff1a; 给一个层设置半透明的背景&#xff0c;使用 background:linear-gradient(to bottom, transparent, #ffffff)&#xff0c;其中使用transparent的时候 在安卓上显示正常&#xff08;白色半透明&#xff0c;但ios上显示透明渐变会出…