OpenWrt教程

您所在的位置:网站首页 openwrt刷机教程看不懂 OpenWrt教程

OpenWrt教程

2023-04-07 06:01| 来源: 网络整理| 查看: 265

linux内核支持动态加载模块,内核模块以.ko为后缀,在Linux系统中,内核模块放在/lib/modulex/x.x.x目录中,其中x.x.x为linux版本号

加载模块

insmod xxx.ko

如果带参数 insmod xxx.ko a=1

卸载模块

rmmod xxx.ko

支持的数据类型

bool :布尔类型

invbool:颠倒了值的bool类型

charp :字符指针类型,内存为用户提供的字符串分配

int:整型

long :长整型

short :短整型

uint :无符号整型

ulong :无符号长整型

ushort :无符号短整型

内核模块源码Makefile编写格式和linux源码的格式一样

在OpenWrt系统中,内核模块编译和应用层的package编译类似

make package/模块名/compile V=s

比如:

make package/hello_kernel/compile V=s

编译完成后会生成.ko文件,目录文件在build_dir中,但和应用层的build目录有点区别,内核模块的package放在linux目录,如(X86平台):

build_dir/target-x86_64_musl/linux-x86_64/

将编译完成的ko文件传输到OpenWrt系统中,注意编译平台和开发板平台的系统架构要一致。

简单的说,Linux是Unix克隆(Unix clone)或Unix风格(Unix alike)的操作系统(OS),在原代码级上兼容绝大部分Unix标准(指的是IEEE POSIX,System V,BSD),是一个支持多用户, 多进程,多线程,实时性较好的功能 强大而稳定的操作系统.它可以运行x86PC,Sun Sparc,Digital Alpha,680x0,PowerPC, MIPS等平台上,可 以说Linux是目前运行硬件平台最多的操作系统. Linux最大的特点在于它是GNU(Gnu's Not Unix----有点分形与混沌的意味----无限自包含,简单的说GNU是一种自由软件体系)的一员,遵循公共版权许可证(GPL),秉承 "自由的思想,开放的源码"的原则,成千上万的专家/爱好者通过Internet在不断地完善并维护它,可以说Linux是计算机爱好者自己的操作系统. 追述Linux的历史直到1990年,Linus Torvalds还是芬兰赫尔辛基大学的一名学生,最初是用汇编语言写了一个在80386保护模式下处理多任务切换的程序,后来从Minix(Andy Tanenbaum教授所写的很小的Unix操作系统,主要用于操作系统教学)得到灵感,进一步产生了自认为狂妄的想法----写一个比Minix更好的Minix,于是开始写了一些硬件的设备驱动程序,一个小的文件系统,......,这样0.0.1版本的Linux就出来了,但是它只具有操作系统内核的勉强的雏形,甚至不能运行,你必须在有Minix的机器上编译以后才能玩.这时候 Linus已经完全着迷而不想停止,决定踢开Minix,于是在1991年10 月5号发布Linux 0.0.2版本,在这个版本中已经可以运行bash(the GNU Bourne Again Shell----一种用户与操作系统内核通讯的软件)和gcc(GNU C 编译器).从一开始,Linus就决定自由扩散Linux,包括原代码,他在comp.os.minix新闻讨论组里发布Linux 0.0.2时写到:

"Do you pine for nice days of Minix-1.1, when mem were men and wrote their own device drivers? Are you without a niceproject and just dying to cut your teeth on a OS you can try to modify for your needs? Are you finding it frustrsting when everything works on Minix? No more all-nighters to get a nifty program working? Then this post might be just for you.

"As I mentioned a month ago, I'm working on a free version of a Minix-lookalike for AT-386 computers. It has finally reached the stage where it's even usable(though may not be depending on what you want),and I am willing to put out the sources for wider distribution. It is just version 0.0.2 ... but I've successfully run bash,gcc,gnu-make,gnu-sed,compress,etc.under it."

随即Linux引起黑客们(hacker)的注意,通过计算机网络加入了Linux的内核开发,Linux倾向于成为一个黑客的系统----直到今天,在Linux社区里内核的开发被认为是真正的编程.由于一批高水平黑客的加入,使Linux发展迅猛,到1993年底94年初,Linux 1.0终于诞生了! Linux 1.0已经是一个功能完备的操作系统,而且内核写得紧凑高效,可以充分发挥硬件的性能,在4M内存的80386机器上也表现得非常好,至今人们还在津津乐道于此,不过自从2.1.xx系列的内核Linux开始走高端的路子----硬件的发展太快了,但是Linux不会失去它的本色.Linux具有良好的兼容性和可移植性,大约在1.3版本之后,开始向其他硬件平台上移植,包括号称最快的CPU---Digital Alpha(至少目前主频是最高的).所以不要总把Linux与低档硬件平台联系 到一块,Linux发展到今天,这是一个误区,它只是将硬件的性能充分发挥 出来而已,Linux必将从低端应用横扫到高端应用!

在Linux的发展历程上还有一件重要的事:Linux加入GNU并遵循公共版权许可证(GPL).此举大大加强了GNU和Linux,几乎所有应用的GNU库/软件都移植到Linux,完善并提高了Linux的实用性,而GNU有了一个根基,我现在也搞不清楚到底是GNU Linux呢还是基于Linux的GNU. :-) 更重要的是遵循公共版权许可证,在继承自由软件的精神的前提下,不再排斥对自由软件的商业行为(如把自由软件打包以光盘形式出售),不排斥商家对自由软件进一步开发,不排斥在Linux上开发商业软件.从此Linux又开始了一次飞跃,出现了很多的Linux发行版 ,如Slackware,Redhat,Suse,TurboLinux,OpenLinux等十多种,而且 还在增加,注意你不能说"Redhat Linux""Suse Linux""Slackware Linux"等等,Linux主要指操作系统内核,对所有发行版内核原代码都是一样的(但集成的内核版本可能因发行时间不同而有所不同). 还有一些公司在Linux上开发商业软件或把其他Unix平台的软件移植到Linux上来,如今很多IT业界的大腕如IBM,Intel,Oracle,Infomix,Sysbase,Corel,Netscape,CA,Novell等都宣布支持Linux! 商家的加盟弥补了纯自由软件的不足和发展障碍,Linux迅速普及到广大计算机爱好者,并且进入商业应用,正是打破某些公司垄断文化圈的希望所在!!

Linux是爱好者们通过Internet协同开发出来的,当然它的网络功能十分强大,比如你可以通过ftp,nfs等来安装Linux,用它来做网关等等.随着Linux的发展衍生出来的应用恐怕出乎Linus本人最初的预料,如有人用它来做路由器,有人来做嵌入式系统,有人来做实时性系统. .....常有新手问Linux能做什么,其实它不象那些中看不中用的操作系统,不在于你用它能干什么,而在于你想干什么! Linux的兴起还给人们很多启迪与思考,如集市式软件开发的讨论, 又如自由软件的精神......

现阶段openwrt官方支持的路由列表:wiki.openwrt.org/toh/start

如果要学习openwrt的话,买些列表中二手的路由器来实践下更容易学习,大部分要升级一下rom芯片和内存芯片,典型配置都是4M、64M。 大家先学习一下,等待小米开放时刻的到来,有备无患……

OpenWrt 可以被描述为一个嵌入式的 Linux 发行版,(主流路由器固件有 dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的、静态的系统。OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。

对于开发人员,OpenWrt 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。

当Linksys释放 WRT54G/GS 的源码后,网上出现了很多不同版本的 Firmware 去增强原有的功能。大多数的 Firmware 都是99%使用 Linksys的源码,只有1%是加上去的,每一种 Firmware 都是针对特定的市场而设计,这样做有2个缺点,第一个是难以集合各版本Firmware的长处,第二个是这版本距离 Linux 正式发行版越来越远。

OpenWrt 选择了另一条路,它从零开始,一点一点的把各软件加入去,使其接近 Linksys 版 Firmware的功能,而OpenWrt 的成功之处是它的文件系统是可写的,开发者无需在每一次修改后重新编译,令它更像一个小型的 Linux 电脑系统。

OpenWrt 项目由 2004 年 1 月开始, 第一个版本是基于 Linksys 提供的 GPL 源码及 uclibc 中的 buildroot 项目, 这个版本称为 “stable” 版, 在网上至今仍有很多项目使用这个版本, 较为有名 Freifunk-Firmware 和 Sip@Home.

到了2005年初, 一些新的开发人员加入了这项目, 几个月后他们释出了第一个 “experimental” 版本, 这和以前版本不同的是, 这版本差不多完全舍弃了 Linksys 的 GPL 源码, 使用了 buildroot2 作为核心技术, 将 OpenWrt 完全模块化,OpenWrt 使用 Linux 正式发行的核心源码(2.4.30),加上了一些补丁和网络驱动,开发队伍更为OpenWrt添加了许多免费的工具,可以直接把Image写入 Flash (mtd)里面,设定无线功能和VLAN交换功能,这个版本名为“White Russian”,而1.0版本于2005年底公布。

OpenWRT是一个高度模块化、高度自动化的嵌入式Linux系统,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中。 同时,它还提供了100多个已编译好的软件,而且数量还在不断增加,而 OpenWrt SDK 更简化了开发软件的工序。

OpenWRT不同于其他许多用于路由器的发行版,它是一个从零开始编写的、功能齐全的、容易修改的路由器操作系统。实际上,这意味着您能够使用您想要的功能而不加进其他的累赘,而支持这些功能工作的linux kernel又远比绝大多数发行版来得新。

如果对 Linux 系统有一定的认识, 并想学习或接触嵌入式 Linux 的话, OpenWRT很适合。 而且OpenWRT支持各种处理器架构,无论是对ARM,X86,PowerPC或者MIPS都有很好的支持。 其多达3000多种软件包,囊括从工具链(toolchain),到内核(linux kernel),到软件包(packages),再到根文件系统(rootfs)整个体系,使得用户只需简单的一个make命令即可方便快速地定制一个具有特定功能的嵌入式系统来制作固件。

一般嵌入式 Linux 的开发过程, 无论是 ARM, PowerPC 或 MIPS 的处理器, 都必需经过以下的开发过程:

1、 创建 Linux 交叉编译环境;

2、建立 Bootloader;

3、移植 Linux 内核;

4、建立 Rootfs (根文件系统);

5、安装驱动程序;

6、安装软件;

熟悉这些嵚入式 Linux 的基本开发流程后,不再局限于 MIPS 处理器和无线路由器, 可以尝试在其它处理器, 或者非无线路由器的系统移植嵌入式 Linux, 定制合适自己的应用软件, 并建立一个完整的嵌入式产品。

由于CPU内核体系不同,造成很多应用程序移植到OpenWrt上的时候经常崩溃。

由于ADSL硬件模块的驱动程序没有开放源代码,造成很多ADSL一体无线路由的ADSL模块不能工作而造成功能缺失(RG100A和DB120除外)。

由于OpenWRT并不是官方发布的路由器固件,所以要使用(刷入该固件)有困难,而且其基于Linux,导致OpenWRT的入门门槛较高。

White RussianOpenWRT的初始版本,从2005年7月的White Russian RC1开始发展,一直到2007年1月才发布White Russian 0.9。

KamikazeOpenWRT的第二个版本,从2007年6月开始发布Kamikaze 7.06,一直更新到2010年1月的Kamikaze 8.09.2结束。这期间OpenWRT进行了大量改进,并为它的发展打下了坚实的基础。

Backfire2010年03月04日,OpenWrt Backfire 10.03 Beta发布,该版本是开源的路由器固件,基于linux,功能强大,支持很多主流的平台和路由器,甚至支持国内的君正jz4740平台,是学习和开发嵌入式,也是工业、 商业应用理想平台。更新方面: brcm-2.4 更新到 2.4.37 kernel ,other targets 更新到 2.6.30 or 2.6.32 ,arm/mips平台的 gcc 更新到 4.3.3 ,powerpc的gcc更新到 4.4.3 ,uClibc 更新到 0.9.30.1 , Broadcom 11g 芯片组的 b43 无线网卡驱动更新到 2.6 kernel ,支持Atheros 11n ath9k ,支持很多新的ar71xx设备,magicbox归入ppc40x平台 。

2010年03月25日,OpenWrt 发布 Backfire 10.03-rc1,支持国内留下的 tp-link最新多款11n的路由器,是不是想让路由器支持万能中继呢,或者增加路由器的多wan口支持呢,更多的这些高端路由才有的功能,或许能 让家用路由轻松具备。

2010年04月07日,OpenWRT放出Backfire 10.03正式版。

2010年08月29日OpenWRT放出了Backfire 10.03.1。修正了很多BUG,提高了兼容性。TP-LINK WR841N v2 已经可以正常使用了,包括无线部分和上网部分。 自rc1之后的变动:改进了防DNS重绑定攻击,改进了uhttpd稳定性, Rootfs生成修复(Orion景象),修正了基于BRCM47XX的PCI初始化,添加了rtl8366 vlan 改变的 整合脚本,还原了一般x86镜像 GRUB控制台,提高了ar71xx系列以太网驱动程序性能,添加了ar7240 交换机驱动,一些swconfig 和 交换机驱动的改进,RDC 使用启动加载器支持波特率,允许原生HID 支持 通过添加 kmod-input-hid,6in4:适当的处理了PPPoE连接并且修复了终端隧道更新。

鉴于开源软件在国内的发展态势,目前国内有基于OpenWRT改进而来的OpenWRT-DreamBox。这个版本的OpenWRT集成了了很多常用功能(包括脱机下载等),而通过这个版本的OpenWRT便可以把一个路由器的功能发挥的淋漓尽致。

现在有越来越多的Maker开始折腾OpenWrt,但作为一个Maker新手来讲,在网上还是很难找到一份系统的入门级资料。查找资料很辛苦,而且OpenWrt的门槛相对较高,希望这篇文章所提供的从零开始学OpenWrt编译 + 刷机 + 使用教程能降低新手们的入门难度,当然,编译过程非必须,一般的路由都可找到可用的稳定固件直接刷机。

1、安装Ubuntu(编译需要Linux环境),到其官网下载,版本根据自己所需选择即可。可以选择安装到虚拟机或者物理机,图形化安装而且是中文版,连安装都搞不定的,可以关闭本页面了;(下载地址可以百度,回复贴中会提供)

2、切记不要改动软件源,同时按住Ctrl + Alt + T,调出终端;

3、逐条输入下列命令(及时验证是否安装成功):

[php]

sudo apt-get install g++

sudo apt-get install libncurses5-dev

sudo apt-get install zlib1g-dev

sudo apt-get install bison

sudo apt-get install flex

sudo apt-get install unzip

sudo apt-get install autoconf

sudo apt-get install gawk

sudo apt-get install make

sudo apt-get install gettext

sudo apt-get install gcc

sudo apt-get install binutils

sudo apt-get install patch

sudo apt-get install bzip2

sudo apt-get install libz-dev

sudo apt-get install asciidoc

sudo apt-get install subversion

sudo apt-get install sphinxsearch

sudo apt-get install libtool

sudo apt-get install sphinx-common

[/php]

至此编译环境搭建完成。

OpenWrt源码分两种,一种是最新但不是最稳定的Trunk开发版,一种是最稳定的Backfire版,建议下载官方源码。下载前先在本地创建文件夹:

[php]

mkdir openwrt

sudo chmod 777 openwrt

cd openwrt

[/php]

选择你想要的版本然后执行下载命令,下载结束会显示版本号:

Trunk版下载命令:

[php]

svn co svn://svn.openwrt.org/openwrt/trunk/

[/php]

Backfire版下载命令:

[php]

svn co svn://svn.openwrt.org/openwrt/branches/backfire/

[/php]

添加软件扩展包,将feeds.conf.default修改为feeds.conf:

[php]

cp feeds.conf.default feeds.conf

[/php]

更新扩展,安装扩展:

[php]

./scripts/feeds update -a

./scripts/feeds install –a

[/php]

注:如果不是刚下载的源码,为保持代码为最新状态,应定期运行svn update命令更新源码。

测试编译环境:

[php]

make defconfig

到这里就可以开始编译自己的固件了。进入定制界面:

[php]

make menuconfig

[/php]

如果一切正常,会出现一个配置菜单,可以选择要编译的固件平台(芯片类型)、型号,还能选择固件中要添加的功能和组件,配置好后保存并退出菜单即可。

[php]

openwrt-make

[/php]

如果你想修改源码,应该在此步进行,如支持大容量Flash之类的修改,自己上网查到修改什么文件什么地方后,就在ubuntu图形界面上进去找到文件,双击打开文本编辑器修改保存。

[php]

Make

[/php]

或者

[php]

make V=99

[/php]

或者

[php]

make -j V=99

[/php]

make是编译命令,V=99表示输出debug信息,V一定要大写,如果要让CPU全速编译,就加上 -j 参数,第一次编译最好不带-j参数。

编译过程保持联网(会从网上下载一些源码包),所以断网可能造成编译中断,编译所需时间与电脑CPU及网络环境有很大关系,第一次编译时间较久,快则半小时长则2、3个小时,之后的编译所需时间较短。编译完成后会在源码文件目录出现bin文件夹(如trunk/bin/XXXX),如果你手里的路由是原版固件需要刷OpenWrt需要选用XXX-factory.bin固件,如果路由已经刷了OpenWrt,选用升级固件XXXX-sysupgrade.bin升级用的,在升级界面升级即可。进到文件夹找到你需要的固件传出(通过邮箱、网盘、U盘等),开始刷机吧。

要在路由器上使用OpenWrt,首先要将路由器固件刷新为OpenWrt,即相当于OpenWrt 系统的安装,不同型号的路由器的安装方法可能也会不一样,但一般常用的有三种方法:

1.Web上传固件更新(就是路由器设置或管理界面的那个固件更新)

2.PFTP上传固件更新(最简单的就是HFS了)

具体型号的路由器适用于哪种或哪几种方法,需自行尝试。

要对OpenWrt进行配置,一般有两条途径:

1.SSH登录通过命令行控制

2.Web登录通过Web界面设置

首次安装OpenWrt后,需要设置密码才可以使用SSH登录,方法是使用telnet登录或者Web登录设置密码。在Windows下面telnet和SSH登录可以使用Putty,在Linux或Mac下可分别使用如下命令:

[php]

ssh –l root 192.168.1.1 //Linux

ssh –l [email protected] //Mac

[/php]

一般指令与常见Linux发行版相同,但是OpenWrt使用自己的包管理器:opkg,使用“opkg –help”查看帮助信息。以下是一些常用操作命令:

[php]

opkg update //更新软件包列表

opkg install //在线安装软件包

opkg remove //移除软件包

[/php]

登录Web管理界面,前提是该OpenWrt系统中要安装了Web界面,一般是Luci,登录方式与普通路由器无异,打开浏览器,输入路由器IP即可进入登录界面,OpenWrt的默认IP是192.168.1.1。

到此,OpenWrt的大门已为你敞开。接下来,开始尝试利用OpenWrt实现更多智能应用吧,比如单号多拨榨取运营商带宽、绑定域名远程控制、挂载大容量硬盘、搭建BT下载机、搭建网络摄像头、Samba/DLNA家庭NAS共享、私有云同步、FTP、个人网站/服务器…

需要学会用ssh登录路由器用linux命令查看。

ps 命令查看当前系统运行的进程信息

free 命令查看内存使用和swap挂载情况

ls 查看目录和文件

cd 进入退出目录

vi 查看编辑配置文件

安装命令:

[php]

#opkg update

#opkg install nano

uci set network.lan.ipaddr=[lan ip]

[/php]

使用pppoe设置

Shell代码

[php]

uci set network.wan.proto=pppoe //设置wan口类型为pppoe

uci set network.wan.username=[上网帐户]

uci set network.wan.password=[上网密码] //这两行设置pppoe用户名和密码

[/php]

如果要挂在上级路由下面,就需要进行下面的设置

Shell代码

[php]

uci set network.wan.proto=none //关掉wan

uci set network.lan.gateway=[上级路由ip] //网关指向上级路由

uci set network.lan.dns=[上级路由ip] //dns指向上级路由

uci set dhcp.lan.ignore=1 //关掉lan的dhcp

[/php]

最后对无线网络进行配置

Shell代码

[php]

uci set wireless.@wifi-device[0].disabled=0 //打开无线

uci set wireless.@wifi-device[0].txpower=17 //设置功率为17dbm 太高会烧无线模块

uci set wireless.@wifi-device[0].channel=6 //设置无线信道为6

uci set wireless.@wifi-iface[0].mode=ap //设置无线模式为ap

uci set wireless.@wifi-iface[0].ssid=[自己设置SSID] //设置无线SSID

uci set wireless.@wifi-iface[0].network=lan //无线链接到lan上

uci set wireless.@wifi-iface[0].encryption=psk2 //设置加密为WPA2-PSK

uci set wireless.@wifi-iface[0].key=[密码] //设置无线密码

[/php]

提交应用配置

Shell代码

[php]

uci commit //应用

/etc/init.d/network restart //重启网络服务

[/php]

安装luci管理界面

Shell代码

[php]

opkg update // 更新软件列表

opkg list-installed // 查看已安装软件

opkg install luci // 安装LUCI

opkg install luci-i18n-chinese // 支持中文

luci-app-firewall - 0.10.0-1

luci-i18n-english - 0.10.0-1

luci-lib-core - 0.10.0-1

luci-lib-ipkg - 0.10.0-1

luci-lib-lmo - 0.10.0-1

luci-lib-nixio - 0.10.0-1

luci-lib-sys - 0.10.0-1

luci-lib-web - 0.10.0-1

luci-mod-admin-core - 0.10.0-1

luci-mod-admin-full - 0.10.0-1

luci-proto-core - 0.10.0-1

luci-proto-ppp - 0.10.0-1

luci-sgi-cgi - 0.10.0-1

luci-theme-base - 0.10.0-1

luci-theme-openwrt - 0.10.0-1

[/php]

即可完成LUCI的安装。

输入以下命令开启支持web服务的uhttpd,并设置其为自启动:

Shell代码

[php]

/etc/init.d/uhttpd enable # 开机自启动

/etc/init.d/uhttpd start # 启动uhttpd

[/php]

- Wifidog

你可以尝试执行以下命令安装Wifidog:

[php]

opkg update # Optional

opkg install wifidog

[/php]

--sftp安装

[php]

opkg update

opkg install vsftpd openssh-sftp-server

/etc/init.d/vsftpd enable

/etc/init.d/vsftpd start

[/php]

小米端口转发命令:

通过修改 /etc/config/firewall 这个文件来实现开放自己需要的端口到外网。

[php]

config rule 'httpdwan'

option src 'wan'

option dest_port '8088'

option proto 'tcp'

option target 'ACCEPT'

option name ''''httpd wan accept tcp port 8088''''

[/php]

保存后,执行 /etc/init.d/firewall restart 重启防火墙。

SSH工具:

1.WINSCP(文件传输到路由器上严重推荐使用)

2.putty中文版 中文的使用的难度相对低一点

欢迎分享,转载请注明来源:内存溢出

原文地址:https://outofmemory.cn/yw/7296472.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3