openwrt 相关知识记录

1. luci 安装


 为便于调试,计划直接在x86 Linux 上安装luci环境,参考,http://luci.subsignal.org/trac/wiki/Documentation/DevelopmentEnvironmentHowTo,以下记录简要步骤以及若干问题。


(1)  下载luci 源码

git clone https://github.com/openwrt/luci.git

(2) 编译

make runuhttpd
问题1: lauxlib.h找不到
原因是没有安装对应的liblua-dev 库,安装即可
问题2:iwinfo.h 找不到
参考http://stackoverflow.com/questions/26708571/luci-compilation-erroriwinfo-h-no-such-file-or-directory,最简单的修改方案是执行如下命令:
git checkout 89678917~1 modules/admin-full/src/luci-bwc.c

2. 交叉编译

项目需要使用openwrt交叉编译,而且计划将项目自己的部分独立在openwrt 主目录之外,如此可以更快的编译和安装,只需要编译好之后将rootfs 合并即可,但需要用到openwrt 原有的库和头文件,包括uci ubox等等,以下是解决方案


项目主目录下生成一个基本的Makefile,暂时称为main.mk,其中定义了openwrt 编译之后的目录,此目录称为TARGET,TARGET/usr/include为头文件路径,TARGET/usr/lib 为库文件路径。main.mk 中导出环境变量 C_INCLUDE_PATH,其中包含TARGET/usr/include,如此所有的C代码中只要直接include 即可,比如#include <uci.h>


对于库文件,原本导出LIBRARY_PATH环境变量,包含TARGET/usr/lib ,但测试时发现交叉编译时无用,但非交叉编译时可以使用,非常奇怪,故只能导出一个MAIN_LDFLAGS 环境变量,其中包含库文件路径,所有的Makefile 中均使用MAIN_LDFLAGS,如此应用程序都可以使用openwrt 的头文件和库了


3. 编译参数导致程序coredump

mips平台,在openwrt 的编译框架中编译程序,没有任何问题,但将编译环境剥离出去,再次编译相同的程序,执行时只要一写文件就coredump,相当怪异。起初怀疑程序有bug,但后来仔细对照编译命令的差别,发现在openwrt 的编译框架中加入了若干编译参数“  -Os -pipe -mmt -mips32r2 -mtune=1004kc“, 再次离线编译后就没有问题了。

具体的原因没有追究


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值