环境:
本地ubuntu,嵌入式linux,buildroot构建
移植gsettings:
gsettings是包含在libglib2的gio中的,所以,直接在buildroot环境里面添加libglib2选项编译即可支持gsettings
移植dconf
dconf是gsettings的一种存储后端,独立于glib,所以需要单独源码移植验证,另外dconf依赖于dbus,所以还需要提前移植dbus
dbus也是buildroot直接支持的,勾选dbus选项即可
步骤如下:
- dconf 0.40版本采用的是meson构建方式,README中有描述如何编译:
meson builddir
ninja -C builddir
ninja -C builddir install
由于我的需求不需要有图像界面,编译过程中bash_completion、gtk_doc等会报错,直接在meson_options中屏蔽选项,本地编译通过 - 交叉编译需要指定编译的工具链等,根目录新建txt指定编译环境,如:
c = ‘/xx/toolchain/bin/arm-linux-gnueabihf-gcc’
ar = ‘/xx/toolchain/bin/arm-linux-gnueabihf-ar’
网上随便找模板把响应的选项修改成自己的环境即可 - 编译时自定交叉编译文件–cross-file
后顺利编译 - 编译完成后需要关注两个东西,1是service目录下的dconf-service,是dconf的后台处理进程,与dbus强相关,dconf正常运行必须要保证dconf-service正常运行
2是bin目录下的dconf,我们验证就用这个程序即可,3是client目录下的lindconf的动态库,需要一起放到目标环境 - 上述步骤完成后,就可以开始执行dconf程序了,中间可能会报错找不到依赖的glib相关的库,将报错的库文件放到目标环境即可
- 后续会报一些奇奇怪怪的错,需要关注以下环境变量:
DBUS_SESSION_BUS_ADDRESS
XDG_RUNTIME_DI
XDG_CONFIG_HOME
DCONF_PROFILE
指定好后即可正常运行 - 使用gsettings时还需要指定后端,需要关注以下环境变量
GSETTINGS_BACKEND=dconf
GIO_EXTRA_MODULE
GSETTINGS_SCHEMA_DIR设置完成后,即可正常使用gsettings,并以dconf为存储后端