1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > linux开发视角root手机并部署相关开发工具

linux开发视角root手机并部署相关开发工具

时间:2023-08-25 15:30:28

相关推荐

linux开发视角root手机并部署相关开发工具

最近毕设实验接近尾声, 需要使用各种算法在不同的硬件平台上进行性能测试, 之前已经成功部署到了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 APPLinuxploy相当于各种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=1sd卡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环境但是失败了, 然后在尝试使用rk3399conda环境也失败了, 又考虑到其实我的实验只要是个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

4. 给手机部署一些基础工作

tvm编译并测试

收获

之前总觉得手机root比较麻烦, 其实不然, 所有的手机机型对应的root方案其实在网上都公开了, 并且有很多爱好者都已经打包好直接用即可通过各种GitHub上的开源工具, 其实目前已经实现了像是arm, amd, Intel等不同硬件平台对应的Linux系统, 也就是大一统早就实现了, 只是我们仅仅关注于某些方面从而忽略了整个世界的发展所以我期待的未来应该是跟LLVM编译器框架的形式一样, 分为前端中间和后端, 即前端操作系统的不同应用, 中间操作系统, 后端不同的硬件平台;因为即使新的硬件平台,无非就是多出来不同的寄存器用于专项的处理些特殊的任务, 比如机器学习的Graph, 但是操作系统其实依旧是在操作着这些通用的寄存器实现, 所以不管底层硬件怎么变化, 上层系统其实都大体相同, 不同的是一些特殊的任务处理, 而这些特殊任务有很多coder在maintain通过容器技术, 可以打通所有的硬件平台, 不是一般的厉害, 以后再也不怕手机下岗后没用了, 由此可见, 当前硬件资源其实已经很丰富了, 只不过没有一个行之有效的方法把这些资源给利用起来而已!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。