openwrt学习总结

时间:2019-05-15 09:26:18下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《openwrt学习总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《openwrt学习总结》。

第一篇:openwrt学习总结

openwrt学习总结目录

1:ath9k中的EEPROM中的数据.......................................................................................2 2:Atheros原厂中的EEPROM的中的数据.......................................................................3 3:如何在openwrt添加自定义模块接口.........................................................................4 3.1 make menuconfig中的 kernel modules.....................................................................4 3.2:添加自己的模块到文件netdevices.mk..................................................................6 4:openwrt内核编译及文件系统的生成..........................................................................7 4.1 主.config和内核.config的关系................................................................................8 4.2 Linux内核uimage生成............................................................................................11 4.3 Linux根文件系统生成..............................................................................................12 5:openwrt中的进程启动方式........................................................................................12 6:网络配置.......................................................................................................................15 6.1:有线网络配置........................................................................................................15 6.2:无线网络配置........................................................................................................16 7:LUCI命令使用入门.......................................................................................................16 8:openwrt web页面代码分析........................................................................................19

1:ath9k中的EEPROM中的数据

在文件

compat-wireless-2014-03-31driversnetwirelessathath9k Ar9003_eeprom.h中定义了 struct ar9300_eeprom 其中保存了校准相关的数据变量,如MAC地址,eepromVersion;此数据结构值得研究,同时在sys文件系统了定义了查看这些变量值的接口,其交互的接口如下:

root@OpenWrt:/sys/kernel/debug/ieee80211# ls phy0 phy1 此处说明系统有俩个wifi网卡,每一张都有自己的状态信息。

主要的文件有:modal_eeprom,rx_chainmask,tx_chainmask。

2:Atheros原厂中的EEPROM的中的数据

经过ath9k和Atheros SDK中的代码对比之后,发现,EEPROM中的存放的数据结构完全一致。故可以知道,我们可以通过Atheros原厂提供的art.ko及校准文件对openwrt系统进行校准来提供wifi性能的稳定。可能涉及到的问题如下:

1:需要对ark.ko。即需要对内核相关的代码进行移植。

2:需要进一步确定上面定义的ar9300_eeprom 数据存放在什么地方,从什么地方读取。3:需要跟Atheros原厂的进行对比,确保准确无误。代码当然入口点如下:

[

16.300000] ath_ahb_eeprom_read [

16.300000] ath9k_hw_use_flash 3:如何在openwrt添加自定义模块接口 3.1 make menuconfig中的 kernel modules

其中的各个配置选项来自于下面目录中的.mk文件

[root@localhost /openwrt/openwrt/trunk/package/kernel/linux/modules]$ls 001-depends.mk crypto.mk hwmon.mk leds.mk

netdevices.mk.bak nls.mk

sound.mk video.mk wireless11221.mk block.mk

firewire.mk i2c.mk lib.mk

netfilter.mk

other.mk spi.mk virtual.mk wireless.mk can.mk

fs.mk

input.mk netdevices.mk netsupport.mk

pcmcia.mk usb.mk w1.mk [root@localhost /openwrt/openwrt/trunk/package/kernel/linux/modules]$ 兄弟们可以打开就知道,其中我们将自己将要添加的内核模块添加到Network Devices中。添加之后的效果为:

3.2:添加自己的模块到文件netdevices.mk

其中自己的模块代码在 FILES:=$(LINUX_DIR)/drivers/net/ethernet/ethernet中

内核控制选项为:CONFIG_AR9344_PHY8035 其中这个很重要需要在多个文件中进行定义AR9344_PHY8035。

在下面的目录中的Makefile添加obj-y += ethernet/ [root@localhost /openwrt/openwrt/trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.10.36/drivers/net/ethernet]$more Makefile # # Makefile for the Linux network Ethernet device drivers.# obj-y += ethernet/ 同时还需要在Kconfig中添加source “drivers/net/ethernet/ethernet/Kconfig” 其中内容如下: [root@localhost /openwrt/openwrt/trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.10.36/drivers/net/ethernet/ethernet]$cat Kconfig config AR9344_PHY8035 //很重要的东西

tristate “db12x borad for 9344chip”

depends on PCI

---help---

This driver supports for ar9035 phy id 其中看看自己模块中的makefile的内容如下:

主要上面makefile中的CONFIG_AR9344_PHY8035的变量,关于此值相关的配置值如下: [root@localhost /openwrt/openwrt/trunk]$cat.config |grep 9344 CONFIG_PACKAGE_kmod-ar9344_ethernet=y

其中不管CONFIG_PACKAGE_kmod-ar9344_ethernet=y的 值是Y还是M,Linux内核目录中的CONFIG_AR9344_PHY8035的值都是M,古可以知道在根目录(/openwrt/openwrt/trunk)中的make menuconfig的时候是会与Linux内核中的config文件建立起联系的,之间是怎么的联系,现在还不是很清楚。

当在在总的menuconfig中选中自定义的模块之后,系统会自动将此模块加载到内核所在文件系统中

同事也会成ipk格式的文件。

Generating index for package./kmod-ar9344_ethernet_3.10.36-1_ar71xx.ipk

4:openwrt内核编译及文件系统的生成

在此节中主要关注是make menuconfig生成的.config文件和内核生成的.config文件的关系,openwrt中如何生成内核及文件系统。在分析过程中主要查阅的是编译过程生成的log。其中涉及到的主要的makefile如下:

[root@localhost /openwrt/openwrt/trunk/include]$ll kernel*-rwxr--r--.1 nobody nobody 4136 2014-05-15 01:26 kernel-build.mk-rwxrwxrwx.1 suiyuan suiyuan 4135 2014-05-09 12:07 kernel-build.mk.bak-rwxr--r--.1 nobody nobody 7101 2014-05-15 01:27 kernel-defaults.mk-rwxrwxrwx.1 suiyuan suiyuan 7100 2014-05-09 12:07 kernel-defaults.mk.bak-rwxrwxrwx.1 suiyuan suiyuan 7341 2014-05-09 12:07 kernel.mk

-rwxrwxrwx.1 suiyuan suiyuan 1406 2014-05-09 12:07 kernel-version.mk 及/openwrt/openwrt/trunk/target/linux/ar71xx中的涉及到的makefile

4.1 主.config和内核.config的关系

Linux系统中根据make menuconfig配置阶段来生成的.config文件来决定哪些文件是否编译到系统中。故首先需要搞清楚这俩个.config文件之间的关系。其实这个问题已经在第三节中涉及到了。在openwrt的内核之中,除了必要的需要直接编译进内核之中的,其他驱动都是以模块的形式存在的。Linux内核中主要就是系统必须的驱动程序,而openwrt中除了Linux内核中包含的驱动程序之外还包含了上层应用程序,其这些应用程序占用了munuconfig中的绝大多数配置选项,而与Linux内核相关的配置被包含在了

中,在此内部中的配置都是以模块的形式,在编译完之后存在于根文件系统之中。其中的菜单选项定义在如下目录中:

现在以LED模块为例来说明这俩个.config文件的关系。下面是openwrt的make menuconfig 所配置的选项

其中.config文件中led相关的信息如下:

其中M/Y的意思在于是否将此模块添加到生成的根文件系统root-ar71xx中去,与Linux kernel中的M/Y的意思不同。

同时在编译之后会将上面的模块制作成ipk格式的文件:

现在看看Linux内核中与上面相关的模块的配置信息:在看之前需要查看文件:leds.mk中的内容。openwrt中对Linux内核中的代码的配置选项重新写了自己的配置规则。/openwrt/openwrt/trunk/package/kernel/linux/modules]$cat leds.mk 现在已leds.mk中具体的代码内容为例来说明:

define KernelPackage/ ledtrig-timer

此处的ledtrig-timer就是上面看到的 SUBMENU:=$(LEDS_MENU)

TITLE:=LED Timer Trigger

KCONFIG:=CONFIG_LEDS_TRIGGER_TIMER

会出现在Linux kernel的.config中。

FILES:=$(LINUX_DIR)/drivers/leds/$(if $(call kernel_patchver_ge,3.10),trigger/)ledtrig-timer.ko

AUTOLOAD:=$(call AutoLoad,50,ledtrig-timer,1)endef define KernelPackage/ledtrig-timer/description Kernel module that allows LEDs to be controlled by a programmable timer via sysfs endef $(eval $(call KernelPackage,ledtrig-timer))============================= 目前内核编译时执行的makefile中定义的宏顺序为: BuildImage--->中的如下宏定义;

install: compile install-targets

$(call Image/BuildKernel)

$(call Image/BuildKernel/Initramfs)

$(call Image/InstallKernel)

$(call Image/mkfs/cpiogz)

$(call Image/mkfs/targz)

$(call Image/mkfs/ext4)

$(call Image/mkfs/iso)

$(call Image/mkfs/jffs2)

$(call Image/mkfs/jffs2_nand)

$(call Image/mkfs/squashfs)

$(call Image/mkfs/ubifs)

$(call Image/Checksum)目前之研究: $(call Image/BuildKernel)的定义:

首先看看/openwrt/openwrt/trunk/target/linux/ar71xx中的makefile文件,其中调用了 $(eval $(call BuildTarget))其中此处的的BuildTarget在/openwrt/trunkopenwrt/trunk/include中的target.mk中定义的。其中有俩个地方进行了定义。如下:

BuildTarget=$(BuildTargets/DumpCurrent)

BuildTarget?=$(BuildKernel)其中BuildKernel 定义在/openwrt/openwrt/trunk/include/kernel-build.mk中,其中有如下一行:

$(Kernel/Prepare)的定义如下: define Kernel/Prepare $(call Kernel/Prepare/Default)endef 在此定义中有:

# xzcat $(DL_DIR)/$(LINUX_SOURCE)| $(TAR)-C $(KERNEL_BUILD_DIR)$(TAR_OPTIONS)$(Kernel/Patch)上面俩行分别为对当前的内核进行解压及patch 如果需要查看Linux内核.config文件是如何生成的可以查看如下宏定义: define Kernel/Configure/Default

4.2 Linux内核uimage生成

目前使用的内核加载系统为uboot,如果要使uboot能正确的加载Linux内核,需要将编译成zImage格式的内核添加64个字节uboot头信息转化为uImage格式。同时如果考虑内核压缩需要对uImage进行一定格式的压缩。目前Atheros平台中使用的压缩格式为:lzma openwrt-ar71xx-generic-uImage-lzma.bin 知道如何生成Linux 内核,有助于自己手动生成内核镜像。之前在移植Linux 2.6.31的内核到openwrt中,系统自动生成的镜像不能启动,故之后是根据vmlinux手动创建image。

上面的patch-cmdline对Linux内核patch上系统启动时需要知道的 CMD_LINE的值。此处可以知道Kernel command line的值为:“board=DB120 console=ttyS0,115200

mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,6336k(rootfs),1408k(kernel),64k(nvram),64k(art)ro,7744k@0x50000(firmware)”之后接着对vmlinux进行压缩,压缩格式为:lzma,压缩之后生成的文件为:vmlinux-db120.bin.lzma,接着将生成的文件转化为:uimage格式。最终生成的文件为:vmlinux-db120.bin.lzma 4.3 Linux根文件系统生成

目前Atheros中使用的文件系统文件为: openwrt-ar71xx-generic-db120-rootfs-jffs2.bin 在生成文件系统之前,需要将使用的lib,及系统需要的应用程序copy到一个特定的目录,之后使用命令mkfs.jffs2生成压缩格式的一个bin文件。在openwrt中压缩的总的文件在root-ar71xx目录中。

/openwrt/openwrt/trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2/ root-ar71xx

用户可以直接将需要执行的程序copy到root-ar71xx中的相应目录,完成文件的打包处理。

mtd-r write xxx.bin firmware 5:openwrt中的进程启动方式

openwrt中start,stop,enable,disable一个服务。系统中的服务程序的脚本都在/etc/init.d/的目录中。

上面的执行过程可以知道,一个脚本可以有帮助信息及enable,disable功能,其差别会在rc.d中生成和删除以S或者K结束的文件。START=10 STOP=98、下面演示如何写自己的应用程序的启动脚本,分别对此脚本进行start,stop,enable,disable操作。

6:网络配置

此处的网络配置主要关注的是/etc/config中的俩个文件network,wireless,因为当我们通过web配置有线和无线网络的时候,最终对网络的配置都会保存到上面的俩个文件之中。对此部分的配置主要就是使用第三节中UCI命令来实现。

6.1:有线网络配置

由于目前我的当前的板子有一个WAN+4个LAN口,4个LAN口是内部交换的。古在配置文件中我们可以看到WAN和LAN的配置信息。对于WAN口,当前使用的是static IP,其web上面的配置与network上面的配置一致。

同时可以根据UCI来读取或者设置接口的信息。

6.2:无线网络配置

有上面的信息可以知道,其中type 'mac80211' 类型会在LCUI的脚本中对其类型进行判断。使用的信道是11,WiFi模式为:11g,当前功率,国家码等信息。

7:LUCI命令使用入门

UCI是(Unified Configuration Interface)集中式配置信息管理接口的缩写,他是OpenWRT引进的一套配置参数管理机制。UCI管理了OpenWRT下最主要的系统配置,并且提供了简单,容易,标准化的人机交互接口。UCI的管理包含了网络配置,无线配置,系统信息配置等作为路由器的系统主要配置参数。UCI可以帮助开发人员快速的开发出基于OpenWRT的智能路由产品的控制界面(诸如浏览器界面,手机界面等)。

UCI的使用:UCI文件读写方式 UCI文件的读写有两种方式:

UCI文件的读写可以通过OpenWRT附带的uci指令来完成,这种读写方式可以用于命令行也可以用于自己开发的WEB程序来操作。直接使用系统的vi编辑器直接修改UCI文件,所做的修改也可以被系统所识别。

UCI指令读取配置 语法格式: uci [] [] 查看类语法:

uci get .

[.
下载openwrt学习总结word格式文档
下载openwrt学习总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    学习总结

    学习马俊欣情况简要总结马俊欣是郏县人民检察院的一名普通检察官,1987年临近大学毕业时,意外受伤导致颈椎骨折,造成左侧身体瘫痪。25年来,他面对身体的伤痛,克服平常人难以想象的......

    学习总结

    学习总结 通过这次的参观学习,我感到自己深深受惠,获益良多,既开阔了眼界,也学到了不少东西,使我感受最深的是孩子们良好的常规习惯,教师们的敬业、乐观精神,以及整个幼儿园带给......

    学习总结

    通信网测试技术学习总结 一.学习内容 本学期我学习了《通信网测试技术》这门课程,这是一门通信工程专业的专业课,目的是是我们掌握通信网测试技术的基本知识,基本原理,测试方法......

    学习总结

    赴英国伯明翰大学参观学习总结 我随***赴英国伯明翰大学参观学习,通过专题讲座,诊所室实地考察,交流讨论等方式,较系统地了解英国国家服务医疗体系和全科医师制度,先将参观学习心......

    学习总结

    我非常有幸参加了2012年幼儿园教师远程培训,并学习了《如何培养幼儿的社会交往能力》、《做有威信的幼儿教师》《家、园、社区合作开展幼儿园主题活动》等三门课程,观摩了优秀......

    学习总结

    有关学习总结 有关学习总结1 时间如洪流一般,飞快的流逝着,半学期的时光,就在这紧张的学习中,悄无声息地逝去了。这半学期来,我又学到不少知识。语文课虽然依旧和以往一样死气沉......

    学习总结

    《会计电算化原理》课程学习总结 王亚平随着经济的发展电算化逐渐替代人工记账,为满足市场需求大三上学期我们开始学习《会计电算化原理》课程,此课分为理论讲解和上机操作。......

    学习总结

    学习“奥尔夫音乐教学法”的心得体会 景东县幼儿园罗愉小 首先我真心感谢园领导给我这次学习的机会,参加“奥尔夫音乐教学法”的培训。24日,并使我有幸到师大幼儿园参观了幼......