4052|1

3238

帖子

5

TA的资源

五彩晶圆(中级)

楼主
 

uci在ubuntu平台下的移植 [复制链接]

本帖最后由 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都没找到办法,不过还是最后自己解决了。



其实看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/无线论坛

最新回复

大牛,学习了  详情 回复 发表于 2018-6-7 17:35
点赞 关注
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 

回复
举报

1903

帖子

0

TA的资源

版主

沙发
 
大牛,学习了
此帖出自RF/无线论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表