注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

wateras1的个人空间 http://home.eeworld.com.cn/space-uid-361439.html [收藏] [复制] [分享] [RSS]

日志

uci在ubuntu平台下的移植

已有 120 次阅读2018-6-7 16:48 |个人分类:MTK7688/7628 openwrt alexa

                                                                           uci在ubuntu平台下的移植
这些就引用官方的操作步骤吧。
[backcolor=rgba(255, 255, 255, 0.8)]获取源代码:
git clone git://nbd.name/uci.git
[backcolor=rgba(255, 255, 255, 0.8)]转至源码目录(CMakeLists.txt所在的目录),并配置 build 为无Lua绑定:
cd uci/; cmake -D BUILD_LUA:BOOL=OFF .
[backcolor=rgba(255, 255, 255, 0.8)]编译并安装uci ALS根(这将吧uci安装到/usr/local/,请参阅如下主题,怎样在你的home目录下安装无root权限使用UCI: https://forum.openwrt.org/viewtopic.php?id=40547):
make install
[backcolor=rgba(255, 255, 255, 0.8)]打开 /etc/ld.so.conf, 并把你安装的uci库添加到这里:
vi /etc/ld.so.conf
[backcolor=rgba(255, 255, 255, 0.8)]在 /etc/ld.so.conf 某处添加这一行
/usr/local/lib
[backcolor=rgba(255, 255, 255, 0.8)]以root执行 ldconfig 来执行 /etc/ld.so.conf 的变化
ldconfig
[backcolor=rgba(255, 255, 255, 0.8)]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文件里面加入

bool167 uci_blob_diff(struct blob_attr **tb1, struct blob_attr **tb2,168               const struct uci_blob_param_list *config, unsigned long *diff)169 {170         bool ret = false;171         int i;172 173         for (i = 0; i < config->n_params; i++) {174                 if (!tb1 && !tb2)175                         continue;176 177                 if (!!tb1 != !!tb2)178                         goto mark;179 180                 if (blob_len(tb1) != blob_len(tb2))181                         goto mark;182 183                 if (memcmp(tb1, tb2, blob_raw_len(tb1)) != 0)184                         goto mark;185 186                 continue;187 188 mark:189                 ret = true;190                 if (diff)191                         bitfield_set(diff, i);192                 else193                         return ret;194         }195 196         return ret;197 }
在这个函数定义前面加入
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原创,如需转载或用于商业用途需征得作者同意并注明出处


本文来自论坛,点击查看完整帖子内容。

全部作者的其他最新日志

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

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

GMT+8, 2019-2-21 08:40 , Processed in 0.030603 second(s), 11 queries , Gzip On, MemCache On.