Galera, fiz o seguinte teste.
cd /usr/src/linux
export KCFLAGS='-mtune=prescott -march=prescott'
make-kpkg --initrd --verbose linux_image >../make.log 2>&1
Explicação:
A segunda linha define a variável KCFLAGS com as otimizações que o usuário desejar.
Na terceira linha: --verbose é para visualizar na tela as mensagens do compilador. Nunca use --verbose para compilar o kernel "de verdade", pois é muito demorado. Use somente para testes.
O redirecionamento no final da terceira linha é opcional. Ele joga as mensagens do GCC num arquivo, para facilitar a leitura depois.
Fazendo isso, a compilação foi normal. De tanto em tanto o Make avisava o seguinte:
make[1]: Entering directory `/usr/src/linux-2.6.36'
Makefile:608: "WARNING: Appending $KCFLAGS (-mtune=prescott -march=prescott) from environment to kernel $CFLAGS"
E o GCC compilava desse jeito:
gcc -Wp,-MD,kernel/.sched.o.d -nostdinc -isystem /usr/lib/gcc/i486-linux-gnu/4.4.3/include -I/usr/src/linux-2.6.36/arch/x86/include -Iinclude -include include/generated/autoconf.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -Os -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i586 -Wa,-mtune=generic32 -ffreestanding -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -fno-stack-protector -fno-omit-frame-pointer -fno-optimize-sibling-calls -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -mtune=prescott -march=prescott -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(sched)" -D"KBUILD_MODNAME=KBUILD_STR(sched)" -c -o kernel/.tmp_sched.o kernel/sched.c
Se voce procurar, perto do final da linha acima tem as flags setadas -mtune=prescott -march=prescott .
Porém antes da ocorrência dessas flags tem outras. Por exemplo, mais ou menos perto do meio da linha tem as seguintes: -march=i586 -Wa,-mtune=generic32.
Eu já procurei na doc do GCC e não encontrei o que acontece quando tem flags repetidas, qual é a que vale. No caso das opções -O*, o manual do GCC diz que sempre vale a última, mas no caso de -m* como já disse não encontrei nenhuma indicação.
Se a dica acima funcionar, acho bacana, pois não é necessario editar o Makefile. Basta apena exportar a flags desejadas setando a variável KCFLAGS.