nanopb是protobuf协议的纯C实现,没有依赖其他库,只需要几个C文件就可以了.非常适合用来做嵌入式设备的通信协议.
- 第一步安装protobuf
去github上下载一个protobuf的release版本,下载all版本,在本地解压缩之后,通过make install来安装.并安装python语言支持
bogon:protobuf-3.5-1.1 see$ ./configure
.....(等待执行完成)
bogon:protobuf-3.5-1.1 see$ make install
....(等待执行完成,protobuf就安装好了)
bogon:protobuf-3.5-1.1 see$ protoc --version
libprotoc 3.5.1
bogon:protobuf-3.5-1.1 see$ cd python/
bogon:python see$ python setup.py build
bogon:python see$ python setup.py install
.....(等待执行完成)
- 下载nanopb
去github上下载一个nanopb的release版本,解压之后,能够在目录下看到下面7文件,这7个文件我们需要添加到c工程里面的
bogon:nanopb-0.3.9 see$ ls
pb_common.c pb_common.h pb_encode.c pb_encode.h
pb_decode.c pb_decode.h pb.h
- 编译.proto文件
先用protoc命令编译.proto文件,生成中间文件,然后再执行nano的python脚本(./generator/nanopb_generator.py),将中间文件生成所需要的c文件
bogon:lock see$ protoc lock.proto -o lock.pb
bogon:lock see$ ls
bogon:lock see$ lock.proto lock.pb
bogon:lock see$ python ../nanopb-0.3.9/generator/nanopb_generator.py lock.pb
bogon:lock see$ ls
lock.pb.c lock.pb.h
- 完成
至此,我们就完成了nanopb的安装和.proto文件的生成,为了方便使用,我把执行python那段命令写成了一个shell脚本,每次生成的时候,顺便把所需要的7个文件也拷贝到同一个文件夹下面,将脚本修改成可执行文件(chmod +x nanopb),放到/usr/local/bin 目录下,以后使用就可以使用命令nanopb来用了
bogon:lock see$ nanopb lock.pb
bogon:lock see$ ls
lock.proto lock.pb ccode
bogon:lock see$ cd ccode
bogon:ccode see$ ls
pb_common.c pb_common.h pb_encode.c pb_encode.h
pb_decode.c pb_decode.h pb.h lock.pb.c lock.pb.h
#!/bin/sh
nanodir="nanopb的根目录"
nanopy=$nanodir"/generator/nanopb_generator.py"
file1=$nanodir"/pb_common.c"
file2=$nanodir"/pb_common.h"
file3=$nanodir"/pb_decode.c"
file4=$nanodir"/pb_decode.h"
file5=$nanodir"/pb_encode.c"
file6=$nanodir"/pb_encode.h"
file7=$nanodir"/pb.h"
srcdir=`pwd`
mkdir $srcdir"/ccode"
dir=$srcdir"/ccode"
for i in "$@"; do
python $nanopy $i
mv $srcdir"/"$i".c" $dir
mv $srcdir"/"$i".h" $dir
done
cp $file1 $dir
cp $file2 $dir
cp $file3 $dir
cp $file4 $dir
cp $file5 $dir
cp $file6 $dir
cp $file7 $dir