================================
这里是手动编译的,自动编译看4,5楼
================================
下载ncurses5.6,解压,进入到目录
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz
tar zxvf ncurses-5.6.tar.gz
cd ncurses-5.6.tar.gz
切换到root用户
su
配置,这里的-host是我交叉编译工具的前缀,按实际情况改
./configure -host=arm-buildroot-linux-gnueabi -prefix=/ -enable-static
开始编译,安装
make -j2
make install DESTDIR=$PWD/tmp
用这条命令看一下交叉编译工具搜索的文件和库路径在哪
echo 'main(){}'|arm-buildroot-linux-gnueabi-gcc -E -v -
可以看到头文件和库目录的路径分别在这里
然后进入安装的tmp目录下分别把include下的文件放到上面的头文件路径,lib下单文件放到库路径并且保持链接
cd tmp
cp -rf include/* /home/lmnb/f1c100s/buildroot-2017.08/output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include
cp -rfd lib/* /home/lmnb/f1c100s/buildroot-2017.08/output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/
可以退出root了。
=========================================================
开始移植MySQL5.1.73
在阿里云上下载mysql5.1.73源码包https://mirrors.aliyun.com/mysql/MySQL-5.1/
一直往下拉,找到这两个的任意一个下载
然后开始解压
unzip mysql-5.1.73.zip
这里复制两份一份命名为pc-mysql-5.1.73,另一份命名为arm-mysql-5.1.73,随便取都可以区分开就行
cp mysql-5.1.73 pc-mysql-5.1.73
mv mysql-5.1.73 arm-mysql-5.1.73
先进入到pc-mysql-5.1.73目录里面,然后配置,注意了这里应该是不用root的,然后直接编译就好了不用安装
cd pc-mysql-5.1.73/
./configure -prefix=/usr
make -j2
然后进入arm-mysql-5.1.73目录,这里先不要配置,改一下配置文件
cd arm-mysql-5.1.73/
vim configure
找到这4处注释掉,大概位置在26303,48121,48227,48440
注释后还要加上后面那句
{ { $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; }; }; }
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; }; }; }
ok,开始配置
./configure --host=arm-buildroot-linux-gnueabi --enable-static --prefix=/usr --without-debug --without-docs --without-man --without-bench --with-charset=gb2312 --with-extra-charsets=ascii,latin1,utf8
然后删掉Makefile里面do_abi_check:后面的内容,注意是有tab后的
可以编译了,但是会报错,注意要先编译等报错了再处理后面的操作
make -j2
报错内容
./gen_lex_hash > lex_hash.h-t
解决办法,把pc-mysql-5.1.73/sql/gen_lex_hash复制到当前目录下的sql目录里
cp ../pc-mysql-5.1.73/sql/gen_lex_hash
touch -m sql/gen_lex_hash
又可以愉快的编译和安装了
make
make install DESTDIR=$PWD/tmp
也一样又进入tmp/usr目录复制include目录下的内容和lib/mysql/下的内容到交叉编译的环境中
然后就是把tmp目录下的内容拷贝到开发板了,先随便放,我这里放/root
==========================================================
到操作开发板了,我自己画的板,可以连wifi
同样的操作,复制bin,复制保持连接lib,复制sheare,复制libexec
cd tmp/usr/
cp -rf bin/* /usr/bin
cp -rfd lib/mysql/* /usr/lib
cp -rf libexec/* /usr/libexec/
cp -rf share/mysql /usr/share/
进入/etc目录,创建my.cnf文件复制如下代码到my.cnf里
cd /etc
vi my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
datadir=/usr/var/data
socket=/tmp/mysql.sock
user=root
old_passwords=1
skip-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/lib/mysqld/mysqld.pid
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
创建这几个目录和文件
mkdir -p /var/lib/mysqld/
mkdir -p /var/log/
touch /var/lib/mysqld/mysqld.pid
mkdir -p /usr/var/data/
安装mysql,启动
mysql_install_db -u root
mysqld_safe --user=root --skip-grant-tables --skip-networking &
没问题,可以操作数据库了
设置开机启动,回到刚才那个目录,复制这个脚本,Sxx随便取
cd /root/tmp/usr
cp share/mysql/mysql.server /etc/init.d/S90mysqld
cd /etc/init.d/
先改一下内容再操作,到69行改为跟my.cnf里一样的路径, datadir=/usr/var/data
然后保存要先启动一下再改其他内容
./S90mysqld start
应该是可以的不过会出现什么hostname找不到的情况
再进去改59和60行
pid_file=/var/lib/mysqld/mysqld.pid
server_pid_file=/var/lib/mysqld/mysqld.pid
到这里应该就没什么问题了先reboot。
上电就可以看到mysql启动了
连上wife,小试一下牛刀
mysql -h 192.168.43.198 -P 3306 -u lmnb -p
show databases;
哟吼,毕设要采集的数据可以用数据库来管理了
不错不错,查一下表看看
===================================================================
网上找了个C语言操作的方法
/*************************************************************************
> File Name: connect.c
> Author: 杨永利
> Mail: 1795018360@qq.com
> Created Time: 2020年08月14日 星期五 20时39分56秒
************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
// 定义连接时所需要的数据宏
#define HOST "192.168.43.198" // 所连数据库的ip 127.0.0.1是本机ip
#define USER "lmnb" // 数据库用户
#define PASSWORD "123456" // 该用户密码(自设)
#define DBNAME "szjcxt" // 要操作的数据库名
// 打印结果集函数
void show_result(MYSQL_RES * result)
{
//打印表头
unsigned int num_fields;
unsigned int i;
// MYSQL_FIELD 该结构包含关于字段的信息,如字段名、类型和大小
MYSQL_FIELD *fields;
// 返回结果集中的行数。
num_fields = mysql_num_fields(result);
// mysql_fetch_fields 对于结果集,返回所有MYSQL_FIELD结构的数组。每个结构提供了结果集中1列的字段定义。
fields = mysql_fetch_fields(result);
// 输出结果
for(i = 0; i < num_fields; i++)
{
printf("%s\t", fields[i].name);
}
// 这个输出是打造表的结构边框便于查看数据,准确的输出按照你的数据自行增加减去+号
printf("\n+----+-------+\n");
// 行数
MYSQL_ROW row;
num_fields = mysql_num_fields(result);//取字段个数
while ((row = mysql_fetch_row(result)))//循环取一行
{
for(i = 0; i < num_fields; i++)
{
// 看是否为空
printf("%s\t", row[i] ? row[i] : "NULL");
}
printf("\n");
}
}
int main(int argc, char* argv[])
{
// 定义mysql指针并初始化
MYSQL *mysql=mysql_init(NULL);
if(mysql== NULL)
{
printf("init err! 数据库初始化错误!\n");
return -1;
}
// 初始化成功就连接数据库
mysql = mysql_real_connect(mysql,HOST,USER,PASSWORD,DBNAME,0,NULL,0);
if(mysql == NULL)
{
printf("connect err! 数据库连接失败! \n");
return -1;
}
printf("数据库连接成功!\n");
// 定义查询语句
char rSql[256]={0};
// 我的表名为example
strcpy(rSql,"select * from users");
// 查询指向的SQL查询
if(mysql_query(mysql,rSql) != 0){
printf("mysql_query err! 查询失败\n");
exit(1);
}
// 取回结果集
int i=0;
// mysql_store_result()将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中。
MYSQL_RES * result = mysql_store_result(mysql);
MYSQL_ROW row;
if(result != NULL){
//需要打印结果集
show_result(result);
mysql_free_result(result);//释放结果集
}
// 最后关闭连接
mysql_close(mysql);
printf("数据库关闭成功!\n");
return 0;
}
编译选择手动连接库
arm-buildroot-linux-gnueabi-gcc -o select select.c -lmysqlclient
============================================================
参考链接:
https://blog.csdn.net/wangn222/article/details/71624492
https://blog.csdn.net/weixin_39887748/article/details/111676316
https://bbs.elecfans.com/jishu_910286_1_1.html
https://blog.csdn.net/weixin_45525272/article/details/108014858
最近编辑记录 lmnb (2024-04-09 15:20:15)
离线
@lmnb
$ grep mysql_install_db -r /opt/buildroot/buildroot-2024-aarch64/package/
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/S97mysqld: $MYSQL_BIN/mysql_install_db --basedir=/usr \
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/mysqld.service:ExecStartPre=/bin/sh -c 'test "`ls -1 /var/lib/mysql | wc -l`" != "0" ||
$ grep mysqld_safe -r /opt/buildroot/buildroot-2024-aarch64/package/
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/S97mysqld: $MYSQL_BIN/mysqld_safe --pid-file=$MYSQL_PIDFILE --user=mysql \
/opt/buildroot/buildroot-2024-aarch64/package/mariadb/mysqld.service:ExecStart=/usr/bin/mysqld_safe --log-error=/var/log/mysql/mysqld.log
MySQL的package确实没有你说的这两个,但是mariadb里面有,用buildroot 2024.02 可以试一试。
离线
@晕哥
我靠不用2024的也行,我的是2017.8的,原来是我选漏了,下面这样就可以了
自动编译确实好→ Target packages → Libraries → Database [*] mysql support mysql variant (oracle mysql) ---> [*] oracle mysql server
然后在开发板里面复制/usr/share/mysql/my-small.cnf到/etc/my.cnf下面
cp /usr/share/mysql/my-small.cnf /etc/my.cnf
再在my.cnf里面加点东西,我是在[mysqldump]前面加的
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/run/mysql/mysqld.pid
reboot之后自己就启动了
离线