/*802.11子系统包*/
README for external mac80211 subsystem package
Copyright (c) 2007, Intel Corporation
version: mac80211-10.0.4
date : Mon Jan 7 18:42:07 PST 2008
/*这个mac80211子系统包可以在大多数2.6.18版本以上内核安装,你可以通过 uname -r确定你linux的内核版本*/
This archive provides a package for the mac80211 subsystem,
installable into most kernels with a version of 2.6.18 or
later. You can determine your kernel version by running:
% uname -r
/*注:mac80211子系统被一群团体开发。为了使它被更广泛的使用,intel把这些包装系统放在一起*/
NOTE: The mac80211 subsystem is being developed by a group of
community developers. Intel put together this packaging system
in order to better facilitate the widespread availability and
adoption of the subsystem.
/*这个文件概述了mac80211包为什么存在,它有什么用,怎样安装使用它。*/
This file provides an overview of why the mac80211 package exists,
what it does, and how it does it.
/*索引*/
Index
Quick steps
Why?
What?
How?
What is in a release?
Makefile targets
Updating compatiblity
Version numbering
/*快速安装步骤*/
Quick steps
/*如果你是一个仅仅想要尽可能快的尝试运行它的用户,下面是一些到目前为止最简单的步骤*/
If you're a user that just wants to try and get up and running
as quickly as possible, here are the simplest steps we have so
far:
% make patch_kernel
/*上面这一步,如果运行成功的话,你的当前内核源码树应该已经包含 mac80211 子系统了。接着你应该配置你的内核,加载mac80211 子系统模块*/
/*本人注:我是linux2.6.20版本的内核,在运行这一命令时,提示 “兼容性”问题。*/
The above, if it succeeds, should patch your current running
kernel source tree to contain the mac80211 subsystem sources. Now
you need to configure your kernel build to build the mac80211
modules:
/*切换到当前内核源码目录下,配置内核*/
% cd /lib/modules/$(uname -r)/build
% make menuconfig
/*按下面进行设置*/
You will want to set the following to <M>:
CONFIG_MAC80211=m
Networking --->
Generic IEEE 802.11 Networking Stack (dscape)
You can turn on the sub-options for that subsystem if you want.
/*保存配置,并退出*/
Select 'Exit' until it prompts to save your kernel configuration
and select 'Yes'. Now you can build the module:
% make modules
% make modules_install
/*注:从mac80211-2.0.0起,你必须配置CONFIG_CFG80211,并且重建你的内核镜像*/
NOTE: As of mac80211-2.0.0 you must also enable CONFIG_CFG80211 and
rebuild your main kernel image. This is because the latest mac80211
changes re-implement the kernel built-in from net/core/wireless.c as
part of the net/wireless/ sources.
% make all
% make install
/*从新内核启动*/
You will then need to reboot into the new kernel (vs. just loading the
new 80211 modules)
Why?
/*linux内核的网络团体通常都是这方面的顶尖人员,对于普通用户而言如果你能升级到最新的内核那意味着漏洞修补,打补丁,增强功能将对你有用。对有些人而言,这是可以接受的,对其他人而言,则不能。*/
The network community for the Linux kernel typically has an
approach of focusing purely on the 'tip'. To the average
user that means that bug fixes, patches, and enhancements will
only be available to you if you can upgrade to the latest
development kernel. For some, this is acceptable. For others,
it is not.
/*这个包可以增加系统的无线功能*/
This package is created in order to try and provide the user (you)
with fixes and enhancements that affect *just* the wireless
subsystem required for use with your hardware.
As with any software, new changes may introduce new bugs.
Upgrading from one version of the mac80211 subsystem to the
next might regress a problem, or even introduce a new one --
if it does, and you find it, please file a bug at
http://bughost.org under the project 'mac80211'.
What?
So what does this package contain? It represents the latest
version of the mac80211 as available via the GIT repository
hosted at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-dev.git
In addition to the above, any patches submitted by the mac80211 subsystem
developers which are deemed to be bug fixes or improve existing
functionality which have not been made available in the GIT repository.
/*当你在你的系统上运行make的时候,脚本程序检查你的目标内核确定哪些兼容性改变需要在你的系统上编译*/
When you run make on your system, the build scripts will examine your
target kernel to determine which backward compatibility changes are
required to compile on your system. A side effect of the mac80211
developers using the latest kernel tip as their baseline is that the
subsystem itself emerges to use whichever new features or APIs may have
been made available in the rest of the kernel. This will typically
break building and running on kernels released prior to those changes.
The build system for this package attempts to correct that behavior.
How?
/*目标内核通过KSRC=/patch/to/kernel指定,如果没有指定,默认在下面目录中查找*/
When you run the build, it runs a series of scripts against the
target kernel. The target is specified via KSRC=/patch/to/kernel.
If no KSRC is provided, it will default to looking in:
/lib/modules/$(uname -r)/build
/*每一个脚本都试着确定被调用的内核功能是否是当前所用的内核版本的。在以前,一个模块程序通常像下面这样写*/
Each of the scripts attempts to determine if a given set of
kernel functionality is present. In the good old days, a module
could do something simple like:
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
/* some code */
#else
/* some other code */
#endif
/*在最近几年,因为一些原因不用这些方法了。两个最重要的原因是因为:*/
Over the last few years, however, this approach has broken due
to a number of reasons. The two most prominent causes are:
/*在一个更新后,内核API和结构会变化(这种更新不能通过KERNEL_VERSION宏来检查)*/
* Kernel API and structure changes occurring within
an -rc update (which can not be checked with the
KERNEL_VERSION macro)
* Distributions backporting new kernel features into
older kernels such that the older vanilla kernel
(as originally provided by Linus) does not have the
feature but the distributor does.
/*一个说明脚本程序在干什么的例子是在一个特殊的头文件上运行一个“grep“查找命令来确定参数传给函数时是否已经改变或者是否存在一个特殊的定义*/
An example of what a script might do is perform a grep operation
on a particular header file to determine if the parameters
passed to a function have changed, or if a particular definition
exists.
What is in a release?
The details of how a typical release cycle is as follows:
1. Latest files are obtained from Jiri's GIT
repository into a local GIT tree (eg., /repos/jbenc)
2. mac80211 subsystem files are copied from the GIT tree into
the 'origin' directory via:
% make BASE=/repos/jbenc origin
3. The patches in the 'pending' directory are applied to the
'origin' in numerical sequence to build a new tree stored
in the 'modified' directory.
/*进行各种测试*/
4. Miscellaneous testing is performed (build iwlwifi, associate,
etc.)
5. The files in 'stubs' are sourced with the following
environment variables defined:
MAC80211_VERSION=versionstring
with the output of that sourcing going into the base
directory as a file with the same name (eg., stubs/README
creates README). This is used to update the documentation
to contain the latest version fields.
6. The package is tarballed up with a version stamp named:
mac80211-${MAC80211_VERSION}.tgz
7*. A test system performs a tinderbox build of the package
against:
* Linus' vanilla kernels > 2.6.18
* Latest kernel sources version available as a 'stable'
package from the following distributions (alphabetical):
Fedora Core
Gentoo
OpenSuse
Ubuntu
* This is not yet done. Currently I have to do the smoke test
build by hand, which means I'm only building against the latest
Gentoo kernel and a couple other random kernel images I have on
my system.
/*Makefile 的目标*/
Makefile targets
/*构建文件(Makefile,Kbuild,etc.)支持多个目标取决于你想做什么。这一段文字简单对每个目标进行了一些概述。*/
The build supports multiple targets depending on what you
are trying to do. This section provides an overview of each
of those targets.
clean
Removes *.ko, *.o, and *.mod.c from the tree. This
also deletes the compat directory (built with the
source target)
See Makefile
origin
Updates the tip sources. Specify the source repository
via BASE= on the make command line.
NOTE: The script will not perform any GIT fetching
from the Internet and will only copy the mac80211 related
files from the directory specified. If you want to
update to the latest GIT version you would need to
first obtain Jiri Benc's GIT repository and then direct
the make to that directory via BASE. By default,
the script will look in /home/repos/mac80211/
Once the tip files are copied, the patches in 'pending'
are applied in sequential order.
See scripts/generate_origin
/*从 'pending' 目录创建一个 'tip' 应用所有的补丁文件*/
modified
Creates a modified 'tip' applying all of the patches
from the 'pending' directory.
See scripts/generate_modified
/*检查目标内核跟mac80211源程序是否兼容,
并且从 'modified' 目录到'compatitble'目录,创建一个源程序兼容版本。*/
source
Examines if the target kernel can be used without
any changes to the modified mac80211 sources provided in the
tip directory and creates a compatible version of the
sources from 'modified' in the 'compatitble' directory.
See scripts/generate_source
/*检查目标内核跟mac80211源程序是否兼容,并且从 'origin' 目录到'compatitble'目录,创建一个源程序兼容版本。 */
unmodified
Examines if the target kernel can be used without
any changes to the modified mac80211 sources provided in the
tip directory and creates a compatible version of the
sources from 'origin' in the 'compatitble' directory.
/*如果你想要一个纯正的与你内核兼容的 mac80211版本,你通常要用到这个。*/
You would typically use this if you want a "pure" version
of mac80211 compatible with your kernel.
See scripts/generate_source
/*转移生成的或者顶端源码到目标内核。为了把mac80211子系统加进配置文件,这个命令也会给内核配置文件(Makefile, Kconfig, etc.)打补丁。*/
patch_kernel
Transfers the generated or tip sources into the target
kernel. This will also patch the required kernel
build files (Makefile, Kconfig, etc.) as needed in order
to add the mac80211 subsystem to the build.
See scripts/patch_kernel
dist
Builds a distribution tarball and places it in the
distros directory. The filename for the tarball is
mac80211-${MAC80211_VERSION}.tgz.
NOTE: MAC80211_VERSION defaults to 'test'.
See Makefile
Updating compatibility