收藏人:mirkerson
2015-08-31 | 阅:1  转:1  
|   来源
  |  分享 
 

http://m.blog.csdn.net/blog/jiaozi07/41774357

该文章讲解一下在AR9331上使用Openwrt的编译修改方法,前面先介绍一下硬件平台特点,为后面的代码修改做铺垫,然后描述一下Openwrt的编译烧写流程,最后再重点讲述编译配置、代码修改细节。

1. 硬件平台

手头上ar9331模块64MB DDR2,8MB spi flash,配合底板的硬件特点如下:

Port4

WAN

Port0

LAN1

Port1

LAN2

Port2

LAN3

Port3

LAN4

LED0_GPIO0

WLAN_LED(Active High)

LED1_GPIO1

USB_LED(Active High)

LED2_GPIO13

LAN1_LED(Active High)

LED3_GPIO14

LAN2_LED(Active High)

LED4_GPIO15

LAN3_LED(Active High)

LED5_GPIO16

LAN4_LED(Active High)

LED6_GPIO17

WAN_LED(Active Low)

LED7_GPIO27

SYSTEM_LED(Active Low)

LED8_GPIO26

NC

JS_GPIO11

WPS

ResetSwitch_GPIO12

Reset

GPIO23

User Key

GPIO18/I2S_CK

控制引脚

GPIO22/I2S_MICIN

控制引脚

2. 编译烧写流程

2.1. 依赖库

使用Ubuntu进行编译开发,需要安装的依赖库如下:

apt-get install build-essential asciidoc binutils bzip2 gawk gettext \git libncurses5-dev libz-dev patch unzip zlib1g-dev等等。

还需要安装svn,apt-get install subversion。

2.2. 下载源码

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

2.3. 编译

以下为编译步骤,在make menuconfig中做的配置将在后面具体介绍,在make V=s前需要做一些移植修改也将在后面具体介绍。

cd trunk/

svn up

cp feeds.conf.default feeds.conf

./scripts/feeds update -a

./scripts/feeds install -a

make menuconfig

Make V=s

最终在trunk/bin/ar71xx/目录下得到最终的烧写目标代码(在此以mr3220-v2路由为基础),openwrt-ar71xx-generic-tl-mr3220-v2-squashfs-factory.bin。

2.4. 烧写

官方的Linux SDK开发包的烧录代码与Openwrt的烧录代码的分区规划不同,如果原来开发板上烧录的是官方的linux SDK代码,则需要先将刷新适用于Openwrt的Uboot,然后再烧写上一步中生成的openwrt-ar71xx-generic-tl-mr3220-v2-squashfs-factory.bin。

对开发板烧写程序可以通过多种方式实现:在Uboot中烧写Uboot与固件、编程器烧写、Web配置界面中程序升级。

2.4.1. 烧写Uboot

使用网线连接开发板与PC,然后连接上串口监控(115200-8-n-1,这里使用SecureCRT),开发板上电,在SecureCRT中看到Uboot打印信息,按任意键打断启动进入Uboot命令行,使用printenv命令查看启动参数,记录下serverip,例如为192.168.1.2,并将PC更改为该IP。PC端开启Tftp Sever软件,在uboot命令行中输入命令如下:

#tftpboot 0x80060000 u-boot-ar9331.bin

#erase 0x9f000000 +0x200000

#cp.b 0x80060000 0x9f000000 0x20000

重启开发板,看到uboot正常打印。

2.4.2. 烧写固件

同上面烧写uboot一样,进入uboot命令行模式,输入如下命令:

#tftpboot 0x80060000 openwrt-ar71xx-generic-tl-mr3220-v2-squashfs-factory.bin

#erase 0x9f020000 +0x7c0000

#cp.b 0x80060000 0x9f02000 0x7c0000

2.4.3. 编程器拯救板砖

上面两种方式前提是目标板不是板砖,万一变砖或者开发板上未烧写过程序,则需要使用编程器来烧写目标代码,这就是对普通的SPI flash烧录程序方法,只要知道芯片型号,有固件就行了。

2.4.4. Web升级程序

对于能正常启动的AR9331开发板可以通过web升级程序,登录到web配置界面后选择System->Backup/Flash Firmware,然后选择要升级的固件。

注意这种方式只能升级统一型号的路由固件,如现在正在运行的是wr720的固件,你编译了一个wr740的固件,是无法通过web升级的,只能通过上面在Uboot中烧写固件的方式进行升级。

3. menuconfig配置

这里将介绍上面编译步骤中的make menuconfig中的具体配置。在这里配置时候使用MR3220-V2路由器为蓝本。

开始配置,首先选择CPU与路由型号:

Target System—–Atheros AR71xx/AR7240/AR913x/AR934x

Target Profile—-TP-LINK MR3220

Kernel Modules配置:

Kernel modules —> Native Language Support —> <*> kmod-nls-utf8

Luci配置如下:

LuCI—>Collections—– <*> luci

LuCI—>Applications —> <*>luci-app-qos

LuCI—>Themes —> <*>luci-theme-openwrt

LuCI—>Translations—- <*> luci-i18n-Chinese

LuCI—>Translations—- <*> luci-i18n-English

Network配置:

Network—>Routing and Redirection—- <*> ip

在这里我们只做了必须的配置,更加丰富的功能可以再额外配置添加,如常见的USB storage、3G、Network Share(Samba)等等。

4. 代码修改

在这里我们做的移植中有些可以通过直接修改开发板中的配置文件来实现,而不需要重新编译固件,但是我们要的是一个编出来就是默认配置的固件,所以以下移植都将是在编译前实现的。

4.1. 编译权限

个人不喜欢在非root权限下编译,为此做一下简单修改使得能够在root权限下进行编译,修改/trunk/include/prereq-build.mk将原来的require non-root修改为root

define Require/non-root

#[ "$$(shell whoami)" != "root" ]

[ "$$(shell whoami)" != "noroot" ]

endef

4.2. flash配置

手头上的AR9331核心板上使用的是8MB的dataflash,而标配的MR3220-V2路由是4MB,为此我们需要修改:

trunk/tools/firmware-utils/src/mktplinkfw中MR3220-V2配置为8MB

.id = "TL-MR3220v2",

.hw_id = HWID_TL_MR3220_V2,

.hw_rev = 1,

.layout_id = "4Mlzma", //改为 8Mlzma

trunk/target/linux/ar71xx/image/Makefile中对应MR3220-V2处flash大小为8MB:

MR3220-V2,MR3220-V2,MR3220-V2,ttyATH0,115200,0x32200002,1,8Mlzma

4.3. Wifi配置

Openwrt编译出来的固件,wifi默认是不开启的,需要做一些修改让其上电自动开启AP模式。修改trunk/package/kernel/mac80211/files/lib/wifi/mac80211.sh,其中的detect_mac80211函数中就对wifi-device和wifi-iface即无线物理设配与无线接口做了具体的配置。

在wifi-device配置中屏蔽掉“option disable 1”这句就能使wifi上电自启动了,也可以对channel、hwmode、txpower做进一步的配置,如channel设置为auto,txpower设置为30dBm。

在wifi-iface配置中可以改变wifi的模式(mode)、名字(ssid)、加密方式(encryption)、密码(key)。

如下是一个最终配置示例,这其实也就是生成的/etc/config/wireless配置文件。

4.4. 设置默认登陆密码

Openwrt默认不设置密码,而我们需要一个默认的登陆密码,这可以通过修改package/base-files/files/etc/shadow来实现,修改root项如下:

root:$1$PjtjPtvn$F7wPtGnsC8lhpfJsB39.E/:16357:0:99999:7:::  (对应密码123456)

或者

root:$1$0CVWiweD$4Xsq83ZIZtPJe8PVLfqJH0:16357:0:99999:7::: (对应密码admin)

注意Openwrt的登陆用户名为root,且当设置了密码后将不能在使用Telnet来登陆目标板,需使用SSH。

4.5. 设置LAN默认IP

Openwrt固件LAN口默认ip为192.168.1.1,我们可以通过如下方法在编译中修改默认ip:

在trunk目录下新建files/etc/config/目录,然后将已经个性化定制好的network配置文件放在这个目录下,这样再编译出来的固件将执行这个network配置。在此我们只要修改lan口的ipaddr即可,如下所示:

config interface 'lan'

option ifname 'eth1'

option force_link '1'

option type 'bridge'

option proto 'static'

option netmask '255.255.255.0'

option ip6assign '60'

option ipaddr '192.168.12.10'

最根本的方式是通过修改文件package/base-files/files/lib/functions/uci-defaults.sh实现,修改函数ucidef_set_interface_lan中lan口ip即可。

4.6. 串口释放

AR9331只有一个调试串口,如果想要释放调试串口用作他用比如通信等,为此需要释放系统console打印,具体方法如下:

在target/linux/ar71xx/base-files/etc/inittab中注释掉::askconsole:/bin/ash --login,也就是注释掉这个console登陆。

在package/base-files/files/etc/config/system文件中config system下添加以下两句

option 'conloglevel' '1'

option 'kconloglevel' '1'

简单测试:开发板串口连接pc,打开SecureCRT,配115200-8-n-1,使用ssh登陆到开发板,命令行下输入”echo test serial > /dev/ttyATH0”,看到PC端接收正常。

4.7. GPIO控制

如果想使用AR9331的一些GPIO引脚来做一些简单逻辑控制,则需要通过注册gpio设备来实现,修改target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr741nd-v4.c文件

在tl_mr3220_v2_setup函数中添加我们需要的GPIO管脚注册即可,如:

gpio_request_one(18,GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED, "Control GPIO18");

这里的18即是GPIO18,GPIOF_OUT_INIT_LOW限定初始化输出低电平,后面的名字可以自定。

系统启动后可以看到GPIO注册成功:

#ls /sys/class/gpio/

#export gpio18/ gpio22/ gpiochip0/ uexport/

可以使用cat命令获取管脚当前输出值,使用echo命令设置管脚输出。如下:

#cat gpio18/value

1

#echo 0 > gpio18/value

#cat gpio18/value

0

这里说明一下,在写C代码程序控制时候可以直接调用system()函数运行linux命令,比如在你的代码中你想控制GPIO18引脚的输出,那么你可以如下使用。

system(“echo 0 > /sys/class/gpio/gpio22/value”);

4.8. 按键与指示灯

target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr741nd-v4.c文件中对各按键及指示灯定义,具体如下:

  • l GPIO12做复位按键,短按则实现路由复位,长按大于5s则复位路由并恢复默认设置
  • l GPIO11做WPS输入按键
  • l GPIO17 做WAN口指示灯,对应Port4,低有效
  • l GPIO13 LAN1指示灯,对应Port1,高有效
  • l GPIO14 LAN2指示灯,对应Port1,高有效
  • l GPIO15 LAN3指示灯,对应Port1,高有效
  • l GPIO16 LAN4指示灯,对应Port1,高有效
  • l GPIO0  WIFI指示灯,高有效
  • l GPIO27 SYSTEM指示灯,低有效

此外将Port4与Port0的对换撤销掉,即恢复为使用Port4做wan口,将tl_ap121_setup函数中的

ath79_setup_ar933x_phy4_switch(true,true);

改为

ath79_setup_ar933x_phy4_switch(false, false);

修改target/linux/ar71xx/base-files/etc/uci-defaults/01_leds中mr3220-v2灯定义如下:

tl-mr3220-v2)

ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"

ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x02"

ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x04"

ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x08"

ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x10"

ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"

#ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1"

4.9. 时间同步

修改package/base-files/files/etc/config/system文件如下,这样默认同步时间正确。

config system

option hostname 'You can Define'

option zonename 'Asia/Shanghai'

option timezone 'CST-8'

注:这里hostname可以改成你想要的主机名字,将来在web页面中显示的也将是这个主机名。

4.10. 语言及主题设置

编译中的默认设置为auto,即自动识别,这将根据浏览器设置而定,例如我们使用ie、360浏览器,登陆后得到的是英文界面,而使用火狐则是中文界面。如果向默认设置问中文,则修改build_dir/feeds/luci/modules/base/root/etc/config/luci配置文件,将默认auto修改问zh_cn,并将主题锁定为bootstrap

config core 'main'

option lang 'zh_cn'

option mediaurlbase '/luci-static/bootstrap'

option resourcebase '/luci-static/resources'

4.11. 自定义脚本的使用

Openwrt为用户预留的自定义启动脚本/package/base-files/files/etc/rc.local来实现一些扩展功能,我们可以在这里添加一些命令,或者调用一个外部脚本来实现一些扩展功能。

在AR9331上使用Openwrt 默认开启wifi相关推荐

  1. 在AR9331上使用Openwrt

    该文章讲解一下在AR9331上使用Openwrt的编译修改方法,前面先介绍一下硬件平台特点,为后面的代码修改做铺垫,然后描述一下Openwrt的编译烧写流程,最后再重点讲述编译配置.代码修改细节. 1 ...

  2. Android 11.0 12.0系统默认开启wifi

    1.概述 在11.0 12.0的系统中产品开发中,系统的wifi功能是默认关闭的,由于项目需要要求默认打开wifi,开机后直接连wifi就可以了 所以需要找到系统默认的关闭wifi的地方 打开wifi ...

  3. Android 10.0 系统默认开启wifi

    1.概述 在10.0的系统产品中wifi是默认关闭的,由于的纯wifi的产品,所以需要要求默认打开wifi,开机后直接连wifi就可以了 所以需要找到相关的开关默认打开就可以了,然后开始连接wifi ...

  4. 修改openwrt或者LEDE默认wifi名称以及默认开启wifi

    修改文件为mac80211.sh 默认位置在:/lede/package/kernel/mac80211/files/lib/wifi 将set wireless.radio${devidx}.dis ...

  5. 无线路由器上安装OpenWRT,在需要标准802.1x认证的网络中无线上网

    学校一直用H3C客户端上网,因此无法直接使用无线路由器.后来去一些论坛时常看见DD-WRT和OpenWrt这两个词,也初步了解到wpa_supplicant.njit-client.mentohust ...

  6. linux wifi repeater,WHR-G300N V2 上使用 OpenWrt 构建 WDS 无线网络扩展

    刷入 OpenWrt Buffalo WHR-G300N V2 的硬件和 WHR-G301 一样,所以可以直接使用针对它的固件.若是还没有在 Buffalo WHR-G300N V2 刷入 OpenW ...

  7. 红旗linux如何联wifi,8089B开启Wifi的方法(默认的红旗linux系统)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 9月初收到的8089B,上手一个月,用起来还不错. 这台电脑适合学习编程和linux. 默认的红旗linux下使用wifi挺方便,就是KDE加上Netwo ...

  8. 红旗Linux系统怎么开启,8089B开启Wifi的方法(默认的红旗linux系统)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 9月初收到的8089B,上手一个月,用起来还不错. 这台电脑适合学习编程和linux. 默认的红旗linux下使用wifi挺方便,就是KDE加上Netwo ...

  9. 龙芯linux默认密码,8089B开启Wifi的方法(默认的红旗linux系统)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 9月初收到的8089B,上手一个月,用起来还不错. 这台电脑适合学习编程和linux. 默认的红旗linux下使用wifi挺方便,就是KDE加上Netwo ...

最新文章

  1. python储存数据的容器_Python基础四容器类数据
  2. 2.1 帮助命令、用户管理、压缩
  3. php 修改 wordpress,修改WordPress中文章编辑器的样式的方法详解
  4. Hystrix使用与分析
  5. thinkphp+extjs +jquery CMS管理系统
  6. mysql 分词搜索_实战 | canal 实现Mysql到Elasticsearch实时增量同步
  7. c语言三阶素数魔方阵,用C语言构造3*3素数魔方阵,即找出9个不大于500的素数并排成魔方阵。...
  8. Java重写equals方法时为什么要重写hashCode方法
  9. RC充放电网络的定量计算
  10. 新型计算机病毒2017,【2017年整理】计算机病毒(修改好).ppt
  11. 《JavaScript高级程序设计》学习笔记 JavaScript基本(1)
  12. dubbo源代码编译打包错误解决
  13. android平板电脑 刷机工具,小白必看,安卓平板电脑刷机教程之一键刷机
  14. 外国程序员求助:快 40 了,不知道以后该怎么办
  15. linux查找文件中的字符串
  16. ADO/ADO.NET
  17. 结对项目——最大联通子数组
  18. Scrapy爬取P2P新闻入门教程
  19. 写给初入行,刚接触Auto CAD的新人一些建议——第一期
  20. Windows XP系统优化超简单实用版

热门文章

  1. PG PL SE PM都是什么意思 职责划分
  2. 从Excel中复制数据
  3. 抛开鼠标,像极客一样工作!
  4. CSDN付费专栏上线,写文章变现的机会来了!
  5. 渗透测试-web渗透本质–信息收集
  6. 爬取新浪网股票并实现界面化1.0(pyqt5)
  7. 办公计算机第一安全责任人,办公人员安全责任书
  8. 2015年,移动互联网进入拼“活跃度”时代
  9. 为CSDN博客添加打赏功能
  10. C++-练习-105