YK-L1刷机

news2025/1/15 16:42:32

文章目录

    • 1.测试是否能够连接到路由器
    • 2.刷breed
    • 3.Padavan firmware编译
    • 4.烧板
    • 5.验证
    • 杂文
      • 1.1内核模块编写(使用insmod方式)
      • 1.2内核模块编写(跟随内核一起编译)
    • 参考资料

1.测试是否能够连接到路由器

插上网线和电脑相连,网线插在路由器那端要插在LAN接口而不是WAN接口,在电脑的设置中找到新增的网络4,在这里插入图片描述
在这里插入图片描述
点击下,我们就可以看到它的ip地址是192.168.144.1,在这里和通常的有点区别,比如一般的是192.168.11.1,路由器背后贴图显示地址也是wifi.youku.com,但对我这都没用,我感觉应该是我买的二手路由器已经被刷机过一次了。

然后我们ssh连接试试,成功!
在这里插入图片描述

2.刷breed

(这步可以选择不看,因为感觉大多数人的机子都自带了breed,检测是否有breed的方法是:拔出电源,按住路由器reset的键不放,并同时插上电源,继续按个大概5s钟的reset键就可以松手了,把网线一端连接在路由器LAN口一端连接在本机,在本机上输入192.168.1.1,看有没有breed的页面。)

进入 https://breed.hackpascal.net/,直接找到对应的编译好的二进制文件,我们的话就是breed-mt7620-youku-yk1.bin,接下来我们就想把这个文件放到路由器里,一些方法说的是用U盘,但巧了U盘不在我身边,图省事,我就直接在mobaxterm里连接上这个路由器,直接用mobaxterm自带的文件传输搞定。

我们cat /proc/mtd来看看flash的分区情况
在这里插入图片描述
接下来就把breed烧进去,mtd write /tmp/breed-mt7620-youku-yk1.bin u-boot

(PS:这步我其实一直没成功,一开始是显示没有u-boot的权限,无法写入,因为自带的固件openwrt会把u-boot给锁了,之后刷过一遍padavan后,却又提示我-sh: mtd: not found,有点头疼,但不重要,感觉大家买的机子应该都自带了breed)

3.Padavan firmware编译

先安装需要的依赖包,本次运行环境是Ubuntu16.04,我知道这版本极度老。。。但是推荐是这样的,我试了试用新的Ubuntu22,但是编译时出现了我无法解决的问题,就乖乖回来Ubuntu16了。

apt-get install language-pack-zh-hans apt-utils gcc g++ gdb binutils build-essential make bison flex autoconf automake patch gawk bzip2 gettext pkg-config libtool zlib1g-dev libgmp3-dev libmpfr-dev libmpc-dev libreadline-dev vsftpd lrzsz lftp telnet curl astyle exfat-fuse ethtool sysstat bridge-utils p7zip-full help2man libtool-bin libncurses5-dev git gperf texinfo python-docutils mc autopoint

接下来开始做镜像了,复制git仓库,编译所需工具链,编译fireware

git clone https://gitlab.com/padavan-ng/padavan-ng.git
cd padavan-ng/toolchain
sh build_toolchain.sh	#编译工具链,这步大概要花20分钟这样子,我是4核CPU
cd ../trunk
cp configs/templates/youku/yk_l1_full.config .config  #复制yk-l1的配置文件,已经提供好模板了
sh build_firmware.sh	#编译固件,这步大概也要花20分钟这样子

我们会发现在padavan-ng/trunk/images目录下多了一个YK-L1_3.4.3.9L-100.trx,这个就是我们想要的固件,把这个文件拷贝到我们本机上。

4.烧板

由于已经刷好breed了,现在更新固件很容易,按住路由器reset的键不放,并同时插上电源,继续按个大概5s钟的reset键就可以松手了。

把网线一端连接在路由器LAN口一端连接在本机,在本机上输入192.168.1.1进入breed页面,
在这里插入图片描述

上传我们刚编译好的镜像,等待烧录即可。

5.验证

待路由器自动重启后,重新进入192.168.1.1,注意了,初始的用户名和密码均是 admin

在这里插入图片描述

欸嘿,成功了!

如若想进入命令行页面的话,可以用telnet连接,使用命令telnet 192.168.1.1,跟我们熟悉的ssh差不多,但是padavan默认是把ssh关了的,我们也可以开,在Advanced Settings的Administration里把Enable SSH Server改成Yes即可。

在这里插入图片描述

杂文

1.1内核模块编写(使用insmod方式)

众所周知,每一个新程序新语言第一步都是从helloworld开始,我们先写一个test.c输出helloworld叭

//test.c
#include <linux/module.h>        /* Needed by all modules */
#include <linux/kernel.h>          /* Needed for KERN_INFO */
 
MODULE_LICENSE("GPL");

int init_module()
{
    printk(KERN_INFO "init_module hello world!\n");
    return 0;
}

void cleanup_module()
{
    printk(KERN_INFO "cleanup_module hello world!\n");
}

这里init_module是这个内核模块(就是这个test)被刚插入(insmod)时执行的,cleanup_module是内核模块在被卸除的时候执行的。

接下来为了生成这个内核文件,我们要写个makefile

KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD        := $(shell pwd)
obj-m := test.o
 
all:
	make -C $(KERNELDIR) M=$(PWD) modules
clean:
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mode.c .tmp_versions *.mod *.order *.symvers

这里这个 make -C $(KERNELDIR) 指明跳转到源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。

而后我们就能在目录下面看到这个test.ko了

然后我们依次输入

sudo insmod test.ko  #插入模块
sudo rmmod test 	 #移除模块
sudo dmesg			 #显示内核日志

就可以看到如下满意的结果

在这里插入图片描述

1.2内核模块编写(跟随内核一起编译)

虽说上述方式可以插入内核模块,但是总感觉差点意思,比如,每次重启一遍就得重新插入一遍(这个弊端可以通过设置开机启动解决),最关键的事,感觉不像原生内核模块一样,我们想要的是内核模块跟着原本的内核一起编译结合为一体,这样才感觉比较有意思。

我们进入padavan-ng/trunk/linux-3.4.x/drivers#目录下,这是驱动目录,也是我们下面主要进行操作的目录

完成下需要的文件结构

mkdir hello 	#新建一个hello文件夹
cd hello
touch Kconfig Makefile hello.c

Kconfig

menu "hello KM"
comment "hello kernel module"

config HELLO
    tristate "hello module"
    default y
    help
    hello kernel module test
endmenu

Makefile

obj-${CONFIG_HELLO} += hello.o

hello.c

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/ktime.h>
#include <linux/kthread.h>
#include <linux/delay.h>

static struct task_struct *ht = NULL;

static int thread_hello(void *para)
{
    int i = 0;

    while(!kthread_should_stop())
    {
        printk(KERN_DEBUG "hkm thread run, %d\n", i++);
        msleep(1000);
    }

    return 0;
}

static int __init hello_init(void)
{
    printk(KERN_DEBUG "hello, cbh\n");

    ht = kthread_run(thread_hello, NULL, "hello_thread");
    if(NULL == ht)
    {
        printk(KERN_ERR "kernel thread create failed\n");
        return -1;
    }

    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_DEBUG "bye, sdc\n");
    if(NULL != ht)
    {
        kthread_stop(ht);
    }
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("cbh");
MODULE_DESCRIPTION("TEST in kernel source");

接下来我们来修改 drivers/Kconfigdrivers/Makefile

在 driver/Kconfig 中添加 source "drivers/hello/Kconfig
在这里插入图片描述

在 driver/Makefile 中添加 obj-${CONFIG_HELLO} += hello/

在这里插入图片描述

至此,添加内核模块便大功告成了,我们可以返回到 3.Padavan firmware编译进行编译。

最后我们上板检验,照例使用命令dmesg查查系统日志,欸嘿成功了

在这里插入图片描述

参考资料

最新版本breed下载地址
AR/QCA/MTK Breed,功能强大的多线程 Bootloader (这个是breed作者的更新贴)
Linux kernel:如何向内核中添加自定义内核模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络基础——一文详解IPv4与子网划分

IPv4地址概述 在因特网中&#xff0c;为了实现计算机之间的相互通信&#xff0c;通常需要为每台计算机分配一个IP地址。在互联网的发展过程中主要有两个版本的互联网协议&#xff0c;分别是IPv4(Internet Protocol version4)和IPv6 (Internet Protocol version 6) IPv4的IP地址…

SpringBoot:模块探究之spring-boot-starters

Spring Boot Starters 是一组方便的依赖描述符&#xff0c;您可以将它们包含在您的应用程序中。您可以获得所需的所有 Spring 和相关技术的一站式服务&#xff0c;而无需搜索示例代码和复制粘贴大量依赖项描述符。 例如&#xff0c;如果想使用 Spring 和 JPA 进行数据库访问&am…

SpringBoot整合Redis实现几种自定义数据序列化存储方式

JDK自带序列化方式 在Java中RedisTemplete提供了统一的API来操作Redis&#xff0c;比如插入一条String类型的数据&#xff0c;我可以用 redisTemplate.opsForValue().set("name", "美羊羊"); SpringDataRedis可以接收任何类型的对象并将其转成Redis可以处…

小布助手,身入大千世界

在2018年—2019年&#xff0c;AI智能助手一度火热&#xff0c;成了科技行业的全新风口。智能音箱与手机中&#xff0c;我们能看到各种各样的智能助手横空出世&#xff0c;一度成为产品标配。但随着时间缓缓冲刷&#xff0c;就像所有科技风口一样&#xff0c;有的AI智能助手随着…

一种非侵入式幂等性的Java实现

今天我们来谈谈什么是幂等性&#xff1f; 引用百度百科的解析如下&#xff1a; 幂等&#xff08;idempotent、idempotence&#xff09;是一个数学与计算机学概念&#xff0c;常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同…

3ds Max:标准几何体

三维软件中一般有许多非常复杂的命令&#xff0c;能够完成非常复杂的图形运算&#xff0c;但其实许多绚丽的图形也是由最基本的几何体构成&#xff0c;许多复杂的命令也是基本的运算程序的集合&#xff0c;就像是砖块&#xff0c;构成了复杂的大厦。任何一个几何体&#xff0c;…

【QGIS入门实战精品教程】3.4:QGIS创建、连接、打包GeoPackage数据库及数据入库案例详解

GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件、与操作系统无关的地理数据库。在QGIS中可以很方便的实现GeoPackage的创建与连接等操作。 文章目录 一、QGIS创建GeoPackage1. 创建数据库2. 数据入库二、矢量数据打包为GeoPackage1. 加载shp文件2. 使用QGIS打包图…

微信键盘好用吗?

相信大家在手机上已经安装了一款自己比较熟练使用地输入法&#xff0c;最近微信推出了微信键盘&#xff0c;作为一名产品经理&#xff0c;当然不能错过试用它&#xff0c;我在第一时间下载进行了使用&#xff0c; 下面是我使用了几天的感受&#xff0c;与大家分享一下。 一、体…

2023年5大网络安全趋势加速发展

©网络研究院 Netwrix发布了2023年将影响各种规模组织的关键网络安全趋势。以下是你需要注意的五个具体趋势: 网络犯罪的业务将进一步专业化 Emotet、Conti和Trickbot等恶意软件的回归表明网络雇佣犯罪的扩张。特别是&#xff0c;勒索软件即服务的增长使没有深厚技术技能…

VSCode 最全实用插件

一、必备插件 &#x1f33e;Chinese&#xff08;中文&#xff09; Settings Sync&#xff08;配置同步到云端&#xff09; 可以让我们的vscode配置同步到云端&#xff0c;当我们跟换电脑或者再次安装vscode的时候&#xff0c;只需要登录账号即可同步配置了 wakatime&#xf…

Linux_日志

1.日志的介绍 1.日志文件是重要的系统信息文件 ,其中记录了许多重要的系统事件,包括用户的登录信息、系统的 启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。 2.日志对于安全来说也很重要 &#xff0c;它记录了系统每天发生的各种事情,通过日志来检查错误发生的…

Golang 【basic_leaming】3 流程控制

阅读目录Go 语言 if else (条件判断)Go 语言 if else 条件判断代码示例if 的特殊写法Go 语言 for&#xff08;循环&#xff09;for 循环 - 初始语句for 循环 - 条件表达式1 更美观的死循环写法2 只有一个条件的 for 循环for 循环 - 结束语句Go 语言 for range (键值循环)for ra…

前端自动化测试精讲

单元测试 端对端测试 持续集成方案&#xff0c;在项目中落地前端自动化测试 作者介绍 祯民&#xff0c;字节跳动前端开发工程师&#xff0c;掘金小册《SSR实战&#xff1a;官网开发指南》作者&#xff0c;公众号「祯民讲前端」作者。曾负责 抖音前端技术团队官网 和 字节官网…

RV1126笔记十二:实现RTMP单路拉流

若该文为原创文章,转载请注明原文出处。 一、介绍 相比推流,拉流就简单了一点,只需要连接RTMP服务器,获取流,把数据解码出来显示和播放就可以,使用的是易百纳板子,测试时音频输出是不正常的,所以只解析了视数据,不处理音频。如果想测试音频,建议用其他开发板,正点…

TikTok 加速团结独立站,跨境电商的又一次红利期?

TikTok近年来在国际上非常流行。2021年8月&#xff0c;TikTok的全球下载量首次超过Facebook&#xff0c;成为全球最大的下载量。TikTok的诞生打破了海外社交媒体的垄断&#xff0c;TikTok营销成为许多跨境卖家的重点之一。 封号事件发生后&#xff0c;许多跨境卖家开始向独立站…

我的周刊(第071期)

我的信息周刊&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。&#x1f3af; 项目Free-TVUrl-Merge[1]免费 TvBox 影视站聚合&#xf…

H7068 DIGITAL SYSTEMS AND MICROPROCESSOR DESIGN: COURSEWORK 2022 verilog-仿真

内容: 给cpubank写testbench: 1.the testbench have test a variety of operations the sequence described: i) Reset: The test bench should first reset the register bank. The reset is synchronous. It should also set rrd1, rrd2, d, rwr, rwren to zero. ii) Stor…

自然语言处理NLP——图神经网络与图注意力模型(GNN、GCN、GAT)

目录 系列文章目录 一、图神经网络 1.图与图嵌入 2.GNN动机 2.1 CNN的缺陷与非结构性数据 2.2 图嵌入的缺陷 3.GNN详解 3.1 GNN简介 3.2 GNN模型 3.3 GNN框架 3.4 GNN局限与优化 二、图卷积神经网络 1.卷积 2.GCN详解 2.1 GCN动机 2.2 GCN简介 2.3 GCN思想与模…

前端(htmlCSSJavaScript)基础

关于前端更多知识请关注官网&#xff1a;w3school 在线教程全球最大的中文 Web 技术教程。https://www.w3school.com.cn/ 1.HTML HTML(HyperText Markup Language)&#xff1a;超文本标记语言 超文本&#xff1a;超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息…

Xcode 如何在 silicon Mac 上调试 iOS 版本的 App

功能需求 自从 M1 处理器 Mac 推出以后,我们可以用原生方式在 silicon Mac 系统上运行 iPhone 或 iPad 上的 App。 然而,当发现上架后的 iPhone / iPad App 在 silicon Mac 上运行表现异常时,我们如何在 Xcode 中调试它们呢?比如:在 silicon Mac 中 SwiftUI 弹出的 shee…