第一篇: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
uci show [
变更类语法:
uci add
uci add_list
uci del_list
uci delete
uci commit [
OPENWRT使用命令行设置无线和有线网络 uci set network.lan.ipaddr=[lan ip]
使用pppoe设置
uci set network.wan.proto=pppoe
//设置wan口类型为pppoe
uci set network.wan.username=[上网帐户]
uci set network.wan.password=[上网密码]
//这两行设置pppoe用户名和密码
如果要挂在上级路由下面,就需要进行下面的设置
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
最后对无线网络进行配置
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=[密码]
//设置无线密码
提交应用配置
Shell代码
uci commit
//应用
/etc/init.d/network restart
//重启网络服务
安装luci管理界面
Shell代码
opkg update // 更新软件列表
opkg list-installed // 查看已安装软件
opkg install luci // 安装LUCI opkg install luci-i18n-chinese // 支持中文
即可完成LUCI的安装。
输入以下命令开启支持web服务的uhttpd,并设置其为自启动:
/etc/init.d/uhttpd enable # 开机自启动
/etc/init.d/uhttpd start # 启动uhttpd
实例演示
root@OpenWrt:/etc/config# 显示network 配置 root@OpenWrt:/etc/config# uci show network network.loopback=interface network.loopback.ifname=lo network.loopback.proto=static network.loopback.ipaddr=127.0.0.1 network.loopback.netmask=255.0.0.0 network.globals=globals network.globals.ula_prefix=fd7a:3d01:37c7::/48 network.lan=interface network.lan.ifname=eth0.1 eth1 network.lan.type=bridge network.lan.proto=static network.lan.ipaddr=192.168.1.1 network.lan.netmask=255.255.255.0 network.lan.ip6assign=60 network.wan=interface network.wan.ifname=eth0.2 network.wan.proto=dhcp network.wan6=interface network.wan6.ifname=@wan network.wan6.proto=dhcpv6 network.@switch[0]=switch network.@switch[0].name=switch0 network.@switch[0].reset=1 network.@switch[0].enable_vlan=1 network.@switch_vlan[0]=switch_vlan network.@switch_vlan[0].device=switch0 network.@switch_vlan[0].vlan=1 network.@switch_vlan[0].ports=0t 2 3 4 5 network.@switch_vlan[1]=switch_vlan network.@switch_vlan[1].device=switch0 network.@switch_vlan[1].vlan=2 network.@switch_vlan[1].ports=0t 1 network.@switch[1]=switch network.@switch[1].name=switch1 network.@switch[1].reset=1 network.@switch[1].enable_vlan=1 network.@switch_vlan[2]=switch_vlan network.@switch_vlan[2].device=switch1 network.@switch_vlan[2].vlan=1 network.@switch_vlan[2].ports=0 1 2 3 4 5 root@OpenWrt:/etc/config#
=================================查看系统中安装了那些二进制文件 root@OpenWrt:/overlay# opkg list base-files2014-04-24-1 8:openwrt web页面代码分析
首先看看openwrt中自带的页面代码如下: root@OpenWrt:/usr/lib/lua# ls bit.lua
iwinfo.so luci
nixio
nixio.so
ubus.so
uci.so root@OpenWrt:/usr/lib/lua# cd luci/ root@OpenWrt:/usr/lib/lua/luci# ls cacheloader.lua dispatcher.lua
ip.lua
sys.lua cbi
fs.lua
ltn12.lua
template cbi.lua
http
model
template.lua ccache.lua
http.lua
sauth.lua
tools config.lua
i18n
sgi
util.lua controller
i18n.lua
store.lua
version.lua debug.lua
init.lua 看看lua目录下面有哪些目录存在:
其中需要关注的文件目录如下: usr/lib/lua/luci/controller 其中包括系统默认的一级菜单。
在LuCI中Controller的文件定义在固件中的/usr/lib/lua/luci/controller目录中,模版目录在/usr/lib/lua/luci/view目录下,而model则是在/usr/lib/lua/luci/model中。而model中有一个特殊的模块叫做CBI,被称为LuCI中最酷的功能,该模块的功能是方便的对一个配置文件进行修改。在研究其代码的时候会看到:
在上面的/usr/lib/lua/luci/controller中的代码中,每一个文件的开始都有一个function index()的定义,其中:
page = entry({“admin”, “network”, “wireless_join”}, call(“wifi_join”), nil)entry函数的定义说明如下:
path is a table that describes the position in the dispatching tree: For example a path of {“foo”, “bar”, “baz”} would insert your node in foo.bar.baz.target describes the action that will be taken when a user requests the node.There are several predefined ones of which the 3 most important(call, template, cbi)are described later on on this page
call,template和cbi。
title defines the title that will be visible to the user in the menu(optional)order is a number with which nodes on the same level will be sorted in the menu(optional)其中target主要分为三类:call,template和cbi。call用来调用函数,template用来调用已有的htm模版,而CBI模块则是使用非常频繁也非常方便的模块,包含的一系列lua文件构成界面元素的组合,所有cbi模块中的控件都需要写在luci.cbi.Map中,在cbi模块中定义各种控件,Luci系统会自动执行大部分处理工作。
/usr/lib/lua/luci/下有三个目录model、view、controller,它们对应M、V、C。Call()方法会调用controller里的函数,主要通过openwrt系统的uci、network、inconfig等工具对系统进行设置,如果需要还会生成新界面。动态生成界面的方法有两种,一是通过cbi()/form()方法,它们利用model中定义的模板map,生成html文件;另一种是通过template()方法,利用view中定义的htm(一种类似html的文件),直接生成界面。template用来调用已有的htm模版,模版目录在lualuciview目录下。即语句entry({“admin”, “status”, “overview”}, template(“admin_status/index”), _(“Overview”), 1)调用了lualuciviewadmin_statusindex.htm文件来显示。cbi语句使用cbi模块,这是使用非常频繁也非常方便的模块,在cbi模块中定义各种控件,Luci系统会自动执行大部分处理工作。其链接目录在lualucimodelcbi下。显然语句entry({“admin”, “status”, “processes”}, cbi(“admin_status/processes”), _(“Processes”), 6)调用lualucimodelcbiadmin_statusprocesses.lua来实现模块。系统中的CBI目录,其中包含了系统中的二级目录。[root@localhost /openwrt/openwrt/trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2/root-ar71xx/usr/lib/lua/luci/model]$tree.|--cbi |
|--admin_network |
|
|--dhcp.lua |
|
|--hosts.lua |
|
|--iface_add.lua |
|
|--ifaces.lua |
|
|--network.lua |
|
|--proto_ahcp.lua |
|
|--proto_dhcp.lua |
|
|--proto_l2tp.lua |
|
|--proto_none.lua |
|
|--proto_ppp.lua |
|
|--proto_pppoa.lua |
|
|--proto_pppoe.lua |
|
|--proto_pptp.lua |
|
|--proto_static.lua |
|
|--routes.lua |
|
|--vlan.lua |
|
|--wifi.lua |
|
`--wifi_add.lua |
|--admin_status |
|
`--processes.lua |
|--admin_system |
|
|--admin.lua |
|
|--backupfiles.lua |
|
|--buttons.lua |
|
|--crontab.lua |
|
|--fstab |
|
|
|--mount.lua |
|
|
`--swap.lua |
|
|--fstab.lua |
|
|--ipkg.lua |
|
|--leds.lua |
|
|--startup.lua |
|
`--system.lua |
`--firewall |
|--custom.lua |
|--forward-details.lua |
|--forwards.lua |
|--rule-details.lua |
|--rules.lua |
|--zone-details.lua |
`--zones.lua |--firewall.lua |--ipkg.lua |--network |
`--proto_ppp.lua |--network.lua `--uci.lua 7 directories, 42 files [root@localhost /openwrt
第二篇:教程OpenWRT总结范文
[教程]OpenWRT总结
OpenWRT可以被描述为一个嵌入式的 Linux 发行版,(主流路由器固件有 dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的、静态的系统。OpenWRT的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序
对于开发人员,OpenWRT 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备
由于OpenWRT是基于Linux的发行版,所以就决定了很多的Linux特性在OpenWRT上的继承性,对于路由器来说,这实在是一个极其优良的特性,意味着路由器使用者可以像使用Linux那样去使用这个固件,虽然使用方式因发行版的差距而存在区别
1、安装
OpenWRT官网:https://openwrt.org/
安装的时候要注意固件的硬件版本一定要和路由器硬件版本一致,否则会出现很多的奇葩情况,甚至直接变砖
固件下载:http://downloads.openwrt.org/
可以下载最新的barrier_breaker(14.x rc)版本,也可以选择官方稳定版本attitude_adjustment(12.09),或者是更早的backfire版本(10.x),另外在snapshot目录下还有trunk版本,选择适合自己的版本就好
固件名称的格式:
openwrt-
Example:
openwrt-ar71xx-generic-tl-wr740n-v5-squashfs-factory.bin
openwrt-ar71xx-generic-tl-wr740n-v5-jffs2-factory.bin
openwrt-ar71xx-generic-tl-wr740n-v5-squashfs-sysupgrade.bin
openwrt-ar71xx-generic-tl-wr740n-v5-jffs2-sysupgrade.bin
Firmware 常见的3种扩展名格式TRX, TRX2, BIN
还需要注意的是要分清两个文件factory和sysupgrade的区别,factory固件包含art部分,是从原厂固件升级到op用的,可以在路由器原版固件界面直接软升级,亦或是使用TTL方式刷入路由器,sysupgrade仅包含firmware部分,是已经是op的情况下升级固件用的,除非你对编程器非常了解,否则不推荐使用TTL方式刷入,升级最好的方式就是OpenWRT自带的sysupgrade功能,其次也可以使用mtd命令
当使用原版固件刷固件之后,第一次登录它只有 telnet 被启动,只有设置好root的密码后,我们才可以SSH进行操作
注意:原版固件是没有LUCI等等WEB管理界面的,所以需要文本操作
首先我们要telnet到路由器:(推荐工具:PUTTY)
#telnet 192.168.1.1
设定root密码:
#passwd
之后输入root密码,完成后SSH会自动启动,之后就可以像使用Linux那样去使用了。
2、UCI(Unified Configuration Interface)
UCI是OpenWRT的系统设置工具, 我们可以使用它设置路由器上的一切一切
所需的packages:
uci(/sbin/uci)
libuci(/lib/libuci.so)
所有设置存放在
/etc/config/xxx
常用设置文件:
/etc/config/dhcp#DHCP配置文件
/etc/config/dropbear#SSH配置文件
/etc/config/firewall#OpenWRT防火墙配置文件
/etc/config/network#网络配置文件
/etc/config/system#系统设置文件
/etc/config/timeserver#NTP配置文件
/etc/config/wireless#无线配置文件
配置文件一般格式:
package 'example'
config 'example' 'test'
option
'string'
'some value'
option
'boolean'
'1'
list
'collection'
'first item'
list
'collection'
'second item'
UCI命令行使用方法:
uci
command:
commit #把修改设置写入flash, 并且应用(包括 uci 及人工修改)
show [
#查看设置(compressed notation)
get #查看某个设置值(compressed notation)
changes [config]
set
add_list
delete
revert
export [config] #导出某设置(UCI syntax)
import [config] #导入设置值
Example:
#uci set dhcp.lan.leasetime=4h
#uci set dhcp.lan.leasetime=24h
------
#uci get dhcp.lan.leasetime 24h
------
#uci show dhcp
dhcp.lan=dhcp
dhcp.lan.interface=lan
dhcp.lan.start=100
dhcp.lan.limit=150
dhcp.lan.leasetime=24h
-----
#uci changes
dhcp.lan.leasetime=1
dhcp.lan.leasetime=24h
#uci revert dhcp
#uci get dhcp.lan.leasetime 12h
#uci commit
系统现在的状态:
#uci-P /var/state show network.wan
Usage:uci-P
add a search path for config change files and use as default
顺序问题:
某些设置是有次序之分的, 比如 firewall 的 rule
所以设置有另一种格式
@rule[-1] #[-1] 代表最尾
root@OpenWrt:~# uci add firewall rule
root@OpenWrt:~# uci set firewall.@rule[-1].src=wan
root@OpenWrt:~# uci set firewall.@rule[-1].target=ACCEPT
root@OpenWrt:~# uci set firewall.@rule[-1].proto=tcp
root@OpenWrt:~# uci set firewall.@rule[-1].dest_port=22
root@OpenWrt:~# uci commit firewall
root@OpenWrt:~# /etc/init.d/firewall restart
服务的开机启动:
/etc/init.d/xxx
start 立刻启动服务
enable 每次开机自动启动
3、SSH连接(Dropbear)
设置文件:
/etc/config/dropbear
---
enable <--on
BannerFile <--/etc/banner
Port <--22
GatewayPorts <---tunnel port
Interface <--0.0.0.0
RootLogin <--default: on
RootPasswordAuth <--default: on
SSH From Wan:
/etc/config/firewall
--
#Allow SSH
config rule
option src
wan
option proto
tcp
option dest_port
ssh
option target
ACCEPT
4、包管理工具OPKG
OPKG可以理解为一个小型的包管理工具,具有一般包管理工具具有的主要功能。
设置文件:
/etc/opkg.conf
src/gz snapshots http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages #下載 Packages.gz
dest root /
dest ram /tmp
lists_dir
ext
/var/opkg-lists
# /var/opkg-lists/snapshots
option
overlay_root
/overlay
arch all 100
# package优先次序
lock文件:
/usr/lib/opkg/lock
命令行用法:
opkg [options...] [arguments...]
update
#下载可用的 package 文件(/var/opkg-lists/snapshots)
install
remove
flag hold, noprune, user, ok, installed, unpacked configure upgrade #(找出 pkgs opkg list-upgradable) # 不建议在 SquashFS partition 上使用 download #下载某 package(并没有下载所要的依赖package) 包信息: status [pkg|regexp] info [pkg|regexp] list [pkg|regexp] List available packages list-installed List installed packages files # 有什 files search destination for any package installation.dest root / dest ram /tmp dest mnt /mnt opkg install somepackage-d destination_name Example: -d ram 有用的options: --cache --nodeps Example: 用 winscp 上传所需的 package 到 /tmp/package #opkg install *.ipk 查看依賴性: #opkg depends muninlite muninlite depends on: xinetd Troubleshoot: rm /usr/lib/opkg/lock 5、路由器初始化(FIRSTBOOT) 以下过程只适用于使用 SquashFS 的openwrt路由器 原因是squashfs 才有 failsafe mode Step1: 把 PC 的IP地址设置为192.168.1.2(与路由器在同一网段上) Step2: 长ping 192.168.1.1, 会看到以下情況 #ping-t 192.168.1.1 Ping 192.168.1.1: 回复自 192.168.1.101: 目的地主机无法连接。 请求超时。 回复自 192.168.1.1: 字节=32 time<1ms TTL=64 回复自 192.168.1.1: 字节=32 time<1ms TTL=64 回复自 192.168.1.1: 字节=32 time<1ms TTL=64 请求超时。 请求超时。 请求超时。 请求超时。 回复自 192.168.1.1: 字节=32 time<1ms TTL=64 回复自 192.168.1.1: 字节=32 time<1ms TTL=64 回复自 192.168.1.1: 字节=32 time<1ms TTL=64 回复自 192.168.1.1: 字节=32 time<1ms TTL=64 ---- Step3: 在前段 4 次ping 到的期间按路由器 reset 按键,之后会看到路由器的 LED 狂闪 Step4: 当成功 ping 到路由器时,就可以telnet到路由器了 此时不需要密码即可登录路由器 Step5: 由于系统是在 Read-only file system, 所以要 mount_root 它 r/w 之后才可以重置密码 #passwd 刪除一切設定: #mtd-r erase rootfs_data #相当于firstboot 指令 或者 #firstboot #all settings will be reseted Step6: #reboot-f #Force reboot(initis not running) 注意: 不在 rescuse mode 用 firstboot 是会出问题的,请不要尝试 6、系统升级 我们可以用官方工具去升級固件: sysupgrade 命令行用法: sysupgrade [options] options: -f -n do not save configuration over reflash -v more verbose -c 保留系统设置 #根据/lib/upgrade/keep.d来保留 base-files firewall base-files-essential uhttpd 自己要保留的设置就放在 /etc/sysupgrade.conf 检查固件的完整性: #md5sum-c md5sums -c Check sums against list in FILEs md5sums: 86c3f5da10a7f7350391c0fd191cd9b4 *openwrt-ar71xx-generic-tl-wr740n-v4-squashfs-sysupgrade.bin Example: #md5sum-c md5sums.txt openwrt-ar71xx-generic-tl-wr740n-v4-squashfs-sysupgrade.bin: OK #检查一次 image 的完整性再 upgrade 会避免很多问题 升級: Example: #sysupgrade-v openwrt-ar71xx-generic-tl-wr740n-v3-squashfs-sysupgrade.bin Saving config files...etc/sysctl.conf etc/shells etc/rc.local etc/profile etc/passwd etc/inittab etc/hosts etc/group etc/firewall.user etc/dropbear/dropbear_rsa_host_key etc/dropbear/dropbear_dss_host_key etc/config/wireless etc/config/timeserver etc/config/system etc/config/network etc/config/firewall etc/config/dropbear etc/config/dhcp Switching to ramdisk...Performing system upgrade...Unlocking firmware...Writing from Error fixing up TRX header Upgrade completed Rebooting system...基本上是不会出现什么问题的,有时候刷一些第三方固件时会出现: Invalid image, hardware ID mismatch, hw:07400001 image:07400003.Image check 'platform_check_image' failed.Error: Firmware upgrade is not implemented for this platform.sysupgrade openwrt-ar71xx-generic-tl-wr740n-v4-squashfs-factory.bin Firmware upgrade is not implemented for this platform.root@OpenWrt:/tmp# openwrt-ar71xx-generic-tl-wr740n-v4-squashfs-sysupgrade.bin Firmware upgrade is not implemented for this platform.sysupgrade 解決: #mtd write openwrt-ar71xx-generic-tl-wr740n-v4-squashfs-sysupgrade.bin firmware 注意:使用mtd命令时要注意固件的写入位置,先使用cat /proc/mtd查看当前路由器的固件分区名,部分路由器可能是linux,视情况选择刷入位置 7、mtd(Memory Technology Device) mtd 是一个类似于dd的工具,命令行用法: mtd [option] command: erase write 查看mtd: #cat /proc/mtd dev: size erasesize name mtd0: 00020000 00010000 “u-boot” <--boot loader mtd1: 000e5e00 00010000 “kernel” <--firmware mtd2: 002ea200 00010000 “rootfs” <--firmware mtd3: 00170000 00010000 “rootfs_data” mtd4: 00010000 00010000 “art” mtd5: 003d0000 00010000 “firmware” 配置文件: /dev/mtdX 备份: #dd if=/dev/mtd0 of=/tmp/boot.backup 还原: #mtd-r write /tmp/original_firmware.bin firmware 8、LuCI 主页:http://luci.subsignal.org/trac LuCI是OpenWRT中一个非常常用的WEB端路由器管理页面,可以让OpenWRT路由器像各大厂商路由器那样使用WEB管理界面管理路由器 安裝: #opkg install luci packages: luci #Meta package,它是一大堆 depends uhttpd, luci-mod-admin-full, luci-theme-openwrt, luci-app-firewall,luci-proto-core, luci-proto-ppp, libiwinfo-lua luci-ssl #https luci-theme-openwrt luci-i18n-* luci-app-* luci-app-firewall luci-app-ddns luci-app-ahcp luci-app-freifunk-policyrouting luci-app-multiwan luci-app-ntpc luci-app-openvpn luci-app-qos luci-app-statistics luci-app-samba luci-app-tinyproxy luci-app-vnstat luci-app-wol luci-app-wshaper luci-proto-ppp <---PPPoE luci-proto-pptp pptp ppp kmod-gre resolveip 启用: #/etc/init.d/uhttpd enable #/etc/init.d/uhttpd start Tips: <--started at every boot Hostnames: tim-pc.lan #要配合 domain 使用 Unsaved Change: 本文出自 Server&Coding...,转载时请注明出处及相应链接。0 OpenWRT « [教程]CentOS6搭建PPTPVPN [整理]OpenWRT路由器校园网IPv6大法» 发表评论 电子邮件地址不会被公开。必填项已用*标注 姓名 * 电子邮件 * 站点 文档说明: 本文档简述了openwrt sdk的升级功能流程,从页面传入升级文件到升级文件检测,再到调用升级脚本进行升级,升级完成后,进行系统重启。最后简述了如何添加升级文件标识,标识包括自己定义的字段,以及升级软件的md5值。达到防止用户用其他openwrt sdk编译出来的固件刷新我们的系统,以及防止升级软件被破坏。 文档需要用到的文件及在sdk中的路径(某些文件路径可能随项目的不同而改动):./package/ralink/ui/luci-mtk/src/modules/admin-full/luasrc/controller/admin/system.lua./target/linux/ramips/image/ Makefile./package/base-files/files/lib/upgrade/common.sh./package/base-files/files/lib/functions.sh./package/base-files/files/sbin/sysupgrade./target/linux/ramips/base-files/lib/ramips.sh./target/linux/ramips/base-files/lib/upgrade/platform.sh 文档正文: 1.从页面接受传过来的升级文件 作为整个流程的开始,功能实现在文件system.lua中。 这是一个lua文件,很容易在function index函数中找到系统升级功能的入口函数:action_flashops。在这个函数中首先通过fp = io.open(image_tmp, “w”)打开升级临时文件:/tmp/firmware.img,打开后通过fp:write(chunk)写入页面传进来的升级文件。到这里,接受升级文件完成。 2.检测升级文件的合法性 实现同样在文件system.lua中。 在函数image_supported()中进行检测,这个函数通过image magic number来检测升级文件是否合法。函数image_supported()会调用platform.sh脚本中的platform_check_image函数,platform_check_image函数调用ramips.sh脚本中的ramips_board_name函数,获取board name,ramips_board_name函数从文件 /tmp/sysinfo/board_name 中获取board name,若没有则为unknown,并返回给调用者,我用的板是ralink-soc。platform_check_image函数继续调用common.sh脚本中的get_magic_long函数,用以获取升级文件magic,就是升级文件前4位。get_magic_long函数调用common.sh脚本中的get_image函数用以获取文件/tmp/firmware.img内容,其实就是cat /tmp/firmware.img.获取到的内容,通过dd bs=4 count=1,来获取前4位,最后通过hexdump-v-n 4-e '1/1 “%02x”'处理以十六进制编码返回调用者。获取到的升级文件magic,在platform_check_image函数中与27051956做对比,这个值是在固件编译的时候已经定好了的。如果相等,就是合法的升级文件,继续升级动作;不相等则为非法升级文件,做一些后续处理并终止升级动作。到这里检测升级文件合法性完成。 3.检测升级文件不合法后的处理 实现同样在文件system.lua中。检测到不合法后,通过nixio.fs.unlink(image_tmp)来删除临时文件/tmp/firmware.img,并通过image_invalid = true,设置检测失败,用以通知页面显示提示信息。终止升级。处理完成。4.检测升级文件合法后的处理 实现同样在文件system.lua中。 检测到升级文件合法后,会获取一些升级文件相关的信息,用以在页面显示:调用image_checksum(),获取checksum;调用storage_size(),获取可用空间大小;调用nixio.fs.stat(image_tmp).size,获取升级文件大小;以及页面传过来的是否保存配置的值;其中,image_checksum()函数用的是md5sum命令,storage_size()函数是在系统文件/proc/mtd中找到firmware分区大小。 接下来如果用户选择进行升级文件,则会现在页面上打印一些提示信息,用于提示用户:正在升级,不要断开电源等等。 文件system.lua最后的处理就是调用升级脚本:fork_exec(“killall dropbear uhttpd;sleep 1;/sbin/sysupgrade %s %q” %{ keep, image_tmp })。 这条语句,先清除dropbear 和uhttpd进程,再等待1秒,最后调用升级脚本sysupgrade,传过去的参数就是keep:是否要保存配置;image_tmp:升级文件/tmp/firmware.img。OK,到这里system.lua文件中关于升级前的准备工作都完成了,视线请转到升级脚本sysupgrade上。 5.运行升级脚本 实现在文件sysupgrade中。 脚本开始,像所有的主体处理程序一样,会对传进来的参数进行处理。下面对这些参数的介绍: -i 开启交互模式 -d 重启前延迟,延迟秒数是传进来的 -v 会打印sysupgrade脚本中的一些信息,脚本中默认打印-q 与-v相反 -n 升级后不保存配置,默认保存配置-c 保存所有的改动配置文件到/etc/-b 用sysupgrade.conf中指定的文件,创建.tar.gz格式备份文件-r 用上步创建的.tar.gz文件,恢复配置-l 列出将会备份的文件列表-f 从.tar.gz恢复配置 -F 即使升级文件检测失败,也要升级,这个参数是危险的,慎用-T 验证升级文件和.tar.gz配置文件,但不升级-h 打印帮助信息 这些参数的使用在脚本中都有介绍,不再多讲。 接下来:[-z “$ARGV”-a-z “$NEED_IMAGE”-o $HELP-gt 0 ],意思是:如果没有升级文件参数,且没有命令行参数-b(create-backup),-r(restore-backup),或者带有-h(help)参数,则打印帮助信息。这个条件为真的话,会在终端打印帮助信息,退出脚本。 接下来:[-n “$ARGV”-a-n “$NEED_IMAGE” ],意思是:不要指定-b或-r(创建配置、恢复配置)的同时,指定升级文件。为真的话,打印提示信息,退出脚本。 接下来:[ “$CONF_BACKUP” = “-” ] && export VERBOSE=0,意思是:选择备份配置但传进来的文件为“-”时,不打印备份文件时的过程。下面展示一下-v选项的作用: 带-v时的升级过程: root@OpenWrt:/# sysupgrade-i-v /tmp/firmware.img Keep config files over reflash(Y/n): y Edit config file list(y/N): n Saving config files...etc/config/dhcp etc/config/dropbear etc/config/firewall etc/config/fstab etc/config/luci etc/config/network etc/config/system etc/config/ucitrack etc/config/uhttpd etc/config/wireless etc/dropbear/dropbear_dss_host_key etc/dropbear/dropbear_rsa_host_key etc/group etc/hosts etc/inittab etc/passwd etc/profile etc/rc.local etc/shells etc/sysctl.conf Sending TERM to remaining processes...dnsmasq ubusd btnd logd netifd uhttpd ntpd Sending KILL to remaining processes...Switching to ramdisk...Performing system upgrade...Unlocking firmware...Writing from 不带-v时的升级过程: root@OpenWrt:/# sysupgrade-i /tmp/firmware.img Keep config files over reflash(Y/n): y Edit config file list(y/N): n Saving config files...Sending TERM to remaining processes...dnsmasq ubusd btnd logd netifd uhttpd ntpd Sending KILL to remaining processes...Switching to ramdisk...Performing system upgrade...Unlocking firmware...Writing from 继续分析: if [ $CONF_BACKUP_LIST-eq 1 ];then add_uci_conffiles “$CONFFILES” cat “$CONFFILES” rm-f “$CONFFILES” exit 0 fi 如果需要列出配置文件列表,就 调用add_uci_conffiles函数生成列表,并打印到终端。函数add_uci_conffiles(),找出需要保存的配置文件。通过在文件/etc/sysupgrade.conf中,/lib/upgrade/keep.d/*目录下,以及命令opkg list-changed-conffiles的输出中,找出配置 文件,其中opkg list-changed-conffiles 列出用户修改的配置文件。 接下来: if [-n “$CONF_BACKUP” ];then do_save_conffiles “$CONF_BACKUP” exit $? fi 如果需要创建配置备份文件,则调用函数do_save_conffiles,生成配置文件。函数do_save_conffiles(),打包上一部列出的 配置文件。 接下来: if [-n “$CONF_RESTORE” ];then ###需要恢复配置 if [ “$CONF_RESTORE”!= “-” ] && [!-f “$CONF_RESTORE” ];then ###判断所需要的配置文件是否存在 echo “Backup archive '$CONF_RESTORE' not found.” exit 1 fi [ “$VERBOSE”-gt 1 ] && TAR_V=“v” || TAR_V=“" tar-C /-x${TAR_V}zf ”$CONF_RESTORE“ exit $? fi 经过一些判断,解压配置文件 包。接下来: type platform_check_image,检测platform_check_image命令是否存在,为了 下步做准备。找不到的话,脚本 退出,升级终止。 接下来: for check in $sysupgrade_image_check; do(eval ”$check “$ARGV”“)|| { ###通过board name 和image magic number来判断升级文件是否合法 if [ $FORCE-eq 1 ];then ####检测失败了,但是因为设置了-F选项,强制升级,停止检测 echo ”Image check '$check' failed but--force given“${PART_NAME:-image}” else get_image “$1” | mtd write-“${PART_NAME:-image}” fi } 介绍一下这个函数,sync命令的作用是,将有关文件系统的存储器常驻信息送入物理介质内,以确保文件系统的完整性。然后就是根据是否需要保存配置去分别调用mtd命令,去完成升级。 接下来: v “Upgrade completed” [-n “$DELAY” ] && sleep “$DELAY” ask_bool 1 “Reboot” && { v “Rebooting system...” reboot-f sleep 5 echo b 2>/dev/null >/proc/sysrq-trigger 升级完了,需要重启了。整个升级流程到这里,就完成了。 6.添加升级文件标识以及升级文件md5值 功能很简单,就是在升级文件前添加一个自定义的字段,以及升级软件的md5值。用以阻止刷机,以及升级文件被破坏。字段以及md5值添加在编译时进行的。字段、md5值取出,是在升级文件检测时进行的。添加字段: 在Makefile(路径前面已经列出)文件中,最后生成升级文件的地方添加。define MkImageSysupgrade/squashfs $(eval output_name=$(IMG_PREFIX)-$(2)-$(1)-$(if $(4),$(4),sysupgrade).bin)$(eval output_name_tmp=$(IMG_PREFIX)-$(2)-$(1)-$(if $(4),$(4),sysupgrade_tmp).bin)cat $(KDIR)/vmlinux-$(2).uImage $(KDIR)/root.$(1)> $(KDIR)/$(output_name)$(call prepare_generic_squashfs,$(KDIR)/$(output_name))if [ `stat-c%s “$(KDIR)/$(output_name)”`-gt $(3)];then echo “Warning: $(KDIR)/$(output_name)is too big” >&2;else $(CP)$(KDIR)/$(output_name)$(BIN_DIR)/$(output_name_tmp);fi + echo “100msh” > $(BIN_DIR)/mykey + md5sum $(BIN_DIR)/$(output_name_tmp)| cut-d ' '-f 1 >> $(BIN_DIR)/mykey + cat $(BIN_DIR)/mykey $(BIN_DIR)/$(output_name_tmp)> $(BIN_DIR)/$(output_name)+ rm-rf $(BIN_DIR)/$(output_name_tmp)+ rm-rf $(BIN_DIR)/mykey endef行前有+号的地方就是添加的代码。添加了”100msh“字段在升级文件前。 字段取出: get_image(){ # case “$from” in http://*|ftp://*)cmd=“wget-O--q”;; *)cmd=“cat”;;esac if [-z “$conc” ];then local magic=“$(eval $cmd $from 2>/dev/null | dd bs=2 count=1 2>/dev/null | hexdump-n 2-e '1/1 ”%02x“')” case “$magic” in 1f8b)conc=“zcat”;; 425a)conc=“bzcat”;; esac fi + eval “$cmd $from 2>/dev/null ${conc:+| $conc} > /tmp/myupfile” + head-n 1 /tmp/myupfile > /tmp/check + grep-q “100msh” /tmp/check && + { + echo “OK” > /tmp/ok + }|| + { + echo “Illegal platform” > /tmp/nok + exit 1 + } + sed-i “1d” /tmp/myupfile + head-n 1 /tmp/myupfile > /tmp/check + sed-i “1d” /tmp/myupfile + md5sum /tmp/myupfile | cut-d ' '-f 1 > /tmp/mymd5 + diff-r /tmp/check /tmp/mymd5 + if [ $?-ne 0 ];then + echo different + exit 1 + fi + rm-rf /tmp/check /tmp/mymd5 + cat /tmp/myupfile + } 行前有+号的地方,就是添加的代码。就是取出第一行,其他不变。 另外default_do_upgrade()函数中的get_image “$1”,修改成cat /tmp/myupfile,因为在调用default_do_upgrade()函数时,get_image函数中有些命令已经不能再用。 OK,文档到此结束。 水平有限,如有错误,请多包涵。 2015.10.30 河北省重症专科护士培训学习总结 重症监护室----杨伶坡 在院领导及护理部的大力支持下,我有幸成为进修学习中的一员。于2012年11月25日至2013年1月23日参加了由河北省中华护理协会组织的为期两个月的重症护理专科培训班,通过这次培训使我增进了重症专业的了解,进一步掌握了抢救仪器的使用,并在原来的基础上学会许多重症护理的新理论、新知识、新技术。顺利的通过了理论考试和实践技能考试,现将学习总结如下: 我们的学习分为两个阶段:基础理论课程一个月,专业技能实践一个月。在基础理论的学习中,授课的老师均是来自省三级甲等医院,具有极其丰富的理论和临床经验,从解剖到病理生理,从仪器的使用到各种急危重症的抢救,讲解的非常透彻,使我认识到重症专科护理人员迫切的需要系统化、专业化和规范化,需要有与时俱进的护理技术与理论指导。在课上,我认真听课,做好笔记,保留好每一份课件。虽然课程多,时间紧,但是我利用课余时间将课上理解不了的仔细阅读,反复研究,加以领会,做到了和老师讲解同步走。通过这一阶段理论学习,使我对重症专科护理有了新的认识,在理论知识方面有了很大的提高。 第二个月为临床实践。按照护理协会的安排,我的实践医院是石家庄市第一医院,石家庄市第一医院也是省级三级 甲等医院,在医院的重症医学科里,我和带教老师一起倒班、值班,由于医院的病人种类和数量多,因此各种抢救器材应用次数较多,为我进一步的熟练掌握各种急危重症的护理,各种抢救仪器的使用提供了环境。在这里我接触了有创动脉压的测定及护理,PICC导管和CVC导管的维护,科室内动脉血气分析仪使用、利用GCS评分对患者意识的评估等,通过护士长精心指导和带教老师的耐心讲解,我把前一个月所学相关上述理论知识与实践操作紧密相结合,在与科里带教老师一起倒班、值班的时候我抓住一切操作机会去主动加以实践,学会了这些新技术、新方法,能够独立较好地完成重症监护各项护理操作。 二个月的学期结束后,我顺利通过了理论考试和实践技能考试,成绩合格,取得了河北省重症专科护士结业证书。虽然通过学习,自己在理论和操作上有了一定的提高,但离院领导和工作要求还存在一些不足,我会在以后的工作中继续完善自己,并将所学知识与我科重症监护室的护理人员一起应用到实践中去,从而提高我科的护理水平,为提高我科的护理水平做出应有的贡献。 二0一三年一月三十日 深圳“心康乐”特殊儿童训练中心培训心得 首先,感谢各上级领导能给予我这一次培训学习的机会,让我受益匪浅,感受颇深,从8月14日至8月22日,在深圳心康乐特殊儿童训练中心为期九天的培训学习期间,从理论到实操,从听课到交谈,还是从所听到所闻,每一堂课都让我有所收获,加之与众多老师的相互交流借鉴工作经验、思路方法,不但让自己在理论上进一步得到充实,开阔了视野,提高了工作水平,也让我学到了很多与之教学工作相关的新知识,归纳起来主要还有以下几点: 一.结构化教学(TEACCH)结构化教学法的主要有:物理性的结构化、时间表、作业流程、视觉结构化和例行程序五个重要内容组成(两个策略、三种形式),将其灵活地运用于康复训练中。利用图片、照片等视觉材料给特殊儿童提供视觉提示,帮助他们提高理解能力,同时通过视觉提示卡安排一日活动的流程,这样系统地设计了教学环境,就能帮助特殊儿童理解环境,适应环境的要求,掌握其中的意义及教导者的要求,从而避免了很多行为问题的产生,最终使特殊儿童能较容易地独立跟上环境的要求、能帮助儿童把注意力集中在要做的事情上,从而减弱了某些与学习无关因素对他们的影响、有助于培养和提高特殊儿童有组织、有次序地完成工作的能力等。 二、感觉统合训练(SIT) 感觉统合是高级中枢将从身体各种感觉器官传来的信息进行多次的组织分析、综合处理,从而作出正确决策,使个体和谐有效地运作。虽然我们在教学中也运用了感觉统合训练,但是对于感觉统合训练的方式方法及理论知识没有达到更深层次的了解。在此次学习期间,老师们为我们系统的阐释了感统训练的方法、游戏及理论知识。例如部分感觉统合的训练方法:滑板俯卧撑地爬、插棍、独脚椅、趴地推球、平衡台和袋鼠跳、蹦蹦床、晃动平衡木、圆木马吊缆、圆筒吊缆等等。 当然时代在迅速地变化,我们的教学方法也要变,光靠理论说教显然不行,应该根据孩子身心发展的需要,更多地进行针对性地训练。 三、ABA教学方法 ABA教学的含义:是一种以分解目标、强化和辅助为原则,以回合式操作教学法作为具体操作法,以教师或儿童家长所组成的干预小组对孤独症儿童进行干预训练的形式。强调将每一项要教的技能分成小的步骤,然后一步步地反复练习,使用提示帮助孩子做出正确的反应,并给与适当及时的奖励与惩罚。 ABA教学的操作方法:(1)孩子必须先学会每项技能的第一步,才可以开始学第二步。我们可以把技能分成很小的步骤,这叫“分解目标”;比如,要教孩子学习洗手就有好几个步骤:打开水龙头,搓手,擦肥皂,再搓手,关水,把手擦干„„。在这个过程中一定要使用“辅助”和“强化”来促使孩子正确反应,完成要求。 (2)ABA的分解式操作教学(DTT)与传统的经典的教学方法不一样。它是由指令、反应和结果三个环节构成的。经典的教学方法是给孩子提供(看或讲)很多的信息内容,孩子在教授过程中只需被动地“听”,无需明确地作出反应。ABA教法就不一样,只给孩子很少的“信息”(比如两张动物的卡片和一个指令:“把牛给我”),对孩子的要求十分明确,孩子对此也十分清楚。因此,应该说ABA不是那种被动、消极的学习方式,而是一种积极的学习方法。每次“操作”时孩子必须作出反应。这种方式很适于特殊儿童的训练。 反复练习是ABA的一个重要特点。因为使用了强化和提示,孩子才愿意反复进行练习。因为反复进行练习,孩子才能更快、更好地掌握新的技能。但是在反复练习时,要寻找各种不同的材料和例子,使孩子所学的技能够得到泛化,另外也可增加孩子的兴趣。 四.小组课 小组课内容涉及范围较多,有社交活动、奥尔夫音乐、认知。语言等。比如社交活动:是从简单活动开始, 确保教导的每项技巧都有价值、有意义。使其主动并有能力参与人际关系,让他们有自信可以胜任,能和能力相当的伙伴平起平坐,可以提高彼此的察觉度,主动调整活动步调。再比如奥尔夫音乐教学是原本性的音乐教育,是和动作、舞蹈、语言紧密结合在一起的;它是一种孩子们必需自己参与的音乐,它让每一个孩子都有了机会来感受和表现音乐的丰富,也不再只是被动地聆听而是让孩子进入表现音乐的阶段,使学习音乐不再那么枯燥、无味。 在此次培训中,我们不仅学习了上述的几方面,还学习了言语治疗、自闭症儿童心理教育评核(PEP-3)等等。总之,通过这次学习,使自身的理论知识和实际操作、工作水平有了全面增长。我会把此次培训的收获和感悟应用到今后的学习、工作和生活中,继续加强学习、不断鞭策自己,让自己更能帮助到这群特殊的孩子们,为我市康复事业献出自己的一份绵薄之力。 谢范 2014年8月25日第三篇:openwrt升级功能流程简介
第四篇:学习总结
第五篇:学习总结