中兴机顶盒ZXV10 B860AV2.1T 2022款刷armbian系统

最近需要一台轻量化的小服务器来跑几个Python脚本,起初打算再买一台树莓派4b的,但是看了一圈这个溢价直接给我劝退,后来我想到了运营商送的小盒子 所以就有了接下来的故事。

中兴运营商盒子刷第三方系统什么的也不是什么新鲜事了,早几年再恩山就有很多大神出了TTL刷机和短接线刷的教程,但是经过了一番尝试,发现对于2022年的新盒子这些方法基本上都失效了,无奈只能自己摸索。

思路是这样的 首先 先刷入一个 有ROOT权限的第三方安卓,这个我已经找好了可用于S905L处理器的刷机包了,但是这个镜像刷入以后不能使用原装遥控了,因为input/event 对不上。所以说刷之前先准备好一个USB键盘。 刷入有ROOT权限的安卓以后,把armbian刷入一张SD卡,并且调整好外置启动文件,这里有一个很大的坑我一会会说。最后将系统写入原厂的e-nand 。 没错 2022年的中兴盒子把emmc换成了e-nand 这也是很多人发现写入时找不到emmc的原因了,这个问题我摸索了一阵已经解决了,这边我会说下思路,并且把已经修改好的文件上传到包里,供小白们 直接用。

  1. 首先刷入第三方安卓,第一个问题就是与老版本盒子不同的是,短接的电阻有了变化。不是c125而是 c119。
    步骤是用双公USB连接到电脑后(靠近以太网接口的那个USB)短接C119的两端然后通电,刷机软件会检测到设备,然后导入镜像勾选擦除flash,和刷鞋boot loader,点开始就可以,软件和镜像以及所有会用到的东西,我都会放在文章最后的网盘里供大家下载

    2.第二步,刷入第三方安卓以后,准备一个U盘将Reboot to LibreELEC.apk 放入U盘内,然后把U盘插入到盒子上安装它,将注意这时候我们就不能使用遥控器来控制了,要通过键盘来控制盒子。

    3.第三步,先在电脑上把armbian写入到TF卡中,用的工具可以随意,win32diskimager什么的都可以,我用的是树莓派的写卡工具,写入好后重新拔插一下读卡器,会认到一个boot的FAT32盘符,这些玩过树莓派和其他嵌入式板子的小伙伴们会很熟悉

    编辑配置文件 exlinux.conf 把所有前面没有打#号注释掉的都注释掉。然后删掉meson-gxl-s905x-p212.dtb前的#号和最后一行的#号 解除掉这两个注释 exlinux配置就算结束了。回到BOOT根目录把u-boot-s905x-p212,重命名为u-boot.ext。接下来非常关键,要去dtb文件夹里找到meson-gxl-s905x-p212.dtb删掉用我给的meson-gxl-s905x-p212.dtb来替换它,这直接影响到你是否能正常的把armbian写入到emmc,如果不这么做,你在写卡部分会提示找不到emmc原因就是新款中兴盒子把emmc换成e-nand 它的频率从 0x5f5e100 变到了 0x2faf080 如果你有兴趣的话可以使用device-tree-compiler自己更改这个数值 ,篇幅问题我不再详述。

    4.第五步就是把TF卡插到盒子上,启动Reboot to LibreELEC 然后授予ROOT权限它会自动重启 进入TF卡上的ARMBIAN 进入系统后设置root密码和初始账户密码 然后使用root登录并且严格按照我下面的操作来做

    cd /boot
    chmod 755 install-aml.sh
    ./install-aml.sh

如果不出问题的话 armbian会写入到EMMC中,如果提示找不到emmc或者正在使用emmc 请检查上一步是否替换了dtb。

最后希望各位都能顺利的进行刷机操作 如果有不明白的可以直接在本篇文章下给我留言 或者发邮件给我 qibohan@qibohan.com

需要用到的文件 百度网盘:链接:https://pan.baidu.com/s/1iqUmCWDgnXuqhIMhbbdGdQ?pwd=gtrg 提取码:gtrg 解压密码zte123456

补链接:https://pan.baidu.com/s/1ZJKnPLrFZbFBlWE3uXBDHw

提取码:7nl8

最近参加工作了,链接一直没来得及补,不好意思各位

JAVA考试题 编写一个程序,实现从键盘输入6个学生的一门课程成绩,求出这6个学生的最高分,最低分以及平均分并输出。(用数组实现)

编写一个程序,实现从键盘输入6个学生的一门课程成绩,求出这6个学生的最高分,最低分以及平均分并输出。(用数组实现)

import java.util.Scanner; 
/**
 第一题 1. (20分) 编写一个程序,实现从键盘输入6个学生的一门课程成绩,求出这6个学生的最高分,最低分以及平均分并输出。(用数组实现)
 */
public class test_one {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int sub = 6;
        int sum = 0;        //总分
        int max = 0;        //最大值
        int min = 100;        //最小值
        int i = 1;
        while(i<=sub){
            System.out.println("请输入第"+i+"科分数");
            int exam = sc.nextInt();
            sum+=exam;
            if (max<exam){         //判断最大值
                max = exam;
            }
            if (min>exam){         //判断最小值
                min = exam;
            }
            i++;
        }
        System.out.println("最高分为:"+max);
        System.out.println("最低分为:"+min);
        System.out.println("总分为:"+sum);
        System.out.println("平均分为:"+sum*1.0/sub);

    }
}

JAVA考试题 编写一个类Person 再编写一个学生类继承Person类

本人的JAVA期中考试题,分享给有需要的朋友,变量名和方法名 命名的都不规范 因为考试需要,仅供初学者参考

题干:编写一个人类Person,其中包含姓名、性别和年龄的属性,包含构造方法以及显示姓名、性别和年龄的方法。再编写一个学生类Student,它继承Person类,其中包含学号属性,包含构造方法以及显示学号的方法。最后编写一个主类,包含main()方法,在main()方法中定义两个学生s1和s2并给他们赋值,最后显示他们的学号、姓名、性别以及年龄。其中一个学生信息是自己本人。

文件1Person类

public class person {

    private String name;

    private String sex;

    private int age;

    public int getAge() { 

        return age;

    }

    public void setAge(int age) { 

        this.age = age;

    }

    public String getName() { 

        return name;

    }

    public void setName(String name) { 

        this.name = name;

    }

    public String getSex() { 

        return sex;

    }

    public void setSex(String sex) { 

        this.sex = sex;

    }

}

文件2 学生类

public class xuesheng extends person {
    private String studentNo;
    public xuesheng(String s) {
    }

    public xuesheng() {
    }

    public void Student() {
    }

    public void Student(String studentNo) {
        this.studentNo = studentNo;
    }

    public String getStudentNo() { 
        return studentNo;
    }

    public void setStudentNo(String studentNo) { 

        this.studentNo = studentNo;

    }

    public static void main(String[] args) { 

        xuesheng s1= new xuesheng();

        s1.setStudentNo("2019101100");

        s1.setName("齐勃涵");

        s1.setSex("男");

        s1.setAge(23);

        xuesheng s2=new xuesheng();

        s2.setStudentNo("2019101100");

        s2.setName("测试");

        s2.setSex("女");

        s2.setAge(20);

//输出

        System.out.println(s1.getStudentNo());

        System.out.println(s1.getName());

        System.out.println(s1.getSex());

        System.out.println(s1.getAge());

        System.out.println(s2.getStudentNo());

        System.out.println(s2.getName());

        System.out.println(s2.getSex());

        System.out.println(s2.getAge());

        s1=null;

        s2=null;

    }

}

JAVA考试题 创建一个圆类

本人的JAVA期中考试题,分享给有需要的朋友,变量名和方法名 命名的都不规范 因为考试需要,仅供初学者参考

题干:编一个程序,程序中包含以下内容:

一个圆类,包含:
属性:圆半径;
方法:构造方法;求面积方法;求周长方法:。
主类,包含:
主方法main(),在主方法中创建圆类的对象c1和c2并初始化,c1的半径为10,c1的半径为20,然后分别显示两个圆的面积和周长。

import java.util.Scanner;
public class yuan {
    private double Radius;
    public void setRadius(double r)

    {
        this.Radius=r;
    }

    public void yuan()
        this.Radius=0;
        System.out.println("圆");
    }
    public void yuan(double r)
    {
        this.Radius=r;
    }
    public double getRadius()
    { 
        return Radius;
    }
    public double getArea()
        double r=this.Radius;
        return r*r*3.14;
    }
    public double getPerimeter(){ 
        return this.Radius*3.14*2;
    }
    public void show()
    { 
        Scanner cin=new Scanner(System.in);
        System.out.println("请输入半径:");
        this.setRadius(cin.nextInt());
        System.out.println("半径=;"+this.getRadius());
        System.out.println("周长;"+this.getPerimeter());
        System.out.println("面积="+this.getArea());
    }

    public static void main(String args[])
    { 
        yuan c1=new yuan();
        yuan c2=new yuan();
        c1.show();
        c2.show();
    }

}

yua

JAVA考试题 利用 JAVA 让计算机随机产生出10个两位正整数,并存到一维数组中,然后按照从小到大的次序显示出来。

本人的JAVA期中考试题,分享给有需要的朋友,变量名和方法名 命名的都不规范 因为考试需要,仅供初学者参考

题干:利用 JAVA 让计算机随机产生出10个两位正整数,并存到一维数组中,然后按照从小到大的次序显示出来。

import java.util.Arrays;
public class suiji {
    public static void main(String[] args) {
        int[] array = new int[10];       // 数组
        System.out.println(Arrays.toString(array));
        int index = 0;         // 索引
        while (true) {            //while死循环
            int no = (int) (Math.random() * 99) + 1;     // 随机生成一个整数
            boolean flag = true;       // 定义一个布尔类型标识
            for (int i = 0; i < array.length; i++) {
                if (no == array[i]) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                array[index] = no;
                index = index + 1;            // 把数组的索引+1
            }
            if (index == array.length) {
                break;
            }
        }
        System.out.println("数组中的元素=" + Arrays.toString(array));
    }
}

java考试题 使用java编程求出所有的水仙花数。

本人的JAVA期中考试题,分享给有需要的朋友,变量名和方法名 命名的都不规范 因为考试需要,仅供初学者参考

public class shuixianhua { // 齐勃涵
    public static void qibohan(){
        for (int i = 100; i < 1000; i++) {
            int j = i % 10;         //个
            int k = i / 10 % 10;    //十
            int l = i / 100;        //百
            if (i==(j*j*j)+(k*k*k)+(l*l*l)) {
                System.out.print(i + " ");
            }
        }
    }
    public static void main(String[] args) {
        System.out.println("打印所有的水仙花数");
        qibohan();
    }
}
水仙花

学会用Docker,和安装各种依赖说拜拜

安装依赖是多么痛苦的事情,相信各位小伙伴比我要更加清楚。apt装不了 还要去github找source 来make install 。终于在某个实验上因为安装依赖崩溃的我才想起来docker容器这一神器。下面我基本记录下相关的指令和学习心得。

基本命令

docker version 查看docker版本
docker info 查看docker详细信息
docker --help 查看docker命令

镜像命令

docker images 查看docker镜像

PEPOSITORY:镜像的仓库源
TAG: 镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
TAG :有些镜像会有多个TAG代表着不同的分支 一般默认都是 latest 也就是最新版本。
docker images -a 列出本地所有的镜像
docker images -p 只显示镜像ID
docker images --digests 显示镜像的摘要信息
docker images --no-trunc 显示完整的镜像信息

docker search 在Docker Hub上查找镜像
例 docker search nginx 从Docker Hub上查找nginx镜像
docker pull 在Docker Hub上拉取镜像
例 docker pull nginx 从Docker Hub上拉取nginx 镜像 等价于 docker pull nginx:latest 冒号后面表示镜像的tag 默认为latest

docker ps 列出当前所有正在运行的容器
docker ps -a列出所有的容器
docker ps -l列出最近创建的容器
docker ps -n 3列出最近创建的3个容器
docker ps -q只显示容器ID
docker ps --no-trunc显示当前所有正在运行的容器完整信息
exit 退出并停止容器
Ctrl+p+q 只退出容器,不停止容器
docker start 容器ID或容器名称启动容器
docker restart 容器ID或容器名称重新启动容器
docker stop 容器ID或容器名称停止容器
docker kill 容器ID或容器名称强制停止容器
docker rm 容器ID或容器名称删除容器
docker rm -f 容器ID或容器名称强制删除容器
这只是基础的docker指令,过几日我会更新 容器和宿主机的目录链接 网络端口映射 还有变量传入 等等。

校园网绕开单设备限制方案

首先说一下我的方案,我在学校使用了一个5年前的一个路由,品牌是极路由 型号为 HC5861 这款路由器采用了联发科 基于MIPS架构的MT7620A 针对该处理器 我编译了一个openwrt的系统来替换原有的系统,并且在上面安装了华科当年做的锐捷认证插件 mentohust。 如果有同款路由想采用我同样方案的同学可以在下面评论留下邮箱我会直接发给你我编译好的固件。
这个路由器设计的非常不好,他原本的 WAN 和 一个LAN是百兆 另外一个LAN 是千兆。我在这个固件里把那个千兆LAN作为WAN来用。也可以自定义调换 只是在软件上定义了VLAN 。
———-4月13日 更新
mentohust这个工具原本是一个纯命令行下的工具,我们需要ssh到路由器的终端 来进行配置,并配置系统启动时自动认证。但最近我发现了 针对该工具的luci页面UI 。

github链接:https://github.com/BoringCat/luci-app-mentohust

如果有需要的话 可以在下面给我评论留言 ,我后续会考虑更新详细的操作流程。
本方案在 牡丹江师范学院,黑龙江生物科技职业学院 验证成功