前言
博主使用的是 Lean 大佬的源码编译
恩山论坛上有很多用户编译好的现成固件,自己编译固件最大的优势是可以根据需求更好的自定义,建议没有特别需求的用户还是直接选用现成的固件即可。编译固件也是一种乐趣,首次编译整个过程大约3小时以上,需要耐心等待。编译不要使用 root 用户!会导致编译失败
环境要求
1.系统版本
Debian 或者 Ubuntu
内存 4G 起步,硬盘 64G 起步
博主自己用到是Ubuntu20
2.网络要求
得有梯子 博主自己原先编译网络环境不好经常折腾很久结果因为网络问题编译失败 所以编译前请自己测试好网络环境
3.编译依赖
# 升级
sudo apt update -y
sudo apt full-upgrade -y
# 安装依赖
sudo apt install -y ack antlr3 aria2 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip libpython3-dev qemu-utils \
rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
# 清理
sudo apt autoremove --purge
sudo apt clean
开始编译
1.拉取源码,拉取 Lean 大佬的 LEDE 分支源码
git clone https://github.com/coolsnowwolf/lede
cd lede
2.添加软件源,L大源码里默认有四个软件源里面包含了大部分常用插件,如果要添加其他没有的插件则需要自行添加软件源至 feeds.conf.default 文件,当然也可以单独添加某个插件 这里我添加了https://github.com/haiibo/openwrt-packages
编辑源列表添加命令
vim feeds.conf.default
#按键盘i键进入编辑 按ESC键输入:wq保存退出
3.更新订阅源的软件包
#更新软件包
./scripts/feeds update -a
#安装软件包
./scripts/feeds update -a
#以上两条命令图快可以直接
./scripts/feeds update -a && ./scripts/feeds install -a
4.自定义配置(如无需求可以忽略此步骤) 我这里把路由器默认ip改成了192.168.99.1 默认编译出来的地址是192.168.1.1
# 修改默认IP为 192.168.99.1
sed -i 's/192.168.1.1/192.168.99.1/g' package/base-files/files/bin/config_generate
# 修改默认Openwrt主机名改为Y1s(文件在 package/base-files/files/bin/config_generate)
sed -i '/uci commit system/i\uci set system.@system[0].hostname='Y1s'' package/lean/default-settings/files/zzz-default-settings
执行 make menuconfig 命令
**5.进入编译菜单 这里尽量把窗口拉大一些 不然会报错
空格键选择 按ESC键两次退出**
make menuconfig
6.菜单简要说明:
# 选择 CPU 类型
Target System (MediaTek Ralink MIPS) --> # 软路由选择 x86,硬路由根据型号厂家自行选择
Subtarget (MT7620 based boards) --> # CPU 子选项
Target Profile (Lenovo Y1S) --> # 厂家具体型号
# 设置镜像编译的格式(squashfs,ext4)
Target Images --> # 默认 squashfs
# 添加较多插件时,为了避免空间不足,建议修改下面两项默认大小
Target Images --> (16) Kernel partition size (in MB) # 建议默认
Target Images --> (160) Root filesystem partition size (in MiB) # 建议默认
# 开启 IPv6 支持
Extra packages --> ipv6helper(选定这个后,下面几项会自动选择)
Network --> odhcp6c
Network --> odhcpd-ipv6only
LuCI --> Protocols --> luci-proto-ipv6
LuCI --> Protocols --> luci-proto-ppp
# 开启适用于 VMware 的 VMware Tools
Utilities --> open-vm-tools
Utilities --> open-vm-tools-fuse
# 选择插件
LuCI --> Applications # 根据需要选择,* 代表编入固件,M 表示编译成模块或者IPK包,为空表示不编译
# 选择主题
LuCI --> Themes # 选择喜欢的主题,可以选多个
# 其他选项一般不需要调整,如感兴趣可以自行了解
如果需要添加USB支持需要的东西如下
1. 添加USB相关支持
Kernel modules —> USB Support —> <*> kmod-usb-core.
Kernel modules —> USB Support —> <*> kmod-usb-ohci.
Kernel modules —> USB Support —> <*> kmod-usb-uhci.
Kernel modules —> USB Support —> <*> kmod-usb-storage. #安装usb存储设备驱动
Kernel modules —> USB Support —> <*> kmod-usb-storage-extras.
Kernel modules —> USB Support —> <*> kmod-usb2.0 ##usb2.0
Kernel modules —> USB Support —> <*> kmod-usb3.0 ##usb3.0
2.添加SCSI支持
Kernel modules —> Block Devices —> <*>kmod-scsi-core
3.添加文件系统支持
此处可根据自己的需求选择插件,
请注意绝对不要选择kmod-fs-ntfs,否则NTFS格式U盘是只读模式。要想正常,请选4中的插件。
Kernel modules —> Filesystems —> <*> kmod-fs-ext4 (移动硬盘EXT4格式选择)
Kernel modules —> Filesystems —> <*> kmod-fs-vfat(FAT16 / FAT32 格式 选择)
Kernel modules —> Filesystems —> <*> kmod-fuse
4.挂载NTFS
Utilities —> Filesystem —> <*> ntfs-3g
5.添加中文支持编码
Kernel modules —> Native Language Support —> <*> kmod-nls-cp437
Kernel modules —> Native Language Support —> <*> kmod-nls-iso8859-1
Kernel modules —> Native Language Support —> <*> kmod-nls-utf8
Utilities ---> disc ---> <*> fdisk.................................... 磁盘分区工具
Utilities ---> <*> usbutils................................... USB devices listing utilities
6.添加USB挂载
Base system —> <*>block-mount
Utilities —> Filesystem —> <*> badblocks 自动挂载工具
首次编译尽量默认精简固件以免报错
插件中文对应表 取自恩山 https://www.right.com.cn/forum/thread-3682029-1-1.html
配置完成后使用编译菜单底部的 Save 保存,然后退出菜单 Exit,开始下载软件包
# 预下载编译所需的软件包
make download -j8 V=s
# 检查文件完整性
find dl -size -1024c -exec ls -l {} \;
# 检查文件完整性命令可以列出下载不完整的文件,小于1k的文件属于下载不完整,如果存在则用下面的命令删除,
然后重新下载编译所需的软件包,再次检查
# 确认所有文件完整可大大提高编译成功率,避免浪费时间
find dl -size -1024c -exec rm -f {} \;
最后编译固件
#首次请用单线程跑一次
make V=s -j1
#二次编译可以使用多线程 命令如下
# nproc 表示自动计算出你用编译机器的内核线程数
# -j$(nproc) 表示以编译机器的内核线程数编译。
make -j$(nproc) V=s
编译成功如下图 报错请自行上网排查 固件输出位置在 主文件夹/lede/bin/targets/ramips/你的设备名称
以上文章部分参考
https://jmdonj.com/%E7%BC%96%E8%AF%91openwrt.html
https://www.right.com.cn/forum/thread-8003231-1-1.html
博主因为更改了硬件 换了64M闪存 所以还需更改两个文件 默认硬件请忽略此步骤
修改OpenWrt源码编译支持64MB FLASH的固件,打开你Git的OpenWrt源码目录lede/target/linux/ramips/dts找到mt7620a_lenovo_newifi-y1.dtsi
修改: partition@50000 {
compatible = "denx,uimage";
label = "firmware";
reg = <0x50000 0x3fb0000>;
打开lede/target/linux/ramips找到mt7620.mk
修改: define Device/lenovo_newifi-y1s
SOC := mt7620a
IMAGE_SIZE := 64225k
DEVICE_VENDOR := Lenovo
DEVICE_MODEL := Y1S
DEVICE_PACKAGES := kmod-mt76x2 kmod-usb2 kmod-usb-ohci
SUPPORTED_DEVICES += y1s
endef
TARGET_DEVICES += lenovo_newifi-y1s
这样保存后重新编译的固件就支持64MB FLASH了。
评论(0)