OpenWrt 系统分析

包管理器opkg

OpenWrt自带包管理器 opkg ,可以安装各种扩展为ipk的二进制软件包,类似Debian的apt-get和CentOS的yum。

opkg常用操作:

# 更新本地软件列表
opkg update

# 可以直接安装本地包
opkg install <pkg>
opkg remove <pkg>

# 列出已安装的包
opkg list-installed

# 列出包里的文件
opkg files <pkg>

# 查找包含文件的包,path必须是绝对路径
opkg search <path>

# 查找软件包
opkg find <regex>

opkg的配置文件位于 /etc/opkg.conf ,例如:

src/gz base http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base/
src/gz luci http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/luci/
src/gz packages http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/packages/
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
arch all 100
arch mt7620a 200

其中:

  • src/gz: 指定软件源的地址,可以有多个。OpenWrt的官方源可以在 OpenWrt Downloads 找到,选择源的时候注意使用合适的Build Target和Subtarget。小米路由器mini应该选用ramips/mt7620(a)。 1 软件源也可以是 file:///path/to/pkgs/dir 协议的本地目录。
  • dest: 指定安装位置,默认装在根目录下,可通过opkg的 -d 选项来选择其他配置里的目录。
  • lists_dir: 指定软件列表的位置。
  • overlay_root: 当使用overlayfs时,指定overlay分区的位置,以检查是否还有可用空间,仅当dest为root时有用。
  • arch: opkg默认只支持架构无关(all)和已安装target架构的软件包,但也可以使用本命令引入其他target的包,最后的数字是安装优先级,越小优先级越高。

flash分区布局

详细内容可参考 The OpenWrt Flash Layout 。下面以新安装的PandoraBox为例,简要介绍其分区布局。

小米路由器mini自带128M内存和16M flash,OpenWrt将flash设备抽象为 MTD 。以新安装的PandoraBox为例:

cat /proc/mtd

dev:    size        erasesize   name
mtd0:   00030000    00010000    "u-boot"
mtd1:   00010000    00010000    "u-boot-env"
mtd2:   00010000    00010000    "Factory"
mtd3:   01000000    00010000    "fullflash"
mtd4:   00f80000    00010000    "firmware"
mtd5:   001230fb    00010000    "kernel"
mtd6:   00e3cf05    00010000    "rootfs"
mtd7:   00860000    00010000    "rootfs_data"
mtd8:   00020000    00010000    "panic_oops"
mtd9:   00010000    00010000    "culiang-crash"
mtd10:  00010000    00010000    "culiang-reserved"
mtd11:  00010000    00010000    "culiang-Bdata"
整个flash设备被分成了12个区,通过 dmesg | egrep '0x[a-z0-9]{12}' 可以查看各个分区的始末地址:
0x000000000000-0x000001000000 : "fullflash"
0x000000000000-0x000000030000 : "u-boot"
0x000000030000-0x000000040000 : "u-boot-env"
0x000000040000-0x000000050000 : "Factory"
0x000000050000-0x000000fd0000 : "firmware"
0x000000050000-0x0000001730fb : "kernel"
0x0000001730fb-0x000000fb0000 : "rootfs"
0x000000750000-0x000000fb0000 : "rootfs_data"
0x000000fb0000-0x000000fd0000 : "panic_oops"
0x000000fd0000-0x000000fe0000 : "culiang-crash"
0x000000fe0000-0x000000ff0000 : "culiang-reserved"
0x000000ff0000-0x000001000000 : "culiang-Bdata"

整个flash的布局大致如下图所示:

|----------------------------------------------------------------------------------------------------------------------------|
|                                              mtd3: fullflash                                                               |
|----------------------------------------------------------------------------------------------------------------------------|
|mtd0: u-boot | mtd1: u-boot-env | mtd2: Factory |                        mtd4: firmware                      | mtd9 ~ mtd11 |
|-------------|------------------|---------------|-----------------------------------------|------------------|--------------|
|                                                | mtd5: kernel |         mtd6: rootfs     | mtd8: panic_oops |              |
|                                                |--------------|--------------------------|------------------|              |
|                                                               | /rom | mtd7: rootfs_data |                                 |
|----------------------------------------------------------------------------------------------------------------------------| 

其中,各个分区的用处如下:

  • u-boot 分区保存启动器代码。
  • u-boot-env 分区保存操作系统的一些关键环境变量,以供下次启动使用,可以使用 strings /dev/mtd1 查看。这应该是刷机之前的那个Config分区。
  • Factory分区,保存了以太网卡的mac地址,另外据说还保存了无线AP的频率校准参数,很有必要备份一下。
  • kernel分区保存系统内核。
  • rootfs分区挂载根文件系统,起始的一部分是只读部分。
  • rootfs_data分区挂载JFFS2文件系统,挂载于/overlay。
  • panic_oops分区应该是mtdoops模块记录内核panic/oops信息的地方。
  • mtd9 ~ mtd11这三个 culiang- 开头的分区应该就是刷机之前的crash, reserved和Bdata分区,culiang(粗粮)是指小米来着。这里保存的应该是小米自己的配置和数据,culiang-Bdata也可以用 strings /dev/mtd11 查看,包含model,CountryCode和SN等。

overlayfs文件系统

还是以新安装的PandorasBox为例,介绍下文件系统,具体内容可参考 OpenWrt Filesystems

本文章由作者:佐须之男 整理编辑,原文地址: OpenWrt 系统分析
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐