




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、OPENWRT学习笔记一、 OPENWRT简介Cisco/Linksys在2003年发布了WRT54G这款无线路由器,同年有人发现它的IOS是基于Linux的,然而Linux是基于GPL许可证发布的,按照该许可证Cisco应该把WRT54G 的IOS的源代码公开。2003年3月, Cisco迫于公众压力公开了WRT54G的源代码。此后就有了一些基于Cisco源码的第三方路由器固件,OpenWrt就是其中的一个。OpenWrt的特点:· 可扩展性好,可以在线安装您所需要的功能,目前有1000多个功能包可选;· 是一台完整的Linux工作站,文件系统可读可写,便于开发者学习和实
2、践;· OpenWrt 项目是 GPL 许可下的完全自由和开放源码的项目。项目打算将源代码永久存放于 OpenWrt 站点,以便易于获得源代码;二、 搭建环境一般嵌入式软件的开发过程1. 创建 Linux 交叉编译环境 2. 建立 Bootloader 3. 移植 Linux 内核并构建嵌入式设备的驱动程序 4. 编译并安装应用软件 5. 建立 Rootfs (根文件系统) 6 调试1. 编译编译平台:Ubuntu14.04 (en)1) 64位系统安装依赖软件 # sudo apt-get install build-essential asciidoc binutils bzip
3、2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev ia32-libs lib32gcc1 libc6-dev-i386 subversion git-core默认安装后的系统为英文环境,切换为中文环境方法如下:sudo gedit /etc/default/localeLANG="zh_CN.UTF-8"LANGUAGE="zh_CN"安装搜狗输入法安装搜狗输入法碰到一些奇怪的问题,本来直接装搜狗输入法即可,最后在输入法列表中也勾选了,可就是不出来。最后还是在切换到中文环
4、境下重新安装就好了。Ubuntu 14.04 64位 无法 安装 ia32-libs 解决办法 1. 安装新立德软件包管理器:打开终端,输入以下命令:sudo apt-get install synaptic2. 打开新立德软件包管理器,选择“设置>软件库”3. 选择“其他软件 > 添加”4. 在APT行中输入 "deb main restricted universe multiverse"5. 选择确定退出新立德软件包管理器6. 在终端输入“sudo apt-get update”7. 在终端输入“sudo apt-get
5、 install ia32-libs”2) 获取openwrtgit clone git://15.05/openwrt.git 解压后进入所在根目录 更新软件包./scripts/feeds update -a./scripts/feeds install a· 看起来这里不是真的下载包,而是下载一个列表它可以获得最新的列表Run "./scripts/feeds update" to get the latest package definitions· instal
6、l 看起来只是安装个文件链接"./scripts/feeds install" to install symlinks into "package/feeds/*".· 那么 -a属性是啥子呢?看起来是获得所有的包信息· 它的完整用法看起来是,它是个perl脚本,位于script目录,来看看它的源码部分配置make defconfig 回显示提示缺少软件包或者是编译库 )make menmuconfig 配置要加入固件的软件包(处理选择的目标、编译生成软件包、内核选项等)这时候会检查所依赖的软件和库是否安装了Build depende
7、ncy: Please install the openssl library (with development headers)Prerequisite check failed. Use FORCE=1 to override.make1: * tmp/.prereq-build Error 1make: * world 错误 2这个错误还需要安装两个软件包:sudo apt-get install libssl-devsudo apt-get install libssl0.9.8成功后再执行make defconfig就OK了编译固件 make V=99 V选项代表输出编译过程的详细
8、信息 -j 是线程数 可以加快编译 必须指定数目,不然你的电脑就死翘翘了 Make j2 V=99 双核 Make clean 删除 bin 和 build_dir 所有文件和目录Make dirclean 清空编译环境以及交叉编译工具包(toolchain目录),也会清空 staging_dirMake distclean 整个编译环境清掉,包括你下载的东西,挺狠编译单个软件包 make package/cups/compile V=99 Kernel modules对应的菜单脚本如下:如果我们要添加自定义菜单就需要编辑这些个脚本,以模块形式存在,编译之后存在于根文件系统,后缀名为IPKOp
9、enwrt目录结构· tools和toolchain目录:包含了一些通用命令, 用来生成固件, 编译器, 和C库.· build dir/host目录:是一个临时目录, 用来储存不依赖于目标平台的工具.· build dir/toolchain-目录:用来储存依赖于指定平台的编译链. 只是编译文件存放目录无需修改.· build dir/target-目录:用来储存依赖于指定平台的软件包的编译文件, 其中包括linux内核, u-boot, packages, 只是编译文件存放目录无需修改.· staging_dir目录:是编译目标的最终安装位
10、置, 其中包括rootfs, package, toolchain.· package目录:软件包的下载编译规则, 在OpenWrt固件中, 几乎所有东西都是.ipk, 这样就可以很方便的安装和卸载.· target目录:目标系统指嵌入式设备, 针对不同的平台有不同的特性, 针对这些特性, "target/linux"目录下按照平台进行目录划分, 里面包括了针对标准内核的补丁, 特殊配置等.· bin目录:编译完OpenWrt的二进制文件生成目录, 其中包括sdk, uImage, u-boot, dts, rootfs构建一个嵌入式系统完整的
11、二进制文件.· config目录:存放着整个系统的的配置文件.· docs目录:里面不断包含了整个宿主机的文件源码的介绍, 里面还有Makefile为目标系统生成docs.· include目录:里面包括了整个系统的编译需要的头文件, 但是是以Make进行连接的.· feeds目录:扩展软件包索引目录.Packages -路由的各种扩展功能Luci -Openwrt默认的GUI· scripts目录:组织编译整个OpenWrt的规则.· tmp目录:编译文件夹, 一般情况为空.· dl目录:所有软件的下载目录, 包括u-bo
12、ot, kernel. 可以放自己下载的软件包到里面(名字要相同)· logs目录:如果编译出错, 可以在这里找到编译出错的log.编译完成后生成的固件在BIN目录下内核文件 根文件系统 sdk开发包 等。几个重要目录说明:Build-dir 编译时候创建的目录,遇到错误直接在这个目录修改对应的target对应的文件即可,不然修改后也会报同样的错误。 /openwrt/target/linux/ar71xx/base-files/etc/uci-defaults$ 网络配置文件位置 /openwrt/target/linux/ar71xx/files/arch/mips/ath79$
13、 mach文件所在目录 定义了路由器的一些硬件参数 3) DR531烧写采用的是ttl烧写方法,线序:底下方块为VCC RX,TX,GNDa) 进入烧写模式出现如下字样:eth0, eth1Setting 0x181162c0 to 0x4081a100Hit any key to stop autoboot: 0 的时候敲一个键进入控制台printfenv 查看boot参数bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:256k(u-boot),64k(u-
14、boot-env),6336k(rootfs),1408k(uImage),64k(mib0),64k(ART)bootdelay=2baudrate=115200ethaddr=0x9c:0x31:0x78:0xcc:0xdd:0xeedir=lu=tftp 0x80060000 $diru-boot.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesizelf=tftp 0x80060000 $dirboard953x$bc-jffs2&&erase 0x9f0
15、50000 +0x630000&&cp.b $fileaddr 0x9f050000 $filesizelk=tftp 0x80060000 $dirvmlinux$bc.lzma.uImage&&erase 0x9f680000 +$filesize&&cp.b $fileaddr 0x9f680000 $filesizefilesize=4cfileaddr=81000000bootcmd=loadfipaddr=9serverip=00stdin=serialstdout=serialstderr
16、=serialethact=eth0Rootfs划分的分区空间为6.3M本机tftp地址(客户端):9Tftp服务端地址:00,所以要烧写文件需要将PC机的地址改为这个地址 (根据提示设置这个地址,并不一定是这个)固件加载方法:采用loadf,要校验myloader头TFTP设置 b)键入以下命令完成刷写tftpboot 0x80060000 openwrt-ar71xx-generic-wpj344-8M-kernel.bin(改成你自己固件的名字)erase 0x9f680000 +$filesize; cp.b $fileaddr 0x9f68
17、0000 $filesize tftpboot 0x80060000 openwrt-ar71xx-generic-wpj344-8M-rootfs-squashfs.bin((改成你自己固件的名字)erase 0x9f050000 +0x630000; cp.b $fileaddr 0x9f050000 $filesize setenv bootcmd bootm 0x9f680000saveenvresetcp.b 以字节拷贝 rootfs为6muboot下其他命令setenv ipaddr setenv serverip 0updatef 更新
18、固件 (使用以下两条命令时,固件名字一定要为:01A818C0.img)updateb 更新uboot对上述命令的解析: 为什么是烧写在那些地址呢?进入uboot可以用printenv查看参数从这上面可以看出串口设备号 波特率 固件格式 每个分区的大小以及位置0x8006000其实是内存地址,烧写时是先下载到内存,然后cp.b以字节的方式拷贝nand flash。我们再烧写uboot也可以根据这个分区位置烧写,也可以改掉分区大小。Serial flash :MX25L6406E M2I-12G 8M uboot读取问题 uboot刷错DDR2: MX25L6406EM2I-12G 64M 两片
19、128M 查看AR9344 DS得知内部有5个phy FE口 port0外接了8035 剩余4个2. 遇到的问题1 )menuconfig菜单勾选 根据自己的需求,选择要添加的设备、库和应用软件 2)网口不通刷完后可以进系统,可网口就是不通,折腾会发现是驱动问题,这也是路由器选型问题,其对应的profile不适合当前板子,必须修改mach,采用的是近似配置修改方法查看启动日志,你会发现交换芯片的型号和当前板子的不一样,这说明是驱动错误解决:如 dr344其主控是ar9344 、switch IC ar803。我们可以在路由器型号中选择tp-wdr4310 ar9344+ar8237 因此我们只
20、需在mach中删掉8237初始化有关的信息,加入8035驱动及初始化代码修改方法如下:Linux 自带 AR8035 驱动, 此方法直接使用 ag71xx 驱动,且不需添加驱动,更不用移植 ag7240/ag934x/arths_gmac。Linux 内核中 AR8035 的 PHY 驱动名叫做 at803x,位于 drivers/net/phy/at803x.c(所有改动均在 OpenWrt 代码目录)1. target/linux/ar71xx/config-3.X (X 依据Linux内核版本而定)在里面添加一行CONFIG_AT803X_PHY=y这样能确保 at803x 驱动被编译进
21、内核2. target/linux/ar71xx/files/arch/mips/ath79/mach-XXXX.c (需要添加 AR8035 支持的文件)在开头部分添加 at803x 的头文件包含语句#include <linux/platform_data/phy-at803x.h>这样可以向 at803x 驱动传入一些 PHY 初始化设置在第一个函数前面添加以下全局静态变量static struct at803x_platform_data mi124_ar8035_data = .enable_rg
22、mii_tx_delay = 1, .enable_rgmii_rx_delay = 1,;static struct mdio_board_info mi124_mdio0_info = .bus_id = "ag71xx-mdio.0", &
23、#160; .phy_addr = 0, .platform_data = &mi124_ar8035_data, ,;这两个变量向 at803x 指定了设置 txdelay 和 rxdelay修改代码中eth注册代码如下,确保只注册eth0 ath79_reg
24、ister_mdio(1, 0x0); ath79_register_mdio(0, 0x0); mdiobus_register_board_info(mi124_mdio0_info, ARRAY_SIZE(mi124_mdio0_info); ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0| AR934X_ETH_CFG_SW_ONLY_MODE);
25、0; /* GMAC0 is connected to an AR8035 Gigabit PHY */ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII; ath79_eth0_data.phy_mask = BIT(0); ath79_eth0_data.mii_bus_dev = &ath79_mdio0
26、_device.dev; ath79_eth0_pll_data.pll_1000 = 0x0e000000; ath79_eth0_pll_data.pll_100 = 0x0101; ath79_eth0_pll_data.pll_10 = 0x1313; ath79_register_eth(0);可以修改u
27、ci-defaults下的network以配置物理网口分配如果自己想完全加入一个路由器型号的配置可以参考一下论坛:1、 2、 3、 4、 2)没有热点修改 etc/config/wireless -à option disabled 03) 串口乱码 键盘输入时少显示一个字符等等很多问题,特别奇特的是同一个固件烧写一次有时无线会没了,再烧一次又好了,很显然数据不稳定。乱码问题:一般新开一个终端解决,有时也不行,原因复杂。刷写固件尽量用网络刷写。SSH登陆也可以(需要打开防火墙)4)源问题Vi /etc/opkg.conf Opkg update opkg install.5) 消除环
28、路brctl stp interface on6) 修改固件大小magebuilder 目录下,./target/linux/ar71xx/image/Makefile, 把703n最后的4Mlzma改成了8Mlzma或16Mlzma$(eval $(call SingleProfile,TPLINK-LZMA,$(fs_64kraw),TLWR703,tl-wr703n-v1,TL-WR703N,ttyATH0,115200,0x07030101,1,8Mlzma)类似修改 3. 分区结构这个板子分区比较复杂u-boot用来装载内核和布置环境 这里存放uboot程序u-boot-en存放参数
29、rootfs根文件系统art 无线驱动程序firmware 固件 kernel 内核nand flash中一般是这样安排的 mtd命令操作: 三、 无线以及3G配置1. 无线配置有两种方式配置网络Luci图形化配置,这个比较容易。1) 编辑脚本 /etc/config/network /etc/config/wireless 2. 3G拨号配置3g evdo拨号有很多种方式,常用的方式有如下几种1、Luci界面直接配置2、wvdial3、直接安装pppd写拨号脚本其实这几种拨号方式都是采用的是ppp和chat,稳定性的话,个人觉得是一样的,既然拨上号了,基本上与拨号软件没有关系了。与硬件,信号
30、关系稍微大一点。但是,拨号器也是有可能影响稳定性的,如检测不正确的自己去断开重连等等。根据本人大量测试这几种拨号方式,还是直接写脚本拨号可靠一点下面介绍这几种拨号方式的安装方法1) luci界面配置a)依赖库和可执行文件的安装· DeviceDrivers ->· * Network device support->· <*> PPP (point-to-point protocol) support· * PPP multilink support (EXPERIMENTAL)· * PPP filtering
31、3; <*> PPP support for async serial ports· <*> PPP support for sync tty ports· <*> PPP Deflate compression· <*> PPP BSD-Compress compression· <*> PPP MPPE compression (encryption) (EXPERIMENTAL)· *USB support ->· <*> USB Serial Con
32、verter support ->· * USB Generic Serial Driver· <*> USB driver for GSM and CDMA modems· ppp· chat· comgt· libpthread· librt· libusb-1.0· usb-modeswitch· zlib2) 设置Apn 可以加上 ctnet官方3G配置教程:/doc/recipes/3gdongle3) Wvdial移植见附件4) 手工安装pppt以及写拨号脚本所需软件pppd ,以及的一种方式配置所需的软件 a)在/etc/ppp/peers/下 新建 evdo evdo-chat-connect evdo-chat-disconnect个文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金属酸洗膏企业数字化转型与智慧升级战略研究报告
- 发展型方程的参数反演问题-梯度法迭代的收敛性研究
- 基于混合搜索的因果特征选择算法研究
- 价格评估合同范本
- 配送车合同范本
- 粮库用工合同范本
- 舞蹈活动合同范本
- 学技艺合同范本
- 中俄商务合同范本
- 电商平台美妆产业发展趋势研究及前景展望
- 第四章观赏树木的园林特性4
- GB/T 19536-2004集装箱底板用胶合板
- 传播学研究方法-第三章
- 可爱的四川精编版课件
- 苏教版二年级数学下册第一单元第一课时
- 债权法总论课件
- 医院先进科室、先进个人评选办法
- 新部编版四年级下册道德与法治全册优秀教学课件(1-12课)
- 港口危险货物安全管理人员机考试题库(含答案)
- 门诊医师出诊申请表(2022版)
- 材料进场检验项目清单
评论
0/150
提交评论