在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 移植MySQL到嵌入式ARM平臺(tái)

            移植MySQL到嵌入式ARM平臺(tái)

            作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
            因?yàn)?strong>MySQL5.5之后,編譯是用的cmake不再使用./configure,因此,只好倒回支持./configure的版本來(lái)用,這里使用了文檔上的5.1.51版本。進(jìn)行如下步驟完成移植

            1)下載mysql5.1.51:
            http://www.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-5.1/mysql-5.1.51.tar.gz

            本文引用地址:http://www.biyoush.com/article/201611/317676.htm

            2)安裝編譯器:用的是4.3.2的交叉編譯器。gcc之類(lèi)的都是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注意,這里無(wú)需運(yùn)行makeinstall,以為主要是為了用pc版本里的gen_lex_hash庫(kù)。(注意一定要先make后,再去修改文件夾名稱(chēng))

            e)將文件夾mysql-5.1.51改名為mysql-5.1.51-pc備用。(將gen_lex_hash單獨(dú)備份保存一下)
            f)文檔上說(shuō)這里會(huì)出錯(cuò),但我在編譯的過(guò)程中沒(méi)有碰到,唯一的問(wèn)題是編譯了arm版本的,重新通過(guò)改文件夾的名字回頭編譯pc版本的時(shí)候會(huì)報(bào)錯(cuò)。


            4)編譯arm版本的ncurses
            a)下載ncurses-5.9.tar.gz:ftp://ftp.gnu.org/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之所以安裝這個(gè),是因?yàn)閷?duì)mysql的交叉編譯過(guò)程需要該庫(kù)的支持

            (此步在用sudo make install時(shí)出錯(cuò),原因是環(huán)境變量和原來(lái)不同了,解決辦法:sudo -i;make install)

            5)編譯arm版本的mysql
            a)tarzxvfmysql-5.1.51.tar.gz

            b)cdmysql-5.1.51
            c)修改配置文件:打開(kāi)configure,可以使用geditconfigure分別在第26453行、48175行、48282行、48485行附近有類(lèi)似代碼:
            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.logformoredetails.">&5

            $as_echo"$as_me:error:cannotruntestprogramwhilecrosscompilingSee`config.logformoredetails.">&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.logformoredetails.">&5
            #$as_echo"$as_me:error:cannotruntestprogramwhilecrosscompilingSee`config.logformoredetails.">&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/sql_parse.cc:在5646行之前添加#defineSTACK_DIRECTION1
            如果不修改該語(yǔ)句,則會(huì)出現(xiàn)如下錯(cuò)誤:sql_parse.cc:5646:21:operator 注意:這里的“#defineSTACK_DIRECTION1”一句,不能隨便加在sql_parse.cc的開(kāi)頭處,而應(yīng)該根據(jù)出錯(cuò)信息的提示添加在相應(yīng)的行上,我所遇到的行號(hào)和別人文檔上所遇到的行號(hào)并不相同。
            f)PC版本的gen_lex_hash文件到當(dāng)前文件夾:

            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
            否則會(huì)出現(xiàn)錯(cuò)誤:
            make[2]:Leavingdirectory`/opt/mysql-5.5.3-m3/sql./gen_lex_hash>lex_hash.h-t
            /bin/sh:./gen_lex_hash:cannotexecutebinaryfile因?yàn)閍rm版的無(wú)法在pc上運(yùn)行。

            注意:別人的文檔上說(shuō)只要拷貝gen_lex_hash即可,但我試了好多次,都仍然會(huì)出現(xiàn)上面的報(bào)錯(cuò)信息,把lex_hash.h也拷貝過(guò)來(lái)后,就不再報(bào)錯(cuò)了。另外,touch一定要做,原因就是讓編譯器不要再編譯覆蓋拷貝過(guò)來(lái)的文件了。

            g)Make

            h)Makeinstall


            6)移植相應(yīng)文件到ARM平臺(tái)
            a)拷貝pc的/usr/local/mysql到開(kāi)發(fā)板的相同目錄
            我使用了nfs調(diào)試,所以需要使用如下指令:
            cp-r/usr/local/mysql/opt/EmbedSky/root_nfs/usr/local/mysql
            b)把編譯出的arm的mysql庫(kù)打包備份一下,考到主機(jī)的目錄里:
            tar–zcvfmysql-arm-5.1.51.tar.gzmysql
            c)到源碼中拷貝配置文件模版Copiesfilesfromonelocationtoanother.配置文件模版)

            cp/opt/mysql-5.1.51/support-files/my-medium.cnf/opt/EmbedSky/root_nfs/etc/my.cnf(這里的目錄指的是nfs調(diào)試的路徑設(shè)置),這里的my.cnf存放的路徑是按照手冊(cè)上的建議,前面編譯pc版本的MySQL 中所述的路徑并非全局配置。該文檔的注釋中說(shuō):“#Youcancopythisfileto/etc/my.cnftosetglobaloptions,mysql-data-dir/my.cnftosetserver-specificoptions(inthisinstallationthisdirectoryis /usr/local/mysql/var)or~/.my.cnftosetuser-specificoptions.”該配置文件的修改詳見(jiàn)mysql5.1的英文手冊(cè)的4.2.3.3.UsingOptionFiles節(jié)中的敘述。

            數(shù)據(jù)目錄是在:/var/lib/mysql (默認(rèn))

            安裝目錄是在:/usr/local/mysql (默認(rèn))
            試圖反注釋了關(guān)于InnoDB的一些配置,其它沒(méi)有動(dòng)。但是修改了這些設(shè)置后,報(bào)錯(cuò),于是又改了回來(lái)。
            d)運(yùn)行mysql_install_db(參見(jiàn)手冊(cè)的2.13.Post-InstallationSetupandTesting)
            cd/usr/local/mysql/bin(開(kāi)發(fā)板路徑),運(yùn)行mysql_install_db-uroot結(jié)果出現(xiàn)了如下錯(cuò)誤:NeitherhostEmbedSkynorlocalhostcouldbelookedupwith/usr/local/mysql/bin/resolveipPleaseconfigurethehostnamecommandtoreturnacorrecthostname.Ifyouwanttosolvethisatalaterstage,restartthisscriptwiththe--forceoption這主要的原因是開(kāi)發(fā)板環(huán)境中的hostname是EmbedSky,而不是通常的Federa14等,所以mysql自動(dòng)認(rèn)為可能在該操作系統(tǒng)中的運(yùn)行會(huì)不兼容,有兩種辦法解決:
            第一種,運(yùn)行hostnamefedora14,就是欺騙一下hostname;

            第二種,運(yùn)行mysql_install_db-uroot–force

            我使用了第二種方式:bin/mysql_install_db--user=root--force--basedir=/usr/local/mysql--datadir=/usr/local/mysql/var/lib/mysql (我修改了datadir的路徑)
            中間出現(xiàn)過(guò)一次錯(cuò)誤:15071321:06:39[ERROR]/usr/local/mysql/libexec/mysqld:unknownvariableinnodb_data_home_dir=/usr/local/mysql/var/,查明原因是my.cnf中反注釋了和InnoDB相關(guān)的配置。
            e)手動(dòng)建立mysqld/mysqld.pid,手工建立: (這一步不需要,制定到/tmp/mysqld.pid就行)
            mkdir/usr/local/mysql/var/run/mysqld
            touch/usr/local/mysql/var/run/mysqld/mysqld.pid
            這一步不知道是不是必須的。但我這樣做了。(不需要)

            f)到源碼中拷貝啟動(dòng)文件
            cp/opt/mysql-5.1.51/support-files/mysql.server/opt/EmbedSky/root_nfs/etc/init.d/mysqld

            修改該mysqld

            詳見(jiàn)手冊(cè)中4.3.1.mysqld—TheMySQLServer的敘述
            加上了basedir和datadir,

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

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

            修改完后,要給新的mysqld附以足夠的權(quán)限:Chmod+xmysqld
            g)在開(kāi)發(fā)板開(kāi)啟MySQL服務(wù)
            開(kāi)發(fā)板不支持service指令,所以servicemysqlstart無(wú)效。

            采用的方法是運(yùn)行./etc/init.d/mysqldstart
            但最初運(yùn)行該指令后出現(xiàn)下面的錯(cuò)誤:
            StartingMySQL...ERROR!Managerofpid-filequitwithoutupdatingfile.
            困擾我好久,到開(kāi)發(fā)板目錄/var/lib/mysql下查閱錯(cuò)誤日志文件[hostname].err,在我的系統(tǒng)中該錯(cuò)誤日志文件為EmbedSky.err,從中看到下面的記錄:
            15071321:04:49[ERROR]Fatalerror:Cantchangetorunasusermysql;Pleasecheckthattheuserexists!
            可能的原因是:在arm的linux上無(wú)法執(zhí)行g(shù)roupaddmysql,因此需要采用如下方法解決該問(wèn)題:cd /usr/local/mysql/var/lib/mysql
            ls–la可以看到里面的屬性中沒(méi)有mysql,于是使用下面的命令:addusermysql
            chownmysql:mysql-R/var/lib/mysql
            然后開(kāi)啟mysql服務(wù),還是出現(xiàn)了ERROR!Managerofpid-filequitwithoutupdatingfile.又查看EmbedSky.err日志,其中多了一條:
            1507142:48:04[ERROR]Cantstartserver:BindonTCP/IPport:Addressalreadyinuse
            1507142:48:04[ERROR]Doyoualreadyhaveanothermysqldserverrunningonport:3306?
            很顯然是因?yàn)橐呀?jīng)有mysql的進(jìn)程嘗試打開(kāi)3306端口,因此就被占用了,需要?dú)⑦M(jìn)程,索性重啟開(kāi)發(fā)板,然后運(yùn)行./etc/init.d/mysqldstart,可以完美打開(kāi)。

             ?。ㄎ沂褂玫臅r(shí)候,還有另外的一個(gè)問(wèn)題,由于客戶(hù)端和服務(wù)器都要訪(fǎng)問(wèn)/tmp目錄,所以每次開(kāi)機(jī)都要chmod 777 /tmp ,以便于都能訪(fǎng)問(wèn))
            h)設(shè)置軟連接使mysql,mysqldump,mysqladmin這三個(gè)命令能在開(kāi)發(fā)板的shell中直接運(yùn)行
            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

            其他的還有:鏈接庫(kù)文件

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

            7)測(cè)試ARM平臺(tái)下的MySQL
            a)mysqladmin-urootpasswordhahaha最后一項(xiàng)為我的密碼(設(shè)置密碼)

            b)mysql-h127.0.0.1-uroot-p或mysql-hlocalhost-uroot-p這樣便可以進(jìn)入mysql環(huán)境。

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



            關(guān)鍵詞: 移植MySQLARM平

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉