Tag Archive for 'kernel'
刚升级到 2.6.26 就遇到了一个 Intel 显卡下的,系统休眠不可用的BUG,找了很久,开始还以为是编译内核的时候参数搞错,但是编译了3次之后问题依然…… 就要想回退到 2.6.25 的时候,想到可能是一个BUG,结果真的找到了。应用这个补丁即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c index 36af01f..130711f 100644 --- a/arch/x86/kernel/acpi/sleep.c +++ b/arch/x86/kernel/acpi/sleep.c @@ -23,6 +23,15 @@ static unsigned long acpi_realmode; static char temp_stack[10240]; #endif +/* XXX: this macro should move to asm-x86/segment.h and be shared with the + boot code... */ +#define GDT_ENTRY(flags, base, limit) \ + (((u64)(base & 0xff000000) << 32) | \ + ((u64)flags << 40) | \ + ((u64)(limit & 0x00ff0000) << 32) | \ + ((u64)(base & 0x00ffffff) << 16) | \ + ((u64)(limit & 0x0000ffff))) + /** * acpi_save_state_mem - save kernel state * @@ -58,11 +67,11 @@ int acpi_save_state_mem(void) ((char *)&header->wakeup_gdt - (char *)acpi_realmode)) << 16); /* GDT[1]: real-mode-like code segment */ - header->wakeup_gdt[1] = (0x009bULL << 40) + - ((u64)acpi_wakeup_address << 16) + 0xffff; + header->wakeup_gdt[1] = + GDT_ENTRY(0x809b, acpi_wakeup_address, 0xfffff); /* GDT[2]: real-mode-like data segment */ - header->wakeup_gdt[2] = (0x0093ULL << 40) + - ((u64)acpi_wakeup_address << 16) + 0xffff; + header->wakeup_gdt[2] = + GDT_ENTRY(0x8093, acpi_wakeup_address, 0xfffff); #ifndef CONFIG_64BIT store_gdt((struct desc_ptr *)&header->pmode_gdt); |
需要在配置编译时,选择
1 2 3 4 5 6 | --- Enable loadable module support [*] Module unloading [*] Forced module unloading [*] Module versioning support [_] Source checksum for all modules [*] Automatic kernel module loading |
Automatic kernel module loading 是应该选择的项目
how to build a initrd when you need, like this:
1 | sudo mkinitrd -c -k 2.6.21.5-smp -m jbd:ext3 -r /dev/hda14 -o /boot/initrd-2.6.21.5-smp.gz |

Recent Comments