2.6 内核配置(转)

作者:阿锐

本文以Gentoo的2.6.10-r6的内核为例,讲述了如何配置、编译2.6版本的内核。

首先对内核进行菜单配置,
# cd /usr/src/linux
# make menuconfig
进入图形界面的内核配置。

代码成熟度选项,
Code maturity level options  —>
  [*] Prompt for development and/or incomplete code/drivers
  [*]   Select only drivers expected to compile cleanly

    打开使用开发中、不完全的代码/驱动会让内核配置多出很多选项,由于我们需要使用一些正在开发中的功能,因此必需打开这一选项。

2.6内核的配置与编译(2)
 
通用设置选项,
General setup  —>
  ()  Local version – append to kernel release
  [*] Support for paging of anonymous memory (swap)
  [*] System V IPC
  [*] POSIX Message Queues
  [*] BSD Process Accounting
  [*]   BSD Process Accounting version 3 file format
  [*] Sysctl support
  [ ] Auditing support
  (15) Kernel log buffer size (16 => 64KB, 17 => 128KB)
  [*] Support for hot-pluggable devices
  [*] Kernel Userspace Events
  [*] Kernel .config support
  [*]   Enable access to .config through /proc/config.gz
  [*] Configure standard kernel features (for small systems)  —>
    — Configure standard kernel features (for small systems)
    [ ]   Load all symbols for debugging/kksymoops
    [*]   Enable futex support
    [*]   Enable eventpoll support
    [*]   Optimize for size
    [*]   Use full shmem filesystem
    (0)   Function alignment
    (0)   Label alignment
    (0)   Loop alignment
    (0)   Jump alignment
 
Local version – append to kernel release:这里填入的是64字符以内的字符串,你在这里填上的字符口串可以用uname -a命令看到。

Support for paging of anonymous memory (swap):这是使用交换分区或者交换文件来做为虚拟内存的,当然要选上了。

System V IPC:表示系统5的Inter Process Communication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来的。

POSIX Message Queues:这是POSIX的消息队列,它同样是一种IPC。建议你最好将它选上。

BSD Process Accounting:这是充许用户进程访问内核将账户信息写入文件中的。这通常被认为是个好主意,建议你最好将它选上。

Sysctl support:这个选项能不重新编译内核修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys存取可以影响内核的参数或变量。建议你最好将它选上。

Auditing support:审记支持,用于和内核的某些子模块同时工作,例如SELinux。只有选择此项及它的子项,才能调用有关审记的系统调用。

Kernel log buffer size:内核日志缓存的大小,12 => 4 KB,13 => 8 KB,14 => 16 KB单处理器,15 => 32 KB多处理器,16 => 64 KB for x86 NUMAQ or IA-64,17 => 128 KB for S/390。

Support for hot-pluggable devices:是否支持热插拔的选项,肯定要选上。不然USB、PCMCIA等这些设备都用不了。

Kernel Userspace Events:内核中分为系统区和用户区,这里系统区和用户区进行通讯的一种方式,选上。

Kernel .config support:将.config配置信息保存在内核中,选上它及它的子项使得其它用户能从/proc中得到内核的配置。还记得另一篇贴子我是如何取得启动光盘的内核配置信息,并在此基础上配置新的内核吗?

Configure standard kernel features (for small systems):这是为了编译某些特殊的内核使用的,通常你可以不选择这一选项,你也不用对它下面的子项操心了。

Load all symbols for debugging/kksymoops:是否装载所有的调试符号表信息,如果你不需要对内核调试,不需要选择此项。

Enable futex support:不选这个内核不一定能正确的运行使用glibc的程序,当然要选上。

Enable eventpoll support:不选这个内核将不支持事件轮循的系统调用,最好选上。

Optimize for size:这个选项使gcc使用-Os的参数而不是-O2的参数来优化编译,以获得更小尺寸的内核,建议选上。

Use full shmem filesystem:除非你在很少的内存且不使用交换内存时,才不要选择这项。

后面的这四项都是在编译时内存中的对齐方式,0表示编译器的默认方式。使用内存对齐能提高程序的运行速度,但是会增加程序对内存的使用量。
内核也是一组程序呀。

2.6内核的配置与编译(3)

可加载模块,
Loadable module support  —>
  [*] Enable loadable module support
  [*] Module unloading
  [ ]     Forced module unloading
  [*] Module versioning support (EXPERIMENTAL)
  [ ] Source checksum for all modules
  [*] Automatic kernel module loading

Enable loadable module support,很多人喜欢将全部功能、硬件支持一股脑的编进内核,而不是使用模块的方式。这样做非常不好(个人觉得)。其实我也做过嵌入式的开发,在针 对特定硬件的平台下尽可能将内核编小,将始终是支持模块加载的。例如我们开发的防火墙就是做为内核的模块被加载的。使用模块支持,你的系统能具有更好的可 扩充性。还有一个原因就是自己编写的功能模块、设备驱动模块(假设编写的质量不高)以模块方式工作引起Kernel Panic的机率要远远低于不支持模块全部编进内核的方式。讲了这么多,终于可以理直气壮的选上这一功能了。

Module unloading,不选这个功能,加载的模块就不能卸载。没什么需要多解释的,建议最好选上。

Forced module unloading,这个选项能强行卸载模块,即使内核认为这样并不安全,也就是说你可以把正在使用中的模快卸载掉。如果你不是内核开发人员或者骨灰级的玩家,不要选择这个选项。

Module versioning support (EXPERIMENTAL),这个功能可以让你使用其它版本的内核模块,由于我自己写一些模块,所以我会用到这个选项,因为内核更新太快了,我的头文件 更新根本赶不上内核的更新。还有,虽然我在Gentoo下开发,但实际真实环境用的却是从kernel.org下载的内核。虽然我选择了这个选项,不过建 议你不要选择这个选项。

Source checksum for all modules,这个功能是为了防止更改了内核模块的代码但忘记更改版本号而造成版本冲突。我估计现在没有哪家公司在开发中还没使用版本控制工具,所以不需要这项了。如果你不是自己写内核模块,那就更不需要这一选项了。

Automatic kernel module loading,这个选项能让内核自动的加载部份模块,建议你最好选上。举个例子说明一下,如模块eth1394依赖于模块ieee1394。如果选择了 这个选项,可以直接加载模块eth1394;如果没有选择这个选项,必需先加载模块ieee1394,再加载模块eth1394,否则将出错。

2.6内核的配置与编译(4)

处理器内型及特性,
Processor type and features  —>
  Subarchitecture Type (PC-compatible)  —>
  Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)  —>
  [ ] Generic x86 support
  [*] HPET Timer Support
  [*] Symmetric multi-processing support
  (2)   Maximum number of CPUs (2-255)
  [*]   SMT (Hyperthreading) scheduler support
  [ ] Preemptible Kernel
  [ ] Machine Check Exception
  <M> Toshiba Laptop support
  <M> Dell laptop support
  < > /dev/cpu/microcode – Intel IA32 CPU microcode support
  < > /dev/cpu/*/msr – Model-specific register support
  < > /dev/cpu/*/cpuid – CPU information support
  Firmware Drivers  —>
    < > BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)
  High Memory Support (4GB)  —>
  [ ] Allocate 3rd-level pagetables from highmem
  [ ] Math emulation
  [*] MTRR (Memory Type Range Register) support
  [ ] Boot from EFI support (EXPERIMENTAL)
  [*] Enable kernel irq balancing
  [ ] Use register arguments (EXPERIMENTAL)

Subarchitecture Type,这没什么好说的,如果用PC机的话都选这个。

Processor family,这也没什么好说的,选择你机器对应的处理器即可。

Generic x86 support,这一选项针对x86系列的CPU使用更多的常规优化。如果你在上面一项选的是i386、i586之类的才选这个。

HPET Timer Support,HPET是替代8254芯片的下一代时钟处理器。这里你可以安全的选上这一选项。如果硬件不支持的话,将仍使用8254时钟处理器。

Symmetric multi-processing support,对称多处理器支持,在单CPU的机器上,不选这个选项会更快一些。由于超线程技术,看起来是两颗CPU,因些要选上这个选项。

Maximum number of CPUs (2-255),支持的最大CPU数。

SMT (Hyperthreading) scheduler support,超线程支持,如果你的CPU是P4超线程的,应该选上这一选项。

Preemptible Kernel,这个选项能使应用程序即使内核在高负载时也很可靠,建议最好选上。

Machine Check Exception,这个选项能让CPU检测到系统故障时通知内核,一般我用组装的台式机会选这项。本本嘛,我感觉还是非常可靠的,所以就不选它了。

Toshiba Laptop support,Dell laptop support,这两项都是对本本的支持,其实编译内核的原则应该是让内核能在特定的环境下运行,由于我编译的内核可能公司的其它人也会使用,所以我尽可 能的不针对特定的硬件。将对特定的硬件支持编译成模块。

/dev/cpu/microcode – Intel IA32 CPU microcode support,这个选项是让你使用不随Linux内核发行的IA32 microcode,但是你必需有IA32 microcode的二进制文件。

/dev/cpu/*/msr – Model-specific register support,这个选项能让特权CPU访问x86的MSR寄存器。由于超线程并不是真正的多处理器环境,所以不要选择这个。

/dev/cpu/*/cpuid – CPU information support,这个选项能从/dev/cpu/x/cpuid获得CPU的唯一标识符。

BIOS Enhanced Disk Drive calls determine boot disk,台式机的有些BIOS支持从某块特定的硬盘启动,由于本本只能装一块硬盘,所以就不选择这项了。如果你的BIOS不支持这个功能而你选上的话,有可能无法启动。

High Memory Support (4GB),4GB的内存支持,已经足够了。

Allocate 3rd-level pagetables from highmem,除非你真的有几G的内存,选择这个是没有意义的。

Math emulation,估计现在没人有386或486SX的处理器了吧,那就不要选这个。

MTRR (Memory Type Range Register) support,这个选项必需要选上。

Boot from EFI support (EXPERIMENTAL),由于我使用的是GRUB,所以选上这个也没什么用,如果你打算使用EFI的功能,你可以到http://elilo.sourceforge.net看看。

Enable kernel irq balancing,选上这个选项能让内核进行IRQ均衡。

Use register arguments (EXPERIMENTAL),使用-mregparm=3参数编译内核,将前3个参数以寄存器方式进行参数调用。GCC的版本必需大于等于3.0。

电源管理,
Power management options (ACPI, APM)  —>
  [*] Power Management support
  [ ]   Power Management Debug Support
  [ ]   Software Suspend (EXPERIMENTAL)
      ACPI (Advanced Configuration and Power Interface) Support  —>
      APM (Advanced Power Management) BIOS Support  —>
      CPU Frequency scaling  —>

Power Management support,电源管理没什么好说的,不想浪费电就选上。如果不选你可以跳过这部份。

Power Management Debug Support,电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。

Software Suspend (EXPERIMENTAL),休眠到硬盘。也就是将内存写入交换分区中,下次启动可以通过参数resume=/dev/swappartition(例 如:resume=/dev/hda6)来恢复上次机器运行的状态。这项功能对于系统引导时启动许多服务的机器来说很有用,可以节约启动时间。这项功能根 据自己的需要选择吧,如果你选择这项功能,记得恢复休眠后重做交换分区。


2.6内核的配置与编译(6)

ACPI (Advanced Configuration and Power Interface) Support  —>
  [*] ACPI Support
  [ ]   Sleep States (EXPERIMENTAL)
  <M>   AC Adapter
  <M>   Battery
  <M>   Button
  <M>   Video
  <M>   Fan
  <M>   Processor
  <M>     Thermal Zone
  <M>   ASUS/Medion Laptop Extras
  <M>   IBM ThinkPad Laptop Extras
  <M>   Toshiba Laptop Extras
  (0) Disable ACPI for systems before Jan 1st this year 
  [ ] Debug Statements
  [ ] Power Management Timer Support

ACPI Support,这是一种电源管理方式,你可以看看你的BIOS是否支持。如果支持的话建议你选上这项。

Sleep States (EXPERIMENTAL),这项功能可以让系统进入休眠状态(不是休眠到硬盘)。休眠是指系统仍然通着电,只是进入最大幅度的省电状态;而休眠到硬盘 是指系统已经断电。不过如果你不是驱动程序的电源管理部份的开发人员,建议你最好不要选择这项。相信未来linux下的驱动对电源支持的功能会越来越好, 或者也搞个硬件兼容列表,到时就可以放心的使用这项功能了。

AC Adapter,检测是电源供电还是电池供电,通常只对本本有用。

Battery,通过/proc/acpi/battery得到电池的信息,通常这也是针对笔记本的。

Button,捕获Power、Sleep、Lid(我也不知道这是什么按钮)等按钮是否按下,并做相应的动作。

Video,集成在板上的显卡的ACPI支持,对有些板卡可能不起作用。

Fan,风扇的支持。这一点很明显,不选这项我的本本的风扇一直在转,选上以后风扇只是间断的转转。

Processor,当机器负荷轻时节省处理器的用电,处理器可是电脑中的第一用电大户(可能老式的CRT显示器和它有的一比)。

Thermal Zone,这个我也不太清楚是什么,只是据说大部份的台式机和笔记本都支持,不选还可能把处理器烧掉。如果你不会让模块正常工作,还是把它编进内核吧,怪吓人的。

ASUS/Medion Laptop Extras、IBM ThinkPad Laptop Extras、Toshiba Laptop Extras,这三种本本的扩展支持。你的内核如果只是自己用,选个该选的就行了。

(0) Disable ACPI for systems before Jan 1st this year,输入四位数的年份,在该年的1月1日前不使用ACPI的功能。0表示一直使用。

Debug Statements,详细的ACPI调试信息,不搞开发就别选。

Power Management Timer Support,我的本本支持HPET(要是忘了是什么,再看看前面),所以不选它。要是你的机器不支持,应该把它选上。

 

2.6内核的配置与编译(7)

APM (Advanced Power Management) BIOS Support  —>
  <M> APM (Advanced Power Management) BIOS support
  [ ]   Ignore USER SUSPEND 
  [*]   Enable PM at boot time
  [ ]   Make CPU Idle calls when idle
  [ ]   Enable console blanking using APM
  [ ]   RTC stores time in GMT
  [ ]   Allow interrupts during APM BIOS calls
  [*]   Use real mode APM BIOS call to power off

APM (Advanced Power Management) BIOS support,高级电源管理的支持,一般来说笔记本应该选上,台式机可以不选。

Ignore USER SUSPEND,只有NEC Versa M系列的笔记本需要选择这一项。

Enable PM at boot time,启动时支持电源管理,选上这个选项能让系统自动的进行电源管理,除非在启动时死机,才不要选这项。

Make CPU Idle calls when idle,系统空闲时调用空闲指令。只有老式的CPU才用这项。其实调用空闲指令还是让CPU执行了一条指令。这个选项在内核循环中调用空闲指令。

Enable console blanking using APM,支持关闭监视器。据说这项功能对所有的笔记本都无效。如果你都按我的建议配置,系统是能自动休眠的(使用ACPI)。你也不用担心你的显示器一直亮着的。

RTC stores time in GMT,按Unix的标准,硬件的时钟应该设为格林威治时间。还是那句老话,因为我还要用Windows,所以硬件时钟设成了本地时间,当然就不要选这项了。

Allow interrupts during APM BIOS calls,允许APM的BIOS调用时中断。多数的机器不需要这项,Thinkpad的一些新机器需要这项。如果休眠时挂机(包括睡下去就醒不来),再把这项选上。

Use real mode APM BIOS call to power off,建议最好选上此项,保证软件关机。如果你有兴趣可以试试你的机器不选这项能不能正常的软件关机(多数机器不能)。

 

补充一点,如果既选择了ACPI又选择了APM,先加载的将被使用。

通过这么多的例子,大家应该可以看出来在menuconfig 中,圆括号内是参数,可以选择某一选项或者输入具体的参数。方括号只能选择“Y”或“N”,尖括号除了选择“Y”和“N”还可以选择“M”。“Y”表示将 该选项包括在内核中,menuconfig中以“*”表示。“N”表示不使用此选项的功能,“M”表示将此选项的功能编译成模块。

ACPI是为了取代APM而设计的,因此尽量使用ACPI的功能,实在不行再加载apm模块。


2.6内核的配置与编译(8)

[*] CPU Frequency scaling
[ ]   Enable CPUfreq debugging
< >   /proc/cpufreq interface (deprecated)
      Default CPUFreq governor (performance)  —>
—   ‘performance’ governor
<M>   ‘powersave’ governor
<M>   ‘userspace’ governor for userspace frequency scaling
[ ]     /proc/sys/cpu/ interface (2.4. / OLD)
<M>   ‘ondemand’ cpufreq policy governor
<*>   CPU frequency table helpers
<M> ACPI Processor P-States driver
<M> AMD Mobile K6-2/K6-3 PowerNow!
<M> AMD Mobile Athlon/Duron PowerNow!
<M> AMD Opteron/Athlon64 PowerNow!
<M> Cyrix MediaGX/NatSemi Geode Suspend Modulation
<M> Intel Enhanced SpeedStep 
[ ]   Use ACPI tables to decode valid frequency/voltage pairs
—   Built-in tables for Banias CPUs
<M> Intel Speedstep on ICH-M chipsets (ioport interface)
<M> Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
<M> Intel Pentium 4 clock modulation
< > nVidia nForce2 FSB changing
<M> Transmeta LongRun
<M> VIA Cyrix III Longhaul
— shared options
[ ] /proc/acpi/processor/../performance interface (deprecated)
[ ] Relaxed speedstep capability checks

CPU Frequency scaling,这一选项允许改变CPU的主频,使CPU在低负荷或使用电池时降低主频,达到省电的目的。

Enable CPUfreq debugging,是否允许调试CPU改变主频的功能,如果要调试,还需要在启动时加上参数。cpufreq.debug=<value>
1:变频技术的内核调试
2:变频技术的驱动调试
4:变频技术的调节器调试

/proc/cpufreq interface (deprecated) ,是否允许/proc/cpufreq来调节主频,建议使用默认的sysfs来调节。

Default CPUFreq governor (performance) —>,默认的主频调节,圆括号内的是你选择的结果,这里表示以性能为主。

‘powersave’ governor,最大限度的节约电能调节器。

‘userspace’ governor for userspace frequency scaling,用户自定义调节器。

/proc/sys/cpu/ interface (2.4. / OLD),兼容2.4内核的用户调节器。

‘on …

Posted in GNU/Linux | Tagged | Leave a comment

以前的家

http://blog.csdn.net/dreamboy1123

hehe 以前在csdn上注册的blog 根本没怎么用过,只是记录一些技术文章,既然现在在这开通了,以后把东西都挪到这儿来吧http://wanglei1123.googlepages.com
全是电子书

http://dream1123.spaces.live.com
因为速度慢,废了,文章也一起全搬过来了

http://hi.baidu.com/dream1123

太不自由了

Posted in Uncategorized | Leave a comment

大学生混的几种最高境界

1、考试版

凡人:什么?明天要考高数??

得道:什么?下节课要考高数??

入仙:什么?刚才考的是高数??

成佛: 什么?昨天有考试??

高级佛爷:高数?刚才考的不是英语??

我寝室一哥们:高数是什么树??

 

2、睡觉逃课版
      凡人:靠!快迟到了。赶紧起!(8点上课7点55起来的)

得道:靠!怪事,今天起早了!(8点上课7点55起来的)

入仙:靠!已经迟到了,干脆接着睡!帮我请个假。

成佛:(朦胧中)别叫我,让我再睡会儿。

(画外音:起来吧,你已经连逃一个星期了!)

老样子,帮我喊到!

高级佛爷:选修课必逃,必修课选逃。今天星期二,按惯例不去,接着睡。

(画外音:你不怕教授发现吗?)

教授?开学三个月,我还不认识谁是教授那!

我宿舍那哥们一天早起六点半,高高兴兴去上课,今天终于没迟到,到了课堂看见辅导员怒气冲冲看着他,他胆怯的说:“我今天没迟到。 ”

辅导员说: “我知道,可你昨天一天去哪了? ”

(原来这哥们睡了一整天加一个晚上)

 

3、上课睡觉版

凡人:今天又睡了一整节英语。真他妈爽!

得道:今天又一觉睡到了中午吃饭,真他妈爽!

入仙:今天又睡得忘了吃中午饭,真他妈不爽!

成佛:早上来的,天怎么这么快就黑了,现在是夏天,天黑这么早?

高级佛爷:醒来以后发现饿的走不了路了,于是接着倒下睡。

我宿舍那哥们,有一次教授对他说:“***,你以后不要迟到了,那样会影响你的睡眠质量。 ”

Posted in Fun | Tagged | Leave a comment

“电子的复兴”中的台词

常微分学常没分,数理方程没天理;实变函数学十遍,泛函分析心犯寒;微分拓扑躲不脱,随机过程随机过;微机原理闹危机,汇编语言不会编;量子力学量力学,机械制图机械制

Posted in Fun | Tagged | Leave a comment

我的数学求学之路—-兼谈数学学习

从http://spaces.msn.com/dreamyman/上的转的,hehe



我学习数学的经历见证了这样一个事实:数学学习是一个循序渐进的过程,开始时必须先打好基础,否则就难以进行进一步的学习。

我 的数学之路可追溯到高三时因备战高考而读的两套数学参考书,一套侧重于思想方法,另一套则侧重于解题技巧。虽然后者对我提高成绩和激发兴趣起了很大作用, 前者却让我接触到了真正的数学并影响了我以后的数学学习。那时我并不明白前者揭示的才是数学学习的正途,只是感到它和我平常接触的数学不同。遗憾的是,当 时我读它读了两遍成绩却没什么提高,而后者只读了一遍成绩却有大幅度的提高。现在回想起来,这就好像武侠小说中描述的玄门正宗武功初学时见效慢只有日久才 能显其威力,而邪派武功则易于速成却难有大成。如今的应试教育使得大批的学生迷茫于解题技巧之中,把解题等同于学数学,不仅误人子弟,而且严重损害了我国 数学事业的根基使得人才凋零。

真正意义下的数学之路开始于进入大学数学专业学习之后。大一时我读了王元写的《华罗庚传》,对这位众所周知 的传奇人物十分敬仰。对伟大人物的崇拜和数学的抽象性使我觉得数学非常的神秘。我困惑于这种神秘,想要了解它。像大多数的学生一样,我按部就班地跟随课堂 学习数学。两年多的时间过去后,我依然感到自己什么都没学懂。极限对我来说是一个模模糊糊的概念,我不知道连续到底是什么,我知道微分积分的法则,但它们 究竟是什么呢?我头脑里积存了太多的问题,却无法解答。我甚至不相信自己有能力解答。我觉得数学是神秘的,我只能窥探它而不能了解它。我读数学人物传记, 读数学史。我没法完全读懂它们,但我喜欢读它们,因为读它们比读教材容易。我觉得只有读它们才能触及到数学的灵魂,才能了解数学。我似乎对数学兴趣十足, 但阅读教材又真正令我头疼。我读不懂书中的证明,我解不出书后的习题。这个样子让我没法相信自己能够掌握数学。现在回想起过去的这样一段经历,我应该如何 理解它呢?它表明我不够聪明,还是太过聪明?前者容易理解,后者呢?因为关于“懂”与“不懂”的标准,每个人是不一样的。有一件事令我印象深刻,就是在读 研时学广义函数期间,有一个同学问过我一个问题,那个问题我思考过但还没考虑清楚,我把我想到的一些想法和他说了,在我还没说完我的想法前,他打断我很高 兴地说:“我懂了”。于是我没再说什么。苏格拉底说知道自己笨的人是聪明人,那么有时知道自己不懂的人是否比觉得懂了的人懂得更多一些呢?在上大学前,我 便对自己的抽象思维能力颇为欣赏,我相信我有超越常人的洞察力。也许当时我意识到自己不懂,恰说明我比别人懂,因为我想明白的比别人要多,我要的是完完全 全的理解,如果对一个概念的理解有一个止境的话,我想要到达那个境界。至于当时我到底是属于哪一种情形(比别人懂还是不懂,够聪明还是不够聪明)恐怕是没 有答案的,而且追究这样一个答案也是没有意义的,重要的是我用了什么样的标准去学数学,重要的是数学应该学到什么程度。数学应该学到什么程度呢?如果说理 解有无止境本身就是一个问题的话,一个比较现实的标准是你是否达到了数学家(甚至顶级数学家)的理解程度(这个标准是在后来的学习中逐渐明确的)。验证自 身的理解程度的一个好方法是通过读名家大师的著作来印证自己的理解。在中国现今的数学教育下,学数学是不能和身边的人比得,因为比身边的人强一般来说是没 什么意义的。现在数学系的学生百分之九十以上甚至谈不上了解数学,更何况懂呢?他们大多虽身处数学系却不以学习数学为目标,更不用谈用功学习。胜之不武 啊!

再回头来说我当时的情况,大一时我读不懂书中偏难的证明,解不出书后的许多习题。那种水平恐怕比许多刚开始学数学的人都差。所幸的是 我不曾因此而放弃数学,一直坚持学习,坚持不以考试为目标的学习,坚持阅读书中的证明,坚持追求对概念和思想方法的理解。总的来说,大三以前我不懂数学, 但在某种意义上讲我了解了数学。学习数学的层次可以划分为“how”和“why”。工科生学数学是在“how”的层次上;数学系的学生应该到“why”的 层次上。先知道“how”然后明白“why”这符合人的认知规律,绝大多数人都是知道了“how”便觉得懂了,我却一直在问“why”。现在学校的数学教 育实在不能入目,课堂上的教学一般也就到“how”这个层次,至于“why”连好多讲课的老师自己都不知道,更不用提给学生讲了。实际上,即便老师知道 “why”,在课堂上也讲了“why”,一般学生也不能做到“understand why”。这是数学学习的一个特点,不经过自己思考的东西是不能够充分吸收理解的,不经过思考性的自学便不能够到达“know why”的层次。或许如果当时我满足于会形式的计算与推理,我在数学上就不会感觉到那样的困难,以至于连信心都丧失掉了。很大程度上,正是追求“why” 使我困惑。大三以后,我花了很长的时间重学数学分析和高等代数,逐字逐句地读,咬文嚼字地读,结合不同的教材读,在阅读中把头脑中积累下来的那些 “why”扫除干净。通读一次之后,对数学的认识大有提高,连学数学信心也恢复了不少,原来那些问题是我自己就可以解决的,原来我是可以学懂数学的,原来 数学一点都不神秘。但是过后又会有新的“why”冒出来(学数学的境界提升了就会看出新的问题),于是常常不时返回头去解决它们。就这样我把分析学的主干 课程全部重学一遍。我现在的数学基础差不多就是这样奠定下来的。事实上,数学学习本就是一个反复学习的过程,一次学习就理解到位是不可能的。刚开始学时, 一切都是陌生的,大量的概念和定理必定会使人感到接受起来困难,何况课堂教学不可能等待学生搞懂了前面的部分再继续下去。经过了初步的学习之后,对其中的 大多数内容在头脑中已有一定的印象,再次学习时就可以把重点放在理解上。如果我在数学分析等课结束后便返回头来重学,而不是等到大三之后,或许会早一点打 好基础,不至于使后续课程的学习全成了夹生饭,以至于要全部重学。之所以在重新学习那些课程时会感到容易得多,我想不仅仅是教材选择的问题,更重要的或许 是多年数学学习的积累。人人都知道成功之路必定布满荆棘,但大多数人只想获得成功,空喊口号却不付诸实际努力,最终怨天尤人唯独不怨自己。所以在感到困难 的时候,要明白获得成功之前必定要先历经艰辛。

重学几乎全部的基础课程是一个庞大的计划,远不是短时间内可以完成的。到本科毕业前,我只 对数学分析和高等代数感到比较满意。其余有些课程虽然重新看过,但由于时间有限,效果不能令人满意。这个计划需要大量的时间和精力。我整个硕士阶段有三分 之二的时间在补基础,在重学本科知识,新东西学得很少。当时也想学新东西,只是不把基础补起来新东西根本就看不懂,看多少遍都看不懂。必须感谢导师对我的 支持。他认为硕士阶段就是打基础,很难做什么东西。他也不管我具体在做什么,给我很大的自由。现在我学新东西速度还算快。以前对华罗庚说的“熟能生巧、勤能补拙”总有些怀疑,现在才体会到的确如此。现在偶尔能听到有人说我聪明,我相信这份“聪明”来自苦功夫。

我 是在工科院校学的数学。这对于一个以数学为事业的人来说是个不幸。我本科的课程有一半是计算机课程。数学考试也很简单,检测不出一个人的真实水平。那样的 考试拿一百分和六十分我觉得在实际水平上都没什么差别,反正过一段时间大家都忘了,就好像什么都没学一样。我被这种考试制度害苦了。我是第一名,所有人眼 中的好学生。可是我觉得我根本就不懂数学。有许多数学家都谈过数学学习方法,谈过学数学应掌握到什么程度。我读过,我知道,但我没能照做,因为我没有那么 多时间那样学数学,我需要交作业,我需要跟着课堂跑。大家都知道现在本科生课程安排有多满,多得没时间自由思考。也许会有人马上反驳我,事实不是这样的。 你没看到很多人学得都很轻松,玩了四年大学不也毕业了吗?是的,只靠考前突击过关的人从来不会嫌课多。现在数学系招那么多人,每个班至多只有几个人会走数 学的道路。总不能为了几个人,让大部分人考试不过关吧;总不能为了几个人,不考虑其他人的就业问题吧。数学系的培养目标不是培养数学人才,奇怪的是,哪当 初干嘛要招那么多的学生呢?让他们直接进其它专业学习不更好吗?这是一种变了质的教育。回想当初,现实中的考试曾让我怀疑是否有必要深入地掌握数学,现实 中没有人(亲口)告诉我我该怎么学数学,应该学到什么深度。也许,我的幸运在于大三下学期遇到了我的硕士导师,也是我现在的导师。他是我在现实中接触过的 第一位真正的数学家。从他身上,我看到了书中描述的数学家的品质。此前,我见过数学教授。见多了所谓的教授、副教授我曾经一度怀疑书中描述的数学家世界只 是一个虚幻。直到见到他,我不再怀疑。如果华罗庚是我的第一个,(当然)也是永远的精神导师,那么从那时起我有了一个实实在在的数学家导师。我接触到了数 学家世界,我渴望已久的世界,原来它不是一个梦幻。然而,可悲的是,我那考试得来的第一名对我进入这个世界毫无帮助。我意识到我必须重头学起。我感到自己 无比的渺小,以至于不敢考研(我错过了一次进入中科院数学与系统科学研究院的机会,错过了跟随一位院士学习的机会)。另一方面,提前决定保研(我的成绩和 拿过数学建模全国一等奖,美国二等奖保证了这个选择没有任何风险)为我争取到了重学数学的大量时间,因为大四的课程总是很少的,而我又不必为考研付出时 间。现在回想起这段经历,我也不觉得有什么后悔。以我原来的基础,跟随无论多么伟大的数学家都不会有什么作为。

思考是一件美妙的事。我重 学数学,我选择全套北大的教材,我开始 思考(我原来没思考吗?有时间思考吗?)。后来我发现并不一定北大的教材就是同类教材中最好的,但是当我没有选择判断教材好坏能力的时候,那真是一个不错 的选择。我至少在某种意义上接受了和北大学生同样好的数学训练(北大学生有意见吗?他们真是幸福,有老师。而我是我自己的老师)。只读数学教师的书会让你 成为数学家吗?只读数学教材会让你成为数学家吗?波利亚说“应该读数学家的著作”。如果你有心的话,会发现著名数学家写的基础著作和科普著作原来有很多 (这辈子你读得完吗?),读吧,看看数学家心中的数学。数学家心中的数学是一致的吗?你会发现数学家对数学的理解都有独到之处,甚至存在截然不同的观点。 当有一日,你发现你开始对数学有了自己的理解,(或者说,你不能人云亦云,对伟大的数学家也是如此,你应当有自己的观点),祝贺你!你快成数学家了。你只 需做出自己的发现了。

我自己还不是一个数学家,甚至终身可能与这一头衔无缘。人生有自己的努力,也有命运的安排。命运安排我学了控制论(一个应用数学分支),这个领域的头衔是控制论专家。所以,上一段话的结尾是大胆的鼓励。

虽然我对中国的学校教育多有批评,也极少提到数学教师的作用,但因此而抹煞掉教师的功绩就太不公平了。我从多数的教师那里获得过启发,必须感谢他们的教育。

我 的学习过程有一个很大的缺陷,就是因为时间紧张又要急着看更多的书结果做题太少。现在我想返回头来做题,但是时间不允许这样做。因为博士生“know why”是不够的,要“learn how to create and begin to do mathematics”。博士阶段最重要的还是写论文(开展创造性的工作)。写论文之前首先要读论文。读论文是博士阶段学习的主要手段。没有好的数学基 础很难写出论文或高水平的论文,甚至根本就读不懂前沿的文献。

回想在八十年代初期,数学系的学生人人争做数学分析吉米多维奇习题集,做完 的不在少数,而现在的数学系学生提起吉米多维奇习题集多数只能咂舌。尽管在任何时候,自学都是成为一名数学家不可或缺的因素,例如徐利治就说过他的70% 的数学知识是自学来的。但现在数学教育的衰退使得今日的许多数学系学生只有通过自学才能走上专业的道路。华罗庚谈学数学要先“由薄变厚”,再“由厚变薄”,指出这一过程看似慢实则快,而那种不求甚解的读书看似快实则慢,诚是金玉良言!愿自学数学的人都能牢记这一金科玉律。

Posted in Uncategorized | Leave a comment