最近毕设实验接近尾声, 需要使用各种算法在不同的硬件平台上进行性能测试, 之前已经成功部署到了NanoPC-T4的板子上, 所以接下来的想法是在一台手机上面看能不能部署相应的计算框架测试算法性能;
本文主要是通过各种工具快速的实现手机root, 并且通过root后的权限安装相应的工具, 在通过adb工具, 将手机链接到电脑上面, 在通过命令行进行操作;
扩展:
如果说安卓手机能够通过root的方式实现跟Linux一样的操作, 那其实每一台手机都可以搭建一个小型的Linux服务器, 比如在手机上挂载个硬盘作为家庭共享盘, 也可以在手机上安装个HomeKit作为智能家居,智能安防的主控, 也可以搭建个备份数据库, 遵照每周备份一些重要的资源;
由于当前手机硬件性能已经非常强了,并且各种外设(屏幕, 摄像头, OTG, 红外)齐全, 从而实现上面这些对性能要求不高的想法简直是轻而易举;先去咸鱼上spending 100RMB to purchase one phone, redme 4Acortex A53 四核, 2G内存, 16G存储
我已经在阿里云将下面用的的工具和包分享出来了, 有需要的请自行下载
/s/6X9dZZUMxHH
1. 红米4A的root
1.1 下载自带root的固件进行刷机
市面上有很多刷剧工具, 这里用的是极兔刷机, 在rom市场
找到对应的机型, 在找到自带root权限
的系统包, 购买后进行一键刷机, 价格也就10+MBR, 省去了很多的资料查找的麻烦, 然后他会有个刷机教程, 按照刷机教程进行操作即可
1.2 刷剧过程中遇到的问题
小米手机有锁, 这个根据上面的那个刷机提示, 在手机上登录自己的小米账户并且授权认证; 然后在去小米官网下载MiFlash-12-12-0-ex
在电脑上面打开后登录自己的小米账户, 点击解除锁即可
购买的包刷到一半提示空间不足, 然后手机无法开机
如下图所示, 找到官方原厂固件包, 重新刷回原来的系统
然后在回到1.1
中, 刷到最后会提示请按住手机音量加键, 等到出现界面后选择recovery, 进入recovery界面后, 会自动运行root激活脚本, 等待结束后会自动重启手机, 大约十分钟后, 手机就获得了root能力了
第三个问题是数据线问题, 有些数据线不支持数据传输或者接口松动, 导致的root失败, 更换数据线就好了
2. adb的使用
ADB(Android Debug Bridge)是Android SDK中的一个工具, 使用ADB可以直接操作管理Android模拟器或者真实的Andriod设备。
ADB主要功能有:
1、在Android设备上运行Shell(命令行)
2、管理模拟器或设备的端口映射
3、在计算机和设备之间上传/下载文件
4、将电脑上的本地APK软件安装至Android模拟器或设备上
讲道理, 之前的工作应该已经将adb drive
安装完, 能够识别Android
并且进入adb shell
了
2.1 添加环境变量
将 包含adb.exe
的文件夹放到一个位置后, 插入到系统的环境变量中
2.2 将 “/” 挂载为可读可写
通过数据线将手机连接到电脑, 此时有个root权限认证, 在手机的弹框点击确定即可
C:\Users\admin>adb shell # 进入手机的shellshell@rolex:/ $ su # 切换root用户root@rolex:/ # mkdir zjq # 创建文件夹mkdir: 'zjq': Read-only file system # 出错, 当前系统只读mount -o remount ,rw / # 修改当前系统为可读可写root@rolex:/ # mkdir zjq # 创建文件夹成功
3. 安装开发工具 Linuxploy
Linuxploy
是一个Android APP
Linuxploy
相当于各种Linux版本的容器接口, 跟电脑上面的docker
很像可以通过Linuxploy APP
加载一个Linux容器到Android
本地3.1 直接在手机的内存中安装Linux
注意: 该方案是没有sd卡, 仅仅是想玩一下Linux, 推荐这样, 但是注意需要存储大于4G的空间
这里由于买的SD卡还没回来, 所以还没尝试, 但是看了很多视频, Linuxploy配置centos都很简单, 启动后通过局域网或者数据线连接到电脑的shell即可实现服务器的搭建
虽然SD没回来, 但是我发现我的16G内存还有8G内存的剩余, 所以就尝试了一下, 结果还成功了
先放一张结果图
总的操作如下图所示
第一步. 手机左上角三条横杠之设置
设置 屏幕常亮, 锁定WiFi, CPU唤醒PATH变量system/xbin
调试模式 打开第二步. 配置文件
删除当前的配置文件, 然后新建改名为Ubuntu
即可第三步. 手机右下角三道杠之容器设置
发行版Ubuntu
架构armhf
源地址http://mirror.tuna./ubuntu-ports/
安装类型: 镜像 (镜像的含义就是整个系统都在一个文件中)安装路径:${ENV_DIR}/linux.img
(安装到本地, 这里没有SD卡, 所以选择安装到本地)安装路径${EXTERNAL_STORAGE}/linux.img
(安装到SD卡)镜像大小5120
(我尝试使用2048即2G, 但是安装完后显示ssh启动失败, 没有改文件, 这是因为空间太小, 默认不安装基础工具, 所以这里尽可能的大一些空间)文件系统ext4
用户名和密码这里自己设置
(最好不要设置root
想要进入root
登录后可以通过su
命令进入)初始化: 允许使用初始化系统ssh 启动ssh 服务
返回第四步. 点击安装
等待大约20分钟, 期间会如果出现download packages... fail
表明网络较差, 点击停止然后重新安装即可
第五步. 点击启动
看到ssh start
了, 表示可以通过ssh进行连接了, 这时候, 电脑跟手机如果连接到了同一个路由器上, 就可以直接通过ssh工具进行连接了!!!
3.2 挂载64G的内存卡到/home路径下
注意: 这样挂载的SD卡到Linux下, 无法执行可执行文件, 因为sd卡所属的组是sd-card, 在Linux系统是root, 总之就是没有权限, 查了一圈也没有具体的解决方案, 因此挂在sd卡只能作为文件存储, 要想大量的工具开发, 那还得是将整个Linux系统挂到sd卡上面, 这里见3.3节
因为zjq
用户的文件路径是/home/zjq
插入tf卡到手机上面
通过数据线连接到电脑
在powershell中查看tf卡的名称 确定tf
卡的位置是/storage/3B55-1501
这里每个tf
的标号都一样, 必须这样查看
shell@rolex:$ ls /storage3B55-1501emulatedself
在Linuxdeploy
→ 左下角设置 → 挂载 →启动(Android资源) → 挂载点列表→将整个tf卡
挂载到/test
(即Linux中的/test
对应的是安卓上面的tf卡
)路径 → 拷贝/home
到/test
zjq@localhost:/home/zjq$ cd /testzjq@localhost:/test$ cp -R /home/* ./# 这样做的目的是为了将home下的所有配置文件都先放到`tf` 中, 然后在重新挂载将tf直接挂载为 /home即可
关闭容器Linux, 然后重新修改挂载路径 见下图
到这里, Linux下的/home
就对应与手机里面的tf卡
了
3.3 在SD卡上面安装Linux
注意: 先卸载之前安装的Linux: 在左上角 三个杠 设置, 移除环境
a. 给SD卡分区
注意: Linux安装最好是安装到ext4的单独分区格式下
利用分区助手, 将tf
插入电脑进行分区
第一个分区 fst32 2G第二个分区 Linux/swap 2G第三个分区 ext4 剩余全部
b. 按照3.1节的步骤, 只需要修改安装格式和安装路径
安装类型: 分区
安装路径:/dev/block/mmcblkXpY
这里的X表示存储, Y表示分区
X=0
手机存储X=1
sd卡Y=1
分区1FAT32Y=2
分区2SwapY=3
分区3Ext4
综上所示, 这里应该修改为/dev/block/mmcblk1p3
c. 点击右上角的三个点, 点击配置
更新设置
d. 点击右上角的三个点, 点击安装
下载Linux并安装到ext4分区中
e. 点击启动 通过ssh登录即可
3.4 Ubuntu初始化操作
这里对刚安装完成的Ubuntu进行初始化操作很简单, 无非就是安装常用的工具, 比如vim, 修改下载源等, 具体操作见另一个arm的Ubuntu系统初始化部署
注意默认的zjq
用户用的是/bin/sh
, 这里需要更改成/bin/bash
不然无法tab补全等操作
sudo vi /etc/passwdzjq:x:60000:60000::/home/zjq:/bin/bash
a 安装常用或者必备工具
sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-devsudo apt-get install gcc-arm-linux-gnueabihf -ysudo apt install libffi-devsudo apt-get install build-essential cmake -ysudo apt-get install gcc-arm-linux-gnueabihf -ysudo apt-get install libssl-dev -ysudo apt-get install python3-pipsudo apt-get install pkg-configsudo apt-get install autoconf automake libtool make g++ unzipsudo apt-get install libgflags-dev libgtest-devsudo apt-get install libc++-dev
c 安装 vim, zip, wget, lrzsz
d 安装llvm-10
直接去官网下载预装二进制版本
clang+llvm-10.0.0-armv7a-linux-gnueabihf.tar.xz
然后解压到手机的路径下, 设置环境变量
vi ~/.bashrc# 添加llvm的路径到环境路径export LLVM_HOME=/home/zjq/software/clang+llvm-10.0.0-armv7a-linux-gnueabihf/binexport PATH=$LLVM_HOME:$PATHsource ~/.bashrcllvm-as --version
e Linuxdeploy安装python和各种python包
由于我的实验主要就是底层
C++
和上层python,
所以只需要搞定python
的各种依赖包就可以跑起来了, 但是在安装python
包时出现了很多问题, 下面给出解决方案和python
的操作; 这里注意我尝试利用树莓派
里面的conda
环境但是失败了, 然后在尝试使用rk3399
的conda
环境也失败了, 又考虑到其实我的实验只要是个python3.6
版本以上的就都OK, 所以直接使用了原带的python3.6
# 安装pythonsudo apt-get install -y python3 python3-dev python3-setuptools sudo apt-get install python3-pip# 注意此时输入python默认是python2, 所以需要修改软链接sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150# 此时在使用python默认就是python3.6# 测试pip可用pip list# 设置默认python下载源pip config set global.index-url /pypi/simple/# 安装numpy 安装了几次都失败, 后来通过pip list发现怎么都安装上去了....pip install numpy# 安装scipy# pip install scipy 一直显示找不到包, 然后发现可以通过apt安装, # 于是我又发现了一种python包的安装方式... 窃喜sudo apt-get install python3-scipy# 剩下的还有各种依赖, 已经记不起什么和什么的依赖了history | grep installsudo apt-get install python3-scipysudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-devsudo apt-get install gcc-arm-linux-gnueabihf -ysudo apt install libffi-devsudo apt install arm-linux-gnueabihf-gccsudo apt-get install build-essential cmake -ysudo apt-get install gcc-arm-linux-gnueabihf -ysudo apt-get install libssl-dev -ypip install jupytersudo apt-get install python3-pippip3 install pytestpip3 install numpysudo python3 -m pip install --upgrade pippip3 install grpc-toolspip3 install grpciopip3 install psutilpip install pytestsudo apt install gawksudo apt install bisonsudo apt-get install python3-scipy