在龙芯2K500/2K1000上使用OpenWRT

OpenWrt 简述

OpenWrt是一个为嵌入式设备(通常是无线路由器)开发的高扩展度的GNU/Linux发行版。 与许多其他路由器的发行版不同,OpenWrt是一个完全为嵌入式设备构建的功能全面、 易于修改的由现代Linux内核驱动的操作系统。 在实践中,这意味着您可以得到您需要的所有功能,却仍能避免臃肿。

OpenWrt不是一个单一且不可更改的固件,而是提供了具有软件包管理功能的完全可写的文件系统, 让您通过使用适配任何应用的软件包来定制设备。 对于开发人员来说,OpenWrt是一个无需围绕它构建完整固件就能开发应用程序的框架; 对于普通用户来说,这意味着拥有了完全定制的能力,能以意想不到的方式使用该设备。

OpenWrt官方网站:https://openwrt.org

OpenWrt官方Git仓库:https://github.com/openwrt/openwrt

1. 如何编译

从BSP 包的文件系统目录下找到OpenWrt 的源码并解码。
BSP 下载:开发板资料 提取码:1111

##源码中已包含2k500和2k1000板卡的配置
##2k500的配置名为loongson_2k500_config
##2k1000的配置名为loongson_2k1000_config
##此处以2k500为例
$ 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 的各项参数

  1. 初步适配参数
    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
  1. 加入系统性宏选择

为了快速选择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 即可,如果遇到复杂的网络定制需求,可通过以下步骤排查实现

  1. openwrt 网络配置由 /etc/config/network 决定
  2. /etc/config/network 在运行时由 /etc/board.d/02_network/bin/config_generate 相互作用后生成,在定制时可以通过修改这两个文件达成目标
  3. /etc/board.d/02_networkucidef_set_interface_lan 会指定 lan 口, ucidef_set_interface_wan 指定 wan 口, ucidef_set_interfaces_lan_wan 同时指定 lan wan 口
  4. /bin/config_generategenerate_network 函数可指定 IP

2.3 适配新CPU

  1. 当有新的CPU板卡适配时,我们可以在 target/linux/loongson/MakefileSUBTARGET 中加入新CPU型号,比如 ls2k2000
    同时创建ls2k2000image/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
@@ -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
  1. 进入 target/linux/loongson/ls2k2000 目录,创建 target.mk config-5.10 base-file

target.mk 能生成 menuconfig 可见的选项
config-5.10linux-5.10 源码的配置文件
base-fileopenwrt 系统相关配置文件,可以直接复制

$ 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 ./
  1. 进入 target/linux/loongson/image 目录,创建 ls2k2000.mk 文件指定文件系统类型,比如 FILESYSTEMS += ubifs 会生成 ubifs 文件,基本上复制即可
  2. make menuconfig 能在 Subtarget Target Profile 中看到相关选项

2.4 添加软件包

在运行 ./scripts/feeds update -a ./scripts/feeds install -a 后,绝大多数软件包都能在 menuconfig 中找到
目前尚未新增不在 feeds 中的软件

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值