日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql在单片机移植_移植MySQL到嵌入式ARM平台

發布時間:2024/9/27 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql在单片机移植_移植MySQL到嵌入式ARM平台 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

因為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?'

注意:這里的“#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));

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的mysql在单片机移植_移植MySQL到嵌入式ARM平台的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产在线青青草 | 看黄免费网站 | 国产乱女淫av麻豆国产 | 在线观看亚洲大片短视频 | 九九色九九 | 国产自产在线 | 波多野结衣不卡视频 | 国产精品亚洲成在人线 | 亚洲国内在线 | 婷婷综合影院 | 成人在线激情视频 | 尹人香蕉网 | 国产91在线免费观看 | 黄色国产一区二区 | 午夜精品福利电影 | 成人依人 | 好男人www社区在线视频夜恋 | 能看的黄色网址 | 国产精品99久久久久久动医院 | 美国黄色av | 综合久草| 午夜成人影片 | 中文字幕日韩精品无码内射 | 四虎免费视频 | 91久久国产精品 | 亚洲午夜久久久久久久国产 | 91桃色在线 | 黑丝一区 | 欧美首页| 欧美大屁股熟妇bbbbbb | 婷婷四房播播 | 久久免费黄色网址 | 蜜桃视频在线观看一区二区 | 欧美黑人xxx | 午夜激情福利视频 | 黄色网战在线观看 | 伊人精品视频在线观看 | 成年人免费视频播放 | 国产18在线观看 | 日本免费久久 | 国产aⅴ精品一区二区三区久久 | www欧美精品 | 精品日本视频 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美色哟哟 | 国产成人精品一区二区三区四区 | 亚洲Av无码成人精品区伊人 | 亚洲欧美中日韩 | 国产肉体xxxx裸体784大胆 | 用力挺进新婚白嫩少妇 | 亚洲黄色一区二区三区 | 用我的手指扰乱你 | 污版视频在线观看 | 国产精华一区二区三区 | 国产成人一区二区三区 | 色国产在线 | 91看大片 | 裸体美女免费视频网站 | 天天做天天摸天天爽天天爱 | 毛片天堂 | 日韩免费| 日日弄天天弄美女bbbb | 国产性精品 | 好吊妞视频这里只有精品 | 久久久久久无码精品人妻一区二区 | 午夜性视频 | 国产真人无码作爱视频免费 | brazzers欧美极品少妇 | 成人99视频| 欧美经典一区 | 精品一区二区精品 | 99久久久国产精品 | av每日更新在线观看 | 成人一区二区在线观看 | 日本在线观看a | 精品乱子伦| julia一区二区三区中文字幕 | 骚虎av| 日韩男女视频 | 台湾极品xxx少妇 | 插插久久| 爆乳熟妇一区二区三区 | 日韩伦理一区二区 | 天堂а√在线中文在线鲁大师 | 色呦呦影院 | 成人黄色网 | 91免费视频免费版 | 久久av资源 | 亚洲一区在线观看视频 | 日本午夜免费福利视频 | 国产69精品久久久久久久久久 | 色婷av| 国产99久久久 | 亚洲狼人干 | a级在线观看视频 | 欧美日韩一区二区区 | 亚洲黄色在线网站 | 久久精品视频免费播放 | 亚洲妇熟xx妇色黄蜜桃 |