1、打包文件到开发板
把编译得到的文件打包到开发板
ubuntu:tar -cvf nginx.tar.gz nginx
开发板:tar -xvf nginx.tar.gz
在开发板上运行:./nginx -p /smarthome/webcontent/nginx/
出现错误:nginx: [emerg] getgrnam("nogroup") failed
把nginx.conf 第二行改为user root;并支持注释
再试
出现Segmentation fault,莫非是交叉编译的时候出问题了,用GDB Server调试看看
1)编译一个gdbserver
下载gdb-6.6源码,由于我只需要gdbserver故直接到gdb/gdbserver目录下
./configure --host=arm-nuvoton-linux-uclibceabi --target=arm-nuvoton-linux-uclibceabi
Makefile中添加-static,(如果不加后面会出现包依赖的问题)
2)得到gdbserver
2.gdbserver调试程序
(1)arm端
./gdbserver 192.168.1.28:2345 nginx -p /smarthome/webcontent/nginx/
(2)主机端
1)arm-linux-gdb nginx
2)target remote 192.168.1.100:2345
发现有问题
倒回去,重新编译nginx,.1.6.2、1.0.15、版本和当前版本(1.14.0)问题一样
经过几天的调试,发现是ngx_process.c文件下
ngx_int_t
ngx_init_signals(ngx_log_t *log)
{
ngx_signal_t *sig;
struct sigaction sa;
for (sig = signals; sig->signo != 0; sig++) {
ngx_memzero(&sa, sizeof(struct sigaction));
sa.sa_handler = sig->handler;
sigemptyset(&sa.sa_mask);
if (sigaction(sig->signo, &sa, NULL) == -1) {
ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
"sigaction(%s) failed", sig->signame);
return NGX_ERROR;
}
}
return NGX_OK;
}
这个函数里sigemptyset(&sa.sa_mask) 这一行出的问题,sigemptyset(sigset_t *)函数里的结构体类型不匹配,struct sigaction sa中的sa_mask中的类型为long __val[],而需要的是long sig[],推测是新唐提供的编译工具和库与nginx不兼容 ??WTF
折腾良久,还是没有找到解决方案,暂时搁置,等有时间再看看。