移植python到小米路由器记录。

2023-11-09

最近抢了一个小米路由器,研究了一下,总的来说现在看起来功能还很少。现在比较有用的功能就是,远程下载功能,支持迅雷,电驴等,不过现在看电影啥的都是直接在线看的,基本上也很少用。检测连接的智能设备,这个功能可以随时查看是否有人曾网,当然也可以用来在远程监控家里都有谁在用路由器。以后应该会有更多的功能扩展,不过这应该是一个漫长的过程,我先自己弄点东西上去玩玩,首先把常用的python移植上去。

记录移植的过程,给需要的人,也方便自己以后查看。


首先通过ssh连接到路由器上面,小米路由器默认是没有开启ssh的需要手动开启。开启方法如下:

登录到路由器上面,

http://miwifi.com/cgi-bin/luci/;stok=6aab8cd9505eb84bef6af9c60f7af288/web/home

把链接最后的/web/home

用下面的字符串替换

 /api/xqsystem/upgrade_rom?url=%3Bnvram+set+ssh_en%3D1%3Bnvram+commit%3B%2Fetc%2Finit.d%2Fdropbear+start%3B

如果浏览器返回 {"code":0}:就表示成功了

可以通过ssh root@192.168.31.1连接到路由器上,用密码是admin。

编译arm 上面的python网上文章很多,我主要是参考这篇http://randomsplat.com/id5-cross-compiling-python-for-embedded-linux.html

本来想编译最新的2.7.6但是懒得制作补丁就直接从网站上面下载2.7.3补丁和python2.7.3来编译。

python的交叉编译和其他的交叉编译有点不一样的是需要先编译个x86版本的的python语法解释器。

./configure

make python Parser/pgen

mv python hostpython

mv Parser/pgen Parser/hostpgen

make distclean

然后打补丁交叉编译python

patch -p1 < Python-2.7.2-xcompile.patch

配置arm的交叉编译环境。

一开始我直接下的arm-4.3.3来编译,编译好后放到路由器上面提示-ash 找不到程序,查找了一下发现时编译器太旧的缘故。看了一下小米是基于openwrt开发的我这边正好也有openwrt的编译环境,于是想简单配置一下,用openwrt的编译出来的交叉编译器来编译python.

修改如下

make menuconfig

Target  System 选择"Broadcom BCM47XX/53XX with arm cpu",其他默认好了。

然后

make V=99 -j4

如果以前没有编译过openwrt可能比较慢。

编译成功后,切换到python目录下,导出编译环境变量

export PATH=$PAHT:~/openwrt/staging_dir/toolchain-arm_cortex-a9_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/
export STAGE_DIR=~/openwrt/staging_dir/

这里换成自己的openwrt目录就好了,默认的gcc 是4.6版本,我这边修改成了4.8,我是直接改.config文件的(因为不知到在哪里修改,所以就直接修改.config文件了)

CONFIG_GCC_VERSION_4_8_LINARO=y
CONFIG_GCC_VERSION="4.8-linaro"
CONFIG_GCC_VERSION_4_8=y
然后运行

make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED="arm-openwrt-linux-gcc -shared" CROSS_COMPILE=arm-openwrt-linux- CROSS_COMPILE_TARGET=yes     HOSTARCH=arm-linux BUILDARCH=x86_64-linux-gnu

编译没有问题,放到到小米设备上面结果提示找不到__ctype_b等符号,把小米的设备上面的libc.so.0导出来用arm-openwrt-linux-readelf查看发现libc.so.0导出的符号是__ctype_b_loc。在网上找了半天,都说是编译器太旧,可我用的已经是4.8比较新了,所以猜不是这个问题。

于是翻uClibc的代码,发现这个变量是通过一个__UCLIBC_HAS_XLOCALE__宏来控制的,觉得肯定是编译uClibC有开关,于是用find命令终于在 toolchain/uClibc/config-0.9.33.2/common文件找到了这个配置UCLIBC_HAS_XLOCALE,把这个开关打开

UCLIBC_HAS_XLOCALE=y

重新编译openwrt,这里需要运行make dirclean,经过漫长的过程,编译Ok后,按照上面编译python的步骤重新来一次,放到小米路由器上运行python命令果然没有问题看到了python的交互界面。

接下来就是稍微配置一下环境变量,我把python放到了路由器上的/userdisk/python目录下

修改/etc/profile 文件在里面添加。

export PYTHONHOME=/userdisk/python/
export PATH=$PATH/userdisk/python/bin

添加上面的就OK了,下一步想把goagent放上去,这个等我有时间在来移植吧。




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移植python到小米路由器记录。 的相关文章

随机推荐

  • kibana使用

    数据导出 查询完数据后 数据量很大 我们要对数据进行分析 可以导出来用excel分析 导出很简单 就是先保存后分享就可以了 使用kibana界面导出数据 我们要进行重复行统计的时候 可以使用excel的数据透视表 很强大 excel如何快速
  • EM算法

    尽管最大似然估计 MLE 和EM都可以找到 最佳拟合 参数 但是它们查找模型的方式却大不相同 MLE首先累积所有数据 然后使用该数据构建最可能的模型 EM首先对参数进行猜测 考虑丢失的数据 然后对模型进行调整以适合猜测和观察到的数据 该算法
  • 【IDEA】IDEA git log 点击 没有代码变更

    文章目录 1 概述 1 概述 Git log 下查看分支提交的信息 结果只有提交信息 没有代码变更信息 如下图 这里有坑 不是消失了 是下拉框拉倒最上面了 这里有条线 往下拉就能看到了
  • 使用kubeadm工具升级kubernetes

    一 背景 kubeadm部署的kubernetes集群进行升级 通常先升级控制节点 控制节点升级完成后再升级工作节点 本博文只升级了控制节点 工作节点按照相同的流程进行升级即可 环境说明 主机名 节点 11 0 1 200 k8s客户端操控
  • show_space存储过程脚本

    CREATE OR REPLACE PROCEDURE show space p segname 1 IN VARCHAR2 p type 1 IN VARCHAR2 DEFAULT TABLE p space IN VARCHAR2 DE
  • 程序下载微云

    https share weiyun com 5OxmUiI
  • python/sympy计算施密特正交化向量

    sympy的符号计算功能很强大 学习矩阵分析 重温了线性代数中施密特正交化的方法 正好可以用sympy解决一些计算问题 施密特正交化 也称 Gram Schmidt 正交化过程 Gram Schmidt Orthogonalization
  • 【linux】01 dnf 命令安装(新的代替yum 的安装方式)

    一 dnf 介绍 参考文章 DNF 是新一代的 rpm 软件包管理器 他首先出现在 Fedora 18 这个发行版中 而最近 它取代了 yum 正式成为 Fedora 22 的包管理器 DNF 包管理器克服了 YUM 包管理器的一些瓶颈 提
  • jdk8特性Collections.sort()的使用

    Java中Collections sort 的使用学习记录 在日常开发中 很多时候都需要对一些数据进行排序的操作 然而那些数据一般都是放在一个集合中如 Map Set List 等集合中 他们都提共了一个排序方法 sort 要对数据排序直接
  • k8s服务(service)详解

    目录 1 Service介绍 1 1 kube proxy支持的工作模式 userspace 模式 iptables 模式 ipvs 模式 2 Service类型 3 Service使用 3 1 实验环境准备 3 2 ClusterIP类型
  • vue3中使用jsx报错React is not defined和h is not defined

    js项目中jsx的使用 js项目引入Vue 3 Babel JSX 插件 修改vite config js import defineConfig from vite import vue from vitejs plugin vue im
  • python定时器

    一 定时器 在实际应用中 我们需要使用定时器去触发一些事件 Python中的定时器是timer 首先看个例子 import datetime 导入datetime模块 import threading 导入threading模块 def r
  • Hbase Java API 介绍

    Hbase Java API 介绍 几个主要 Hbase API 类和数据模型之间的对应关系 1 HBaseAdmin 关系 org apache hadoop hbase client HBaseAdmin 作用 提供了一个接口来管理 H
  • 超详细的人脸检测:MTCNN代码分析,手把手带你从零开始码代码

    前言 之前我发过MTCNN的原理分析 不了解的朋友可以看看深刻理解MTCNN原理 超级详细 从零开始做人脸检测 Tensorflow2实现 授人以鱼 不如授人以渔 本文与其他代码分析的文章不一样 本文不会涉及原理过多的东西 原理参照我的上一
  • react 安装

    安装react脚手架 npm i g create react app 创建react项目 npx create react app react project react project为项目名
  • 使用ping检测MTU值

    ping ping Packet Internet Groper 是一种因特网包探索器 用于测试网络连接量的程序 Ping是工作在 TCP IP网络体系结构中应用层的一个服务命令 主要是向特定的目的主机发送 ICMP Internet Co
  • sql语句-如何以一个表中的数据为条件据查询另一个表中的数据

    下面这个是SQL语句的一个基本样式 select from 表2 where 姓名 in select 姓名 from 表1 where 条件 实例需求 在项目中是这样应用的 我需要根据库位编号去查找库位信息表里查找库位上放的的料箱编号 我
  • C++-----动态规划

    目录 一 动态规划的基本思想 二 设计动态规划法的步骤 三 动态规划问题的特征 4 1 矩阵连乘积问题 4 1 1 分析最优解的结构 4 1 2 建立递归关系 4 1 3 计算最优值 4 1 3 计算最优值 4 1 3 构造最优解 4 2
  • 面向对象设计原则——单一职责原则

    单一职责原则是最简单的面向对象设计原则 它用于控制类的粒度大小 单一职责原则 Single Responsibility Principle SRP 一个类只负责一个功能领域中的相应职责 或者可以定义为 就一个类而言 应该只有一个引起它变化
  • 移植python到小米路由器记录。

    最近抢了一个小米路由器 研究了一下 总的来说现在看起来功能还很少 现在比较有用的功能就是 远程下载功能 支持迅雷 电驴等 不过现在看电影啥的都是直接在线看的 基本上也很少用 检测连接的智能设备 这个功能可以随时查看是否有人曾网 当然也可以用