文档库 最新最全的文档下载
当前位置:文档库 › Linux内核配置详解

Linux内核配置详解

Linux内核配置详解
Linux内核配置详解

Linux内核配置详解

首先对内核进行菜单配置,

代码:

1. cd /usr/src/linux

2. make menuconfig

代码成熟度选项

代码:

1. Code maturity level options --->

2. [*] Prompt for development and/or

incomplete code/drivers

3. [*] Select only drivers expected to

compile cleanly

Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择打开使用开发中、不完全的代码/驱动会让内核配置多出很多选项,由于我们需要使用一些正在开发中的功能,因此必需打开这一选项。

通用设置选项

代码:

1. General setup --->

2. () Local version - append to kernel

release

3. [*] Support for paging of anonymous

memory (swap)

4. [*] System V IPC

5. [*] POSIX Message Queues

6. [*] BSD Process Accounting

7. [*] BSD Process Accounting version 3

file format

8. [*] Sysctl support

9. [] Auditing support

10. (15) Kernel log buffer size (16 => 64KB,

17 => 128KB)

11. [*] Support for hot-pluggable devices

12. [*] Kernel Userspace Events

13. [*] Kernel .config support

14. [*] Enable access to .config through

/proc/config.gz

15. [*] Configure standard kernel features

(for small systems) --->

16. --- Configure standard kernel features

(for small systems)

17. [] Load all symbols for

debugging/kksymoops

18. [*] Enable futex support

19. [*] Enable eventpoll support

20. [*] Optimize for size

21. [*] Use full shmem filesystem

22. (0) Function alignment

23. (0) Label alignment

24. (0) Loop alignment

25. (0) Jump alignment

Local version - append to kernel release:这里填入的是64 字符以内的字符串,你在这里填上的字符口串可以用uname -a 命令看到。

Automatically append version information to the version string:自动在版本字符串后面添加版本信息,编译时需要有perl 以及git仓库支持。

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

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

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

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

BSD Process Accounting version 3 file format:使用新的第三版文件格式,可以包含每个进程的PID 和其父进程的PID,但是不兼容老版本的文件格式。Export task/process statistics through netlink:通过netlink接口向用户空间导出任务/进程的统计信息,与BSD ProcessAccounting 的不同之处在于这些统计信息在整个任务/进程生存期都是可用的。

Enable per-task delay accounting:在统计信息中包含进程等候系统资源(cpu,IO 同步,内存交换等)所花费的时间。

UTS Namespaces:UTS名字空间支持,不确定可以不选。

Enable system-call auditing support:支持对系统调用的审计。

Enable access to .config through /proc/config.gz:允许通过proc/config.gz 访问内核的配置信息。

Cpuset support:只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它。

Kernel->user space relay support (formerly relayfs):在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口。

Initramfs source file(s):initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白。

Optimize for size (Look out for broken compilers!):编译时优化内核尺寸(使用"-Os"而不是"-O2"参数编译),有时会产生错误的二进制代码。

Enable extended accounting over taskstats:收集额外的进程统计信息并通过taskstats接口发送到用户空间。

Enable 16-bit UID system calls:允许对UID系统调用进行过时的16-bit包装。

I nclude all symbols in kallsyms:在kallsyms中包含内核知道的所有符号,

内核将会增大300K。

Do an extra kallsyms pass:除非你在kallsyms中发现了bug并需要报告这个bug 才打开该选项。

Support for hot-pluggable devices:支持热插拔设备,如usb与pc卡等,Udev 也需要它。

Enable support for printk:允许内核向终端打印字符信息,在需要诊断内核为什么不能运行时选择。

BUG() support:显示故障和失败条件(BUG 和WARN),禁用它将可能导致隐含的错误被忽略。

Enable ELF core dumps:内存转储支持,可以帮助调试ELF格式的程序。Enable full-sized data structures for core:在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能。Enable futex support:快速用户空间互斥体可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序。Enable eventpoll support:支持事件轮循的系统调用。

Use full SLAB allocator:使用SLAB完全取代SLOB进行内存分配,SLAB是一种优秀的内存分配管理器,推荐使用。

Enable VM event counters for /proc/vmstat:允许在/proc/vmstat中包含虚拟内存事件记数器。

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 forx86 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 smallsystems):这是为了编译某些特殊的内核使用的,通常你可以不选择这一选项,你也不用对它下面的子项操心了。

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

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

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

Optimize for size:这个选项使gcc 使用-Os 的参数而不是-O2 的参数来优化

编译,以获得更小尺寸的内核,建议选上。

Use full shmem filesystem:除非你在很少的内存且不使用交换内存时,才不要选择这项。后面的这四项都是在编译时内存中的对齐方式,0 表示

编译器的默认方式。使用内存对齐能提高程序的运行速度,但是会增加程序对内存的使用量。内核也是一组程序呀。

可加载模块

代码:

1. Loadable module support --->

2. [*] Enable loadable module support

3. [*] Module unloading

4. [] Forced module unloading

5. [*] Module versioning support

(EXPERIMENTAL)

6. [] Source checksum for all modules

7. [*] Automatic kernel module loading

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

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

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

Module versioning support(EXPERIMENTAL),这个功能可以让你使用其它版本的内核模块,由于我自己写一些模块,所以我会用到这个选项,因为内核更新太快了,我的头文件更新根本赶不上内核的更新。还有,虽然我在Gentoo 下

开发,但实际真实环境用的却是从https://www.wendangku.net/doc/dd14890966.html, 下载的内核。虽然我选择了这个选项,不过建议你不要选择这个选项。

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

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

Block layer块设备层

Enable the block layer:块设备支持,使用硬盘/USB/SCSI设备者必选。Support for Large Block Devices:仅在使用大于2TB的块设备时需要。Support for tracing block io actions:块队列 IO 跟踪支持,它允许用户查看在一个块设备队列上发生的所有事件,可以通过blktrace程序获得磁盘当前的详细统计数据。

Support for Large Single Files:仅在可能使用大于2TB的文件时需要。

IO Schedulers:IO调度器。

Anticipatory I/O scheduler:假设一个块设备只有一个物理查找磁头(例如一个单独的SATA 硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于大多数环境,特别是写入较多的环境(比如文件服务器)。

Deadline I/O scheduler:使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)。

CFQ I/O scheduler:使用 QoS 策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统。

Default I/O scheduler:默认 IO调度器。

处理器内型及特性

代码:

1. Processor type and features --->

2. Subarchitecture Type (PC-compatible)

3. ---> Processor family

(Pentium-4/Celeron(P4-based)/Pentium-4

M/Xeon) --->

4. [] Generic x86 support

5. [*] HPET Timer Support

6. [*] Symmetric multi-processing support

7. (2) Maximum number of CPUs (2-255)

8. [*] SMT (Hyperthreading) scheduler

support

9. [] Preemptible Kernel

10. [] Machine Check Exception

11. <M> Toshiba Laptop support

12. <M> Dell laptop support

13. <> /dev/cpu/microcode - Intel IA32 CPU

microcode support

14. <> /dev/cpu/*/msr - Model-specific

register support

15. <> /dev/cpu/*/cpuid - CPU information

support

16. Firmware Drivers --->

17. <> BIOS Enhanced Disk Drive calls

determine boot disk (EXPERIMENTAL) High

Memory Support (4GB) --->

18. [] Allocate 3rd-level pagetables from

highmem

19. [] Math emulation

20. [*] MTRR (Memory Type Range Register)

support

21. [] Boot from EFI support (EXPERIMENTAL)

22. [*] Enable kernel irq balancing

23. [] 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 laptopsupport,这两项都是对本本的支持,其实编译内核的原则应该是让内核能在特定的环境下运行,由于我编译的内核可能公司的其它人也会使用,所以我尽可能的不针对特定的硬件。将对特定的硬件支持编译成模块。

/dev/cpu/microcode - Intel IA32 CPU microcodesupport,这个选项是让你使用不随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,所以选上这个也没什么用。

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

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

SMT (Hyperthreading) scheduler support:支持 Intel 的超线程(HT)技术。Multi-core scheduler support:针对多核CPU 进行调度策略优化。Preemption Model:内核抢占模式。

No Forced Preemption (Server):适合服务器环境的禁止内核抢占。Voluntary Kernel Preemption (Desktop):适合普通桌面环境的自愿内核抢占。Preemptible Kernel (Low-Latency Desktop):适合运行实时程序的主动内核抢占。

Preempt The Big Kernel Lock:可以抢占大内核锁,应用于实时要求高的场合,不适合服务器环境。

Enable VM86 support:虚拟X86支持,在DOSEMU下运行16-bit程序或XFree86通过BIOS初始化某些显卡的时候才需要。

Enable X86 board specific fixups for reboot:修正某些旧x86主板的重起bug,这种主板基本绝种了。

Firmware Drivers:固件驱动程序。

BIOS update support for DELL systems via sysfs:仅适用于DELL机器。Dell Systems Management Base Driver:仅适用于DELL机器。

Memory split:如果你不是绝对清楚自己在做什么,不要改动这个选项。Memory model:一般选"Flat Memory",其他选项涉及内存热插拔。

64 bit Memory and IO resources:使用 64位的内存和IO 资源。

Enable seccomp to safely compute untrusted bytecode:只有嵌入式系统可以不选。

Timer frequency:内核时钟频率,桌面推荐"1000 HZ",服务器推荐"100 HZ"或"250 HZ"。

kexec system call:提供 kexec 系统调用,可以不必重启而切换到另一个内核。kernel crash dumps:被kexec 启动后产生内核崩溃转储。

Physical address where the kernel is loaded:内核加载的物理地址,除非你知道自己在做什么,否则不要修改.在提供kexec 系统调用的情况下可能要修改它。

Support for hot-pluggable CPUs:对热插拔CPU 提供支持。

Compat VDSO support:如果 Glibc 版本大于等于2.3.3就不选,否则就选上。

电源管理

代码:

1. Power management options (ACPI,

APM) --->

2. [*] Power Management support

3. [] Power Management Debug Support

4. [] Software Suspend

(EXPERIMENTAL)

5. ACPI (Advanced Configuration

and Power Interface) Support --->

6. APM (Advanced Power

Management) BIOS Support --->

7. CPU Frequency scaling --->

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

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

Software Suspend(EXPERIMENTAL),休眠到硬盘。也就是将内存写入交换分区中,下次启动可以通过参数resume=/dev/swappartition(例如:

resume=/dev/hda6)来恢复上次机器运行的状态。这项功能对于系统引导时启动许多服务的机器来说很有用,可以节约启动时间。这项功能根据自己的需要选择吧,如果你选择这项功能,记得恢复休眠后重做交换分区。

代码:

1. ACPI (Advanced Configuration and Power

Interface) Support --->

2. [*] ACPI Support

3. [] Sleep States (EXPERIMENTAL)

4. <M> AC Adapter

5. <M> Battery

6. <M> Button

7. <M> Video

8. <M> Fan

9. <M> Processor

10. <M> Thermal Zone

11. <M> ASUS/Medion Laptop Extras

12. <M> IBM ThinkPad Laptop Extras

13. <M> Toshiba Laptop Extras

14. (0) Disable ACPI for systems before

Jan 1st this year

15. [] Debug Statements

16. [] 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 LaptopExtras、Toshiba Laptop Extras,这三种本本的扩展支持。你的内核如果只是自己用,选个该选的就

行了。

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

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

Power Management Timer Support,我的本本支持

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

代码:

1. APM (Advanced Power Management) BIOS

Support --->

2. <M> APM (Advanced Power

Management) BIOS support

3. [] Ignore USER SUSPEND

4. [*] Enable PM at boot time

5. [] Make CPU Idle calls when idle

6. [] Enable console blanking using

APM

7. [] RTC stores time in GMT

8. [] Allow interrupts during APM

BIOS calls

9. [*] 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 模块。

代码:

1. [*] CPU Frequency scaling

2. [] Enable CPUfreq debugging

3. <> /proc/cpufreq interface

(deprecated)

4. Default CPUFreq governor

(performance) --->

5. --- 'performance' governor

6. <M> 'powersave' governor

7. <M> 'userspace' governor for

userspace frequency scaling

8. [] /proc/sys/cpu/ interface

(2.4. / OLD)

9. <M> 'ondemand' cpufreq policy

governor

10. <*> CPU frequency table helpers

11. <M> ACPI Processor P-States driver

12. <M> AMD Mobile K6-2/K6-3 PowerNow!

13. <M> AMD Mobile Athlon/Duron

PowerNow!

14. <M> AMD Opteron/Athlon64 PowerNow!

15. <M> Cyrix MediaGX/NatSemi Geode

Suspend Modulation

16. <M> Intel Enhanced SpeedStep

17. [] Use ACPI tables to decode valid

frequency/voltage pairs---

18. Built-in tables for Banias CPUs

19. <M> Intel Speedstep on ICH-M chipsets

(ioport interface)

20. <M> Intel SpeedStep on 440BX/ZX/MX

chipsets (SMI interface)

21. <M> Intel Pentium 4 clock modulation

22. <> nVidia nForce2 FSB changing

23. <M> Transmeta LongRun

24. <M> VIA Cyrix III Longhaul--- shared

options

25. []

/proc/acpi/processor/../performance

interface (deprecated)

26. [] Relaxed speedstep capability

checks

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

Enable CPUfreq debugging,是否允许调试CPU 改变主频的功能,如果要调试,还需要在启动时加上参数。cpufreq.debug=

1:变频技术的内核调试

2:变频技术的驱动调试

4:变频技术的调节器调试

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

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

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

'userspace' governor for userspace frequencyscaling,用户自定义调节器。/proc/sys/cpu/ interface (2.4. / OLD),兼容2.4 内核的用户调节器。

'ondemand' cpufreq policy governor,自动调节主频。

CPU frequency table helpers,多数的CPU 需要这一项来调节主频。

ACPI Processor P-States driver,报告处理器的状态。

AMD Mobile K6-2/K6-3 PowerNow!,AMD 移动版K6处理器的变频驱动。

AMD Mobile Athlon/Duron PowerNow!,AMD 移动版毒龙、雷乌的变频驱动。AMD Opteron/Athlon64 PowerNow!,AMD64处理器的变频驱动。

Cyrix MediaGX/NatSemi Geode SuspendModulation,Cyrix 处理器的变频驱动。Intel Enhanced SpeedStep,Intel 的变频技术支持。

Use ACPI tables to decode validfrequency/voltage pairs,使用BIOS 中的主频电压参数。

--- Built-in tables for Banias CPUs,迅驰一代的主频/电压参数。

Intel Speedstep on ICH-M chipsets (ioportinterface) ,Intel ICH-M 南桥芯片组的支持。

Intel SpeedStep on 440BX/ZX/MX chipsets (SMIinterface),Intel

440BX/ZX/MX 南桥芯片级的支持。

Intel Pentium 4 clock modulation,P4 处理器的时钟模块支持。

nVidia nForce2 FSB changing,nVidia nForce2的支持。

Transmeta LongRun,Transmeta 处理器的支持。

VIA Cyrix III Longhaul,VIA Cyrix 处理器的支持。

/proc/acpi/processor/../performanceinterface (deprecated),从

/proc/acpi/processor/../performance 获得CPU的变频信息。

Relaxed speedstep capability checks,不全面检测Intel Speedstep,有的系统虽然支持Speedstep技术,却无法通过全面的检测。

Legacy Power Management API:传统的电源管理API,比如软关机和系统休眠等接口。

Driver model /sys/devices/.../power/state files:内核帮助文档反对使用该选项,即将被废除。

Generic Hotkey:统一的热键驱动,建议不选。

Dock:支持由ACPI控制的集线器(docking stations)。

ACPI0004,PNP0A05 and PNP0A06 Container Driver:支持内存和CPU 的热插拔。Smart Battery System:支持依赖于I2C 的"智能电池".这种电池非常老旧且罕见,还与当前的ACPI 标准兼容性差。

CPU frequency translation statistics:通过sysfs 文件系统输出CPU频率变换的统计信息。

CPU frequency translation statistics details:输出详细的CPU 频率变换统计信息。

Default CPUFreq governor:默认的CPU 频率调节器。

'performance' governor:'性能'优先,静态的将频率设置为cpu支持的最高频率。

'powersave' governor:'节能'优先,静态的将频率设置为cpu支持的最低频率。'userspace' governor for userspace frequency scaling:既允许手动调整cpu频率,也允许用户空间的程序动态的调整cpu频率(需要额外的调频软件,比如cpufreqd)。

'ondemand' cpufreq policy governor:'立即响应',周期性的考察CPU负载并自动的动态调整cpu频率(不需要额外的调频软件),适合台式机。

'conservative' cpufreq governor:'保守',和'ondemand'相似,但是频率的升降是渐变式的(幅度不会很大),更适合用于笔记本/PDA/AMD64环境。

ACPI Processor P-States driver:将ACPI2.0的处理器性能状态报告给CPUFreq processor drivers以决定如何调整频率,该选项依赖于ACPI->Processor{省略的部分请按照自己实际使用的CPU 选择。

/proc/acpi/processor/../performance interface:内核帮助文档反对使用该选项,即将被废除。

Relaxed speedstep capability checks:放松对系统的speedstep 兼容性检查,仅在某些老旧的Intel 系统上需要打开。

总线类型

1. [*] PCI support

2. PCI access mode (Any) --->

3. [ ] Message Signaled Interrupts (MSI

and MSI-X)

4. [ ] Legacy /proc/pci interface

5. [ ] PCI device name database

6. [*] ISA support

7. [*] EISA support

8. [*] Vesa Local Bus priming

9. [*] Generic PCI/EISA bridge

10. [*] EISA virtual root device

11. [ ] EISA device name database

12. [ ] MCA support

13. < > NatSemi SCx200 support

14. PCCARD (PCMCIA/CardBus)

support --->

15. PCI Hotplug Support --->

PCI support,没有人不知道这是什么总线类型吧,实在不知道就去google 查吧,这个当然要选上。

PCI access mode (Any),强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct 检测PCI 设备。

Message Signaled Interrupts (MSI and MSI-X),建议你不要选择这项,设备将使用默认的IRQ 中断。如果选择这项,充许设备通过PCI 总线写入内存堆

栈产生一个中断。

Legacy /proc/pci interface,是否使用/proc/pci目录下的信息文件来描述PCI 设备的信息。现在的系统多数都使用lspci 工具来得到这样的信息。

PCI device name database,如果你不打算使用lspci 工具,就把这项和上面的一项选上。lspci和hotplug 都不需要内核中的设备信息库了。

ISA support,是否使用工业总线。如果你没有老式的ISA 设备,可以不选这项。现在基本上都没有ISA的设备了。不过需要注意的是如果你做嵌入式系统的开发,一些PC104 的总线可能会桥接到EISA 或者是VESA 总线上。

EISA support,扩展工业总线。

Vesa Local Bus priming,VESA 总线,也是扩展工业总线的一种。我的老486DX66 的机器上的显卡就是这种总线,块板上大概还有2 个EISA 插槽各3个ISA 插槽。PCI/EISA bridge,PCI、EISA 两种总线的桥。

EISA virtual root device,EISA 总线的虚拟根设备。

EISA device name database,内核中的EISA 设备信息库。

MCA support,微通道总线。IBM 的台式机和笔记本上可能会有这种总线,包括它的p 系列、e 系列、z系列机器上都用到了这种总线。

NatSemi SCx200 support,这个我不知道是什么东西,看帮助是松下的一种半导体处理器的驱动。总之,只要你的主板没有ISA 插槽,而且你也不是搞嵌入式开发,工业自动化控制的。不要选“ISA support”就是了,如今的ISA 设备在x86 体系上基本是是见不到了。不过自己制板的话,还是ISA 的板子最好做。

1. PCCARD (PCMCIA/CardBus) support --->

2. PCCard (PCMCIA/CardBus) support

3. [ ] Enable PCCARD debugging

4. [ ] Enable obsolete PCCARD code

5. 16-bit PCMCIA support

6. [*] 32-bit CardBus support

7. --- PC-card bridges

8. CardBus yenta-compatible bridge support

9. Cirrus PD6729 compatible bridge support

10. i82092 compatible bridge support

11. i82365 compatible bridge support

12. Databook TCIC host bridge support

PCCard (PCMCIA/CardBus) support,一般只有笔记本电脑上才会有PCMCIA 插槽,如果你是台式机的话,可以不选这一项,然后跳过这一部份。

Enable PCCARD debugging,通常不需要选择调试PCMCIA 设备,除非你是设备驱动的开发人员。

Enable obsolete PCCARD code,老式的PCMCIA 设备只持。现在很少有这样的设备了,除非你买这样的设备时带了张Linux 的驱动光盘才需要选上。而且估计你也只能在二手市场上买到这样的设备。

16-bit PCMCIA support,16 位的PCMCIA 总线支持。

32-bit CardBus support,32 位的PCMCIA 总线支持,通常也叫PCMCIA II 总线。下面的是不同产家的PCMCIA 芯片的驱动支持,如果你知道你的本本用的是什么芯片组的话,可以只选它而不选其它的。要是你不知道可以象我一样的全部选上,然后用modprobe 一种一种的试。最后我终于知道我的HP zv5028 的本本用的是yenta-compatible 的芯片组了。

PC-card bridges

2. CardBus yenta-compatible bridge support

3. Cirrus PD6729 compatible bridge support

4. i82092 compatible bridge support

5. i82365 compatible bridge support

6. Databook TCIC host bridge support

PCI Hotplug Support --->

2. Support for PCI Hotplug (EXPERIMENTAL)

3. < > Fake PCI Hotplug driver (NEW)

4. < > Compaq PCI Hotplug driver (NEW)

5. < > IBM PCI Hotplug driver (NEW)

6. < > ACPI PCI Hotplug driver (NEW)

7. [ ] CompactPCI Hotplug driver (NEW)

8. < > PCI Express Hotplug driver (NEW)

9. < > SHPC PCI Hotplug driver (NEW)

Support for PCI Hotplug (EXPERIMENTAL),一般来讲只有服务器上会有热插拔的设备,如果你使用的是台式机,你可以不选择此项并跳过这一部份。(其实我也没有选这一项,只是为了讲解的方便而选上的。)

Fake PCI Hotplug driver (NEW),选上这一选项能让你的机器模拟PCI 热插拔。注意,它并不是真正意义上的热插拔,决对不允许带电插拔设备除非你的主板上集成了PCI 热插拔芯片并且你的PCI 设备本身支持热插拔。

Compaq PCI Hotplug driver (NEW),Compaq 服务器上的热插拔芯片组的支持。

IBM PCI Hotplug driver (NEW),IBM 服务器上的热插拔芯片组的支持。

ACPI PCI Hotplug driver (NEW),PCI 热插拔设备是否支持ACPI 电源管理(一般来说都是支持的)。

CompactPCI Hotplug driver (NEW),精简PCI 总线的热插拔设备的支持,通常在嵌入式系统中会用到精简PCI 总线。

PCI Express Hotplug driver (NEW),PCI 加速总线的热插拔设备的支持。现在PCI Express 总线的显卡挺火的。但用于服务器上的PCI 加速总线的设备我还没见过。

SHPC PCI Hotplug driver (NEW),SHPC 热插拔控制芯片的支持。

PCI Express support:PCI Express支持(目前主要用于显卡和千兆网卡)。

PCI Express Hotplug driver:如果你的主板和设备都支持PCI Express 热插拔就可以选上。

Use polling mechanism for hot-plug events:对热插拔事件采用轮询机制,仅用于测试目的。

Root Port Advanced Error Reporting support:由PCI Express AER 驱动程序处理发送到Root Port的错误信息。

PCI Debugging:将PCI调试信息输出到系统日志里。

Interrupts on hypertransport devices:允许本地的hypertransport设备使用中断。

NatSemi SCx200 support:在使用 AMD Geode处理器的机器上才可能有。CardBus yenta-compatible bridge support:使用 PCMCIA 卡的基本上都需要选择这一项,子项请按照自己实际使用的PCMCIA卡选择{省略的部分请按照自己实际使用的PCMCIA卡选择}。

PCI Hotplug Support:PCI热插拔支持,如果你有这样的设备就到子项中去选吧。

可执行文件格式

1. [*] Kernel support for ELF binaries

2. < > Kernel support for a.out and ECOFF binaries

3. <*> Kernel support for MISC binaries

Kernel support for ELF binaries,ELF 是开放平台下最常用的二进制文件,它支持不同的硬件平台。

Kernel support for a.out and ECOFF binaries,这是早期UNIX 系统的可执行文件格式,目前已经被ELF 格式取代。

Kernel support for MISC binaries,此选项允许插入二进制的封装层到内核中,当使用Java、.NET、Python、Lisp 等语言编写的程序时非常有用。

文件系统

1. <*> Second extended fs support

2. [*] Ext2 extended attributes

3. [*] Ext2 POSIX Access Control Lists

4. [*] Ext2 Security Labels

5. <*> Ext3 journalling file system support

6. [*] Ext3 extended attributes

7. [*] Ext3 POSIX Access Control Lists

8. [*] Ext3 Security Labels

9. [ ] JBD (ext3) debugging support

10. <*> Reiserfs support

11. [ ] Enable reiserfs debug mode

12. [ ] Stats in /proc/fs/reiserfs

13. [*] ReiserFS extended attributes

14. [*] ReiserFS POSIX Access Control Lists

15. [*] ReiserFS Security Labels

16. JFS filesystem support

17. [*] JFS POSIX Access Control Lists

18. [ ] JFS debugging

19. [ ] JFS statistics

20. XFS filesystem support

21. [*] Realtime support (EXPERIMENTAL)

22. [*] Quota support

23. [*] Security Label support

24. [*] POSIX ACL support

25. < > Minix fs support

26. < > ROM file system support

27. [*] Quota support

28. < > Old quota format support

29. Quota format v2 support

30. [*] Dnotify support

31. < > Kernel automounter support

32. < > Kernel automounter version 4 support (also supports v3)

33. CD-ROM/DVD Filesystems --->

34. DOS/FAT/NT Filesystems --->

35. Pseudo filesystems --->

36. Miscellaneous filesystems --->

37. Network File Systems --->

38. Partition Types --->

39. Native Language Support --->

有人说在编译内核时应该将/boot 分区和/分区的文件系统编译进内核,其它的可以编译成模块。对,但不确切。让我们来一起了解一下linux 系统的启动顺序。在内核被加载后,如果initrd 参数传入了内核,内核会去调用指定的文件。当然,initrd 和System.map 通常都是/boot 下。但是同样可以用

initrd=(hd1,2)/initrd.img 这样的方式指定。内核启动完成后将调用

/sbin/init,(如果是链接要保证目标文件能被内核加载)。不同的系统的启动脚本可能不太一样,这里不详细介绍。启动脚本向内核加载模块时可能用

/sbin/modprobe 或/sbin/insmod,由此看来/sbin 的文件系统是要内核支持的。编译的内核模块一般在/lib/modules/的版本目录下,所以/lib/modules 的文件系统是要内核支持的。一旦其它文件系统的模块能加载,系统就能向正常的访问内核中的文件系统一样访问模块支持的文件系统了。由于启动脚本、fstab 自动加载等文件一般在/etc 目录下,因此/etc 的文件系统是要内核支持的。这里概

要的介绍了保证系统正常启动的几个关键点,可能我反而把它讲复杂了。如果你能理解上面的这段话,你应该能清楚的知道哪些文件系统是要编译进内核的,哪些是可以编译成模块的。如果你不太理解上面的这段话,我将详细介绍每个选项及几种常用的文件系统。

1. <*> Second extended fs support

2. [*] Ext2 extended attributes

3. [*] Ext2 POSIX Access Control Lists

4. [*] Ext2 Security Labels

5. <*> Ext3 journalling file system support

6. [*] Ext3 extended attributes

7. [*] Ext3 POSIX Access Control Lists

8. [*] Ext3 Security Labels

9. [ ] JBD (ext3) debugging support

10. <*> Reiserfs support

11. [ ] Enable reiserfs debug mode

12. [ ] Stats in /proc/fs/reiserfs

13. [*] ReiserFS extended attributes

14. [*] ReiserFS POSIX Access Control Lists

15. [*] ReiserFS Security Labels

16. JFS filesystem support

17. [*] JFS POSIX Access Control Lists

18. [ ] JFS debugging

19. [ ] JFS statistics

20. XFS filesystem support

21. [*] Realtime support (EXPERIMENTAL)

22. [*] Quota support

23. [*] Security Label support

24. [*] POSIX ACL support

25. < > Minix fs support

26. < > ROM file system support

27. [*] Quota support

28. < > Old quota format support

29. Quota format v2 support

30. [*] Dnotify support

31. < > Kernel automounter support

32. < > Kernel automounter version 4 support (also supports v3)

33. CD-ROM/DVD Filesystems --->

34. DOS/FAT/NT Filesystems --->

35. Pseudo filesystems --->

36. Miscellaneous filesystems --->

37. Network File Systems --->

38. Partition Types --->

39. Native Language Support --->

Second extended fs support,标准的Linux 文件系统,建议将这种文件系统编

译进内核。

Ext2 extended attributes,Ext2 文件系统的结点名称、属性的扩展支持。Ext2 POSIX Access Control Lists,POSIX 系统的访问权限列表支持。也就是Owner/Group/Others 的Read/Write/Execute 权限。请参考Unix 标准文件系统权限。

Ext2 Security Labels,扩展的安全标签,例如SElinux 之类的安全系统会使用到这样的扩展安全属性。

Ext3 journalling file system support,如果你熟悉Redhat Linux,你一定会习惯Ext3 文件系统。

Ext3 extended attributes,Ext3 文件系统的结点名称、属性的扩展支持。Ext3 POSIX Access Control Lists,POSIX 系统的访问权限列表支持。

Ext3 Security Labels,扩展的安全标签支持。

JBD (ext3) debugging support,Ext3 的调试。除非你是文件系统的开发者,否则不要选上这一项。

Reiserfs support,性能几乎全面超越Ext2(处理稀疏文件比Ext2 慢),小文件(小于4k)性能非常突出,创建和删除文件速度最快,处理大量目录和文件(5k-20k)时仍然非常迅速.日志模式建议使用Ordered,追求极速可使用Writeback 模式,追求安全可使用Journal 模式。建议使用noatime,notail 选项挂载分区以提高速度和避免bug.用于NFS和磁盘限额时需要额外的补丁。

Enable reiserfs debug mode,Reiserfs 的调试。除非你是文件系统的开发者,否则不要选上这一项。

Stats in /proc/fs/reiserfs,在/proc/fs/reiserfs 文件中显示Reiserfs 文件系统的状态。一般来说不需要选择这一项。

ReiserFS extended attributes,Reiserfs,文件系统的结点名称、属性的扩展支持。

ReiserFS POSIX Access Control Lists,POSIX 系统的访问权限列表支持。ReiserFS Security Labels,扩展的安全标签支持。

JFS filesystem support,JFS 是IBM 公司设计用于AIX 系统上的文件系统。后来这一文件系统也能应用于Linux 系统。

JFS POSIX Access Control Lists,POSIX 系统的访问权限列表支持。

JFS debugging,JFS 的调试。除非你是文件系统的开发者,否则不要选上这一项。

JFS statistics,在/proc/fs/jfs 文件中显示Reiserfs 文件系统的状态。一般来说不需要选择这一项。

XFS filesystem support,XFS 是SGI 公司为其图形工作站设计的一种文件系统,后来这一文件系统也能应用于Linux 系统。

Realtime support (EXPERIMENTAL),实时卷的支持,能大幅提高大文件的读写速度。不过并不太安全,建议暂时不要选择这一选项。

Security Label support,扩展的安全标签支持。

POSIX ACL support,POSIX 系统的访问权限列表支持。

Minix fs support,Minix 可能是最早的Linux 系统所使用的文件系统。后来被Ext2 文件系统所取代。

ROM file system support,内存文件系统的支持。除非你是嵌入式系统的开发者,明确知道你要干什么,否则不要选这一项。

Quota support,XFS 文件系统的配额支持。也就是说限制某个用户或者某组用户的磁盘占用空间。

Old quota format support,旧版本的配额支持。

Quota format v2 support,新版本(第二版)的配额支持。

Dnotify support,基于目录的文件变化的通知机制。

Kernel automounter support,内核自动加载远程文件系统的支持。

Kernel automounter version 4 support (also supports v3),新的(第四版)的内核自动加载远程文件系统的支持,也支持第三版。

Ext2 execute in place support:程序在写入存储介质时就已经分配好运行时的地址,因此不需要载入内存即可在芯片内执行,一般仅在嵌入式系统上才有这种设备。

Ext4dev/ext4 extended fs support:尚处于开发状态的Ext4。

JBD2 (ext4dev/ext4) debugging support:仅供开发者使用。

GFS2 file system support:一种用于集群的文件系统。

OCFS2 file system support:一种用于集群的文件系统。

Inotify file change notification support:新式的文件系统的变化通知机制,简洁而强大,用于代替老旧的Dnotify。

Inotify support for userspace:用户空间的Inotify支持。

Filesystem in Userspace support:FUSE 允许在用户空间实现一个文件系统,如果你打算开发一个自己的文件系统或者使用一个基于FUSE的文件系统就选吧。

CD-ROM/DVD Filesystems:CD-ROM/DVD 文件系统。

ISO 9660 CDROM file system support:CD-ROM的标准文件系统。

Microsoft Joliet CDROM extensions:Microsoft对ISO 9660文件系统的Joliet 扩展,允许在文件名中使用Unicode字符,也允许长文件名。

Transparent decompression extension:Linux 对ISO 9660文件系统的扩展,允许将数据透明的压缩存储在CD上。

UDF file system support:某些新式CD/DVD上的文件系统,很少见。

DOS/FAT/NT Filesystems:DOS/Windows的文件系统。

MSDOS fs support:古老的MSDOS文件系统。

VFAT (Windows-95) fs support:从Win95开始使用的VFAT文件系统。Default codepage for FAT:默认代码页。

Default iocharset for FAT:默认字符集。

NTFS file system support:从WinNT开始使用的NTFS文件系统。

NTFS debugging support:仅供调试使用。

NTFS write support:NTFS写入支持。

Pseudo filesystems:伪文件系统。

/proc file system support:显示系统状态的虚拟文件系统(irq 设置,内存使用,加载的设备驱动器,网络状态等),许多程序依赖于它。

/proc/kcore support:系统物理内存的映象。

/proc/vmcore support:以ELF 格式转储的已崩溃内核镜像,仅供调试使用。Sysctl support (/proc/sys):显示各种不同的内核参数,并让root用户能交互地更改其中的某些内容。

sysfs file system support:导出内核内部对象及其属性和对象之间的相互关

系的文件系统,它把连接在系统上的设备和总线以及驱动程序等组织成为一个分级的文件,内核启动时依靠它挂载根分区,禁用sysfs后必须在内核引导参数中使用设备号指定根分区。

Virtual memory file system support (former shm fs):tmpfs 文件系统(以前叫shm[共享内存]文件系统)支持。

Tmpfs POSIX Access Control Lists:POSIX ACL(访问控制列表)支持,可以更精细的针对每个用户进行访问控制,需要外部库和程序的支持。

HugeTLB file system support:大多数现代计算机体系结构提供对多种内存页面大小的支持(比如IA-32 结构支持4K和4M(PAE模式为2M)两种页面).TLB(Translation Lookaside Buffer)是虚拟地址到物理地址的翻译缓冲区,这种缓冲区在处理器上是很宝贵的,操作系统总是尝试将有限的TLB 资源发挥到极致.特别是能够轻松获得若干G 内存的时候(>4G),这种优化就显得尤为关键.只有开启此选项之后才能提供hugepage支持。

Userspace-driven configuration filesystem:configfs是用户空间驱动的文件系统,提供与sysfs 相反的功能。

Miscellaneous filesystems:非主流的杂项文件系统。

Network File Systems:网络文件系统。

Partition Types:高级磁盘分区类型,不确定可以全不选。

Native Language Support:本地语言支持. 如果你仅仅使用几种主流的Linux 文件系统(ext2/3/4,Reiserfs,JFS,XFS),就不需要这个东西.但是如果你需要使用FAT/NTFS分区的话,就需要这个东西了。

Base native language support:如果你启用了本地语言支持,那么这个必选。Default NLS Option:默认本地语言,建议使用UTF-8,{此处省略的部分请按需选择,一般至少需要CP437,ASCII,ISO-8859-1}。

Distributed Lock Manager:通用的分布式锁管理器,不明白就不选。

Networking网络

Networking options

网络选项

Network packet debugging

在调试不合格的包时加上额外的附加信息,但在遇到Dos攻击时你可能会被日志淹

Packet socket

这种Socket 可以让应用程序(比如tcpdump,iptables)直接与网络设备通讯,而不通

过内核中的其它中介协议

Packet socket: mmapped IO

让Packet socket驱动程序使用IO映射机制以使连接速度更快

Unix domain sockets

一种仅运行于本机上的效率高于TCP/IP 的Socket,简称Unix socket.许多程序都

使用它在操作系统内部进行进程间通信(IPC),比如X Window 和syslog

Transformation user configuration interface

为IPsec(可在ip 层加密)之类的工具提供XFRM 用户配臵接口支持

Transformation sub policy support

Linux内核修改与编译图文教程

Linux 内核修改与编译图文教程 1

1、实验目的 针对Ubuntu10.04中,通过下载新的内核版本,并且修改新版本内核中的系统调用看,然后,在其系统中编译,加载新内核。 2、任务概述 2.1 下载新内核 https://www.wendangku.net/doc/dd14890966.html,/ 2.2 修改新内核系统调用 添加新的系统调用函数,用来判断输入数据的奇偶性。 2.3 进行新内核编译 通过修改新版内核后,进行加载编译。最后通过编写测试程序进行测试 3、实验步骤 3.1 准备工作 查看系统先前内核版本: (终端下)使用命令:uname -r 2

3.2 下载最新内核 我这里使用的内核版本是 3.3 解压新版内核 将新版内核复制到“/usr/src”目录下 在终端下用命令:cd /usr/src进入到该文件目录 解压内核:linux-2.6.36.tar.bz2,在终端进入cd /usr/src目录输入一下命令: bzip2 -d linux-2.6.36.tar.bz2 tar -xvf linux-2.6.36.tar 文件将解压到/usr/src/linux目录中 3

使用命令: ln -s linux-2.6.36 linux 在终端下输入一下命令: sudo apt-get install build-essential kernel-package libncurses5-dev fakeroot sudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt 4

linux 内核参数修改

linux 内核参数修改 配置 Linux 内核参数(2种方法),修改后不用重启动更新: /sbin/sysctl -p 第一种:打开/etc/sysctl.conf 复制如下内容 kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default=262144 net.core.wmem_default=262144 net.core.rmem_max=262144 net.core.wmem_max=262144 第二种:打开终端 cat >> /etc/sysctl.conf< kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default=262144 net.core.wmem_default=262144 net.core.rmem_max=262144 net.core.wmem_max=262144 EOF 这里,对每个参数值做个简要的解释和说明。 (1)shmmax:该参数定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G。(2)shmmni:这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改。 (3)shmall:该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。(共享内存段的数量,以页为主,每个页是4K) (4)sem:该参数表示设置的信号量。一般大于maxproc的一点就行了。 (5)file-max:该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。 修改好内核以后,执行下面的命令使新的配置生效。 [root @linux1 /root]# /sbin/sysctl -p 以 root 用户身份运行以下命令来验证您的设置: /sbin/sysctl -a | grep shm /sbin/sysctl -a | grep sem /sbin/sysctl -a | grep file-max /sbin/sysctl -a | grep ip_local_port_range 例如: # /sbin/sysctl -a | grep shm kernel.shmmni = 4096 kernel.shmall = 2097152 kernel.shmmax = 2147483648

(整理)嵌入式系统的以太网接口设计及linux内核网络设备驱动.

嵌入式系统的以太网接口设计及linux驱动 1 以太网概述 以太网(Ethernet)是当今局域网采用的最通用的通信协议标准。在以太网中,所有计算机被连接在一条电缆上,采用带冲突检测的载波侦听多路访问(CSMA/CD)方法,采用竞争机制和总线拓扑结构。基本上,以太网由共享传输媒体,如双绞线电缆或同轴电缆、多端口集线器、网桥或交换机构成。 按照OSI(Open System Interconnection Reference Model,开放式系统互联参考模型)7层参考模型,以太网定义的是物理层(PHY)和数据链路层(对应以太网的MAC层)的标准。 2 嵌入式处理器上扩展以太网接口 以太网接口控制器主要包括MAC乘PHY两部分,如图1所示为嵌入式处理器集成MAC层控制器。 MAC层控制器和PHY的连接是通过MII、RMII等接口实现的。在IEEE802的标准系列中,数据链路层包括LLC和MAC两个子层。其中MAC负责完成数据帧的封装、解封、发送和接受功能。PHY层的结构随着传输速率的不同而有一定的差异。对于1OBaseT等网络,从以太网PHY芯片输出的就是传输所需的差分信号。但是还需要一个网络隔离变压器组成图2的结构。网络隔离变压器可起到抑制共模干扰、隔离线路以及阻抗匹配等作用。 本文介绍一种新款网络接口芯片DM9000A,它可以很方便的实现与嵌入式CPU的接口,实现扩展以太网口的功能。DM9000A是中国台湾DAVICOM公司推出的一款高速以太网接口芯片,其基本特征是:集成10/100M物理层接口;内部带有16K字节SRAM用作接收发送的FIFO缓存;支持8/16bit两种主机工作模式:

探究linux内核,超详细解析子系统

探究linux内核,超详细解析子系统 Perface 前面已经写过一篇《嵌入式linux内核的五个子系统》,概括性比较强,也比较简略,现在对其进行补充说明。 仅留此笔记,待日后查看及补充!Linux内核的子系统 内核是操作系统的核心。Linux内核提供很多基本功能,如虚拟内存、多任务、共享库、需求加载、共享写时拷贝(Copy-On-Write)以及网络功能等。增加各种不同功能导致内核代码不断增加。 Linux内核把不同功能分成不同的子系统的方法,通过一种整体的结构把各种功能集合在一起,提高了工作效率。同时还提供动态加载模块的方式,为动态修改内核功能提供了灵活性。系统调用接口用户程序通过软件中断后,调用系统内核提供的功能,这个在用户空间和内核提供的服务之间的接口称为系统调用。系统调用是Linux内核提供的,用户空间无法直接使用系统调用。在用户进程使用系统调用必须跨越应用程序和内核的界限。Linux内核向用户提供了统一的系统调用接口,但是在不同处理器上系统调用的方法

各不相同。Linux内核提供了大量的系统调用,现在从系统 调用的基本原理出发探究Linux系统调用的方法。这是在一个用户进程中通过GNU C库进行的系统调用示意图,系 统调用通过同一个入口点传入内核。以i386体系结构为例,约定使用EAX寄存器标记系统调用。 当加载了系统C库调用的索引和参数时,就会调用0x80软件中断,它将执行system_call函数,这个函数按照EAX 寄存器内容的标示处理所有的系统调用。经过几个单元测试,会使用EAX寄存器的内容的索引查system_call_table表得到系统调用的入口,然后执行系统调用。从系统调用返回后,最终执行system_exit,并调用resume_userspace函数返回用户空间。 linux内核系统调用的核心是系统多路分解表。最终通过EAX寄存器的系统调用标识和索引值从对应的系统调用表 中查出对应系统调用的入口地址,然后执行系统调用。 linux系统调用并不单层的调用关系,有的系统调用会由

linux内核的网络配置

文章来源 https://www.wendangku.net/doc/dd14890966.html,/p/2088592067 第9节, Networking support 关于网络支持 上图 讲解; RF switch subsystem support 这个一般是要的,因为有些无线和蓝牙放在一张卡上 选m,wireless(无线)里面的一些选项随之会自动选m,上图 注意: cfg80211 wireless extensions compatibility 这个兼容选项要选择,3.7默认是没有选择

如果没有选择,iwconfig会报告没有扩展 Bluetooth subsystem support 蓝牙,可以自己选择,如果有m就行 还有子选项自己看下 如果还有红外线,无线电,对应选择,这个设备应该是很少networking option最上面的,全局网络选项,上图

Packet socket和Unix domain sockets 备必,而且不能成模块,不然udev会报一段信息给你 Transformation user configuration interface 选m,其实也很少用,像ipsec,下面的ipsec也可以选成模块 TCP/IP networking 要的,要的,子选项大部分不用,你也可以选上 IP: multicasting 多播 IP: advanced router 高级路由 你需要选上 IP: TCP syncookie support ~~sync flooding,同时还必须。。。个人没什么意义Large Receive Offload提高网络的东西,这个Y,如果你觉得现在不用,先m TCP: advanced congestion control这个你也可以Y The IPv6 protocol 很多要用到,虽然在兲现在没用,像systemd就要了 Security Marking和Network packet filtering framework (Netfilter) 个人没什么意义,你可以试下

Linux设置内核参数的方法

Linux设置内核参数的方法 1内核参数的查看方法 使用“sysctl -a”命令可以查看所有正在使用的内核参数。内核参数比较多(一般多达500项),按照前缀主要分为以下几大类:net.ipv4、net.ipv6、net.core、vm、fs、dev.parport、dev.cdrom 、dev.raid、kernel等等。相同的linux,安装的组件和使用的方式不一样,正在使用的内核参数是不一样的。 所有的内核参数的说明文档是放到/usr/src/linux/Documentation/sysctl中的,如果想知道对内核参数的说明,可以到该目录下查看相应的说明文档。 2内核参数的的设置方法 由于Linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。也可以通过文件的方式进行设置。下面就介绍这两种修改方法。 2.1命令设置的方式 可以用两种方法实现。 1、使用“sysctl -w 参数名=值”的方式 假设我们把net.ipv4.ip_forward的值修改为1,使用命令“sysctl -w net.ipv4.ip_forward=1”。 2、修改内核参数对应的proc文件 内核参数位于/proc/sys/之下,参数名称是以文件所在的路径,并将“/”以“.”来取代。举例来说,/proc/sys/net/ip_forward的参数名称为net.ipv4.ip_forward。 同样把net.ipv4.ip_forward的值修改为1,使用命令“echo “1”> /proc/sys/net/ipv4/ip_forward”。 注意,这里proc文件跟普通的文件不一样。一般一个文件用echo写入内容之后,会变成一个文本文件,但echo修改proc文件之后还是个空文件。 2.2文件设置的方式 更改的内核参数默认保存在/etc/sysctl.conf文件中。修改的时候可以直接用vi编辑sysctl.conf文件,增加要修改的内核参数内容,修改的格式为:参数名=值。例如,把net.ipv4.ip_forward的值修改为1,在sysctl.conf中增加下面这行内容:net.ipv4.ip_forward=1 文件修改好后,进行保存。然后使用“sysctl -p 配置文件名”来使配置生效,如果配置文件是默认的,可以不用输配置文件名,即使用“sysctl -p”。 通过文件设置的方式修改的内核参数是在系统重启后将失效(我之前认为修改后的内核参数放在文件中,系统启动的时候会读这个文件,重启后设置应该不会失效。但经过验证,一般会失效,但如果把将默认的boot.sysctl服务打开,所以系统启动时就会执行这个文件的设置)。把我们修改参数的命令写入启动执行脚本文件里/etc/rc.local,这样系统重启后配置就不会失效。 文件方式的好处是内核参数设置的值可以用文件保留下来,调用“sysctl -p”可以使文

linux内核IMQ源码实现分析

本文档的Copyleft归wwwlkk所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性,严禁用于任何商业用途。 E-mail: wwwlkk@https://www.wendangku.net/doc/dd14890966.html, 来源: https://www.wendangku.net/doc/dd14890966.html,/?business&aid=6&un=wwwlkk#7 linux2.6.35内核IMQ源码实现分析 (1)数据包截留并重新注入协议栈技术 (1) (2)及时处理数据包技术 (2) (3)IMQ设备数据包重新注入协议栈流程 (4) (4)IMQ截留数据包流程 (4) (5)IMQ在软中断中及时将数据包重新注入协议栈 (7) (6)结束语 (9) 前言:IMQ用于入口流量整形和全局的流量控制,IMQ的配置是很简单的,但很少人分析过IMQ的内核实现,网络上也没有IMQ的源码分析文档,为了搞清楚IMQ的性能,稳定性,以及借鉴IMQ的技术,本文分析了IMQ的内核实现机制。 首先揭示IMQ的核心技术: 1.如何从协议栈中截留数据包,并能把数据包重新注入协议栈。 2.如何做到及时的将数据包重新注入协议栈。 实际上linux的标准内核已经解决了以上2个技术难点,第1个技术可以在NF_QUEUE机制中看到,第二个技术可以在发包软中断中看到。下面先介绍这2个技术。 (1)数据包截留并重新注入协议栈技术

(2)及时处理数据包技术 QoS有个技术难点:将数据包入队,然后发送队列中合适的数据包,那么如何做到队列中的数

激活状态的队列是否能保证队列中的数据包被及时的发送吗?接下来看一下,激活状态的队列的 证了数据包会被及时的发送。 这是linux内核发送软中断的机制,IMQ就是利用了这个机制,不同点在于:正常的发送队列是将数据包发送给网卡驱动,而IMQ队列是将数据包发送给okfn函数。

如何安装Linux内核源代码

如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux 内核,另一种是内核增量补丁,它们都是tar归档压缩包。除非你有特别的原因需要使用旧版本的Linux内核,否则你应该总是升级到最新版本。 使用Git 由Linus领头的内核开发队伍从几年前就开始使用Git版本控制系统管理Linux内核了(参考阅读:什么是Git?),而Git项目本身也是由Linus创建的,它和传统的CVS不一样,Git是分布式的,因此它的用法和工作流程很多开发人员可能会感到很陌生,但我强烈建议使用Git下载和管理Linux内核源代码。 你可以使用下面的Git命令获取Linus内核代码树的最新“推送”版本: $ git clone git://https://www.wendangku.net/doc/dd14890966.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 然后使用下面的命令将你的代码树与Linus的代码树最新状态同步: $ git pull 安装内核源代码 内核包有GNU zip(gzip)和bzip2格式。Bzip2是默认和首选格式,因为它的压缩比通常比gzip更好,bzip2格式的Linux内核包一般采用linux-x.y.z.tar.bz2形式的文件名,这里的x.y.z是内核源代码的具体版本号,下载到源代码包后,解压和抽取就很简单了,如果你下载的是bzip2包,运行: $ tar xvjf linux-x.y.z.tar.bz2 如果你下载的是gzip包,则运行: $ tar xvzf linux-x.y.z.tar.gz 无论执行上面哪一个命令,最后都会将源代码解压和抽取到linux-x.y.z目录下,如果你使用Git下载和管理内核源代码,你不需要下载tar包,只需要运行git clone命令,它就会自动下载和解压。 内核源代码通常都会安装到/usr/src/linux下,但在开发的时候最好不要使用这个源代码树,因为针对你的C库编译的内核版本通常也链接到这里的。 应用补丁

史上最全linux内核配置详解

对于每一个配置选项,用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序的支持。只有<>才能选择M 1. General setup(通用选项) [*]Prompt for development and/or incomplete code/drivers,设置界面中显示还在开发或者还没有完成的代码与驱动,最好选上,许多设备都需要它才能配置。 [ ]Cross-compiler tool prefix,交叉编译工具前缀,如果你要使用交叉编译工具的话输入相关前缀。默认不使用。嵌入式linux更不需要。 [ ]Local version - append to kernel release,自定义版本,也就是uname -r可以看到的版本,可以自行修改,没多大意义。 [ ]Automatically append version information to the version string,自动生成版本信息。这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。这需要Perl的支持。由于在编译的命令make-kpkg 中我们会加入- –append-to-version 选项来生成自定义版本,所以这里选N。 Kernel compression mode (LZMA),选择压缩方式。 [ ]Support for paging of anonymous memory (swap),交换分区支持,也就是虚拟内存支持,嵌入式不需要。 [*]System V IPC,为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。 [*]POSIX Message Queues,这是POSIX的消息队列,它同样是一种IPC(进程间通讯)。建议你最好将它选上。 [*]BSD Process Accounting,允许进程访问内核,将账户信息写入文件中,主要包括进程的创建时间/创建者/内存占用等信息。可以选上,无所谓。 [*]BSD Process Accounting version 3 file format,选用的话统计信息将会以新的格式(V3)写入,注意这个格式和以前的v0/v1/v2 格式不兼容,选不选无所谓。 [ ]Export task/process statistics through netlink (EXPERIMENTAL),通过通用的网络输出工作/进程的相应数据,和BSD不同的是,这些数据在进程运行的时候就可以通过相关命令访问。和BSD类似,数据将在进程结束时送入用户空间。如果不清楚,选N(实验阶段功能,下同)。 [ ]Auditing support,审计功能,某些内核模块需要它(SELINUX),如果不知道,不用选。 [ ]RCU Subsystem,一个高性能的锁机制RCU 子系统,不懂不了解,按默认就行。 [ ]Kernel .config support,将.config配置信息保存在内核中,选上它及它的子项使得其它用户能从/proc/ config.gz中得到内核的配置,选上,重新配置内核时可以利用已有配置Enable access to .config through /proc/config.gz,上一项的子项,可以通过/proc/ config.gz访问.config配置,上一个选的话,建议选上。 (16)Kernel log buffer size (16 => 64KB, 17 => 128KB) ,内核日志缓存的大小,使用默认值即可。12 => 4 KB,13 => 8 KB,14 => 16 KB单处理器,15 => 32 KB多处理器,16 => 64 KB,17 => 128 KB。 [ ]Control Group support(有子项),使用默认即可,不清楚可以不选。 Example debug cgroup subsystem,cgroup子系统调试例子 Namespace cgroup subsystem,cgroup子系统命名空间 Device controller for cgroups,cgroups设备控制器

Linux内核结构详解教程

Linux内核结构详解教程 ─────Linux内核教程 linux内核就像人的心脏,灵魂,指挥中心。 内核是一个操作系统的核心,它负责管理系统的进程,内存,设备驱动程序,文件和网络系统,决定着系统的性能和稳定性。内核以独占的方式执行最底层任务,保证系统正常运行。协调多个并发进程,管理进程使用的内存,使它们相互之间不产生冲突,满足进程访问磁盘的请求等等. 严格说Linux并不能称做一个完整的操作系统.我们安装时通常所说的Linux,是有很多集合组成的.应称为GNU/Linux. 一个Linux内核很少1.2M左右,一张软盘就能放下. 内容基础,语言简短简洁 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章及教程基本能满足不同水平的朋友学习。 红联Linux门户: https://www.wendangku.net/doc/dd14890966.html, 红联Linux论坛: https://www.wendangku.net/doc/dd14890966.html,/bbs 红联Linux 论坛大全,所有致力点都体现在这 https://www.wendangku.net/doc/dd14890966.html,/bbs/rf/linux/07.htm

目录 Linux内核结构详解 Linux内核主要五个子系统详解 各个子系统之间的依赖关系 系统数据结构 Linux的具体结构 Linux内核源代码 Linux 内核源代码的结构 从何处开始阅读源代码 海量Linux技术文章

Linux内核结构详解 发布时间:2006-11-16 19:05:29 Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。

Linux内核主要五个子系统详解 发布时间:2006-11-16 19:05:54 1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。 2.内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。 3.虚拟文件系统(VirtualFileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。 4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。 5.进程间通讯(IPC) 支持进程间各种通信机制。 处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调度。

Linux内核配置编译与文件系统构建要点

Linux内核配置编译与文件系统构建 南京大学 黄开成101180046 2012.11.11 一:实验目的 1.了解嵌入式系统的开发环境,内核与文件系统的下载和启动; 2.了解Linux内核源代码的目录结构及各自目录的相关内容,了解Linux内核各配置选项内容和作用,掌握Linux内核的编译过程; 3.了解嵌入式操作系统中文件系统的类型和应用、了解JFFS2文件系统的优点及其在嵌入式系统中的作用、掌握利用Busybox软件制作嵌入式文件系统的方法,并且掌握嵌入式Linux文件系统的挂载过程。二:实验环境说明 1.PC机使用openSUSE 14 Enterprise 系统。 2.开发板使用深圳市武耀博德信息技术有限公司生产的基于Inter 的PXA270处理器的多功能嵌入式开发平台EELIOD。 3.PC机通过RS-232串口与开发板相连,在PC机终端上运行minicom 程序构造一个开发板上的终端,用于对开发板的控制。 4.PC机与开发板通过ethernet网络相连接,并可在开发板上通过加载网络文件系统(NFS)与PC机通信。 5.Bootloader可以通过tftp协议从PC机上下载内核镜像和根文件系统镜像。下载目录为/tftpboot 。 6.用于开发板的Linux内核源码为linux-2.4.21-51Board_EDR,

busybox版本为busybox-1.00-pre5。 7.交叉编译器的路径为/usr/local/arm-linux/bin/arm-linux。 三:实验操作过程和分析记录 1.嵌入式系统的开发环境和开发流程: 1.1启动minicom和开发板 在PC机上打开一个终端,输入: >minicom 按Ctrl+A-o进入minicom的configuration界面。对串行通信接口进行配置,串口设置为:/dev/ttyS0(串口线接在PC机的串口1上)、bps=115200、8位数据、无校验、无流控制。 然后打开开发板电源,看到屏幕有反应之后,按任意键进入配置界面,如果长时间没有按下任何键,bootloader将会自动从flash中读取内核和根文件系统并启动开发板上的Linux系统。 分析:嵌入式系统中,通常并没有像PC机中BIOS 那样的固件程序,因此整个系统的加载启动任务完全由bootloader来完成。bootloader的主要作用是:初始化硬件设备;建立内存空间的映射图;完成内核的加载,为内核设置启动参数。 按0进入命令行模式,出现51board>,可以设置开发板和PC机的IP 地址: 51board> set myipaddr 192.168.208.133(设置开发板的IP地址) 51board> set destipaddr 192.168.208.33(设置PC机的IP地址)注意IP地址的设置:使其处于同一网段,并且避免和其他系统的

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

Linux内核分析-网络[五]:网桥

看完了路由表,重新回到netif_receive_skb ()函数,在提交给上层协议处理前,会执行下面一句,这就是网桥的相关操作,也是这篇要讲解的容。 view plaincopy to clipboardprint? 1. s kb = handle_bridge(skb, &pt_prev, &ret, orig_dev); 网桥可以简单理解为交换机,以下图为例,一台linux机器可以看作网桥和路由的结合,网桥将物理上的两个局域网LAN1、LAN2当作一个局域网处理,路由连接了两个子网1.0和2.0。从eth0和eth1网卡收到的报文在Bridge模块中会被处理成是由Bridge收到的,因此Bridge也相当于一个虚拟网卡。 STP五种状态 DISABLED BLOCKING LISTENING LEARNING FORWARDING 创建新的网桥br_add_bridge [net\bridge\br_if.c] 当使用SIOCBRADDBR调用ioctl时,会创建新的网桥br_add_bridge。 首先是创建新的网桥: view plaincopy to clipboardprint?

1. d ev = new_bridge_dev(net, name); 然后设置dev->dev.type为br_type,而br_type是个全局变量,只初始化了一个名字变量 view plaincopy to clipboardprint? 1. S ET_NETDEV_DEVTYPE(dev, &br_type); 2. s tatic struct device_type br_type = { 3. .name = "bridge", 4. }; 然后注册新创建的设备dev,网桥就相当一个虚拟网卡设备,注册过的设备用ifconfig 就可查看到: view plaincopy to clipboardprint? 1. r et = register_netdevice(dev); 最后在sysfs文件系统中也创建相应项,便于查看和管理: view plaincopy to clipboardprint? 1. r et = br_sysfs_addbr(dev); 将端口加入网桥br_add_if() [net\bridge\br_if.c] 当使用SIOCBRADDIF调用ioctl时,会向网卡加入新的端口br_add_if。 创建新的net_bridge_port p,会从br->port_list中分配一个未用的port_no,p->br会指向br,p->state设为BR_STATE_DISABLED。这里的p实际代表的就是网卡设备。 view plaincopy to clipboardprint? 1. p = new_nbp(br, dev); 将新创建的p加入CAM表中,CAM表是用来记录mac地址与物理端口的对应关系;而刚刚创建了p,因此也要加入CAM表中,并且该表项应是local的[关系如下图],可以看到,CAM表在实现中作为net_bridge的hash表,以addr作为hash值,链入 net_bridge_fdb_entry,再由它的dst指向net_bridge_port。

配置和编译Linux内核

配置和编译Linux内核 对内核进行正确配置后,才能进行编译。配置不当的内核,很有可能编译出错,或者不能正确运行。 1.1.1 快速配置内核 进入Linux内核源码数顶层目录,输入make menuconfig命令,可进入如图0.1所示的基于Ncurses的Linux内核配置主界面(注意:主机须安装ncurses相关库才能正确运行该命令并出现配置界面)。如果没有在Makefile中指定ARCH,则须在命令行中指定: $ make ARCH=arm menuconfig 图0.1基于Ncurses的Linux内核配置主界面 基于Ncurses的Linux内核配置界面不支持鼠标操作,必须用键盘操作。基本操作方法: ?通过键盘的方向键移动光标,选中的子菜单或者菜单项高亮; ?按TAB键实现光标在菜单区和功能区切换; ?子菜单或者选项高亮,将光标移功能区选中回车: ◆如果是子菜单,按回车进入子菜单; ◆如果是菜单选项,按空格可以改变选项的值: ●对于bool型选项,[*]表示选中,[ ]表示未选中; ●对于tristate型选项,<*>表示静态编译,表示编译为模块,<>表示未 选中。 ◆对于int、hex和string类型选项,按回车进入编辑菜单。 ?连按两次ESC或者选中回车,将退回到上一级菜单; ?按斜线(/)可启用搜索功能,填入关键字后可搜索全部菜单内容。

配置完毕,将光标移动到配置界面末尾,选中“Save an Alternate Configuration File”后回车,保存当前内核配置,默认配置文件名为.config,如图错误!文档中没有指定样式的文字。.2所示。 图错误!文档中没有指定样式的文字。.2保存内核配置为.config文件 保存完毕,选择退出内核配置界面,回到终端命令行。 当然,也可以将配置文件命名为其它文件名,如config-bak等,但该配置不会被Makefile 文件使用,Makefile默认使用文件名为.config的配置文件,所以重新命名配置文件通常在保留或者备份内核配置信息时使用。 也可以不用“Save an Alternate Configuration File”操作,连按ESC或选择退出内核配置界面,将会出现如图错误!文档中没有指定样式的文字。.3所示的保存配置提示信息,选择后回车,内核配置将会被保存为.config文件。 图错误!文档中没有指定样式的文字。.3保存内核配置提示信息 备份内核配置,在命令行下将.config文件复制为其它文件名来得更简单快捷: $ cp .config config-bak 装载某个配置文件,可在配置界面选中“Load an Alternate Configuration File”,然后填入已存在的配置文件名称。也可在命令行下将配置文件复制为.config: $ cp config-bak.config 在目录下有很多*_defconfig文件,这些都是内核的预设配置文件,分别对应各种不同的参考板。如果要使用其中的配置文件作为内核编译配置,可用“make xxx_defconfig”命令来完成。对于已经设定好的内核配置,也可以命名为某个文件名,放到目录下,在以后直接用make来调用该配置即可。例如将当前配置命名为m3352_defconfig并放到目录下,后续只需执行下列命令即可使用当前配置: $ make m3352_defconfig或者 $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-m3352_defconfig

相关文档
相关文档 最新文档