menuconfig界面二次开发--Apple的学习笔记

一,前言

之前我已经研究过飞控PX4用的rtos是nuttx,它主要是基于单片机的,而且stm32f4是主推的,所以我学习了下,那么今天开始我要学习的是menuconfig配置界面,关于linux通过界面很快可以生成.config配置文件。网上我以前看过menuconfig命令到最后展开就是用ncurses图形库生成的程序运行的。那么nuttx是单片机的,也做成了menuconfig的界面,我很好奇,也想定制一个。

二,kconfig-frontends

nuttx中这个menuconfig的界面程序名字叫kconfig-frontends,它其实也是copy linux开源代码然后移植的。由于我也想定制自己的menuconfig,所以简单的学习了下ncurses库的API,然后安装了kconfig-frontends源码及编译,目的是先用起来,然后基于源码进行二次开发。
找到了kconfig-frontends在window上的设置后,能自己基于MinGW编译kconfig-frontends.exe。简单说下步骤

  1. 安装MinGW
    运行mingw-get-setup.exe后仅选mingw32-base和mingw32-gcc-g++。添加环境变量C:\MinGW\bin
  2. 安装GnuWin32
    2.1 运行GetGnuWin32-0.6.3.exe后,路径选xxx\GetGnuWin32。
    2.2 双击download.bat,一路回车
    2.3 双击install.bat,一路回车
    2.4 最后我将GetGnuWin32文件夹copy到了c盘。添加环境变量C:\GetGnuWin32\gnuwin32\bin,C:\GetGnuWin32\gnuwin32\include和C:\GetGnuWin32\gnuwin32\lib
  3. 编译
    源码我实际上一开始先从github下载过了,直接创建build文件夹进行cmake配置和make编译了。一把通过。
git clone http://github.com/uvc-ingenieure/kconfig-frontends
cd kconfig-frontends
mkdir build
cd build
cmake -G "MinGW Makefiles" ..
make

三,运行界面

image.png

image.png

生成的.config正确

#
# Automatically generated file; DO NOT EDIT.
# RootMenu
#
CONFIG_EXPERIMENTAL=y
# CONFIG_DEFAULT_SMALL is not set
CONFIG_DEFAULT_TASK_STACKSIZE=1024
# CONFIG_HOST_LINUX is not set
# CONFIG_HOST_MACOS is not set
CONFIG_HOST_WINDOWS=y
# CONFIG_HOST_OTHER is not set
# CONFIG_TOOLCHAIN_WINDOWS is not set

四,问题解决及轻度定制

我先要学习了curses的API,所以找到了\libs\pdcurses-3.4\demos文件夹中中curses的demo code,pdcurses-3.4里的win32文件夹中的README告我我如何编译这些demo,方法为make -f mingwin32.mak WIDE=Y。然后就生成了8个exe。这些demo中我主要看的是和边框设置相关的,所以选中了testcurs.c看了,然后基本上知道box边框的绘制API。
通过搜索关键API后,我定位到原因是F:\kconfig-frontends-master\libs\lxdialog\util.c中的draw_box函数,里面就是一点一点绘制边框。但是源码编译后在win10上是乱码,所以我尝试了用wborder和box设置,同样是乱码。最后进入wborder函数灵感就来了,发现了关键的乱码原因应该就是底层解析。解决方案如下,字符l到n改成了"*"。

/* VT100-compatible symbols -- box chars */
#if 0
#define ACS_ULCORNER  ACS_PICK('l', '+')
#define ACS_LLCORNER  ACS_PICK('m', '+')
#define ACS_URCORNER  ACS_PICK('k', '+')
#define ACS_LRCORNER  ACS_PICK('j', '+')
#define ACS_RTEE      ACS_PICK('u', '+')
#define ACS_LTEE      ACS_PICK('t', '+')
#define ACS_BTEE      ACS_PICK('v', '+')
#define ACS_TTEE      ACS_PICK('w', '+')
#define ACS_HLINE     ACS_PICK('q', '-')
#define ACS_VLINE     ACS_PICK('x', '|')
#define ACS_PLUS      ACS_PICK('n', '+')
#else  /* modify by apple for fix code display */
#define ACS_ULCORNER  ACS_PICK('*', '+')
#define ACS_LLCORNER  ACS_PICK('*', '+')
#define ACS_URCORNER  ACS_PICK('*', '+')
#define ACS_LRCORNER  ACS_PICK('*', '+')
#define ACS_RTEE      ACS_PICK('*', '+')
#define ACS_LTEE      ACS_PICK('*', '+')
#define ACS_BTEE      ACS_PICK('*', '+')
#define ACS_TTEE      ACS_PICK('*', '+')
#define ACS_HLINE     ACS_PICK('*', '-')
#define ACS_VLINE     ACS_PICK('*', '|')
#define ACS_PLUS      ACS_PICK('*', '+')
#endif

然后我又搜索RootMenu关键字改成了AppleCai_Menu。最后定制效果如下


image.png

五,总结

简单menuconfig自定义界面二次开发完成,我没跑偏,curses是个古老的GUI库。一个是好奇基于单片机怎么也能做出个menuconfig,现在这么看,我也可以做一个了,而且还是基于win10的,很实用呀,将来配合stm32自制的makefile就可以用界面配置了,感觉很高级!
将来分享给别人用的时候,不需要编译的话,运行exe只依赖3个dll即可。比如设置环境变量路径为C:\GetGnuWin32\gnuwin32\bin,只要copy3个dll[libintl3.dll,regex2,libiconv2.dll]到bin文件路径即可。
另外的用途就是谁要学习Kconfig语法,就可以用这个win10上的小工具啦~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容