OpenWrt 简述
OpenWrt是一个为嵌入式设备(通常是无线路由器)开发的高扩展度的GNU/Linux发行版。 与许多其他路由器的发行版不同,OpenWrt是一个完全为嵌入式设备构建的功能全面、 易于修改的由现代Linux内核驱动的操作系统。 在实践中,这意味着您可以得到您需要的所有功能,却仍能避免臃肿。
OpenWrt不是一个单一且不可更改的固件,而是提供了具有软件包管理功能的完全可写的文件系统, 让您通过使用适配任何应用的软件包来定制设备。 对于开发人员来说,OpenWrt是一个无需围绕它构建完整固件就能开发应用程序的框架; 对于普通用户来说,这意味着拥有了完全定制的能力,能以意想不到的方式使用该设备。
OpenWrt官方网站:https://openwrt.org
OpenWrt官方Git仓库:https://github.com/openwrt/openwrt
1. 如何编译
从BSP 包的文件系统目录下找到OpenWrt 的源码并解码。
#
#
#
#
$ cp configs/loongson_2k500_config .config
$ make -j24
可以选择 V=sc 打印编译 log:
$ make V=sc -j24
编译成功之后会在 bin/target/loongson/ls2k500
下生成openwrt-loongson-ls2k500-loongson_gd_ls2k500_mini-ubifs-root.ubi
文件,将其改名为rootfs-ubifs-ze.img
后烧录到板卡即可。
直接复制保存config
$ cp .config .configs/xxx_config
注意:
./scripts/feeds 已固化,不需要再运行以下命令:
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a
2. 二次开发
2.1 修改UBIFS页大小
在不同的开发板上可能使用不同页大小NAND,这时候就要修改 UBIFS 的各项参数
- 初步适配参数
在 target/linux/loongson/image
对应的 .mk
中修改 BLOCKSIZE、PAGESIZE、SUBPAGESIZE、UBIFS_OPTS
。
以下是一个2K页、64页一块的NAND配置参数:
PAGESIZE = SUBPAGESIZE = 2048(2k)
BLOCKSIZE = PAGESIZE * 64 = 128k
UBIFS_OPTS -m = PAGESIZE = 2048(2k)
UBIFS_OPTS -e = LEBSIZE = PAGESIZE * 62 = 0x1f000 (124k)
UBIFS_OPTS -c = 230M / LEBSIZE = 1900
UBIFS_OPTS := -m 2048 -e 0x1f000 -c 1600
define Device/loongson_gd_ls2k500_mini
DEVICE_VENDOR := Loongson(GD)
DEVICE_MODEL := LS2K500 Mini
SOC := ls2k500
UBOOT_DEVICE_NAME := ls2k500_mini_dp
IMAGE/sysupgrade.img.gz := boot-common | boot-script ls2k500_mini | gzip | append-metadata
IMAGES := root.ubi
IMAGE/root.ubi := append-ubi
BLOCKSIZE := 128k
PAGESIZE := 2048
SUBPAGESIZE := 2048
FILESYSTEMS += ubifs
endef
- 加入系统性宏选择
为了快速选择UBIFS参数,我们用宏来控制,
make menuconfig
可以在 Target Images -> ubifs -> Nand Page Size
中选择
如果要新增选项,在 config/Config-images.in
的 "Nand Page Size"
Choice 中添加
$ vim config/Config-images.in
...
198 choice
199 prompt "Nand Page Size"
200 depends on TARGET_ROOTFS_UBIFS
201 help
202 Select Nand page size
203
204 config NAND_PAGE_SIZE_2K
205 bool "2KiB"
206
207 config NAND_PAGE_SIZE_4K
208 bool "4KiB"
209 endchoice
...
2.2 网络定制,修改 LAN IP
修改宏 LOONGSON_LAN_IPADDR 即可,如果遇到复杂的网络定制需求,可通过以下步骤排查实现
- openwrt 网络配置由
/etc/config/network
决定
/etc/config/network
在运行时由 /etc/board.d/02_network
与 /bin/config_generate
相互作用后生成,在定制时可以通过修改这两个文件达成目标
/etc/board.d/02_network
中 ucidef_set_interface_lan
会指定 lan 口, ucidef_set_interface_wan
指定 wan 口, ucidef_set_interfaces_lan_wan
同时指定 lan wan 口
/bin/config_generate
中 generate_network
函数可指定 IP
2.3 适配新CPU
- 当有新的CPU板卡适配时,我们可以在
target/linux/loongson/Makefile
的 SUBTARGET
中加入新CPU型号,比如 ls2k2000
同时创建ls2k2000
、image/ls2k2000.mk
文件(夹)
$ git diff
diff --git a/target/linux/loongson/Makefile b/target/linux/loongson/Makefile
index 8442e19f..740a94c9 100644
--- a/target/linux/loongson/Makefile
+++ b/target/linux/loongson/Makefile
[url=home.php?mod=space&uid=1999721]@@[/url] -6,7 +6,7 @@ ARCH:=loongarch64
BOARD:=loongson
BOARDNAME:=Loongson
FEATURES:=ext4 usb display rootfs-part boot-part ubifs
-SUBTARGETS:=ls2k500 ls2k1000
+SUBTARGETS:=ls2k500 ls2k1000 ls2k2000
KERNEL_PATCHVER=5.10
$ mkdir target/linux/loongson/ls2k2000
$ touch target/linux/loongson/image/ls2k2000.mk
- 进入
target/linux/loongson/ls2k2000
目录,创建 target.mk config-5.10 base-file
target.mk
能生成 menuconfig
可见的选项
config-5.10
是 linux-5.10
源码的配置文件
base-file
是 openwrt
系统相关配置文件,可以直接复制
$ cat target.mk
BOARDNAME:=LS2K2000 boards (64 bit)
CPU_TYPE :=ls2k2000
define Target/Description
Build firmware image for Loongson(GD) LS2K2000 devices.
This firmware features a 64 bit kernel.
endef
$ cp <ls2k2000-linux-5.10-source-dir>/.config config-5.10
$ cp -r ../ls2k1000/base-files ./
- 进入
target/linux/loongson/image
目录,创建 ls2k2000.mk 文件指定文件系统类型,比如 FILESYSTEMS += ubifs 会生成 ubifs 文件,基本上复制即可
make menuconfig
能在 Subtarget
与 Target Profile
中看到相关选项
2.4 添加软件包
在运行 ./scripts/feeds update -a
./scripts/feeds install -a
后,绝大多数软件包都能在 menuconfig
中找到
目前尚未新增不在 feeds 中的软件