openharmony第三方库toybox添加vi/crontab命令 原创 精华

挖墙脚的农民工
发布于 2022-1-24 11:05
浏览
5收藏

春节不停更,此文正在参加「星光计划-春节更帖活动」@[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目录下面。
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区

软件版本:0.8.2,最新版本已经到0.8.5
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区

编译

当前toybox已经整合已经通过BUILD.gn添加工程项目之中。执行项目编译之时toybox随同一起编译到项目中。

添加vi命令

首先通过使用命令find / -name vi 查看系统是否已经看放出vi 命令,如果已经开放则不需要在开放vi 名,当然目前vi 并不好使用是,修改bug 社区无法合入
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区

1、修改BUILD.gn文件

进入toybox目录想,修改BUILD.gn文件 操作如下:
cd ~/Openharmony/third_party/toybox
vim BUILD.gn
由于3516 为L2级别开发板,注意ohos_lite为开发板类型L0或L1.
修改情况如下:
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区
添加vi 命令
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区
添加VI对应的源码。

2、修改config.h

cd generated
vim config.h
开放VI命令定义宏。
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区
现在可以通过编译,将VI 命令编译到系统中。当然当前版本的vi 在openharmony没有完成适配存在问题。如果需要使用使用。代码需要修改。
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区
代码如下:

  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++;
        }

编译完成烧录板子:
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区

添加crond/crontab命令

1、修改BUILD.gn文件,

添加如下内容
添加命令
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区
添加命令源码文件
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区

2、修改config.h文件添加如下内容

openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区

3、修改flags.h文件

cd generated
vim flags.h
注意:命令自带有其他参数的需要修改flags.h 文件,否则出现命令无法使用情况
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区

编译烧写开发板,使用crontab 查看安装情况。
openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区

代码流程分析

openharmony第三方库toybox添加vi/crontab命令 -鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-1-24 11:05:37修改
8
收藏 5
回复
举报
回复
    相关推荐