momo zone

调核人的blog

Category Archives: kernel

wifi region setup

深晦wifi设置之道的人都知道channel 的最佳设置,之前我有谈过这个问题,就是1,6,11这个几个channel是独立的,受到的干扰比较少。其实呢 还有12 (Europe and Japan), 13 (Europe and Japan), and 14 (Japan only)频道,实际使用的情况是13频道的效果更好(14频道没有用过)

不过也不是所有的卡都有这么宽的频道,不幸买到US限定的就只有1-11频道。可恶,我手里就有这样一块烂卡。

搞定这个问题有两个途径:

1. 对cfg80211 内核模块设定参数:

ieee80211_regdom=JP

2. 使用用户空间的CRDA 工具:

export COUNTRY=JP;crda

已尝试,确认不能用,返回:Failed to set regulatory domain: -22 ,也许是调用crda的时机不对。

*****************************************************

不过我试过好像加内核模块参数对intel 4965/5X00 不起作用,而对realtek 8187是管用的:

比如我的8187 默认的region就有14个频道:

# iw reg get
country 00:
        (2402 - 2472 @ 40), (3, 20)
        (2457 - 2482 @ 20), (3, 20), PASSIVE-SCAN, NO-IBSS
        (2474 - 2494 @ 20), (3, 20), NO-OFDM, PASSIVE-SCAN, NO-IBSS
        (5170 - 5250 @ 40), (3, 20), PASSIVE-SCAN, NO-IBSS
        (5735 - 5835 @ 40), (3, 20), PASSIVE-SCAN, NO-IBSS
# iwlist wlan0 f
wlan0     14 channels in total; available frequencies :
          Channel 01 : 2.412 GHz
          Channel 02 : 2.417 GHz
          Channel 03 : 2.422 GHz
          Channel 04 : 2.427 GHz
          Channel 05 : 2.432 GHz
          Channel 06 : 2.437 GHz
          Channel 07 : 2.442 GHz
          Channel 08 : 2.447 GHz
          Channel 09 : 2.452 GHz
          Channel 10 : 2.457 GHz
          Channel 11 : 2.462 GHz
          Channel 12 : 2.467 GHz Channel 13 : 2.472 GHz Channel 14 : 2.484 GHz

假设这里要限定成US,即 1-11 channel ,可以这样做:

# modprobe -r iwlagn iwlcore rtl8187 mac80211 cfg80211
# modprobe -v cfg80211 ieee80211_regdom=US
insmod /lib/modules/2.6.38.4-1-desktop/kernel/net/rfkill/rfkill.ko
insmod /lib/modules/2.6.38.4-1-desktop/kernel/net/wireless/cfg80211.ko ieee80211_regdom=US
# iw reg get
country US:
        (2402 - 2472 @ 40), (3, 27)
        (5170 - 5250 @ 40), (3, 17)
        (5250 - 5330 @ 40), (3, 20), DFS
        (5490 - 5600 @ 40), (3, 20), DFS
        (5650 - 5710 @ 40), (3, 20), DFS
        (5735 - 5835 @ 40), (3, 30)
# modprobe rtl8187
# iwlist wlan0 f
wlan0     11 channels in total; available frequencies :
          Channel 01 : 2.412 GHz
          Channel 02 : 2.417 GHz
          Channel 03 : 2.422 GHz
          Channel 04 : 2.427 GHz
          Channel 05 : 2.432 GHz
          Channel 06 : 2.437 GHz
          Channel 07 : 2.442 GHz
          Channel 08 : 2.447 GHz
          Channel 09 : 2.452 GHz
          Channel 10 : 2.457 GHz
          Channel 11 : 2.462 GHz

内核参数的确起作用了

而且通过sys也可以查看region:

cat /sys/module/cfg80211/parameters/ieee80211_regdom

kernel log的讯息:

[26950.201850] cfg80211: Calling CRDA for country: US
[26950.205166] cfg80211: Regulatory domain changed to country: US
[26950.205168] cfg80211:     (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[26950.205171] cfg80211:     (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2700 mBm)
[26950.205173] cfg80211:     (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 1700 mBm)
[26950.205175] cfg80211:     (5250000 KHz - 5330000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[26950.205177] cfg80211:     (5490000 KHz - 5600000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[26950.205179] cfg80211:     (5650000 KHz - 5710000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[26950.205181] cfg80211:     (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 3000 mBm)

可以看到挂载内核加参数实际也调用了CRDA ??没错,就在执行modprobe之后,cfg80211实际只是把参数传给crda,然后去设置。如果手动操作也ok:
iw reg set JP
上述工具命令在挂载网卡驱动模块后将失效哦

如果要在开机设置cfg80211的参数可以这样:

echo options cfg80211 ieee80211_regdom=US >>/etc/modprobe.d/XX-option

关于CRDA和rgdb 的信息可以查看这个链接http://wireless.kernel.org/en/developers/Regulatory/#The_regulatory_database

Advertisements

关于IRQ和睡眠

今天看了cu上的讨论,关于IRQ为什么不能睡眠/进程切换,感觉获益匪浅,因为这个问题是有一定深度的 ,所以说出来的理由也是五花八门。

但有一个理由很多人认同: 因为中断没有堆栈(上下文),所以一旦睡眠/进程切换后很难被唤醒/调度。

“中断没有堆栈”在2.4 时代中断没有自己的堆栈,发生中断时,因为要保存现场需要把数据压入内核栈,中断必须“ 借用” 当前进程的堆栈,所以中断不是没有堆栈而是堆栈不确定,谁叫中断是异步呢(同步的叫异常 ,必须马上处理的) 。

“一旦睡眠/进程切换后很难被唤醒/调度” :正如上面讲的,因为借用的是当前进程的堆栈,中断虽然没有上下文,但他实际所在的是当前进程上下文 ,所以一旦中断的被睡眠,那么现场还是能够保护的:内核将中断的CS:eip和SS:esp保存在被抢占任务A的thread_info中,当任务A被重新唤醒的时候, 任务A从中断的CS:eip开始执行, 这也能正常执行下去, 中断执行完后, 从ret_from_intr中返回. 可以恢复任务A的抢占前的场景。

然后事情没有那么简单,上述任务A因为一个中断被强占了,不能继续执行,然后中断又睡眠了,那么无辜的任务A也只能等再次被唤醒/调度才有可能执行,这不符合内核实时性的要求。如果真要让中断可睡眠/调度还有做大量的小概率事件的考虑,比如睡眠之后又出现了同一IRQ号的中断,中断比较频繁堆栈溢出怎么办。另外还要从中断的设计初衷思考: 中断本来就是比较紧急的任务,如果被休眠那么延迟很久后中断程序的执行还有意义吗? 不过也不能一概而论。也许中断不能休眠/调度真的是一个设计问题,而不是技术上不能实现

下面再说一下 kernel 2.6中关于中断方面的演化:

首先中断处理例程分为上半部/下半部,上半部主要是响应中断,下半部是处理中断handler 。中断handler被放置在一个tasklet或工作队列中。因为工作队列以内核线程去执行,在进程上下文 ,所以可以安全地休眠,而tasklet工作在软中断上下文(和上半部一样?),不能休眠。

总之把中断handler交给工作队列去处理可以实现一定程度的中断休眠,尽管2.6改进的是中断延后处理方面。

kernel 2.6的另一个重大改进是设置的中断堆栈:

内核在编译的时候设置了THREAD_SIZE的值为8K的话, 那么每个进程的内核栈的大小就为8K, 此时如果发生中断时, 那么进程的寄存器等值就会保存到它的8K的内核栈中. 但是如果设置了THREAD_SIZE的大小为4K的话, 内核就会使用3种类型的内核栈, 异常栈, 硬件中断请求栈以及软中断请求栈( When using 4K stacks, interrupts get their own stack instead of using the currently active kernel stack.)

* 异常栈:每个进程一个。

* 硬中断请求栈:每个CPU一个,每个占用一个单独的页框。do_IRQ()函数内部通过调用execute_on_irq_stack负责切换到该栈中来。

* 软中断请求栈:每个CPU一个,每个占用一个单独的页框。

当使用了中断栈以后,如果一旦中断睡眠/调度 ,那么中断将永远不会被唤醒了,因为调度器根本就看不到中断栈,也无法从进程上下文看到中断。

kernel 2.6.38 特性–Transparent huge pages

翻译过来应该是透明大内存页。所谓的大内存页就是大于4KB的页。什么? 教课书上不是说页都是4KB吗?  哦,有此疑问的需要更新一下新知识了,以免落伍。大内存页的好处显而易见,免得频繁调度内存页,减少缺页异常,提高应用程序效率。 缺点嘛 就是写这类程序时要考虑一下内存分配以及回收策略(应用程序的话应该有库摆平了)。

另外大内存页还有一个隐含的好处:可完全避免虚拟地址到物理地址的转换。为什么?  因为cpu里面有个TLB缓存(恨死了,当初oracle面试我这个是啥东西我竟不知道 ,很丢人)里面放的就是虚拟地址对应的物理地址,当程序需要寻址/载入某虚拟地址时,CPU会首先读/写TLB缓存,如果有对应虚拟地址的项就直接发出/更新TLB中的物理地址,而不用CPU按照页表去计算物理地址。然而TLB是一个稀缺资源,用cpuid可以查看TLB的缓存相数:

   cache and TLB information (2):
      0xb1: instruction TLB: 2M/4M, 4-way, 4/8 entries
      0xb0: instruction TLB: 4K, 4-way, 128 entries
      0x05: data TLB: 4M pages, 4-way, 32 entries

指令4K页的有128项缓冲,数据4M页有32项缓冲。指令2M/4M页有4/8项

看起来相当稀缺啊(增加这个会提高cpu设计/制造成本吗?),所以当使用4K页的时候这128项地址映射缓冲将会频繁更新,导致性能下降。那么还有2M/4M页缓冲呢,能用吗?

答案是能用,但问题之前仅是内核代码和数据段在使用。一般的应用程序如果想用,必须程序员和系统管理员都忙活一下,借助libhugetlbfs这个库来启用(可以参考 http://www.ibm.com/developerworks/cn/linux/es-lop-leveragepages/index.html)。

这次内核的透明大内存页特性就是使内核发现适合启用大内存页的情景,并自动启用。实现方法是在内核中启动khugepaged 这个内核线程来收集4KB页表,一旦发现有连续分配的情况就把页表项合并。目前它的开发进度是仅能够应付2MB的大内存页。

kernel 2.6.38 特性–Automatic grouping scheduling

2.6.38 例行更新带来了众盼已久的鸡血特性(Automatic grouping scheduling)

为了理解这个特性的作用要从内核CFS调度器说起:CFS算法的最大特点就是它没有进程队列,而是构建了一个红黑树。任何进程都会在有限的时间被调度。优先级在CFS调度算法中失去了本来的意义,nice值改称为权值,顾名思义它将参与一系列数学运算,然后参与调度器的进程挑选工作:

虚拟时钟的步伐(vruntime的增量)=(实际时间)*(nice为0的进程的权值/进程权值) [其中,nice为0的进程的权值为1024]

优先选择vruntime最小的进程来执行。

以及计算进程时间片的运算:

进程运行时间=(系统调度周期)*(本进程的权值/本运行队列的总权值)

……上述扯远了(了解CFS可以看看这个http://www.ibm.com/developerworks/cn/linux/l-completely-fair-scheduler/index.html?ca=drs-cn-0125

重要的是与CFS一块到来的还有组调度概念及实现。这样就可以实现用户或组的公平性,而不是任务公平性。可以将任务进行分组,形成多个实体,调度程序将平等对待这些实体,继而公平对待实体中的任务。自此内核调度可以分为两层:组与组的竞争,以及组内进程的竞争。

2.6.24中调度组可以按照以下划分:

  • 用户 ID。
  • cgroup pseudo 文件系统:这个选项使管理员可以根据需要创建组。有关更多细节,阅读内核源文档目录中的 cgroups.txt 文件。

值得注意的是上述分组都是在用户层进行的,所以需要用户进行手工设置分组

Without automatic process grouping:

[proc. 1 | proc. 2 | proc. 3 | proc. 4 | proc. 5 | proc. 6]

With automatic process grouping:

[proc. 1, 2, 3, 4  |     proc. 5       |     proc. 6      ]

后来有人提出自动设置分组的想法,但由于是自动设置分组,所以分组的依据成为了关键。Galbraith 提出了按照TTY 自动分组的算法,并提交了内核补丁,linus也非常赞同这种做法,原因是这种分组能够大幅提高桌面程序的交互响应。

那么在这个补丁正式进入主线后,在2.6.38中又把自动分组依据变更为session ID : 内核会自动按照sid分组,这会使CFS的第一层调度单位改为session id ,因为每开一个shell(TTY) 肯定会建立一个新的session(用ps -eo pid ,session,cmd查看)。因此可以把这种分组看作是TTY based的一种扩展。当然,用setsid系统调用创建的新session 也算一个分组。

###################################################################################

我之前测试了一下TTY-based-grouping schedule 补丁,发现在以下情况效果比较明显: 后台(终端)执行make -j64 编译一个大程序,前台(KDE等桌面环境)执行一个chrome 或mplayer 看h264。这样原本不开启自动分组的情况下64个编译进程以及chrome,mplayer 将会相互争夺资源,依据CFS的脾气,chrome或mplayer 肯定会cpu 饥饿,因为在至少66个进程中,轮到他们执行的机会还是比较小的。 那么在开启分组后CFS调度实体变为一个make 进程组和mplayer及其桌面环境进程。mplayer的调度机会大大增加,同时make 进程组中的进程相互争夺被mplayer占用后剩余的cpu 时间。本质上是牺牲了某些TTY进程组的时间换取了另外进程组程序的实时性。

那么这次主线内核改为session ID分组实际性能改善及适用场合还不确定,相信会比TTY based更公正一些。使得桌面实时性与后台程序的吞吐更平衡一些。

现在回顾一下,好像这样linux kernel 就实现了真正的“线程”调度了,第一层组调度相当于“进程”,第二层进程调度相当于“线程” ,而且应用程序开发人员不用手动创建“线程”。

 

附一些有用的链接:

http://blog.csdn.net/peimichael/archive/2010/01/20/5218335.aspx

http://www.ibm.com/developerworks/cn/linux/l-completely-fair-scheduler/index.html?ca=drs-cn-0125

http://www.ibm.com/developerworks/cn/linux/l-cfs/index.html

http://zh.wikipedia.org/zh/%E7%BA%A2%E9%BB%91%E6%A0%91

内核代码奇技淫巧–do{}while() 宏

其实不仅内核代码里面能看到这类宏,其他的应用或中间代码也能看到其身影,虽然是奇技淫巧,但确实非常有用。

该宏有两个不同的用法:

1. 精简判断分支(不使用goto语句)。 通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样:
version 1

bool Execute()
{
// 分配资源
int *p = new int;
bool bOk(true);// 执行并进行错误处理
bOk = func1();
if(!bOk)
{
delete p;
p = NULL;
return false;
}
bOk = func2();
if(!bOk)
{
delete p;
p = NULL;
return false;
}
bOk = func3();
if(!bOk)
{
delete p;
p = NULL;
return false;
}
// ..........
// 执行成功,释放资源并返回
delete p;
p = NULL;
return true;
}

这里一个最大的问题就是代码的冗余,而且我每增加一个操作,就需要做相应的错误处理,非常不灵活。于是我们想到了goto:
version 2

bool Execute()
{
// 分配资源
int *p = new int;
bool bOk(true);// 执行并进行错误处理
bOk = func1();
if(!bOk) goto errorhandle;
bOk = func2();
if(!bOk) goto errorhandle;
bOk = func3();
if(!bOk) goto errorhandle;
// ..........
// 执行成功,释放资源并返回
delete p;
p = NULL;
return true;
errorhandle:
delete p;
p = NULL;
return false;
}

代码冗余是消除了,但是我们引入了C++中身份比较微妙的goto语句,虽然正确的使用goto可以大大提高程序的灵活性与简洁性,但太灵活的东西往往是很危险的,它会让我们的程序捉摸不定,那么怎么才能避免使用goto语句,又能消除代码冗余呢,请看do…while(0)循环:
version3

bool Execute()
{
// 分配资源
int *p = new int;bool bOk(true);
do
{
// 执行并进行错误处理
bOk = func1();
if(!bOk) break;
bOk = func2();
if(!bOk) break;
bOk = func3();
if(!bOk) break;
// ..........
}while(0);
// 释放资源
delete p;
p = NULL;
return bOk;
}

2.形成单独逻辑块(避免宏替换以后产生错误)
举个例子看内核代码中udp部分:/usr/src/linux-2.6.37/include/net/udp.h
其实不仅内核代码里面能看到这类宏,其他的应用或中间代码也能看到其身影,虽然是奇技淫巧,但确实非常有用。

……

#define UDP_INC_STATS_BH(net, field, is_udplite) 
do { \
 if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_statistics, field);         \
 else SNMP_INC_STATS_BH((net)->mib.udp_statistics, field);   \
}  while(0)
#define UDP6_INC_STATS_BH(net, field, is_udplite) \
do { \
 if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_stats_in6, field);\
 else  SNMP_INC_STATS_BH((net)->mib.udp_stats_in6, field);  \
} while(0)
......
#define UDPX_INC_STATS_BH(sk, field) \
do { \
 if ((sk)->sk_family == AF_INET) \
UDP_INC_STATS_BH(sock_net(sk), field, 0); \
 else \
UDP6_INC_STATS_BH(sock_net(sk), field, 0); \
} while (0);
......
看起来这个几个宏是维护SNMP中upd的相关属性的,具体目的先不去了解了。先看前两个宏用了do {…} while(0) ,如果展开到第三个宏就是:
#define UDPX_INC_STATS_BH(sk, field) \ do { \ if ((sk)->sk_family == AF_INET) \ 
do { \
if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_statistics, field);         \
else SNMP_INC_STATS_BH((net)->mib.udp_statistics, field);   \
}  while(0); \
else \
do { \
if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_stats_in6, field);\
else SNMP_INC_STATS_BH((net)->mib.udp_stats_in6, field);  \
} while(0); \
} while (0);

如果去掉前两个宏的do while(上述红色部分)去掉, 就变成:

#define UDPX_INC_STATS_BH(sk, field) \
do { \
 if ((sk)->sk_family == AF_INET) \
if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_statistics, field);         \
else SNMP_INC_STATS_BH((net)->mib.udp_statistics, field); \
else \
if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_stats_in6, field);\
else SNMP_INC_STATS_BH((net)->mib.udp_stats_in6, field);  \
} while (0);
显而易见,else无法匹配,代码完全错乱,无法编译通过。
所以一般只要在宏定义中含有逻辑判断的情况,都要用do while去分割,这样比较安全,再修改代码也不需要会过头去重新匹配if else 等。

ps3 DS3 手柄驱动

也许是当年ps3 可以安装yellow dog 的原因,现在kernel包直接包含了ds3(sixaxis)的驱动。

如果要让ds3 在linux 下工作需要两个部分:

1. HID    –人体工程学接口设备, 鼠标,键盘及其他控制器都需要它。它遵循HID驱动构架。仅处理模块初始化和设备的探测(probe)

具体位置在: drivers/hid/hid-sony.c / *  HID driver for some sony “special” devices

*
*  Copyright (c) 1999 Andreas Gal
*  Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
*  Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
*  Copyright (c) 2007 Paul Walmsley
*  Copyright (c) 2008 Jiri Slaby
*  Copyright (c) 2006-2008 Jiri Kosina
*/
/*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*/
#include <linux/device.h>
#include <linux/hid.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/usb.h>
#include “hid-ids.h”
static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
int ret;
unsigned long quirks = id->driver_data;
struct sony_sc *sc;
switch (hdev->bus) {
case BUS_USB:
ret = sony_set_operational_usb(hdev);
break;
case BUS_BLUETOOTH:
ret = sony_set_operational_bt(hdev);
break;
default:
ret = 0;

hid-ids.h 包含ds3 的vid ,pid

#define USB_VENDOR_ID_SONY                      0x054c
#define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE       0x024b
#define USB_DEVICE_ID_SONY_PS3_CONTROLLER       0x0268

kernel 默认把这个hid-sony 包含进内核,而不是模块形式。 CONFIG_HID_SONY=y

2. input –这个是kernel 2.6以后抽象出来的,专门处理具体输入输出外设事件。input作为设备作业流的最后一个环节他将I/O外设分为这几类:

obj-$(CONFIG_INPUT_KEYBOARD)    += keyboard/
obj-$(CONFIG_INPUT_MOUSE)       += mouse/
obj-$(CONFIG_INPUT_JOYSTICK)    += joystick/
obj-$(CONFIG_INPUT_TABLET)      += tablet/
obj-$(CONFIG_INPUT_TOUCHSCREEN) += touchscreen/
obj-$(CONFIG_INPUT_MISC)        += misc/

手柄控制器就属于 joystick 。然后在joystick 有专门处理一种手柄/摇杆的驱动。对应DS3的就是gamecon.c

/*
* NES, SNES, N64, MultiSystem, PSX gamepad driver for Linux
*
*  Copyright (c) 1999-2004     Vojtech Pavlik <vojtech@suse.cz>
*  Copyright (c) 2004          Peter Nelson <rufus-kernel@hackish.org>
*
*  Based on the work of:
*      Andree Borrmann         John Dahlstrom
*      David Kuder             Nathan Hand
*      Raphael Assenat
*/

看注释不知道像NES这样的古老非usb手柄怎么在linux上面用~ 作者还有文档呢:

/*
* PSX support
*
* See documentation at:
*      http://www.geocities.co.jp/Playtown/2004/psx/ps_eng.txt
*      http://www.gamesx.com/controldata/psxcont/psxcont.htm
*
*/
关于如何让DS3/sixaxsi 的BT工作可以参照这个:http://www.pabr.org/sixlinux/sixlinux.en.html
另外还有一个关于ps系主机的资料站点:http://wiki.ps2dev.org/

内核代码中关于线程的一些简单认识

这里所谓的线程是指的内核线程,并不是用户线程。后者由上层的线程库调用系统调用clone创建的。

内核线程一般并不被用户程序直接使用,而是在内核空间中并发执行某些代码而由内核自己设置的一个“进程”。(比如驱动程序中同步设备与缓存) 在linux中线程和进程都用thread_info数据结构(具体和体系结构相关)进行描述,都参与调度,其实对内核而言根本就不区分所谓进程和线程,它们都是可调度的执行流,比如在设备驱动中可以通过与nice相关的函数设置新创建的内核线程的优先级。 在用户态执行fork时如果指定了CLONE_VM标志,那么父子进程共享父进程的上下文,即mm_struct,此时就把它们都称作线程。

内核提供一个方便创建内核线程的函数叫kernel_thread ,原型: int kernel_thread(int (*fn)(void *),void *arg ,unsigned long flag) 他会先进行一些其他数据或结构的维护,然后最终还要调用do_fork:

int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
{
struct pt_regs regs;
memset(&regs, 0, sizeof(regs));
regs.si = (unsigned long) fn;
regs.di = (unsigned long) arg;
#ifdef CONFIG_X86_32
regs.ds = __USER_DS;
regs.es = __USER_DS;
regs.fs = __KERNEL_PERCPU;
regs.gs = __KERNEL_STACK_CANARY;
#else
regs.ss = __KERNEL_DS;
#endif
regs.orig_ax = -1;
regs.ip = (unsigned long) kernel_thread_helper;
regs.cs = __KERNEL_CS | get_kernel_rpl();
regs.flags = X86_EFLAGS_IF | 0x2;
/* Ok, create the new process.. */
return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, &regs, 0, NULL, NULL);
}
struct pt_regs {
long ebx;
long ecx;
long edx;
long esi;
long edi;
long ebp;
long eax;
int  xds;
int  xes;
int  xfs;
int  xgs;
long orig_eax;
long eip;
int  xcs;
long eflags;
long esp;
int  xss;
};

如果没有这个标志而只有CLONE_FS或者CLONE_FILES标志,那么创建的子进程只共享父进程的fs_struct和files_struct结构,此时还把它们叫做进程。所以在linux上线程本质是一个共享资源的手段,对内核而言根本不区分它们。 mm_struct用于描述用户态进程上下文,所以内核线程都没有这个数据结构(其实并不是没有,而是将它指向另一个用户进程的mm_struct)。当调度内核线程时,它将借用上一个用户进程的mm_struct(内核线程的active_mm指向上一个用户进程的mm_struct),而所有用户进程页表的高端都是内核页表,描述内核空间,由此内核线程就可以在内核空间内运行了。 总结一下 :

内核线程

内核线程只运行在内核态,不受用户态上下文的拖累。

Ø         处理器竞争:可以在全系统范围内竞争处理器资源;

Ø         使用资源:唯一使用的资源是内核栈和上下文切换时保持寄存器的空间(看一下struct pt_regs的设置)

Ø         调度:调度的开销可能和进程自身差不多昂贵

Ø         同步效率:资源的同步和数据共享比整个进程的数据同步和共享要低一些。

—————————————————————————————————-

顺便再说一下用户线程,这类线程首先由应用程序调用线程库为出发点。线程库调用系统调用clone。也就是说一个用户线程会对应内核的一个进程(当然资源是共享的),创建流程和内核进程类似。 LinuxThreads是用户空间的线程库,所采用的是线程-进程1对1模型(即一个用户线程(注意这里的用户线程也不是教科书上的用户线程)对应一个轻量级进程,而一个轻量级进程对应一个特定的内核线程),将线程的调度等同于进程的调度,调度交由内核完成,而线程的创建、同步、销毁由核外线程库完成(LinuxThreads已绑定到GLIBC中发行)。在LinuxThreads中,由专门的一个管理线程处理所有的线程管理工作。 最后,不要将教科书上的线程模型和linux中线程的实现搞混,这两者名字差不多,但概念相差较远(原因是理论的那套太复杂,linux没有实现)。貌似windows实现的进程比较接近教科书… 没研究了

再总结一下:

轻量级进程

轻量级进程(LWP)是建立在内核之上并由内核支持的用户线程,它是内核线程的高度抽象,每一个轻量级进程都与一个特定的内核线程关联。内核线程只能由内核管理并像普通进程一样被调度。

轻量级进程由clone()系统调用创建,参数是CLONE_VM,即与父进程是共享进程地址空间和系统资源。

与普通进程区别:LWP只有一个最小的执行上下文和调度程序所需的统计信息。

Ø         处理器竞争:因与特定内核线程关联,因此可以在全系统范围内竞争处理器资源

Ø         使用资源:与父进程共享进程地址空间

Ø         调度:像普通进程一样调度

关于linux线程实现一个更具体的介绍可以看看这个 http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/

如果搞不清哪些所谓的XX线程就看看这个吧,应该是权威的说明:http://linas.org/linux/threads-faq.html

WARNING: “__moddi3” undefined!

[杯具,餐具,都在茶几上]

今天编译内核遇到这个warning: WARNING: “__moddi3” undefined!

尽管是个warning,但插入内核时会提示 -1 符号找不到。

[追根溯源]

冷静一下分析一下原因吧 ,首先去内核里面去找任何关于moddi3 的东西:

分别在frv_ksyms.c ,ia64_ksyms.c ,h8300_ksyms.c ,parisc_ksyms.c定义了原型:

extern void __moddi3(void);

以上c文件(在arch/XXX/kernel)都是定义和体系结构的有关的符号,并导出。(只知道Ia64,其他的是啥子CPU啊)

以及exports.c (在arch/tile/lib/)定义原型:

int64_t __moddi3(int64_t dividend, int64_t divisor);

可见这个__moddi3 是体系相关,而且都是64位。 mod 应该是求商/求余相关,难道是这个符号是用来做64位除法?

我有用64位除法吗? 翻了翻代码找到了这句:

int omg_data_size=0;

……….

omg_data_size=*(OMG_SIZE_INFO_OFFSET+user_buffer+0)<<24;
omg_data_size+=*(OMG_SIZE_INFO_OFFSET+user_buffer+1)<<16;
omg_data_size+=*(OMG_SIZE_INFO_OFFSET+user_buffer+2)<<8;

………..

omg_size=(omg_data_size/0x3f18)*8+omg_data_size+8;

………..

__distance_to_header=(*ppos-0x5a)%0x3f10;

哦,我明白了,omg_data_size 是有通过移位运算的,int 是32位,左移之后gcc将变量转换为64位。然后做了一次求商。另外ppos应该也是一个超长的值用来寻址大缓存(查了一下资料说“在32位体系中也至少是64位宽” )。所以gcc应该会去找__moddi3 这个符号。可惜的是我的体系结构是X86没有定义这个符号,于是乎就发生了杯具的一幕。

[柳暗花明]

内核提供一个正确处理这种情况的函数:do_div(n,base)。此处do_div得到的结果是余数而真正的a/b的结果,是用a来保存的。 do_div(n,base)的具体定义,和当前体系结构有关(这是毫无疑问的,不然就不是内核态了,用glibc就可以摆平),对于arm平台,在 arch/arm/include/asm/div64.h,对于x86在arch/x86/include/asm/div64.h。  其实现很复杂,先不深究了。

因为do_div将商保存在被除数中,把原值覆盖了,所以实际运用时要用临时变量保存被除数。

使用do_div(),需要先 #include <linux/math64.h> 这个不能少。

另外内核还提供一些其他处理64位除法的函数:

static inline u64 div_u64(u64 dividend, u32 divisor); //对应无符号64位被除数

static inline s64 div_s64(s64 dividend, s32 divisor);//对应有符号64位被除数

static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder);//对应无符号64位被除数,remainder为余数

static inline s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder);//对应有符号64位被除数,remainder为余数

其实前两个就是通过内联调用后面两个。此外后面两个函数和do_div()没有调用关系,而且看注释好像它比do_div效率高,而且容易看懂: This is the most common 64bit divide and should be used if possible, * as many 32bit archs can optimize this variant better than a full 64bit * divide.

*******************************

当我把代码重新修改编译完毕后,我想到: 根据实际情况,omg_data_size不可能超过32位,因为*(OMG_SIZE_INFO_OFFSET+user_buffer+0) 的结果肯定是8位,最大左移24位也就是32位。那么强制转换一下吧,给gcc一个明确的指示:

omg_size=((long)omg_data_size/0x3f18)*8+(long)omg_data_size+8;

………………

__distance_to_header=((long)*ppos-0x5a)%0x3f10;

SONY HiMD RH1 驱动分析

简单测试了一下RH1 的usb 属性,可以知道:

usb_dev:

product:Net MD/Hi-MD,

manufacturer:Sony,
serial:0200012672F9
number of configuration:1
number of endpoint:2     两个usb端点
endpoint type:2,index:1,direction:80   端点1 ,批量处理模式,方向device -> host ,输入
endpoint type:2,index:2,direction:0     端点2, 批量处理模式,方向host->device ,输出
Dec 23 23:43:33 Dekernel kernel: [   81.213933] NetMD 3-2:1.0: usb_probe_interface
Dec 23 23:43:33 Dekernel kernel: [   81.213936] NetMD 3-2:1.0: usb_probe_interface – got id
Dec 23 23:43:33 Dekernel kernel: [   81.213940] NetMD 3-2:1.0: buffer size:64
Dec 23 23:43:33 Dekernel kernel: [   81.213954] NetMD 3-2:1.0: looking for a minor, starting at 192
Dec 23 23:43:33 Dekernel kernel: [   81.214024] NetMD 3-2:1.0: USB device NETMD attached to USB minor :192
Dec 23 23:43:33 Dekernel kernel: [   81.214048] usbcore: registered new interface driver NetMD
进入最后的攻坚阶段,但写盘有问题  … 坚持啊
./netmd write /media/disk/01-Philosophyz.oma
Found a NetMD device!
Net MD/Hi-MD
Raw title: 1;         ?//2-3;Last regrets / Place of wind which arrives//4;          DISC1//5;     /TORCH//6; Pacific Moon III//7;Dream Port//8;     featured in FINAL FANTASY X//9;colorless wind//
Disc Title: <Untitled>
Size of data: 7471145
Size of data w/ headers: 7474849
Waiting for Sync:
Sending command:
00 18 00 08 00 46 f0 03 01 03 28 ff 00 01 00 10                 …..F�…(�….
01 ff ff 00 94 02 00 00 00 06 00 72 0e a1                       .��.�……r.�
Recieving response:
a1 0e 72 00                                                     �.r.
0f 18 00 08 00 46 f0 03 01 03 28 00 00 01 00 10                 …..F�…(…..
01 00 01 00 94 02 00 00 00 06 00 72 0e a1 00 00                 ….�……r.�..
00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00                 ……..����….
00 00 00 00 f8 7f 06 08 02 00 00 00 f4 01 00 00                 ….�……�…
02 00 00 00 0c 00 00 00 00 00 00 00 50 8f 5a b7                 …………P�Z�
2c fa a0 bf 68 3d 06 08 00 00 00 00 00 00 00 00                 ,���h=……….
02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00                                                           ..
Success for record like commandDiffer: 6
Waiting for Sync:
pos: 90/7471235; remain data: 7471145
Chunksize: 4096
distance_to_header: 0
Bytes left: 7471145
Inserting header
bytes left in chunk: 16128
Sending 4096 bytes to md
00 00 00 00 00 00 3f 00 d4 4b dc aa ef 68 22 e2                 ……?.�Kܪ�h”�
00 00 02 00 52 00 65 00 77 00 72 00 69 00 74 00                 ….R.e.w.r.i.t.
65 00 20 00 4f 00 70 00 65 00 6e 00 69 00 6e 00                 e. .O.p.e.n.i.n.
67 00 20 00 54 00 68 00 65 00 6d 00 65 00 20 00                 g. .T.h.e.m.e. .
73 00 6f 00 6e 00 67 00 20 00 50 00 68 00 69 00                 s.o.n.g. .P.h.i.
6c 00 6f 00 73 00 6f 00 70 00 68 00 79 00 7a 54                 l.o.s.o.p.h.y.zT
43 4f 4e 00 00 00 11 00 00 02 30 dd 30 c3 30 d7                 CON…….0�0�0�
00 20 00 28 4e 00 82 2c 00 29 54 58 58 58 00 00                 . .(N.�,.)TXXX..
00 3b 00 00 02 00 4f 00 4d 00 47 00 5f 00 54 00                 .;….O.M.G._.T.
50 00 45 00 31 00 53 00 00 ff 1f ff 1f ff 1f ff                 P.E.1.S..����
1f ff 1f 30 00 ff 08 ff 2e ff 41 ff 4e ff 4f ff                 �0.�.�.�A�N�O�
53 ff 49 ff 5a ff 45 ff 2d ff 49 ff 52 ff 09 54                 S�I�Z�E�-�I�R�.T
58 58 58 00 00 00 17 00 00 02 00 4f 00 4d 00 47                 XXX……..O.M.G
00 5f 00 54 00 52 00 41 00 43 00 4b 00 00 00 31                 ._.T.R.A.C.K…1
54 58 58 58 00 00 00 61 00 00 02 00 4f 00 4d 00                 TXXX…a….O.M.
47 00 5f 00 41 00 4c 00 42 00 4d 00 53 00 00 ff                 G._.A.L.B.M.S..�
32 ff 45 ff 57 ff 52 ff 49 ff 54 ff 45 30 00 ff                 2�E�W�R�I�T�E0.�
2f ff 50 ff 45 ff 4e ff 49 ff 4e ff 47 30 00 ff                 /�P�E�N�I�N�G0.�
34 ff 48 ff 45 ff 4d ff 45 30 00 ff 53 ff 4f ff                 4�H�E�M�E0.�S�O�
4e ff 47 30 00 ff 30 ff 48 ff 49 ff 4c ff 4f ff                 N�G0.�0�H�I�L�O�
53 ff 4f ff 50 ff 48 ff 59 ff 5a 54 58 58 58 00                 S�O�P�H�Y�ZTXXX.
00 00 23 00 00 02 00 4f 00 4d 00 47 00 5f 00 41                 ..#….O.M.G._.A
00 53 00 47 00 54 00 4d 00 00 00 31 00 35 00 39                 .S.G.T.M…1.5.9
00 38 00 30 00 30 00 30 54 58 58 58 00 00 00 3b                 .8.0.0.0TXXX…;
00 00 02 00 4f 00 4d 00 47 00 5f 00 41 00 54 00                 ….O.M.G._.A.T.
50 00 31 00 53 00 00 ff 1f ff 1f ff 1f ff 1f ff                 P.1.S..�����
1f 30 00 ff 08 ff 2e ff 41 ff 4e ff 4f ff 53 ff                 0.�.�.�A�N�O�S�
49 ff 5a ff 45 ff 2d ff 49 ff 52 ff 09 54 58 58                 I�Z�E�-�I�R�.TXX
58 00 00 00 39 00 00 02 00 4f 00 4d 00 47 00 5f                 X…9….O.M.G._
00 41 00 54 00 50 00 45 00 31 00 00 6c 34 8c 37                 .A.T.P.E.1..l4�7
00 20 74 60 59 48 00 28 00 4e 00 61 00 6e 00 6f                 . t`YH.(.N.a.n.o
00 73 00 69 00 7a 00 65 00 4d 00 69 00 72 00 29                 .s.i.z.e.M.i.r.)
54 58 58 58 00 00 00 2b 00 00 02 00 4f 00 4d 00                 TXXX…+….O.M.
47 00 5f 00 54 00 49 00 54 00 32 00 53 00 00 ff                 G._.T.I.T.2.S..�
30 ff 48 ff 49 ff 4c ff 4f ff 53 ff 4f ff 50 ff                 0�H�I�L�O�S�O�P�
48 ff 59 ff 5a 54 58 58 58 00 00 00 3b 00 00 02                 H�Y�ZTXXX…;…
00 4f 00 4d 00 47 00 5f 00 54 00 52 00 4c 00 44                 .O.M.G._.T.R.L.D
00 41 00 00 00 32 00 30 00 31 00 31 00 2f 00 30                 .A…2.0.1.1./.0
00 31 00 2f 00 30 00 31 00 20 00 30 00 30 00 3a                 .1./.0.1. .0.0.:
00 30 00 30 00 3a 00 30 00 30 54 43 4f 4d 00 00                 .0.0.:.0.0TCOM..
00 09 00 00 02 62 98 62 38 4f 38 53 f8 54 4c 45                 …..b�b8O8S�TLE
4e 00 00 00 0d 00 00 02 00 32 00 39 00 31 00 37                 N……..2.9.1.7
00 31 00 32 54 58 58 58 00 00 00 3f 00 00 02 00                 .1.2TXXX…?….
55 00 53 00 52 00 5f 00 4c 00 32 00 54 00 4d 00                 U.S.R._.L.2.T.M.
44 00 44 00 41 00 00 00 32 00 30 00 31 00 31 00                 D.D.A…2.0.1.1.
2f 00 30 00 31 00 2f 00 33 00 31 00 20 00 32 00                 /.0.1./.3.1. .2.
33 00 3a 00 32 00 32 00 3a 00 31 00 36 47 45 4f                 3.:.2.2.:.1.6GEO
42 00 00 01 ca 00 00 02 62 69 6e 61 72 79 00 00                 B…�…binary..
00 00 4f 00 4d 00 47 00 5f 00 42 00 4b 00 4c 00                 ..O.M.G._.B.K.L.
53 00 49 00 00 00 01 00 40 00 dc 00 70 00 08 00                 S.I…..@.�.p…
00 00 00 00 00 4b 45 59 52 49 4e 47 20 20 20 20                 …..KEYRING
20 00 10 00 03 00 28 00 01 00 03 00 00 00 00 00                  …..(………
00 00 01 00 1d ab 30 9d f0 ce 7d c8 05 3e d9 97                 …..�0���}�.>ٗ
27 4f 85 48 b6 a9 9c 81 f2 ae 66 18 ff 00 00 00                 ‘O�H������f.�…
00 00 00 00 00 45 4b 42 20 00 00 00 00 00 00 00                 …..EKB …….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 01 00 1d 00 00 00 00 39 47 f4                 ………….9G�
0a 33 65 2f 98 71 73 c3 98 68 c5 23 5b 84 20 c8                 .3e/�qsØh�#[� �
cf fb 0e 7f 4e 00 00 00 0c 00 00 00 50 00 00 00                 ��.N…….P…
34 85 14 51 45 04 02 ff fe 00 00 00 00 36 d2 00                 4�.QE..��….6�.
38 74 91 51 9d a7 75 94 70 a0 17 69 da 69 55 ae                 8t�Q��u�p�.i�iU�
a6 9f 6a 3e 69 18 c7 c6 bb d7 cc fb 1b 81 8d a9                 ��j>i.�ƻ���.���
97 90 67 29 5c b7 55 5a ec 21 1b 9e bd d4 7e d9                 ��g)\�UZ�!.���~�
09 79 e0 39 a1 e0 76 68 0d b8 bf ed b0 d3 24 26                 .y�9��vh.�����$&
b8 f7 79 22 bd 46 c9 44 9f df 01 74 c0 00 00 00                 ��y”�F�D��.t�…
08 01 00 00 00 01 00 00 28 db 54 6a c5 e0 4d 4f                 ……..(�Tj��MO
cb f2 46 3b 01 de 2c d0 fb af 7a a7 1e ef 44 29                 ��F;.�,���z��D)
05 97 9d be e7 28 4e a4 53 3a 2f 71 c7 cb 86 58                 .����(N�S:/q�ˆX
39 21 43 49 44 20 20 20 20 20 20 20 20 00 10 00                 9!CID        …
02 00 00 00 00 01 0f 50 00 00 04 00 00 00 a4 d5                 …….P……��
db e3 cf 11 9f db 1c b5 2d 00 00 00 00 00 00 00                 ���.��.�-…….
00 53 48 41 52 45 5f 50 5f 53 49 44 20 00 10 00                 .SHARE_P_SID …
01 01 02 00 00 00 00 00 00 a7 13 c0 94 80 9d 3b                 ………�.���;
d6 21 52 45 46 49 44 20 20 20 20 20 20 00 10 00                 �!REFID      …
01 01 01 00 00 03 01 02 00 00 00 00 00 00 00 00                 …………….
00 a7 0f f6 0b 9e 94 1f 45 00 00 00 00 00 00 00                 .�.�.��E…….
00 47 45 4f 42 00 00 00 5e 00 00 02 62 69 6e 61                 .GEOB…^…bina
72 79 00 00 00 00 4f 00 4d 00 47 00 5f 00 47 00                 ry….O.M.G._.G.
4e 00 4d 00 49 00 44 00 00 33 43 44 33 4e 35 33                 N.M.I.D..3CD3N53
51 32 33 31 36 36 37 37 34 34 56 38 38 42 44 43                 Q231667744V88BDC
37 41 38 30 39 37 42 36 43 46 38 30 43 42 32 38                 7A8097B6CF80CB28
30 32 42 41 39 45 31 31 45 31 31 30 46 50 33 00                 02BA9E11E110FP3.
00 00 00 00 00 00 00 00 00 47 45 4f 42 00 00 00                 ………GEOB…
7a 00 00 02 62 69 6e 61 72 79 00 00 00 00 4f 00                 z…binary….O.
4d 00 47 00 5f 00 4f 00 4c 00 49 00 4e 00 46 00                 M.G._.O.L.I.N.F.
00 30 80 04 4c 30 80 04 10 08 ca 88 c1 38 4d 19                 .0�.L0�…ʈ�8M.
07 e7 da 49 f9 8d 30 d3 52 04 10 01 0f 50 00 00                 .��I��0�R….P..
04 00 00 00 00 00 db e3 cf 11 9f 04 00 04 00 04                 ……���.�…..
00 04 1c 01 00 00 00 00 00 00 00 00 00 55 7b 00                 ………….U{.
00 b1 ff 00 00 e6 02 00 01 22 a4 00 01 78 0e 00                 .��..�…”�..x..
00 04 08 7b 2d 55 c4 3d e0 be 6f 00 00 00 00 00                 …{-U�=��o…..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 45 41                 …………..EA
33 01 00 60 ff ff 00 00 00 00 01 0f 50 00 00 04                 3..`��……P…
00 00 00 a4 d5 db e3 cf 11 9f db 1c b5 2d 00 00                 …�����.��.�-..
20 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00                  0…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
pos: 4178/7471235; remain data: 7467057
Chunksize: 4096
distance_to_header: 12056
Bytes left: 7467057
Sending 4096 bytes to md
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 02                 …………..�.
4e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 N�…………..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 …………….
Error writing track 110
2/25 更新 :
好像是oma/omg 文件的问题 ,这些文件的格式 好像和AA3 的不一样了,有空我再试试从netmd导出文件 ,在导入进去 ,看是否ok

bcm4312 开源驱动是条龙,官方驱动是条虫

在我印象中bcm不是什么折腾的主,起码我的DDWRT上面就是bcm 的方案。但见到了bcm4312 后改变了这种看法。 其实bcm4312自从2.6.24 之后都是可以由内核直接支持不需要额外编译模块了。不过这里关键的问题是这个驱动不是bcm授权的,所以firmware 并不直接提供,需要自己想办法。 linux wireless 提供的方法是: 用b43-fwcutter

wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-013.tar.bz2
tar xjf b43-fwcutter-013.tar.bz2
cd b43-fwcutter-013
make
cd ..

从windows驱动中裁切出来firmware ,

export FIRMWARE_INSTALL_DIR="/lib/firmware"
wget http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2
tar xjf broadcom-wl-4.80.53.0.tar.bz2
cd broadcom-wl-4.80.53.0/kmod
sudo ../../b43-fwcutter-013/b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta.o

而且对kernel 版本有要求, 上面的是2.6.24 , 2.6.25 要用broadcom-wl-4.150.10.5.tar.bz2 2.6.32 要用broadcom-wl-4.178.10.4.tar.bz2 实践证明对于2.6.37 ,上述的broadcom-wl 都无效,只能自己想办法折腾了 最后在一个打包站点装了b43-firmware-4.174.64.19-3.pm.3.1.noarch.rpm ,试了里面的firmware 才搞定, 一切正常,也很稳定,注入模式也没问题。

Update: 对于openSuSE ,上述的方法都是浮云,因为它提供一个自动的firmware 下载脚本,直接执行install_bcm43xx_firmware  就可以了,然后开启网卡万事ok。

再看看 bcm的官方驱动:

802.11 Linux STA driver

STA  是什么?  不知道,我真不知道。 纳尼, 1MB , bcm 你有诚意吗? 为什么windows下的wl_apsta.o 就有5MB了? 下来试试吧。 编译完了,rmmod b43 , modprobe wl ,ifconfig :

eth1 Link encap:Ethernet  HWaddr 0C:EE:E6:9F:DC:A5
inet6 addr: fe80::eee:e6ff:fe9f:dca5/64 Scope:Link
UP BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
Interrupt:17

看到这个eth1 我就晕了,这个驱动要玩完,这个驱动肯定不依赖 ieee80211 模块(lsmod 看一下就知道), 也就是说他不是使用kernel的驱动架构,而是自己搞了一套。再见吧bcm sta 驱动,我真的不想再见到你…