利用chroot和fake filesystem解决物联网设备研究时的工具移植问题
问题描述
在研究物联网设备时经常会碰到工具缺失的问题。比如我最近在玩的一款物联网设备,该设备基于busybox封装了简单的文件系统,缺少了gdb等研究工具。此外由于文件系统中没有sshd,所以研究过程中也只能通过默认的tty进行交互,非常蛋疼。
设备默认tty和fs环境
传统解决思路
应对这种问题的常规思路是对需要用到的工具进行静态编译,并丢到设备的文件系统中。虽然这种方法可以解决很多工具缺少的问题。然而,并不是所有的工具都是可以成功的静态编译,比如sshd,就很难静态编译成功。
新的思路
我决定尝试了一种新的思路:往设备中丢动态链接的工具并使用fake filesystem解决依赖问题。 具体来说,首先在一个Linux发行版中安装好sshd、gdb等常用工具并将其filesystem打包。接着,将打包好的文件系统解包到设备上。最后,chroot过去,就可以执行sshd、gdb之类的工具了。
fake filesystem
实际例子
这里举一个实际的例子。首先,我们通过以下Dockerfile build一个安装了sshd等常用工具的ubuntu 20.04 docker。
FROM ubuntu:20.04
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN sed -i "s/http:\/\/archive.ubuntu.com/http:\/\/mirrors.tuna.tsinghua.edu.cn/g" /etc/apt/sources.list
RUN apt update && apt install -y openssh-server gdb git gcc make cmake
RUN apt install -y openssh-server
RUN apt install -y gdb git gcc
RUN apt install -y make cmake
接着,导出其文件系统,并将该文件系统解包到目标设备中。
docker export $container_id > fakefs.tar
在目标设备上,我们chroot到fakefs中,chroot之后,一些没有特殊依赖的工具软件如gcc、make、gdb等已经可以正常使用了。
由于sshd依赖于/dev/urandom /dev/random /dev/ptmx /dev/pts等设备文件,在运行sshd之前,我们需要首先创建这些文件。
mknod /dev/urandom c 1 9
mknod /dev/random c 1 8
mknod /dev/ptmx c 5 2
mkdir /dev/pts
mount -t devpts devpts /dev/pts
mount -t proc none /proc
完成之后,就可以运行sshd了。
sshd运行成功之后,我们就可以在自己的pc上ssh到设备上,而不再需要忍受不支持复制粘贴等功能的的默认tty的折磨。
值得注意的是,这样ssh进去之后是chroot环境,要想访问原来的文件系统。使用trick逃逸出来即可。
总结
利用这种方法,可以完成大多数不依赖于具体内核环境的工具移植,甚至可以移植包管理工具并以此安装更多的软件。
使用包管理工具安装更多软件
不过,值得注意的是,由于chroot之后的环境缺少/dev /proc等一些特殊文件系统。因此,对于依赖于这些特殊文件系统的工具(如sshd)来说,需要先解决这些依赖,才能够正常运行。
相关文章
- 设备通过大华SDK接入EasyCVR,添加预置位出现崩溃是什么原因?
- M.2或MINIPCIE或PCIE XX设备调试记录
- 卡超算脖子?拜登将限制14nm以下芯片制造设备出口中国
- 如何将大华设备通过大华SDK接入Demo工具测试视频接入?
- 解决旋转设备监测难题 ZETA振温传感器实现故障预测性维护
- Touch 移动设备上的 手势识别 与 Js事件库
- AI端计算产业应用:如何快速训练高精度模型并在设备端加速计算 | 公开课报名
- 轨迹云全新发布 !外业车辆、人员、设备轨迹高效管理
- 易点易动设备管理系统如何实现水厂设备的智能巡检?
- 恢复Linux下USB设备数据恢复的简易操作(linuxusb信息)
- 科学家开发出一款能迅速“嗅出”口臭的小型便携设备
- Linux设备驱动程序:探究设备号码之谜(linux驱动设备号)
- 文件驾驭Linux: 理解特殊设备文件的能力(linux的特殊设备)
- 调试解决 Linux 设备驱动问题:调试迈出最重要一步(linux设备和驱动)
- iWheelMart杜海根:做轮式设备租赁市场第一个吃螃蟹的人
- Linux下如何操作PCI设备?(linuxpci设备)
- Linux下的USB2.0连接设备体验(linuxusb2.0)
- 硬件圈投身区块链创业,瞄准WiFi智能设备算力升级空间丨TokenShow