初试json rpc

初试json rpc无评论

2017年4月28日 at 下午4:19分类:其他 阅读: 1,033 次

目标:
用C语言实现json rpc server,通过http作为客户端来获取信息

参考:
https://github.com/hmng/jsonrpc-c

编译过程:
下载:
git clone https://github.com/hmng/jsonrpc-c
cd jsonrpc-c
在Ubuntu下编译,先安装依赖库
sudo apt install libev-dev autoconf
配置:
autoreconf -i
./configure
编译:
make

生成的程序在~/jsonrpc-c/example/server

运行程序
~/jsonrpc-c/example/server
程序在1234端口进行监听

测试:
echo "{\"method\":\"sayHello\"}" | nc localhost 1234

交叉编译:
要编译出适合ARM系统运行的程序
1、首先编译libev
https://haoutil.com/topic/cross-compile-shadowsocks-libev
ver=4.24
wget http://dist.schmorp.de/libev/libev-$ver.tar.gz
tar zxf libev-$ver.tar.gz
cd libev-$ver
./configure --host=arm-linux --prefix=/opt/lib/libev --enable-shared
make && make install

2、再编译jsonrpc
先配置,注意指定libev的目录:
./configure --host=arm-linux --with-libev=/opt/lib/libev
编译
make
搞定:
2017-04-29 10-57-00
生成的程序~/jsonrpc-c/example/server是一个脚本程序,真正的程序在~/jsonrpc-c/example/.libs,包含两个程序lt-server、server,这两个程序调用了动态链接库libjsonrpcc.so
3、静态链接
要使用静态链接库,在配置libev时:
./configure --host=arm-linux --prefix=/opt/lib/libev -enable-static --disable-shared
在配置jsonrpc时:
./configure --host=arm-linux --with-libev=/opt/lib/libev --enable-static --disable-shared

手动编译libev的用户程序
比如程序源文件为libtest.c,编译用于ubuntu下的程序:
gcc libevtest.c /usr/lib/x86_64-linux-gnu/libev.so -o libevtest
编译用于arm的程序:
arm-linux-gcc -I/opt/lib/libev/include/ libevtest.c /opt/lib/libev/lib/libev.so -o libevtest_arm

Ubuntu编译entware

Ubuntu编译entware无评论

2017年4月27日 at 下午3:40分类:其他 阅读: 1,645 次

参考:
https://github.com/Entware-ng/Entware-ng/wiki/Compile-packages-from-sources

1、Ubuntu安装依赖包
和openwrt一样安装依赖包:
sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext libssl-dev mercurial unzip

2、下载Entware-ng
git clone https://github.com/Entware-ng/Entware-ng.git
cd Entware-ng

3、更新package
make package/symlinks
更新的包在~/Entware-ng/feeds/packages目录

4、拷贝配置文件
根据要编译的平台选择配置文件,比如要编译ARM V7平台:
~/Entware-ng$ cp configs/armv7.config .config

5、全部编译
make

6、分步编译
make tools/install
make toolchain/install
make target/compile
make package/compile
最后一行是编译所有包,可以替换成你需要的单个包进行编译

7、单个包编译
make package/squid/compile
查看错误信息:
make package/squid/compile V=s
多核编译
make package/squid/compile -j4

8、编译新包
比如要编译ssr:
https://github.com/ywb94/openwrt-ssr
步骤与openwrt一致
cd ~/Entware-ng
git clone https://github.com/ywb94/openwrt-ssr.git package/openwrt-ssr

make menuconfig
# 选择要编译的包,保存退出
#luci ->3. Applications-> luci-app-shadowsocksR 原始版本
#luci ->3. Applications-> luci-app-shadowsocksR-GFW GFWList版本

make package/openwrt-ssr/compile V=99
编译后生成的IPK在~/Entware-ng/bin/targets/armv7soft/generic-glibc/packages目录

在华硕AC1200G+环境下交叉编译AC9可执行程序

在华硕AC1200G+环境下交叉编译AC9可执行程序无评论

2017年4月18日 at 下午9:00分类:其他 阅读: 1,702 次

华硕AC1200G+目录:

/opt/ac1200g/asuswrt

先设置环境变量:
export PATH=$PATH:/opt/ac1200g/asuswrt/release/src-rt-9.x/src/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin

export STAGING_DIR=/opt/ac1200g/asuswrt/release/src-rt-9.x/src/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/ac1200g/asuswrt/release/src-rt-9.x/src/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/lib

新建一个c文件,如test.c

#include <stdlib.h>
int main() {
printf("Hello AC9\n");
}

编译:

$ arm-linux-gcc test.c -o test

上传到AC9上,运行

chmod 755 test

./test

交叉编译gdb
wget http://ftp.gnu.org/gnu/gdb/gdb-7.11.tar.gz
tar zxvf gdb-7.11.tar.gz
cd gdb-7.11
./configure --host=arm-linux
make

AC9的广告屏蔽功能

AC9的广告屏蔽功能无评论

2017年4月14日 at 上午9:24分类:其他 阅读: 1,950 次

adbyby没有可以在ac9官方固件下运行的可执行程序

openwrt自带了一个去广告的插件,叫privoxy

https://wiki.openwrt.org/zh-cn/doc/howto/proxy.privoxy

但是好像对视频广告不给力

https://routeragency.com/?p=324

https://github.com/uku/Unblock-Youku/issues/106

 

koolproxy有在ac9官方固件下运行的可执行程序,可以使用koolproxy作为定制版的去广告插件。

ubuntu 64位编译华硕AC1200G+固件

ubuntu 64位编译华硕AC1200G+固件有1条评论

2017年4月13日 at 下午2:46分类:其他 阅读: 1,898 次

Ubuntu版本16.04

1、安装依赖包

sudo apt-get install --no-install-recommends  autoconf automake bash bison bzip2 diffutils file flex g++ gawk gcc-multilib gettext gperf groff-base libncurses-dev libexpat1-dev libslang2 libssl-dev libtool libxml-parser-perl make patch perl pkg-config python sed shtool tar texinfo unzip zlib1g zlib1g-dev

sudo apt-get install lib32stdc++6 lib32z1-dev

sudo apt-get --no-install-recommends install automake1.11

sudo apt-get install libelf-dev:i386 libelf1:i386

sudo apt-get --no-install-recommends install lib32z1-dev lib32stdc++6

2、下载源码

wget http://dlcdnet.asus.com/pub/ASUS/wireless/RT-AC1200G+/GPL_RT_AC1200G_PLUS_30043801234.zip

unzip GPL_RT_AC1200G_PLUS_30043801234.zip && tar -zxvf *1234.gz && mv -r /root/*1234/asuswrt /opt/ac1200g

3、配置环境变量

export PATH=$PATH:/opt/ac1200g/asuswrt/release/src-rt-9.x/src/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin:

4、编译

修改GPIO,适配AC9,asuswrt\release\src-rt-9.x\src\router\rc\init.c

nvram_set_int("btn_rst_gpio", 7|GPIO_ACTIVE_LOW);
nvram_set_int("btn_wps_gpio", 9|GPIO_ACTIVE_LOW);
nvram_set_int("led_pwr_gpio", 15);
nvram_set_int("led_wps_gpio", 10);
//        nvram_set_int("led_5g_gpio", 11);    // active high
nvram_set_int("led_usb_gpio", 1);

 

cd /opt/ac1200g/asuswrt/release/src-rt-9.x/src/ && make RT-AC1200G+

 

5、排错处理

提示:

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
/opt/ac1200g/asuswrt/release/src-rt-9.x/src/linux/linux-2.6.36/kernel/Makefile:137: recipe for target 'kernel/timeconst.h' failed
解决:

将kernel/timeconst.pl中第373行的defined()去掉只留下@val就可以了

if (!@val) {
@val = compute_values($hz);
}

编译3.0.0.4.380_4089版本时提示:
*** No rule to make target 'tcode.c', needed by 'tcode.o'。
解决:
修改src/router/shared/Makefile,将“%.o: prebuild/%.o”改变一下位置:

%.o: prebuild/%.o
@echo " [shared] cp $@"
@cp -f $< $@

%.o: %.c .%.depend
@echo " [shared] CC $@"
@$(CC) $(CFLAGS) -o $@ -c $<

.depend: $(OBJS:%.o=%.c)
@$(CC) $(CFLAGS) -M $^ > .depend

编译成功:

a2

生成的固件在/opt/ac1200g/asuswrt/release/src-rt-9.x/src/image目录下