事先了解openwrt系统,不单单要了解是mtk7620的芯片,更要了解路由器型号(HC5661)
https://openwrt.org/start?id=zh/downloads
https://blog.csdn.net/dxt1107/article/details/81609033
编译一个可以安装的OpenWrt固件镜像文件(大约8MB大小的),你需要:
一个纯净的OpenWrt编译系统大约需要200MB的空间。
一个包含feeds的OpenWrt编译系统大约需要300MB的空间。
编译feeds中的软件包大约需要2.1GB的空间用于存放下载来的源代码。
构建OpenWrt并生成固件文件需要大约3-4 GB的空间。
编译OpenWrt需要大约1-4 GB的内存。
更推荐64位的16.04的ubuntu系统
openwrt项目是针对嵌入式设备的linux操作系统.openwrt不是一个单一且不可更改的固件,而是提供了具有软件包管理功能的完全可写的文件系统.这样我们就可以不使用供应商提供的应用程序选择和配置,而是通过使用软件包来定制设备以适应任何应用程序.对于开发人员来说,openwrt是一个无需围绕它来构建完整固件就能开发应用程序的框架;对于用户来说,这意味着拥有了完全定制的能力,能以想象不到的方式使用该设备.
在64位ubuntu系统16.04中
#sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
否则luci包找不到,该过程可能比较慢,需要从openwrt网站clone, 执行以下命令
make package/symlinks
LUCI是openwrt默认的GUI
这部分很多源码的链接已经失效,而且部分源码下载实在github上,下载速度慢需要,但是该源码14M多点,迅雷下载也能下载好.
推荐下载地址:
https://github.com/openwrt/openwrt
推荐阅读:
https://www.cnblogs.com/shudai/p/3256534.html
必须使用非root用户进行操作,添加一个普通用户。(注意:如果使用root进行操作的话,会提示检查失败:Checking ‘non-root’… failed.)
[root@localhost trunk]# adduser openwrt
[root@localhost trunk]# su openwrt
为了防止文件读写权限造成问题,需要将源码copy到openwet的根目录下进行所有操作。
cd /home/openwrt
./scripts/feeds update -a
./scripts/feeds install -a
在编译过程中,程序会自动通过feed机制,在网上下载相应的依赖文件,这要求编译者所在网络环境良好!
进行环境检查,查看编译所需依赖库是否都安装:
make defconfig
若提示有某个依赖库没有安装,请按照提示按照对应的依赖库. 直到上述检查无返回。
(PS部分返回libpam,找不到该安装方式,可以忽略)
make menuconfig
在Target System中选择 MediaTek Ralink MIPS
在Subtarget中选择 MT7620 based boards
Target Profile选择 HiWiFi HC5661
选择web服务器
别忘记勾选中文:
LuCI–>2.Modules–>Translations–>Chinese(zh-cn)
需要额外选择的:
Build the openwrt image builder
Build the openwrt SDK
Package the openwrt-based toolchain
是为了能够在后面的比如应用开发中,使用到该toolchain工具链进行开发,故而一次性编译出来更加方便!
弄完之后save,保存为.config退出
使用以下命令即可!(使用3核处理器编译,其实还是很慢,即便你把我的包也拷贝了)
make V=99
在编译根目录下会有一个dl的目录,这个目录其实是“download”的简写,在编译前期,需要从网络下载的数据包都会放在这个目录下,这些软件包的一个特点就是,会自动安装在所编译的固件中,也就是我们make menuconfig的时候,为固件配置的一些软件包。如果我们需要更改这些源码包,只需要将更改好的源码包打包成相同的名字放在这个目录下,然后开始编译即可。编译时,会将软件包解压到build_dir目录下。
当然,你也可以自己在dl里面创建自己的软件包,然后更改相关的配置文件,让openwrt可以识别这个文件包。
成功编译后生成的固件地址
/home/openwrt/openwrt-master/bin/targets/ramips/mt7620
1.切换到root用户下.
2.添加sudo文件的写权限,命令是:
chmod u+w /etc/sudoers
3.编辑sudoers文件
vi /etc/sudoers
找到这行 root ALL=(ALL:ALL) ALL,在他下面添加xxx ALL=(ALL:ALL) ALL (这里的xxx是你的用户名)
4.撤销sudoers文件写权限,命令:
chmod u-w /etc/sudoers
这样普通用户就可以使用sudo了.
修改源配置文件
本人原来的源下载使用suhu的源,现在改成阿里云的源
先备份原来的配置文件
mv /etc/apt/sources.list /etc/apt/sources.list.bak
vim /etc/apt/sources.list
将Ubuntu镜像点添加到配置文件
可阅读该文档复制其阿里云的源链接.
https://blog.csdn.net/qq_35451572/article/details/79516563
正常下载渠道是非常漫长的,有条件可,或者迅雷(相对快点);
如果不觉得麻烦也可以使用root用户,编译时后加FORCE_UNSAFE_CONFIGURE =1
即:make V=99 FORCE_UNSAFE_CONFIGURE =1
编译后加V=99打印编译日志,用于检错打印错误信息.
即:make V=99
因为dl目录下面的安装包从我这拷贝过去的,所以需要修改权限,sudo chmod -R 777 dl即可.
问题出现: /bin/bash: line 1: 49340 Killed Makefile:2278: recipe for target ‘s-automata’ failed
解决方法:将内存加到3G足够,顺便把内核加到4核
推荐阅读:
https://www.right.com.cn/forum/thread-161906-1-1.html
采用breed代替普通bootloder
Breed是不死的,界面是优化好的,编译好的固件可以直接在网上烧入进去
5.1 改动提示
推荐阅读:
https://blog.csdn.net/qq_35650017/article/details/83896284
官方提供的固件,闪存只识别为8M,所以要修改为16M的闪存.
5.2 代码改动
该目录文件地址:
\target\linux\ramips\dts\PSG1218.dtsi
m25p80@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <10000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x0 0x30000>; //这里uboot启动从0地址不用改
read-only;
};
partition@20000 {
label = "u-boot-env";
reg = <0x30000 0x10000>; //uboot 环境变量地址不用改
read-only;
};
factory: partition@30000 {
label = "factory";
reg = <0x40000 0x10000>;
read-only;
};
partition@40000 {
label = "firmware";
reg = <0x50000 0x7b0000>; //这里的固件大小需要改
};
};
};
其中firmware的固件地址大小改成:
Reg = <0x50000 0xfb0000> wq退出即可
/bin/targets/ramips/mt7620
既有openwrt检查工具链
openwrt-toolchain-ramips-mt7620_gcc-7.4.0_musl.Linux-x86_64.tar.bz2
sudo tar -jxvf OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_musl-1.1.10.Linux-i686.tar.bz2 -C /opt/wkspace
cd /opt/openwrt-toolchain-ramips-mt7620_gcc-7.4.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.4.0_musl/bin/
export PATH=/opt/wkspace/openwrt-toolchain-ramips-mt7620_gcc-7.4.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.4.0_musl/bin/:$PATH
export STAGING_DIR=/opt/wkspace/openwrt-toolchain-ramips-mt7620_gcc-7.4.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.4.0_musl/
mipsel-openwrt-linux-
输入以上指令,双击tab键两下,即为安装成功
为了方便linux与window与开发板交互,选择了共享文件目录的方式进行开发
当然还有其他更好的方法,这里仅作抛砖引玉
cd /mnt/hgfs/myshare/openwrt系统开发/openwrthelloworld
touch hello.c
vi hello.c //添加打印内容,内容随意.wq
mipsel-openwrt-linux-gcc hello.c -o hello
即生成了我们需要的hello文件,可以在开发板上运行.
考虑到开发板与windows链接是通过有线连接的,故采用winscp工具非常有用
输入文件协议:
SCP
输入开发板ip地址,端口号:
192.168.1.1 22
输入管理员账号密码:
Root 1
链接成功,可直接拖曳传输文件信息
给文件添加可执行属性
直接执行 该文件是没有权限的
添加执行属性
Chmod 667 hello
运行
./hello
这是非官方提供的针对hc561路由器的固件地址:
http://downloads.openwrt.org/releases/18.06.2/targets/ramips/mt7620/openwrt-18.06.2-ramips-mt7620-hc5661-squashfs-sysupgrade.bin
这个是官方提供的针对hc5661路由器的固件地址:
https://downloads.openwrt.org/releases/18.06.2/targets/ramips/mt7620/
Breed下载网址:
https://breed.hackpascal.net/breed-mt7620-hiwifi-hc5761.bin
对应的breed为:
breed-mt7620-hiwifi-hc5761.bin 极路由 极壹S (HC5661)/极贰 (HC5761) 专用,波特率 115200,复位键 GPIO#12