CaryStudio

 找回密码
 立即注册
搜索
查看: 6084|回复: 0

我的openwrt学习笔记(三十三):Openwrt 之lua 在ubuntu中的测试

[复制链接]
发表于 2017-12-7 09:49:39 | 显示全部楼层 |阅读模式

请先登录

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
       Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、WaldemarCeles 和 Luiz Henrique de Figueiredo所组成并于1993年开发。其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
编译
  1. linux@ubuntu:~/linux_c/lua/lua-5.1.5$ make linux
  2. cd src && make linux
  3. make[1]: Entering directory `/home/linux/linux_c/lua/lua-5.1.5/src'
  4. make all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses"
  5. make[2]: Entering directory `/home/linux/linux_c/lua/lua-5.1.5/src'
  6. gcc -o lua  lua.o liblua.a -lm -Wl,-E -ldl -lreadline -lhistory -lncurses
  7. /usr/bin/ld: cannot find -lreadline
  8. /usr/bin/ld: cannot find -lhistory
  9. collect2: ld returned 1 exit status
  10. make[2]: *** [lua] Error 1
  11. make[2]: Leaving directory `/home/linux/linux_c/lua/lua-5.1.5/src'
  12. make[1]: *** [linux] Error 2
  13. make[1]: Leaving directory `/home/linux/linux_c/lua/lua-5.1.5/src'
  14. make: *** [linux] Error 2
  15. linux@ubuntu:~/linux_c/lua/lua-5.1.5$ ldconfig -p | grep readline
  16. /sbin/ldconfig.real: relative path `|' used to build cache

  17. linux@ubuntu:~/linux_c/lua/lua-5.1.5$sudo apt-get install libreadline5
  18. linux@ubuntu:~/linux_c/lua/lua-5.1.5$ sudo apt-get install libreadline-dev
  19. Reading package lists... Done
  20. Building dependency tree      
  21. Reading state information... Done
  22. The following extra packages will be installed:
  23.   libreadline6-dev
  24. The following NEW packages will be installed:
  25.   libreadline-dev libreadline6-dev
  26. 0 upgraded, 2 newly installed, 0 to remove and 623 not upgraded.
  27. Need to get 250 kB of archives.
  28. After this operation, 637 kB of additional disk space will be used.
  29. Do you want to continue [Y/n]? y
  30. Get:1 http://cn.archive.ubuntu.com/ubuntu/ precise/main libreadline6-dev i386 6.2-8 [249 kB]
  31. Get:2 http://cn.archive.ubuntu.com/ubuntu/ precise/main libreadline-dev i386 6.2-8 [932 B]
  32. Fetched 250 kB in 0s (975 kB/s)     
  33. Selecting previously unselected package libreadline6-dev.
  34. (Reading database ... 149096 files and directories currently installed.)
  35. Unpacking libreadline6-dev (from .../libreadline6-dev_6.2-8_i386.deb) ...
  36. Selecting previously unselected package libreadline-dev.
  37. Unpacking libreadline-dev (from .../libreadline-dev_6.2-8_i386.deb) ...
  38. Processing triggers for install-info ...
  39. Setting up libreadline6-dev (6.2-8) ...
  40. Setting up libreadline-dev (6.2-8) ...

  41. linux@ubuntu:~/linux_c/lua/lua-5.1.5$ make linux
  42. cd src && make linux
  43. make[1]: Entering directory `/home/linux/linux_c/lua/lua-5.1.5/src'
  44. make all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses"
  45. make[2]: Entering directory `/home/linux/linux_c/lua/lua-5.1.5/src'
  46. gcc -o lua  lua.o liblua.a -lm -Wl,-E -ldl -lreadline -lhistory -lncurses
  47. gcc -O2 -Wall -DLUA_USE_LINUX   -c -o luac.o luac.c
  48. gcc -O2 -Wall -DLUA_USE_LINUX   -c -o print.o print.c
  49. gcc -o luac  luac.o print.o liblua.a -lm -Wl,-E -ldl -lreadline -lhistory -lncurses
  50. make[2]: Leaving directory `/home/linux/linux_c/lua/lua-5.1.5/src'
  51. make[1]: Leaving directory `/home/linux/linux_c/lua/lua-5.1.5/src'
复制代码
安装
  1. linux@ubuntu:~/linux_c/lua/lua-5.1.5$ sudo make install
  2. cd src && mkdir -p /usr/local/bin /usr/local/include /usr/local/lib /usr/local/man/man1 /usr/local/share/lua/5.1 /usr/local/lib/lua/5.1
  3. cd src && install -p -m 0755 lua luac /usr/local/bin
  4. cd src && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp /usr/local/include
  5. cd src && install -p -m 0644 liblua.a /usr/local/lib
  6. cd doc && install -p -m 0644 lua.1 luac.1 /usr/local/man/man1
  7. linux@ubuntu:~/linux_c/lua/lua-5.1.5$ which lua
  8. /usr/local/bin/lua
  9. linux@ubuntu:~/linux_c/lua/lua-5.1.5$ which luac
  10. /usr/local/bin/luac
  11. 测试是否安装成功
  12. linux@ubuntu:~/linux_c/lua/lua-5.1.5$ lua
  13. Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
  14. >

  15. linux@ubuntu:~/linux_c/lua/lua-5.1.5$ lua -v
  16. Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
复制代码
  1. 例子1:
  2. #!/usr/bin/lua
  3. --hello world lua program
  4. print ("Hello World!")

  5. linux@ubuntu:~/linux_c/lua/lua-5.1.5/luca_study$ lua test1.lua
  6. Hello World!

  7. 改进
  8. ..是lua中字符串的连接符,为了规范,使用的时候前后必须
  9. 有空格,例如:print(10 .. 20) --> 1020
  10. #!/usr/bin/lua
  11. --hello world lua program
  12. print ("Hello World!")


  13. str = "Hello World!"
  14. print (str)

  15. if str == "Hello World!" then
  16. print "ok"
  17. end
  18. ~
  19. linux@ubuntu:~/linux_c/lua/lua-5.1.5/luca_study$ lua test1.lua
  20. Hello World!
  21. Hello World!
  22. Ok

  23. Lua教程http://tech.it168.com/zt/lua/
复制代码
  1. 例子三:CPP调用LUA
  2. testcpp.cpp
  3. #include <stdio.h>
  4. #include <iostream>
  5. extern "C"
  6. {
  7.    #include "lua.h"
  8.    #include "lualib.h"
  9.    #include "lauxlib.h"
  10. }//在工具中包含文件的那个~~
  11. /* Lua解释器指针 */
  12. lua_State * L;
  13. //#pragma comment(lib,"lua51.lib")//包含库文件~~在工具里包含不进来,上面的包含不进来的处理办法是:
  14. //把lua51.dll 拷到项目的dubug目录下,把lua51.lib拷到项目目录的项目名的文件夹下
  15. int main ()
  16. {
  17. //cout<<"cpp invoke lua example";
  18. printf("cpp invoke lua example\n");
  19. /* 初始化Lua */
  20. L = lua_open();
  21. /* 载入Lua基本库 */
  22. luaL_openlibs(L);
  23. /* 运行脚本 ,注意路径*/
  24. luaL_dofile(L, "./test1.lua");
  25. /* 清除Lua */
  26. lua_close(L);
  27. //printf( "Press enter to exit…" );
  28. //getchar();
  29. return 0;
  30. }
  31. C++中调用LUA
  32. linux@ubuntu:~/linux_c/lua/lua-5.1.5/luca_study$ g++ -g testcpp.cpp -llua -lm -ldl
  33. linux@ubuntu:~/linux_c/lua/lua-5.1.5/luca_study$ ./a.out
  34. cpp invoke lua example
  35. Hello World!
  36. Hello world, from Lua 5.1!
  37. Hello World!
  38. ok
  39. This a string.
  40. true false
  41. false          true
  42. 119


  43. linux@ubuntu:~/linux_c/lua/lua-5.1.5/luca_study$ cat /usr/local/include/lua.hpp
  44. // lua.hpp
  45. // Lua header files for C++
  46. // <<extern "C">> not supplied automatically because Lua also compiles as C++

  47. extern "C" {
  48. #include "lua.h"
  49. #include "lualib.h"
  50. #include "lauxlib.h"
  51. }
  52. 在C++中引用C语言中的函数和变量,在包含C语言头文件(假设为cExample.h)时,需进行下列处理:
  53. extern "C"
  54. {
  55. #include "cExample.h"
  56. }
  57. 所以上述CPP文件extern "C"
  58. {
  59.    #include "lua.h"
  60.    #include "lualib.h"
  61.    #include "lauxlib.h"
  62. }//在工具中包含文件的那个~~
  63. 可以替换为
  64. #include "lua.hpp"<span style="font-family: Tahoma; background-color: rgb(255, 255, 255);"> </span>
复制代码
      Openwrt 之uci 在ubuntu中的测试
UCI是Unified Configuration Interface的缩写,翻译成中文就是统一配置接口,用途就是为OpenWrt提供一个集中控制的接口。OpenWrt实现的这个工具,能够让你的不管是Lua还是PHP程序,或者SHELL程序或C程序,只要执行命令传输参数就能达到修改系统参数的目的.
Uci 在ubuntu下的使用.
       UCI的配置文件被分割成/etc/config下的多个独立的文件,各个文件按名字含义对应系统的不同的功能配置。你可以通过文本编译器或者uci实用程序去修改这些配置文件,同时uci还提供了C语言/脚本/Lua等语言的应用程序接口,WEB配置页面例如Luci就是利用了uci所提供的API而实现对UCI配置文件的修改的。
      不管你是采用文本编辑器还是通过命令行的方式修改了UCI配置文件,相应的服务或应用程序不会自动更新状态,这时你都必须调用一次/etc/init.d (re)start才能使刚刚对UCI配置文件的修改生效。许多兼容UCI的程序采用这样的方法来应用更新:在init.d脚本执行流中去修改自己程序的配置文件。具体说来,init.d脚本先去修改自己程序的原配置文件中的信息(如/etc/samba/smb.conf),之后重启一次应用程序,应用程序就会去读自己的配置文件(刚刚被init.d更新过的)再启动,这样应用程序的状态就更新了。仅仅重启应用程序,而不执行init.d脚本的话,/etc/config下的UCI配置文件是不会应用于应用程序的,新配置也就不生效了。
  1. linux@ubuntu:~/linux_c/uci$ ls -l
  2. total 56
  3. drwxr-xr-x 5 linux linux  4096 Jul 21 09:31 uci-2014-04-11.1
  4. -rw-rw-r-- 1 linux linux 50065 Sep 14 19:25 uci-2014-04-11.1.tar.gz
  5. linux@ubuntu:~/linux_c/uci$ cd uci-2014-04-11.1/
  6. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1$ ls -l
  7. total 196
  8. -rw-r--r-- 1 linux linux  4864 Jul 21 09:31 blob.c
  9. -rw-r--r-- 1 linux linux 14589 Jul 21 09:31 cli.c
  10. -rw-r--r-- 1 linux linux  1013 Jul 21 09:31 CMakeLists.txt
  11. -rw-r--r-- 1 linux linux 10991 Jul 21 09:31 delta.c
  12. -rw-r--r-- 1 linux linux 19524 Jul 21 09:31 file.c
  13. -rw-r--r-- 1 linux linux  5290 Jul 21 09:31 libuci.c
  14. -rw-r--r-- 1 linux linux 16379 Jul 21 09:31 list.c
  15. -rw-r--r-- 1 linux linux 17600 Jul 21 09:31 list.h
  16. drwxr-xr-x 2 linux linux  4096 Jul 21 09:31 lua
  17. -rw-r--r-- 1 linux linux  2587 Jul 21 09:31 parse.c
  18. drwxr-xr-x 2 linux linux  4096 Jul 21 09:31 sh
  19. drwxr-xr-x 6 linux linux  4096 Jul 21 09:31 test
  20. -rw-r--r-- 1 linux linux  1299 Jul 21 09:31 uci_blob.h
  21. -rw-r--r-- 1 linux linux    59 Jul 21 09:31 uci_config.h.in
  22. -rw-r--r-- 1 linux linux 17605 Jul 21 09:31 uci.h
  23. -rw-r--r-- 1 linux linux  7220 Jul 21 09:31 uci_internal.h
  24. -rw-r--r-- 1 linux linux 19146 Jul 21 09:31 ucimap.c
  25. -rw-r--r-- 1 linux linux  9118 Jul 21 09:31 ucimap.h
  26. -rw-r--r-- 1 linux linux  5109 Jul 21 09:31 util.c
  27. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1$ cmake .
  28. -- The C compiler identification is GNU
  29. -- Check for working C compiler: /usr/bin/gcc
  30. -- Check for working C compiler: /usr/bin/gcc -- works
  31. -- Detecting C compiler ABI info
  32. -- Detecting C compiler ABI info - done
  33. -- Configuring done
  34. -- Generating done
  35. -- Build files have been written to: /home/linux/linux_c/uci/uci-2014-04-11.1
  36. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1$ make
  37. Scanning dependencies of target uci
  38. [ 11%] Building C object CMakeFiles/uci.dir/libuci.c.o
  39. [ 22%] Building C object CMakeFiles/uci.dir/file.c.o
  40. [ 33%] Building C object CMakeFiles/uci.dir/util.c.o
  41. [ 44%] Building C object CMakeFiles/uci.dir/delta.c.o
  42. [ 55%] Building C object CMakeFiles/uci.dir/parse.c.o
  43. [ 66%] Building C object CMakeFiles/uci.dir/blob.c.o
  44. Linking C shared library libuci.so
  45. [ 66%] Built target uci
  46. Scanning dependencies of target cli
  47. [ 77%] Building C object CMakeFiles/cli.dir/cli.c.o
  48. Linking C executable uci
  49. [ 77%] Built target cli
  50. Scanning dependencies of target ucimap
  51. [ 88%] Building C object CMakeFiles/ucimap.dir/ucimap.c.o
  52. Linking C static library libucimap.a
  53. [ 88%] Built target ucimap
  54. Scanning dependencies of target uci_lua
  55. [100%] Building C object lua/CMakeFiles/uci_lua.dir/uci.c.o
  56. Linking C shared module uci.so
  57. [100%] Built target uci_lua

  58. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1$ file uci
  59. uci: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xd271be1dcdf6d41d5e6517da451263c291483673, not stripped
  60. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1$ sudo make install
  61. [sudo] password for linux:
  62. [ 66%] Built target uci
  63. [ 77%] Built target cli
  64. [ 88%] Built target ucimap
  65. [100%] Built target uci_lua
  66. Install the project...
  67. -- Install configuration: ""
  68. -- Installing: /usr/local/include/uci.h
  69. -- Installing: /usr/local/include/uci_config.h
  70. -- Installing: /usr/local/include/uci_blob.h
  71. -- Installing: /usr/local/include/ucimap.h
  72. -- Installing: /usr/local/lib/libuci.so
  73. -- Installing: /usr/local/bin/uci
  74. -- Removed runtime path from "/usr/local/bin/uci"
  75. -- Installing: /usr/local/lib/lua/5.1/uci.so
  76. -- Removed runtime path from "/usr/local/lib/lua/5.1/uci.so"
  77. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1$ which uci
  78. /usr/local/bin/uci
  79. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1$ uci -v
  80. uci: error while loading shared libraries: libuci.so: cannot open shared object file: No such file or directory

  81. linux@ubuntu:/usr/local/lib$ ldd /usr/local/bin/uci
  82.          linux-gate.so.1 =>  (0xb779f000)
  83.          libuci.so => not found
  84.          libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75e7000)
  85.          /lib/ld-linux.so.2 (0xb77a0000)
  86. linux@ubuntu:/usr/local/lib$ LD_DEBUG=libs uci -v
  87.       5877:   find library=libuci.so [0]; searching
  88.       5877:   search cache=/etc/ld.so.cache
  89.       5877:   search path=/lib/i386-linux-gnu/tls/i686/sse2/cmov:/lib/i386-linux-gnu/tls/i686/sse2:/lib/i386-linux-gnu/tls/i686/cmov:/lib/i386-linux-gnu/tls/i686:/lib/i386-linux-gnu/tls/sse2/cmov:/lib/i386-linux-gnu/tls/sse2:/lib/i386-linux-gnu/tls/cmov:/lib/i386-linux-gnu/tls:/lib/i386-linux-gnu/i686/sse2/cmov:/lib/i386-linux-gnu/i686/sse2:/lib/i386-linux-gnu/i686/cmov:/lib/i386-linux-gnu/i686:/lib/i386-linux-gnu/sse2/cmov:/lib/i386-linux-gnu/sse2:/lib/i386-linux-gnu/cmov:/lib/i386-linux-gnu:/usr/lib/i386-linux-gnu/tls/i686/sse2/cmov:/usr/lib/i386-linux-gnu/tls/i686/sse2:/usr/lib/i386-linux-gnu/tls/i686/cmov:/usr/lib/i386-linux-gnu/tls/i686:/usr/lib/i386-linux-gnu/tls/sse2/cmov:/usr/lib/i386-linux-gnu/tls/sse2:/usr/lib/i386-linux-gnu/tls/cmov:/usr/lib/i386-linux-gnu/tls:/usr/lib/i386-linux-gnu/i686/sse2/cmov:/usr/lib/i386-linux-gnu/i686/sse2:/usr/lib/i386-linux-gnu/i686/cmov:/usr/lib/i386-linux-gnu/i686:/usr/lib/i386-linux-gnu/sse2/cmov:/usr/lib/i386-linux-gnu/sse2:/usr/lib/i386-linux-gnu/cmov:/usr/lib/i386-linux-gnu:/lib/tls/i686/sse2/cmov:/lib/tls/i686/sse2:/lib/tls/i686/cmov:/lib/tls/i686:/lib/tls/sse2/cmov:/lib/tls/sse2:/lib/tls/cmov:/lib/tls:/lib/i686/sse2/cmov:/lib/i686/sse2:/lib/i686/cmov:/lib/i686:/lib/sse2/cmov:/lib/sse2:/lib/cmov:/lib:/usr/lib/tls/i686/sse2/cmov:/usr/lib/tls/i686/sse2:/usr/lib/tls/i686/cmov:/usr/lib/tls/i686:/usr/lib/tls/sse2/cmov:/usr/lib/tls/sse2:/usr/lib/tls/cmov:/usr/lib/tls:/usr/lib/i686/sse2/cmov:/usr/lib/i686/sse2:/usr/lib/i686/cmov:/usr/lib/i686:/usr/lib/sse2/cmov:/usr/lib/sse2:/usr/lib/cmov:/usr/lib           (system search path)
  90.       5877:     trying file=/lib/i386-linux-gnu/tls/i686/sse2/cmov/libuci.so
  91.       5877:     trying file=/lib/i386-linux-gnu/tls/i686/sse2/libuci.so
  92.       5877:     trying file=/lib/i386-linux-gnu/tls/i686/cmov/libuci.so
  93.       5877:     trying file=/lib/i386-linux-gnu/tls/i686/libuci.so
  94.       5877:     trying file=/lib/i386-linux-gnu/tls/sse2/cmov/libuci.so
  95.       5877:     trying file=/lib/i386-linux-gnu/tls/sse2/libuci.so
  96.       5877:     trying file=/lib/i386-linux-gnu/tls/cmov/libuci.so
  97.       5877:     trying file=/lib/i386-linux-gnu/tls/libuci.so
  98.       5877:     trying file=/lib/i386-linux-gnu/i686/sse2/cmov/libuci.so
  99.       5877:     trying file=/lib/i386-linux-gnu/i686/sse2/libuci.so
  100.       5877:     trying file=/lib/i386-linux-gnu/i686/cmov/libuci.so
  101.       5877:     trying file=/lib/i386-linux-gnu/i686/libuci.so
  102.       5877:     trying file=/lib/i386-linux-gnu/sse2/cmov/libuci.so
  103.       5877:     trying file=/lib/i386-linux-gnu/sse2/libuci.so
  104.       5877:     trying file=/lib/i386-linux-gnu/cmov/libuci.so
  105.       5877:     trying file=/lib/i386-linux-gnu/libuci.so
  106.       5877:     trying file=/usr/lib/i386-linux-gnu/tls/i686/sse2/cmov/libuci.so
  107.       5877:     trying file=/usr/lib/i386-linux-gnu/tls/i686/sse2/libuci.so
  108.       5877:     trying file=/usr/lib/i386-linux-gnu/tls/i686/cmov/libuci.so
  109.       5877:     trying file=/usr/lib/i386-linux-gnu/tls/i686/libuci.so
  110.       5877:     trying file=/usr/lib/i386-linux-gnu/tls/sse2/cmov/libuci.so
  111.       5877:     trying file=/usr/lib/i386-linux-gnu/tls/sse2/libuci.so
  112.       5877:     trying file=/usr/lib/i386-linux-gnu/tls/cmov/libuci.so
  113.       5877:     trying file=/usr/lib/i386-linux-gnu/tls/libuci.so
  114.       5877:     trying file=/usr/lib/i386-linux-gnu/i686/sse2/cmov/libuci.so
  115.       5877:     trying file=/usr/lib/i386-linux-gnu/i686/sse2/libuci.so
  116.       5877:     trying file=/usr/lib/i386-linux-gnu/i686/cmov/libuci.so
  117.       5877:     trying file=/usr/lib/i386-linux-gnu/i686/libuci.so
  118.       5877:     trying file=/usr/lib/i386-linux-gnu/sse2/cmov/libuci.so
  119.       5877:     trying file=/usr/lib/i386-linux-gnu/sse2/libuci.so
  120.       5877:     trying file=/usr/lib/i386-linux-gnu/cmov/libuci.so
  121.       5877:     trying file=/usr/lib/i386-linux-gnu/libuci.so
  122.       5877:     trying file=/lib/tls/i686/sse2/cmov/libuci.so
  123.       5877:     trying file=/lib/tls/i686/sse2/libuci.so
  124.       5877:     trying file=/lib/tls/i686/cmov/libuci.so
  125.       5877:     trying file=/lib/tls/i686/libuci.so
  126.       5877:     trying file=/lib/tls/sse2/cmov/libuci.so
  127.       5877:     trying file=/lib/tls/sse2/libuci.so
  128.       5877:     trying file=/lib/tls/cmov/libuci.so
  129.       5877:     trying file=/lib/tls/libuci.so
  130.       5877:     trying file=/lib/i686/sse2/cmov/libuci.so
  131.       5877:     trying file=/lib/i686/sse2/libuci.so
  132.       5877:     trying file=/lib/i686/cmov/libuci.so
  133.       5877:     trying file=/lib/i686/libuci.so
  134.       5877:     trying file=/lib/sse2/cmov/libuci.so
  135.       5877:     trying file=/lib/sse2/libuci.so
  136.       5877:     trying file=/lib/cmov/libuci.so
  137.       5877:     trying file=/lib/libuci.so
  138.       5877:     trying file=/usr/lib/tls/i686/sse2/cmov/libuci.so
  139.       5877:     trying file=/usr/lib/tls/i686/sse2/libuci.so
  140.       5877:     trying file=/usr/lib/tls/i686/cmov/libuci.so
  141.       5877:     trying file=/usr/lib/tls/i686/libuci.so
  142.       5877:     trying file=/usr/lib/tls/sse2/cmov/libuci.so
  143.       5877:     trying file=/usr/lib/tls/sse2/libuci.so
  144.       5877:     trying file=/usr/lib/tls/cmov/libuci.so
  145.       5877:     trying file=/usr/lib/tls/libuci.so
  146.       5877:     trying file=/usr/lib/i686/sse2/cmov/libuci.so
  147.       5877:     trying file=/usr/lib/i686/sse2/libuci.so
  148.       5877:     trying file=/usr/lib/i686/cmov/libuci.so
  149.       5877:     trying file=/usr/lib/i686/libuci.so
  150.       5877:     trying file=/usr/lib/sse2/cmov/libuci.so
  151.       5877:     trying file=/usr/lib/sse2/libuci.so
  152.       5877:     trying file=/usr/lib/cmov/libuci.so
  153.       5877:     trying file=/usr/lib/libuci.so
  154.       5877:  
  155. uci: error while loading shared libraries: libuci.so: cannot open shared object file: No such file or directory


  156. linux@ubuntu:/usr/local/lib$ ln -s /usr/local/lib/libuci.so /usr/lib/libuci.so
  157. ln: failed to create symbolic link `/usr/lib/libuci.so': Permission denied
  158. linux@ubuntu:/usr/local/lib$ sudo ln -s /usr/local/lib/libuci.so /usr/lib/libuci.so
  159. linux@ubuntu:/usr/local/lib$ ldd /usr/local/bin/uci
  160.          linux-gate.so.1 =>  (0xb7776000)
  161.          libuci.so => /usr/lib/libuci.so (0xb7757000)
  162.          libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75b2000)
  163.          libubox.so => /usr/lib/libubox.so (0xb75a7000)
  164.          /lib/ld-linux.so.2 (0xb7777000)
  165.          librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb759e000)
  166.          libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb7583000)

  167. OK ,test下
  168. linux@ubuntu:/usr/local/lib$ uci --version
  169. uci: invalid option -- '-'
  170. Usage: uci [<options>] <command> [<arguments>]

  171. Commands:
  172.          batch
  173.          export     [<config>]
  174.          import     [<config>]
  175.          changes    [<config>]
  176.          commit     [<config>]
  177.          add        <config> <section-type>
  178.          add_list   <config>.<section>.<option>=<string>
  179.          del_list   <config>.<section>.<option>=<string>
  180.          show       [<config>[.<section>[.<option>]]]
  181.          get        <config>.<section>[.<option>]
  182.          set        <config>.<section>[.<option>]=<value>
  183.          delete     <config>[.<section>[[.<option>][=<id>]]]
  184.          rename     <config>.<section>[.<option>]=<name>
  185.          revert     <config>[.<section>[.<option>]]
  186.          reorder    <config>.<section>=<position>

  187. Options:
  188.          -c <path>  set the search path for config files (default: /etc/config)
  189.          -d <str>   set the delimiter for list values in uci show
  190.          -f <file>  use <file> as input instead of stdin
  191.          -m         when importing, merge data into an existing package
  192.          -n         name unnamed sections on export (default)
  193.          -N         don't name unnamed sections
  194.          -p <path>  add a search path for config change files
  195.          -P <path>  add a search path for config change files and use as default
  196.          -q         quiet mode (don't print error messages)
  197.          -s         force strict mode (stop on parser errors, default)
  198.          -S         disable strict mode
  199.          -X         do not use extended syntax on 'show'

  200. Uci使用
  201. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ pwd
  202. /home/linux/linux_c/uci/uci-2014-04-11.1/test/config
  203. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ ls -l
  204. total 4
  205. -rw-r--r-- 1 linux linux 452 Jul 21 09:31 network
  206. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ cat network
  207. config 'alias' 'a'
  208.          option 'interface' 'lan'

  209. config 'alias' 'b'
  210.          option 'interface' 'lan'

  211. config 'interface' 'lan'
  212.          option 'proto' 'static'
  213.          option 'ifname' 'eth0'
  214.          option 'test' '123'
  215.          option 'enabled' 'off'
  216.          option 'ipaddr' '2.3.4.5'

  217. config 'interface' 'wan'
  218.          option 'proto'   'dhcp'
  219.          option 'ifname' 'eth1'
  220.          option 'enabled' 'on'
  221.          option 'aliases' 'c d'
  222.         
  223. config 'alias' 'c'
  224.          option 'interface' 'wan'

  225. config 'alias' 'd'
  226.          option 'interface' 'wan'

  227. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ uci show -c /home/linux/linux_c/uci/uci-2014-04-11.1/test/config
  228. network.a=alias
  229. network.a.interface=lan
  230. network.b=alias
  231. network.b.interface=lan
  232. network.lan=interface
  233. network.lan.proto=static
  234. network.lan.ifname=eth0
  235. network.lan.test=123
  236. network.lan.enabled=off
  237. network.lan.ipaddr=2.3.4.5
  238. network.wan=interface
  239. network.wan.proto=dhcp
  240. network.wan.ifname=eth1
  241. network.wan.enabled=on
  242. network.wan.aliases=c d
  243. network.c=alias
  244. network.c.interface=wan
  245. network.d=alias
  246. network.d.interface=wan

  247. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ uci show  network.b -c /home/linux/linux_c/uci/uci-2014-04-11.1/test/config
  248. network.b=alias
  249. network.b.interface=lan
  250. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ uci show  network.lan -c /home/linux/linux_c/uci/uci-2014-04-11.1/test/config
  251. network.lan=interface
  252. network.lan.proto=static
  253. network.lan.ifname=eth0
  254. network.lan.test=123
  255. network.lan.enabled=off
  256. network.lan.ipaddr=2.3.4.5
  257. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ uci show  network.lan.test -c /home/linux/linux_c/uci/uci-2014-04-11.1/test/config
  258. network.lan.test=123


  259. uci add操作
  260. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ uci add  network test  -c /home/linux/linux_c/uci/uci-2014-04-11.1/test/config
  261. cfg0a6865
  262. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ uci commit
  263. uci: Entry not found
  264. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ uci commit -c /home/linux/linux_c/uci/uci-2014-04-11.1/test/config
  265. linux@ubuntu:~/linux_c/uci/uci-2014-04-11.1/test/config$ cat network

  266. config alias 'a'
  267.          option interface 'lan'

  268. config alias 'b'
  269.          option interface 'lan'

  270. config interface 'lan'
  271.          option proto 'static'
  272.          option ifname 'eth0'
  273.          option test '123'
  274.          option enabled 'off'
  275.          option ipaddr '2.3.4.5'

  276. config interface 'wan'
  277.          option proto 'dhcp'
  278.          option ifname 'eth1'
  279.          option enabled 'on'
  280.          option aliases 'c d'

  281. config alias 'c'
  282.          option interface 'wan'

  283. config alias 'd'
  284.          option interface 'wan'

  285. config wire 'test'

  286. config test

  287. config test
  288. 生效修改(任何写入类的语法,最终都要执行生效修改,否则所做修改只在缓存中,切记!)


  289. 创建UCI文件并测试
  290. 默认uci搜索目录是/etc/config
  291. linux@ubuntu:/etc/config$ sudo mkdir -p /etc/config
  292. linux@ubuntu:/etc/config$ sudo touch test
  293. linux@ubuntu:/etc/config$ ls -l
  294. total 0
  295. -rw-r--r-- 1 root root 0 Sep 15 09:51 test
  296. linux@ubuntu:/etc/config$ sudo chown linux:linux  test
  297. linux@ubuntu:/etc/config$ ls -l
  298. total 0
  299. -rw-r--r-- 1 linux linux 0 Sep 15 09:51 test
  300. linux@ubuntu:/etc/config$ chmod 777 test
  301. linux@ubuntu:/etc/config$ vi test
  302. linux@ubuntu:/etc/config$ uci show
  303. test.abc=test
  304. test.abc.test_var=value
  305. test.abc.test_var2=value22
  306. linux@ubuntu:/etc/config$ cat test
  307. config 'test' 'abc'
  308.         option 'test_var' 'value'
  309.         option 'test_var2' 'value22'
复制代码
参考
总结:
1. 和共享库相关的一些错误如何处理:
1> LD_DEBUG 命令:
LD_DEBUG 是 glibc 中的 loader 为了方便自身调试而设置的一个环境变量。通过设置这个环境变量,可以方便的看到 loader 的加载过程。

UCI API的使用
C中调用UCI API
好了 ,lua 学习 , uci也学习了,接下来就是luci
Lua中使用UCI 例子:
Luci文件源代码:
  1. linux@ubuntu:~/linux_c/lua/lua-5.1.5/luca_study$cat test1.luci
  2. #!/usr/bin/lua
  3. --helloworld lua program
  4. print("Hello World!")


  5. require("uci")

  6. -- Get asection type or an option
  7. x =uci.cursor()
  8. a =x:get("test", "abc", "test_var")
  9. print(a)
  10. -- Getthe configuration directory
  11. b =x:get_confdir()
  12. print(b)

  13. -- Getall sections of a config or all values of a section
  14. d =x:get_all("test", "abc")
  15. print(d)
  16. print(d["test_var"])
  17. print(d["test_var2"])
复制代码
uci 文件具体内容
  1. linux@ubuntu:/etc/config$pwd
  2. /etc/config
  3. linux@ubuntu:/etc/config$cat test
  4. config'test' 'abc'
  5.         option 'test_var' 'value'
  6.         option 'test_var2' 'value22'


  7. 执行测试输出结果:
  8. linux@ubuntu:~/linux_c/lua/lua-5.1.5/luca_study$lua test1.luci
  9. HelloWorld!
  10. value
  11. /etc/config
  12. table:0x9190018
  13. value
  14. value22
复制代码

Luci api


回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|CaryStudio ( 粤ICP备16022806号 )

GMT+8, 2023-5-30 10:00 , Processed in 0.085418 second(s), 12 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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