LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 690|回复: 0

SuperWRT开发基础介绍

[复制链接]
发表于 2024-1-5 17:52:13 | 显示全部楼层 |阅读模式
SuperWRT是一基于Linux的无线路由器系统。

在SuperWRT之前已经有好多的第三方路由器系统,其中OpenWRT、DD-WRT、Tomato、RouterOS较为著名。当然还有一些基于它们开发的,或其它的小众系统。

SuperWRT希望走和之前的系统略有不同的路线,主要是下面几点:

更加稳定,仅提供必要功能,但保证更好的稳定性及性能。
友好的开发接口及扩展架构。
提供配套的集中管理平台。
SuperWRT系统环境
定制版本uboot
SuperWRT为了保证更友好升级特性,及全面的用户体验,开发了定制版本的uboot,SuperWRT系统需要与该uboot配合使用。

定制版本的uboot主要提供了以下特殊功能:

SuperWRT系统完整性校验。
传递设备硬件信息(SBI)给SuperWRT系统。
当系统升级失败后,通过读取系统配置,自动通过WAN连接重新尝试升级。
当系统启动失败后,通过读取系统配置,自动通过WAN连接下载恢复升级包并恢复系统。
其它的一些必要的升级及管理功能。
uboot中功能的使用,请参考:uboot使用说明

设备硬件信息
SuperWRT通过SBI(SuperWRT Board Info)存储设备硬件信息。通过使用SBI,SuperWRT系统及定制的uboot,可以适配不同的设备。

目前SBI通过在线定制uboot的系统,与uboot一起打包下载。

当然,SuperWRT系统也支持将SBI信息绑定在系统中。但目前我们不建议使用该方式,主要是因为,这样SuperWRT系统的版本必须针对该设备进行特殊打包处理,不利于后面的长期维护。

SuperWRT系统分区结构
SuperWRT默认使用firmware分区作为系统分区,使用该分区时,可以将linux kernel及rootfs放在一个分区内,在kernel后以8字节对齐方式加入rootfs。

SuperWRT也支持单独的kernel分区和rootfs分区,在升级时,如果发现没有firmware分区,会自动将系统文件拆分到kernel及rootfs分区。

SuperWRT的启动过程
提示:这里主要针对SuperWRT系统特殊的地方进行说明。

首先,通过芯片会运行定制版本的uboot。uboot会进行如下工作:

根据读取到芯片型号,自动进行相应配置(如:时钟频率,DDR,PCIE等)。
加载SBI信息,并进行相应初始化。
全部初始化工作完成后,进入uboot的主任务。
判断复位按键是否长按,如长按则等待,等待5s后,进入网页恢复系统功能。
判断用户是否按键中断系统启动,如是,则进行uboot命令行。
读取配置,判断是否需要使用WAN口升级系统。
解压linux内核到内存,并判断完整性,如正确则启动linux系统,将传递启动信息及SBI给linux系统。如文件破损,则读取配置,看是否有恢复文件URL及WAN连接信息使用,如有则使用WAN口恢复,如无,则进入网页恢复系统功能。
然后,启动时linux kernel会进行如下工作:

读取SBI信息,初始化相应的硬件。
如果使用firmware分区,则尝试定位rootfs位置,找到后设为rootfs用分区。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表