折腾了数天,终于将mysql移植到了开发板上了,其中多有曲折,也得到了很多网友的帮助,所幸最终是有所收获的,遂记录一下以备留用。
总结嵌入式移植的经验:
1:首先应该思路清晰,文件结构要清楚明了,由于嵌入式移植涉及到主机和目标板,存在两套源码和目录,文件结构明确不容易搞错
2:嵌入式移植通常需要在主机端进行两次源码编译,首先是在主机环境下的gcc ,g++ ,ar等进行一次编译,生成或者得到一些可以在主机系统上运行的库或者中间程序
然后在用 交叉编译工具对源码进行编译一次得到目标板环境下能够执行的代码,有的时候需要讲主机环境下得到的一些执行文件copy到交叉编译对象的源码目录下,这样在
交叉编译的时候就能够跳过一些中间环节
3、在编译ncurses过程中遇到了一个问题,提示
-I../c++ 目录不存在相关的错误,经过我检查后发现c++目录是存在的而且相对路径也没错,折腾了蛮久没找到问题
后面才发现原来是没有安装g++的缘故,导致对cc文件的编译无法进行,安装g++后就没问题了
4、ylwrap line 111:-d:command not found
发现一般情况下如果报 命令行 命令找不到什么的 很有可能就是缺少了某个包或者某个依赖程序导致的
需要安装 flex或者bison 库 然后重新 ./configure 就解决了
5、按照手册上的指引,mysql交叉编译顺利完成,但是发现编译得到的结果太大了184M,开发板没有这么大的空间,于是对mysql-test移除,少了100M,将编译结果复制到
开发板对应的目录上
6、对数据库进行初始化
./mysql_install_db -u root --force --basedir=/opt/mysql --datadir=/var/lib/mys
这个时候报了很奇怪的错误:
/opt/mysql/bin/my_print_defaults: line 1: syntax error: unexpected word (expecting ")")
my_print_defaults是编译得到的可执行程序,怎么可能会有语法错误,百思不得其解,经过检索发现了一些线索
http://www.unix.com/shell-programming-scripting/103528-syntax-error-word-unexpected-expecting.html
不同的shell脚本对文件的解析有语法上的不同,而这种不同正能引发类似的这种错误
于是检查开发板和主机系统的shell
主机 :/bin/sh -> bash
开发板:/bin/sh -> busybox
于是对主机环境的sh更改连接,安装busybox,使得主机的sh -> busybox
重新对ncurses和myql编译,然后重新安装,结果顺利!!
7、其余还遇到了一些用户权限相关的错误,还有pid文件相关的错误等等,这些都可以再,移植手册中找到
8、对数据库进行测试,show databases 得到了想要的结果!!
9、在遇到问题的过程中,检索和向大家求助是很重要的,在讨论的过程中能够得到很好的灵感!