TA的每日心情 | 奋斗 2017-5-23 16:15 |
---|
签到天数: 12 天 连续签到: 1 天 [LV.3]偶尔看看II
|
本帖最后由 cruelfox 于 2017-4-29 14:30 编辑
ESPRESSObin 板子上有三个 RJ45 以太网口,是否等于它有三块网卡呢?从系统结构框图里看是这样的:
实际上 SOC 外面的连接只有一路 RGMII,连到了交换芯片上,然后交换芯片再出来三个 RJ45 网口。所以相当于是 SOC 有一个网卡,连到交换机上,交换机另外还有三个网口供连接外部的网络设备。我当成这样来理解,所以 Linux 下看到的 eth0 就是 SOC 的网口了,但是 ifconfig eth0 配置静态 IP 地址不能使用。所以这和单网口出来连个外部交换机还是有所差别的,之前已经有网友指出来了。
在 Linux 下面查看 /sys 文件系统,可以发现网络设备有好几个:
除了eth0, 还多出来了 lan0, lan1, wan 这三个,是属于dsa的,dsa是"Distributed Switching Architechure", 也就是那个交换芯片。Linux 竟然知道交换芯片上有三个网口。也难怪啊,SOC 和交换芯片之间还有其它数据通道,可以传输配置信息吧。我对网络协议不精通,物理上交换芯片的网口怎么边成逻辑上 Linux 的网络设备的,也就是相当于系统有三块以太网卡的?
用 ifconfig 来配置 lan0, lan1 或 wan 都是可以的,这样就容易实现软路由了。我想在文件服务弄好之前还是先把 ESPRESSObin 当作交换机来用吧。拨号网络和路由功能还是由现在家中的路由器负责:
Wi-Fi 的部分使用 EPRESSObin 上的 mini PCI-e 接一个笔记本无线网卡。编译内核试了多次,终于把驱动搞定。也就是能识别出 wlan0 设备。为了搭建无线AP热点,需要先安装一些软件,有线网络设置好之后用 apt-get 下载即可。
# apt-get install bridge-utils wireless-tools hostapd iw wpasupplicant
为了实现网络交换,需要把 wan, lan0, lan1 这三个网口的包进行转发。和三块独立的网卡不同的是,ESPRESSObin 上这三个网口本来就是在交换机上的,交换机硬件自动转发就可以了,不需要 Linux 软件参与。不过也必须要先设置一下的。
# brctl addbr br0
这是创建一个网桥设备
# brctl addif br0 wan
# brctl addif br0 lan0
# brctl addif br0 lan1
这是把 wan, lan0, lan1 三个口添加到网桥当中,它们的包自动转发。如上图,PC和笔记本都通过路由器的DHCP来获得IP地址。而访问 ESPRESSObin 本身的网络服务,需要给 br0 分配一个IP地址,执行
# dhclient br0
这样有线网络的交换就可以工作了。无线部分,先要 wlan0 成为一个 Wi-Fi 热点,可以用 hostapd 这个软件服务。(wpa_supplicant也可以搭建Wi-Fi,也许更好,可惜我没能搞定)
先编写一个 hostapd.conf 文件,例如- interface=wlan0
- driver=nl80211
- ssid=ESPRESSO-wifi
- hw_mode=g
- channel=1
- wpa_passphrase=eeboard.com
- wpa=2
- wpa_pairwise=CCMP
复制代码 然后执行
# hostapd -B hostapd.conf
接下来在手机WLAN里面应该就能看到 ESPRESSO-wifi 这个热点了。但是还不能接入,不会分配 IP 地址。要把 wlan0 这个网络桥接到前面创建的 br0 中,由路由器的 DHCP 来分配IP地址。
# brctl addif br0 wlan0
这样,Wi-Fi的设备可以访问家庭网络中的任何服务器,和有线网的设备一样。也可以从路由器的 NAT 访问外部网络。
目前有点问题,不知道是否是无线网驱动的原因。在我LP用Ipad无线上网看电视剧的时候,ESPRESSObin 会出现间歇性的卡死,SSH都不能操作,top看到 kworker某个进程占用大量的CPU
后来我检查 dmesg, 看到有异常:- [ 3380.557985] INFO: rcu_preempt self-detected stall on CPU
- [ 3380.563320] 0-...: (1 GPs behind) idle=703/140000000000002/0 softirq=48882/48883 fqs=5239
- [ 3380.571949] (t=5250 jiffies g=22228 c=22227 q=1232)
- [ 3380.577352] Task dump for CPU 0:
- [ 3380.577358] kworker/0:2 R running task 0 1507 2 0x00000002
- [ 3380.577381] Workqueue: events_power_efficient phy_state_machine
- [ 3380.577387] Call trace:
- [ 3380.579562] [<ffffffc0000880a0>] dump_backtrace+0x0/0x118
- [ 3380.579571] [<ffffffc0000881cc>] show_stack+0x14/0x20
- [ 3380.579582] [<ffffffc0000c55fc>] sched_show_task+0xa4/0x108
- [ 3380.579590] [<ffffffc0000c7918>] dump_cpu_task+0x40/0x50
- [ 3380.579600] [<ffffffc0000ea4f0>] rcu_dump_cpu_stacks+0xa0/0xf0
- [ 3380.579609] [<ffffffc0000ee2b4>] rcu_check_callbacks+0x4cc/0x8c8
- [ 3380.579620] [<ffffffc0000f1d2c>] update_process_times+0x3c/0x70
- [ 3380.579629] [<ffffffc000100cb8>] tick_sched_handle.isra.6+0x40/0x50
- [ 3380.579637] [<ffffffc000100d0c>] tick_sched_timer+0x44/0x90
- [ 3380.579647] [<ffffffc0000f26d4>] __hrtimer_run_queues+0xec/0x170
- [ 3380.579656] [<ffffffc0000f2a68>] hrtimer_interrupt+0xa0/0x1d8
- [ 3380.579668] [<ffffffc0006c2f88>] arch_timer_handler_phys+0x30/0x40
- [ 3380.579679] [<ffffffc0000e3e18>] handle_percpu_devid_irq+0x78/0xa0
- [ 3380.579689] [<ffffffc0000df7dc>] generic_handle_irq+0x24/0x38
- [ 3380.579699] [<ffffffc0000dfadc>] __handle_domain_irq+0x5c/0xb8
- [ 3380.579707] [<ffffffc000080de0>] gic_handle_irq+0xb8/0x158
- [ 3380.579715] Exception stack(0xffffffc038dd2a60 to 0xffffffc038dd2b80)
- [ 3380.579725] 2a60: 0000000000000008 ffffffc0393fd480 ffffffc038dd2bb0 ffffffc00009a0d4
- [ 3380.579734] 2a80: 0000000080000145 ffffffc038dd0000 ffffffc038dd2c78 ffffffc038dd3008
- [ 3380.579743] 2aa0: 0000000000000000 ffffffc038dd2bf4 ffffffc0393fd500 000000000000000a
- [ 3380.579752] 2ac0: 0000000000001000 00000000f745c0e7 0000000000000018 0000000000000000
- [ 3380.579760] 2ae0: ffffffc000ba6800 0000000000000000 0000000000000800 0000000000000000
- [ 3380.579769] 2b00: 0000000000000001 ffffffc038d0f630 ffffffc00082eb18 0000000000000007
- [ 3380.579778] 2b20: 000000000000000e 0000000000000008 ffffffc0393fd480 ffffffc038dd2c78
- [ 3380.579787] 2b40: ffffffc0393fd500 0000000000000000 ffffffc038dd0000 ffffffc038dd2ff0
- [ 3380.579796] 2b60: ffffffc038dd2fe0 0000000000000008 00000000ffffffff ffffffc038dd2bb0
- [ 3380.579805] [<ffffffc000083da8>] el1_irq+0x68/0xd8
- [ 3380.579814] [<ffffffc000099f9c>] ccm_encrypt+0x1d4/0x1e0
- [ 3380.579825] [<ffffffc000822f00>] ieee80211_aes_ccm_encrypt+0x140/0x160
- [ 3380.579835] [<ffffffc0008149b4>] ieee80211_crypto_ccmp_encrypt+0x1d4/0x230
- [ 3380.579845] [<ffffffc00082f208>] invoke_tx_handlers+0xc08/0xcb8
- [ 3380.579855] [<ffffffc000830f74>] ieee80211_tx+0x74/0x110
- [ 3380.579863] [<ffffffc000831098>] ieee80211_xmit+0x88/0xb0
- [ 3380.579873] [<ffffffc000831a9c>] __ieee80211_subif_start_xmit+0x46c/0x5c0
- [ 3380.579882] [<ffffffc000831c00>] ieee80211_subif_start_xmit+0x10/0x20
- [ 3380.579894] [<ffffffc0007200c4>] dev_hard_start_xmit+0x244/0x308
- [ 3380.579904] [<ffffffc00073e150>] sch_direct_xmit+0x138/0x220
- [ 3380.579913] [<ffffffc000720624>] __dev_queue_xmit+0x324/0x4b0
- [ 3380.579923] [<ffffffc0007207c0>] dev_queue_xmit+0x10/0x18
- [ 3380.579934] [<ffffffc0007ae6cc>] br_dev_queue_push_xmit+0xfc/0x120
- [ 3380.579942] [<ffffffc0007ae804>] __br_forward+0x54/0x98
- [ 3380.579951] [<ffffffc0007aebe4>] br_forward+0x6c/0x80
- [ 3380.579960] [<ffffffc0007afafc>] br_handle_frame_finish+0x204/0x480
- [ 3380.579969] [<ffffffc0007afee8>] br_handle_frame+0x170/0x210
- [ 3380.579978] [<ffffffc00071afe0>] __netif_receive_skb_core+0x378/0x7d0
- [ 3380.579988] [<ffffffc00071d6d0>] __netif_receive_skb+0x18/0x78
- [ 3380.579997] [<ffffffc00071d754>] netif_receive_skb_internal+0x24/0xa8
- [ 3380.580006] [<ffffffc00071d7e4>] netif_receive_skb+0xc/0x18
- [ 3380.580017] [<ffffffc0007bcc48>] edsa_rcv+0x1c0/0x258
- [ 3380.580025] [<ffffffc0007b9618>] dsa_switch_rcv+0x18/0x30
- [ 3380.580034] [<ffffffc00071b280>] __netif_receive_skb_core+0x618/0x7d0
- [ 3380.580044] [<ffffffc00071d6d0>] __netif_receive_skb+0x18/0x78
- [ 3380.580053] [<ffffffc00071d754>] netif_receive_skb_internal+0x24/0xa8
- [ 3380.580062] [<ffffffc00071e008>] napi_gro_receive+0x98/0xf0
- [ 3380.580073] [<ffffffc000468200>] mvneta_poll+0x3e0/0x9c0
- [ 3380.580082] [<ffffffc00071ebb0>] net_rx_action+0x1c8/0x2a0
- [ 3380.580094] [<ffffffc0000a36c8>] __do_softirq+0xf8/0x218
- [ 3380.580103] [<ffffffc0000a3a78>] irq_exit+0x88/0xe0
- [ 3380.580113] [<ffffffc0000dfae0>] __handle_domain_irq+0x60/0xb8
- [ 3380.580121] [<ffffffc000080de0>] gic_handle_irq+0xb8/0x158
- [ 3380.580127] Exception stack(0xffffffc038dd38d0 to 0xffffffc038dd39f0)
- [ 3380.580135] 38c0: ffffffc038dd3ab8 ffffffc03efcdc40
- [ 3380.580144] 38e0: ffffffc038dd3a20 ffffffc0008669b8 0000000040000145 ffffffc03efcdc00
- [ 3380.580154] 3900: ffffffc03efcdc00 0000000000000140 000000000000cf91 ffffffc0006c30b0
- [ 3380.580163] 3920: 0000000003333333 0000000000000020 003ab9bcb8000000 ffffffc038e5b8a8
- [ 3380.580171] 3940: 0000000000000001 7fffffffffffffff 0000000000000730 0000000000000000
- [ 3380.580180] 3960: ffffffffffffffff ffff000000000000 00000000381bd860 0000000000000000
- [ 3380.580189] 3980: ffffffc00082eb18 0000000000000007 000000000000000e ffffffc038dd3ab8
- [ 3380.580199] 39a0: ffffffc03efcdc40 0000000000000001 ffffffc03efcdc00 ffffffc03efcdc40
- [ 3380.580208] 39c0: ffffffc03efcdc00 ffffffc000bae6c0 ffffffc03efcdc00 0000000000000000
- [ 3380.580215] 39e0: 0000000000000000 ffffffc038dd3a20
- [ 3380.580223] [<ffffffc000083da8>] el1_irq+0x68/0xd8
- [ 3380.580233] [<ffffffc0000f24a4>] hrtimer_start_range_ns+0x1b4/0x2f8
- [ 3380.580245] [<ffffffc00086606c>] schedule_hrtimeout_range_clock+0x84/0x100
- [ 3380.580255] [<ffffffc0008660f8>] schedule_hrtimeout_range+0x10/0x18
- [ 3380.580264] [<ffffffc000865c04>] usleep_range+0x5c/0x68
- [ 3380.580274] [<ffffffc0004640e4>] orion_mdio_wait_ready.isra.2+0x11c/0x158
- [ 3380.580282] [<ffffffc0004641d4>] orion_mdio_read+0x3c/0xc0
- [ 3380.580292] [<ffffffc000459f70>] mdiobus_read_nested+0x50/0x78
- [ 3380.580301] [<ffffffc00045f4f4>] mv88e6xxx_reg_wait_ready+0x2c/0x68
- [ 3380.580310] [<ffffffc00045f758>] _mv88e6xxx_reg_write+0x90/0xf0
- [ 3380.580318] [<ffffffc0004608a8>] mv88e6xxx_mdio_read_indirect+0x28/0x60
- [ 3380.580327] [<ffffffc000462740>] mv88e6xxx_mdio_read+0xf8/0x100
- [ 3380.580336] [<ffffffc000459fe8>] mdiobus_read+0x50/0x78
- [ 3380.580346] [<ffffffc000458f98>] genphy_read_status+0x1b8/0x238
- [ 3380.580354] [<ffffffc0004579e0>] phy_state_machine+0x2a8/0x440
- [ 3380.580365] [<ffffffc0000b5668>] process_one_work+0x138/0x378
- [ 3380.580374] [<ffffffc0000b59cc>] worker_thread+0x124/0x498
- [ 3380.580384] [<ffffffc0000bb67c>] kthread+0xdc/0xf0
- [ 3380.580392] [<ffffffc000084450>] ret_from_fork+0x10/0x40
复制代码 |
|