社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 117|回复: 1

[原创] uci在ubuntu平台下的移植

[复制链接]

3533

TA的帖子

5

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

荣誉会员勋章

发表于 2018-6-7 16:48:14 | 显示全部楼层 |阅读模式
本帖最后由 wateras1 于 2018-6-7 16:50 编辑

                                                                           uci在ubuntu平台下的移植
这些就引用官方的操作步骤吧。
获取源代码:
git clone git://nbd.name/uci.git
转至源码目录(CMakeLists.txt所在的目录),并配置 build 为无Lua绑定:
cd uci/; cmake -D BUILD_LUA:BOOL=OFF .
编译并安装uci ALS根(这将吧uci安装到/usr/local/,请参阅如下主题,怎样在你的home目录下安装无root权限使用UCI: https://forum.openwrt.org/viewtopic.php?id=40547):
make install
打开 /etc/ld.so.conf, 并把你安装的uci库添加到这里:
vi /etc/ld.so.conf
在 /etc/ld.so.conf 某处添加这一行
/usr/local/lib
以root执行 ldconfig 来执行 /etc/ld.so.conf 的变化
ldconfig
To compile your application you have to link it against the uci library. Append -luci in your Makefile: 编译您的应用程序,你必须在您的Makefile文件中附加-luci以链接uci库:
$(CC) test.o -o test -luci
以上步骤都是在root权限下运行,如果你以为按照上面步骤就解决了,那实际运行到make install基本就是如下网友的悲剧,其实我一开始也是遇到这个悲剧,google都没找到办法,不过还是最后自己解决了。

7SOVFXLTZH5}4T~Q]PQ$T.png

其实看log信息也就是bitfiled_set函数没有定义,可惜我一直没找到这个函数的定义也不知道是来自linux内核还是哪里的头文件,如果有好友知道可以补充,于是乎,我就直接自己实现算了。在blob.c文件里面加入

bool
uci_blob_diff(struct blob_attr **tb1, struct blob_attr **tb2,
              const struct uci_blob_param_list *config, unsigned long *diff)
{
        bool ret = false;
        int i;

        for (i = 0; i < config->n_params; i++) {
                if (!tb1 && !tb2)
                        continue;

                if (!!tb1 != !!tb2)
                        goto mark;

                if (blob_len(tb1) != blob_len(tb2))
                        goto mark;

                if (memcmp(tb1, tb2, blob_raw_len(tb1)) != 0)
                        goto mark;

                continue;

mark:
                ret = true;
                if (diff)
                        bitfield_set(diff, i);
                else
                        return ret;
        }

        return ret;
}

在这个函数定义前面加入
void bitfield_set(unsigned long *bitfield, unsigned int num)
{
    memset(bitfield, (char)~0, num*sizeof(*bitfield));
}


接下里在创建下config文件mkdir -p /etc/config
vi一个test测试文件内容如下:test.abc=xxxxtest.abc.test_var='value'

root@wateras-virtual-machine:/etc/config# uci show test
test.abc=sdsds
test.abc.test_var='value'
root@wateras-virtual-machine:/etc/config# uci set test.abc='wateras'
root@wateras-virtual-machine:/etc/config# uci commit test
root@wateras-virtual-machine:/etc/config# uci show test
test.abc=wateras
test.abc.test_var='value'
root@wateras-virtual-machine:/etc/config#


就以上几步就解决了uci在ubuntu上面的移植,对于我们熟悉uci命令操作也方便不需要在openwrt平台下面测试,我们直接在电脑上面验证没有问题再放到op里面也方便,最近移植一些开源的软件,下载下来总是缺少各种依赖,于是乎又是神农百草般各种debug,没事就成为神农,死了就是倒霉鬼了







此内容由EEWORLD论坛网友wateras1原创,如需转载或用于商业用途需征得作者同意并注明出处


此帖出自RF/无线论坛
淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目


回复

使用道具 举报

1175

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-6-7 17:35:15 | 显示全部楼层
大牛,学习了


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-6-21 00:58 , Processed in 0.079435 second(s), 17 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表