openharmony第三方库toybox添加vi/crontab命令 原创 精华
春节不停更,此文正在参加「星光计划-春节更帖活动」@[toc](openharmony第三方库toybox添加vi/crontab命令
背景
Toybox 是一个功能类似busybox的开源软件工具,由于busybox 使用GNU协议,导致系统编译使用busybox时存在协议“感染”的情况,因此为避免此种情况发生,toybox 由此而产生,但按照目前情况来看,toybox 存在大量的Bug,特别是不用型号兼容之中出现。当前openharmony LTS 3.0 使用toybox 来作为基本命令工具使用,如ls、cat、find等基本命令。
安装
toybox如同busyboxy 一样,可通过裁减方式进行安装使用make menuconfig ,但由于openharmony 3.0 LTS 版本没有完全适配,使用make menucofig 裁减时会出现编译失败情况。
代码仓库
目前toybox仓位于third_party目录下面。
软件版本:0.8.2,最新版本已经到0.8.5
编译
当前toybox已经整合已经通过BUILD.gn添加工程项目之中。执行项目编译之时toybox随同一起编译到项目中。
添加vi命令
首先通过使用命令find / -name vi 查看系统是否已经看放出vi 命令,如果已经开放则不需要在开放vi 名,当然目前vi 并不好使用是,修改bug 社区无法合入
1、修改BUILD.gn文件
进入toybox目录想,修改BUILD.gn文件 操作如下:
cd ~/Openharmony/third_party/toybox
vim BUILD.gn
由于3516 为L2级别开发板,注意ohos_lite为开发板类型L0或L1.
修改情况如下:
添加vi 命令
添加VI对应的源码。
2、修改config.h
cd generated
vim config.h
开放VI命令定义宏。
现在可以通过编译,将VI 命令编译到系统中。当然当前版本的vi 在openharmony没有完成适配存在问题。如果需要使用使用。代码需要修改。
代码如下:
int vi_buf_pos = 0;
int visual_flag = 0;
il = xzalloc(sizeof(struct str_line));
il->str_data = xzalloc(80);
il->alloc_len = 80;
keybuf[0] = 0;
memset(vi_buf, 0, 16);
memset(utf8_code, 0, 8);
linelist_load(0);
scr_r = text;
c_r = text;
TT.cur_row = 0;
TT.cur_col = 0;
TT.screen_width = 80;
TT.screen_height = 24;
TT.vi_mode = 1;
TT.tabstop = 8;
yank.data = xzalloc(128);
yank.alloc = 128;
terminal_size(&TT.screen_width, &TT.screen_height);
TT.screen_height -= 2; //TODO this is hack fix visual alignment
set_terminal(0, 1, 0, 0);
//writes stdout into different xterm buffer so when we exit
//we dont get scroll log full of junk
tty_esc("?1049h");
tty_esc("H");
xflush(1);
TT.vi_mov_flag = 0x20000000;
draw_page();
while(1) {
int key = scan_key(keybuf, -1);
terminal_size(&TT.screen_width, &TT.screen_height);
if (visual_flag == 0) {
TT.screen_height -= 2;
visual_flag++;
}
编译完成烧录板子:
添加crond/crontab命令
1、修改BUILD.gn文件,
添加如下内容
添加命令
添加命令源码文件
2、修改config.h文件添加如下内容
3、修改flags.h文件
cd generated
vim flags.h
注意:命令自带有其他参数的需要修改flags.h 文件,否则出现命令无法使用情况
编译烧写开发板,使用crontab 查看安装情况。