文章目录

kdb patch
下载
https://git.kernel.org/pub/scm/linux/kernel/git/danielt/linux.git/
https://lkml.org/
https://ftp.jaist.ac.jp/pub/Linux/Momonga/2/SOURCES/
解压
bzip2 -d kdb-v4.4-2.6.10-common-1.bz2
bzip2 -d kdb-v4.4-2.6.10-i386-1.bz2
patch
patch -p1 < kdb-v4.4-2.6.10-common-1
patch -p1 < kdb-v4.4-2.6.10-i386-1
config
[root@localhost linux-2.6.10]#uname -m
x86_64
[root@localhost linux-2.6.10]#
1. 设置正确的架构并重新配置
bash
# 设置正确的架构
export ARCH=i386
# 清理配置并重新开始
rm -f .config
make mrproper
make ARCH=i386 defconfig \
HOSTCC="/opt/gcc-3.4.6/bin/gcc -m32 -B/opt/gcc-3.4.6/bin/ -L/opt/gcc-3.4.6/lib" \
HOSTLD="/opt/gcc-3.4.6/bin/ld" \
HOSTCFLAGS="-m32 -static" \
HOSTLDFLAGS="-m32 -static"
2. 启用必要的依赖选项
bash
# 确保这些基础选项都启用
echo "CONFIG_DEBUG_KERNEL=y" >> .config
echo "CONFIG_DEBUG_INFO=y" >> .config
echo "CONFIG_MAGIC_SYSRQ=y" >> .config
echo "CONFIG_KALLSYMS=y" >> .config
echo "CONFIG_KALLSYMS_ALL=y" >> .config
3. 启用 KDB 选项
bash
# 启用 KDB
echo "CONFIG_KDB=y" >> .config
echo "CONFIG_KDB_MODULES=y" >> .config
echo "CONFIG_KDB_OFF=y" >> .config
4. 更新配置
bash
# 更新配置,在提示时,对于新选项直接按回车使用默认值
make ARCH=i386 oldconfig \
HOSTCC="/opt/gcc-3.4.6/bin/gcc -m32 -B/opt/gcc-3.4.6/bin/ -L/opt/gcc-3.4.6/lib" \
HOSTLD="/opt/gcc-3.4.6/bin/ld" \
HOSTCFLAGS="-m32 -static" \
HOSTLDFLAGS="-m32 -static"
检查
grep -i "kdb" .config

echo "CONFIG_FUSION=y" >> .config
echo "CONFIG_FUSION_SPI=y" >> .config
echo "CONFIG_FUSION_FC=y" >> .config
echo "CONFIG_FUSION_SAS=y" >> .config
echo "CONFIG_HIGHMEM64G=y" >> .config
# 解决 896MB 内存限制
bash
# 创建环境变量设置脚本
cat > /opt/gcc-3.4.6/setenv.sh << 'EOF'
#!/bin/bash
export OLD_TOOLCHAIN_PATH=/opt/gcc-3.4.6
export PATH=$OLD_TOOLCHAIN_PATH/bin:$PATH
# 强制32位编译工具链
export CC="$OLD_TOOLCHAIN_PATH/bin/gcc -m32"
export CXX="$OLD_TOOLCHAIN_PATH/bin/g++ -m32"
export LD="$OLD_TOOLCHAIN_PATH/bin/ld"
export AS="$OLD_TOOLCHAIN_PATH/bin/as --32"
export AR="$OLD_TOOLCHAIN_PATH/bin/ar"
export NM="$OLD_TOOLCHAIN_PATH/bin/nm"
export RANLIB="$OLD_TOOLCHAIN_PATH/bin/ranlib"
export STRIP="$OLD_TOOLCHAIN_PATH/bin/strip"
# 库和头文件路径
export LIBRARY_PATH=$OLD_TOOLCHAIN_PATH/lib:$LIBRARY_PATH
export C_INCLUDE_PATH=$OLD_TOOLCHAIN_PATH/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=$OLD_TOOLCHAIN_PATH/include:$CPLUS_INCLUDE_PATH
# 内核编译专用变量
export ARCH=i386
export CROSS_COMPILE=""
export KBUILD_CFLAGS="-m32 -march=i386 -mtune=i386"
# 主机工具链(用于编译host程序)
export HOSTCC="$OLD_TOOLCHAIN_PATH/bin/gcc -m32"
export HOSTCXX="$OLD_TOOLCHAIN_PATH/bin/g++ -m32"
export HOSTLD="$OLD_TOOLCHAIN_PATH/bin/ld"
export HOSTCFLAGS="-m32 -static"
export HOSTLDFLAGS="-m32 -static"
echo "Old toolchain (GCC 3.4.6) 32-bit environment activated!"
EOF
# 使脚本可执行
chmod +x /opt/gcc-3.4.6/setenv.sh
# 激活旧工具链环境
source /opt/gcc-3.4.6/setenv.sh
创建恢复脚本
bash
# 创建恢复脚本
cat > /opt/gcc-3.4.6/unsetenv.sh << 'EOF'
#!/bin/bash
# 从PATH中移除旧工具链
export PATH=$(echo $PATH | sed "s|/opt/gcc-3.4.6/bin:||")
# 清除所有相关环境变量
unset OLD_TOOLCHAIN_PATH
unset CC
unset CXX
unset LD
unset AS
unset AR
unset NM
unset RANLIB
unset STRIP
unset LIBRARY_PATH
unset C_INCLUDE_PATH
unset CPLUS_INCLUDE_PATH
unset ARCH
unset CROSS_COMPILE
unset KBUILD_CFLAGS
unset HOSTCC
unset HOSTCXX
unset HOSTLD
unset HOSTCFLAGS
unset HOSTLDFLAGS
echo "Old toolchain environment deactivated!"
EOF
chmod +x /opt/gcc-3.4.6/unsetenv.sh
build
make ARCH=i386 -j2 \
HOSTCC="/opt/gcc-3.4.6/bin/gcc -m32" \
HOSTLD="/opt/gcc-3.4.6/bin/ld" \
HOSTCFLAGS="-m32 -static" \
HOSTLDFLAGS="-m32 -static" \
CC="/opt/gcc-3.4.6/bin/gcc -m32" \
LD="/opt/gcc-3.4.6/bin/ld" \
CROSS_COMPILE="" \
KBUILD_CFLAGS="-m32 -march=i386 -mtune=generic"

[root@localhost linux-2.6.10]#make ARCH=i386 modules_install \
> INSTALL_MOD_PATH=/lib/modules/2.6.10-kdb \
> CC="/opt/gcc-3.4.6/bin/gcc -m32" \
> LD="/opt/gcc-3.4.6/bin/ld"
[root@localhost linux-2.6.10]#make ARCH=i386 install \
> CC="/opt/gcc-3.4.6/bin/gcc -m32" \
> LD="/opt/gcc-3.4.6/bin/ld"