专栏首页python3移植python到小米路由器记录。

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python部分常用命令

    在python编写代码的时候,避免不了会出现或是用到中文,这时候你需要在文件开头加上中文注释。如果开头不声明保存编码的格式是什么,那么它会默认使用ASKII码保...

    用户2398817
  • DIY个人智能家庭网关—— 路由器篇之安

    在openwrt上进行二次开发编写自己的程序,python肯定是最方便最快捷的编程语言,因为它是解释型语言,无需openwrt的编译环境,只要安装好了pytho...

    用户2398817
  • 安装net-snmp-python

    ln -s /usr/local/lib/libnetsnmp.so.30 /usr/lib/libnetsnmp.so.30

    用户2398817
  • 推荐一个python学习的宝库(github的star数71000+)

    Python近几年非常火,TIOBE2019年一月发布的排行榜显示,python获得2018年第3次获得TIOBE最佳年度语言称号,这是python第3次获得T...

    double
  • 记一次ijkplayer的编译过程

    从视频直播到播放器,现在很多的产品都集成了视频播放的功能,而目前市面上有比较主流的有第三方框架有:

    xiangzhihong
  • 时间序列数据分析的部分综述

    时间系列研究的是gene表达的动态行为。鉴定静态实验的差异表达gene已经做了很多的工作。但是因为gene表达是动态的调控过程,所以鉴定并且找出gene表达随时...

    Y大宽
  • 数据版"吐槽大会": 国产综艺节目年终盘点

    作者介绍:徐麟,目前就职于互联网公司数据部,哥大统计数据狗,从事数据挖掘&分析工作,喜欢用R&Python玩一些不一样的数据

    周萝卜
  • IdentityServer(12)- 使用 ASP.NET Core Identity

    晓晨
  • 大众点评cat系统的搭建笔记

    项目地址:https://github.com/dianping/cat 编译步骤: 这个项目比较另类,把编译需要的jar包,单独放在git分支mvn-repo...

    菩提树下的杨过
  • Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息

    最简单的一个操作: sudo ufw status(如果你是root,则去掉sudo,ufw status)可检查防火墙的状态,我的返回的是:inactive(...

    98k

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动