书接上回,在成功编译libapp项目下的代码后,接下来是两部分:修改libapp的代码,以及将修改应用到镜像中
terminal app原理
上次我已经成功在浏览器中看到了terminal app
,要修改代码,先要大致理解这个应用的原理。
在进行了一点尝试后,我对终端应的理解如下:
- 终端用由几个页面组成,最外侧的界面实际上是
terminal.html
这个页面,页面调用,然后调用一系列项目内的js脚本加载页面内容 - 建立ssh链接时,应用实际上是,调用chromeos下才可调用的本地API(类似electron?),打开一个新的窗口,然后显示
terminal_ssh.html
这个页面,该页面会调用nassh目录中的js脚本来进行实际的终端渲染 - 启动ssh连接,实际上是将ssh的参数传递给
terminal_ssh.html
页面,然后页面内的脚本拼凑出ssh命令,交由下游的api去建立ssh链接 - 设置也是独立的页面,对应
terminal_settings.html
修改libapp代码
了解了应用的工作原理,接下来就是尝试修改代码了。由于我并没有专门学习过html/js/css这些网站的技术栈,虽然大致能理解代码的逻辑,但是我并不打算自己从头设计并编写代码,主要还是参考现有的代码,组合出我需要的功能。
就我自己的使用体验来看,sftp挂载到本地的这一现有功能,逻辑上和我想要的快速端口转发有一定相似性:
- sftp挂载需要先设定ssh部分的端口、用户等信息
- 在已有的登录条目基础上,进行sftp挂载,点击挂载后,与ssh登录一样新跳出一个页面,但是不能操作,只提示挂载信息,和关闭窗口后挂载自动结束
我想要的功能就参照这个逻辑来增改:
- 端口转发需要先设定ssh部分的端口、用户等信息
- 在已有的登录条目基础上,端口转发,点击转发后,跳出窗口设置要转发哪个端口
- 与ssh登录一样新跳出一个页面,但是不能操作,只提示转发的端口,和关闭窗口后挂载自动结束
实际修改的文件主要是terminal个nassh目录下的js文件,主要是加入转发的按钮,然后是参考sftp的功能实现,改一个能执行端口转发的函数出来
将修改应用到镜像
在chromeos的源代码中,libapp并不是包名,在检索项目后,发现这些内容的编译实际上在crosh-extention.ebuild
中,找到这个ebuild的目录,使用git生成补丁,放到这个目录中
1 | git diff COMMIT_HASH_1 COMMIT_HASH_2 > patchfile.patch |
然后还要进一步的修改ebuild文件,加入下面的内容后,构建时会自动调用补丁,进行代码修改
1 | PATCHES=( |
重新编译包和镜像
这里我碰到了一个坑,如果只修改文件,直接按照之前的方法进行编译,其实是无法应用改动的。
根据找到的这个内容,需要使用cros_sdk
中的cros_workon
命令,标记对特定包进行修改,才会使用我修改后的ebuild文件来进行编译,而不是获取特定版本的源代码进行编译。
编译的过程[参考以前的步骤]就可以了。在执行build-packages
时,工具会自动识别有更改的包,自动重新构建,然后将更新后的包放到chroot环境中去。
刷机以及启动
[刷机也没有什么变化],就是上次随便改内核,导致测试用的工程机duo砖了,因此参考[fydetab duo wiki的说明](https://wiki.fydetabduo.com/unbrick_the_fydetab_duo)进maskrom模式来刷。进行调试?
这里其实留下了一个问题,不论做什么开发,在进行实机测试和调试之前,理论上都应该先在测试或者虚拟环境中完成测试才是,否则要来回编译、刷机,会浪费大量时间。我想这也是各种SDK和Studio套件存在的意义。
但是,我目前还真不知道… 我这样修改应该要如何在刷机前调试?根据找到的博客,似乎是可以利用cros_sdk的虚拟机功能的,调用QEMU的kvm虚拟机,似乎可以对编译后的镜像进行调试。
下次就是把功能调试好,展示成果了!这次先展示一下刷机后界面的改变!