MariaDB移植到mipsel-buildroot-linux-uclibc记录

移植MariaDB到MT7621这款CPU上,交叉编译工具链为mipsel-buildroot-linux-uclibc,是公司工程中的工具链,这里做个简单的记录。MariaDB使用的版本为mariadb-5.5.52,与现在的centos 7一致,保证后续的使用能与现在的系统差距不大。

Ralink提供的工具链,坑还是比较多的:

  1. 没有合理利用pkgconfig的pc文件来做工程,导致很多的configure需要指定.so路径,复杂度提高不少
  2. 所提供的编译好的工具链,没有加上-fPIC导致链接libstdc++.a的时候出错,因此结果是我自己重新编译了工具链,重新编译工具链可以阅读 《在CENTOS7上编译RALINK SDK 64-BIT工具链》,不过文章中没有编译mksquash_lzma,这个要自己补充下,否则生成img的时候会有异常。
  3. 工具链版本较低,而且使用的是uClibc,而非uClibc-ng,编译的MariaDB需要ucontext,因此自己打了补丁。
  4. 工程中利用了linux的区分大小写,同一个目录下有Makefile以及makefile同时存在,如果代码被解压到windows这种不敏感大小写的,会出现异常。

由于MariaDB使用的是5.5.52版本,这个版本其实对于交叉编译的支持没有10版本的好,因此需要打上以下的补丁,才能区分编译一些本地的可执行文件,用来生产用于编译的新文件。补丁如下:

补丁都打好了之后,将MariaDB加入工程,由于工程会export CC PATH等一些交叉编译的全局变量。我这里把我的makefile贴出来。

import_executables目录用来生成本地可执行文件,而build则用来生成交叉编译的MariaDB。重点说一下,由于cmake只能是一个目录下一个cmake,所以import_executables和build要分开,否则会有问题;而在生产build的cmake工程的时候,需要将-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=”$(CC)” -DCMAKE_CXX_COMPILER=”$(CXX)” 这些给带上去,因为cmake会自动根据CMAKE_C_COMPILER以及CMAKE_CXX_COMPILER来判定CMAKE_CROSSCOMPILING是否为TRUE,如果你自己-DCMAKE_CROSSCOMPILING=1则可能不生效。这点需要特别注意。

工程目录结构如下:

目前也只是正常编译通过,具体运行情况如何,后续再来补充下,看MT7621这颗CPU估计比较呛,好歹移植我们这的数据量不会太大。

参考资料:

Cross-compiling MariaDB

CMake Cross Compiling

转载请注明: 转载自elkPi.com

本文链接地址: MariaDB移植到mipsel-buildroot-linux-uclibc记录

发表评论

电子邮件地址不会被公开。 必填项已用*标注