iSH —— 适用于 iOS 的 Linux shell
iSH 是一个运行在 iOS 上的 Linux shell。本项目使用了 x86 用户模式仿真和系统调用翻译转换。
上手
本项目下包含了其他 git 项目作为子模块,请确保在克隆时使用参数--recurse-submodules
,即 git clone --recurse-submodules https://github.com/ish-app/ish.git
。或是在克隆好了之后执行 git submodule update --init
。
编译此项目需要以下依赖:
- Python 3
- Meson (
pip3 install meson
)
- Meson (
- Ninja 请查看此处
- Clang and LLD (在安装了
brew
的 macOS 系统上运行brew install llvm
。在 Linux 系统上请根据你的包管理器,选择运行相应的安装命令sudo apt install clang lld
或者sudo pacman -S clang lld
) - sqlite3 (通常 sqlite3 在 macOS 上是预安装的,但它或许没有安装在你的 Linux 上,运行
which sqlite3
以查看它是否存在。如果没有,你可以根据你的包管理器运行sudo apt install libsqlite3-dev
之类的安装命令) - libarchive (在 macOS 系统上使用
brew install libarchive
或sudo port install libarchive
来安装。在 Linux 系统上请根据你的包管理器,选择运行相应的安装命令如sudo apt install libarchive-dev
来安装)
创建iOS应用
使用 Xcode 打开项目,选择 iSH.xcconfig,并且修改 ROOT_BUNDLE_IDENTIFIER
为你的唯一值。此外,还需要在项目(project)的构建设置(build settings)中更新开发团队 ID,注意这里指的不是目标(target)的构建设置(build settings)。然后点击 运行
,之后应该有脚本帮你自动执行相关操作。如果遇到了任何问题,请提交 issue,我们会帮你解决。
为测试构建命令行工具
在项目目录中运行命令 meson build
,之后 build
目录会被创建。进入到 build
目录并运行命令 ninja
。
为了建立一个自有的 Alpine linux 文件系统,请从 Alpine 网站 下载 Alpine minirotfs tarball for i386
并运行 tools/fakefsify
。将 minirotfs tarball 指定为第一个参数,将输出目录的名称(如alpine
)指定为第二个参数,即 tools/fakefsify $MinirotfsTarballFilename alpine
然后在 Alpine 文件系统中运行 /ish -f alpine/bin/login -f root
。如果 build
目录下找不到 tools/fakefsify
,可能是系统上找不到 libarchive
的依赖(请参照前面的章节进行安装)。
除了可以使用 ish
,你也可以使用 tools/ptraceomatic
替代它,以便在某个真实进程中单步比较寄存器。我通常使用它来进行调试(需要 64 位 Linux 4.11 或更高版本)。
日志
在编译过程中,iSH 提供数种日志类型,默认情况下它们都被禁用,想要启用它们需要:
- 在 Xcode 中将 iSH.xcconfig 中
ISH_LOG
设置为以空格分隔的日志类型列表。 - 在 Meson (测试使用的命令行工具) 中执行命令
meson configure -Dlog="<space-separated list of log channels>"
。
可用的日志类型:
strace
: 最有用的类型,记录几乎每个系统调用的参数和返回值。instr
: 记录模拟器执行的每个指令,这会让所有执行变得很慢。verbose
: 记录不属于其他类别的调试日志。- 使用
grep
命令查看DEFAULT_CHANNEL
变量,以确认在更新此列表后是否添加了更多日志频道。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
每日一博 | 一文探究系统分析与设计的逻辑性
一、系统分析与设计的逻辑性框架 在日常的工作中,「软件分析」与「软件设计」这样的词眼经常听到,然而要真正理解「软件分析」和「软件设计」的本质是比较难的,它依赖极强的工作经验,又加上软件分析与设计没有标准的程式化步骤,导致不同的人有自己不同的方法,也就造成了很多人认为软件分析与设计是非常「空洞」,还不如写具体的代码实在,而大部分的人写的是业务型代码,被嘲弄写CRUD的代码没成就感。 软件分析与设计如其它行业一样,具有很强的逻辑性,没有逻辑性支撑,很难做好事。比如写作,有「谋篇布局」、「起承转合」、「遣词造句」等这些「原则」和「方法」,没有洞悉到这些底层逻辑,一个高手写的文章和一个普通人写的文章,效果是天差地别。因此,首先要讲清楚的是软件分析与设计的「逻辑性」到底是什么,下图是软件分析与设计的逻辑全景图。 1.1 方法 1.1.1 分析阶段 软件分析与设计并没有那么神秘,本质来讲还是为了解决现实的问题,和「医生看病」、「工人修车」、「厨师做菜」一样的,都需要方法作为指导,否则没有任何头绪,只能抓瞎。方法是具有普适性,只是不同的行业有各自的特性,具体落地上有差异。 既然是要解决问题,那么总得...
- 下一篇
Bcachefs 已被合并到 Linux-Next,Linux 6.7 有望引入
备受瞩目的 Bcachefs 没有在 Linux 6.6 开发周期中被合并到主线,因为 Linus Torvalds 对它仍有顾虑——没有经过"linux-next"暂存区域的审查。 不过从内核的最新合并情况来看,大家看到了在 Linux 6.7 中引入新文件系统驱动程序的希望。 就在昨晚,Bcachefs 文件系统驱动程序已被合并到 Linux-Next 代码树,作为实验代码的松散测试区域,希望进入“下一个”内核周期。 Bcachefs 是一个写时复制(CoW)的文件系统,其源自于 Linux 内核的块缓存 Bcache。几个月前,Bcachefs 的补丁集已正式递交审查,有望被纳入内核。 开发者希望能提供类似 XFS/EXT4 的性能,以及类似 Btrfs 和 ZFS 的特性。其主要开发者表示 Bcachefs 的特性 “多到无法列出”,而已知错误也是 “多到无法列出”。 Bcachefs 的 Git 仓库现已被拉入 Linux-Next,以便更多开发者关注代码和所有自动化构建/测试基础架构,这些基础架构被不同的个人和供应商用来测试这些领先的 "-next" 代码。 此外,将 Bc...
相关文章
文章评论
共有0条评论来说两句吧...