设备驱动程序编程-Linux2.6.10-kdb安装
文章目录kdb patchconfigbuildgrub使用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.bz2patchpatch -p1 kdb-v4.4-2.6.10-common-1 patch -p1 kdb-v4.4-2.6.10-i386-1config[rootlocalhost linux-2.6.10]#uname -m x86_64 [rootlocalhost linux-2.6.10]#1. 设置正确的架构并重新配置 bash # 设置正确的架构 export ARCHi386 # 清理配置并重新开始 rm -f .config make mrproper make ARCHi386 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_KERNELy .config echo CONFIG_DEBUG_INFOy .config echo CONFIG_MAGIC_SYSRQy .config echo CONFIG_KALLSYMSy .config echo CONFIG_KALLSYMS_ALLy .config 3. 启用 KDB 选项 bash # 启用 KDB echo CONFIG_KDBy .config echo CONFIG_KDB_MODULESy .config echo CONFIG_KDB_OFFy .config 4. 更新配置 bash # 更新配置在提示时对于新选项直接按回车使用默认值 make ARCHi386 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_SERIAL_8250_CONSOLEy .config启动至串口grub 配置上consoletty0 consolettyS0,115200n8串口记录/ # /bin/busybox mount -t proc proc /proc / # /bin/busybox cat /proc/cmdline ro root/dev/sda2 init/bin/busybox sh consolettyS0 / # /bin/busybox mount -t proc proc /proc / # echo 1 /proc/sys/kernel/sysrq / # echo 1 /proc/sys/kernel/kdb / # echo g /proc/sysrq-triggerbash # 创建环境变量设置脚本 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 ARCHi386 export CROSS_COMPILE export KBUILD_CFLAGS-m32 -marchi386 -mtunei386 # 主机工具链用于编译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.shbuildmake ARCHi386 -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 -marchi386 -mtunegenericgrubtitle Red Hat Enterprise Linux Server (2.6.10-kdb) root (hd0,0) kernel /vmlinuz-2.6.10-kdb ro root/dev/sda2 init/bin/busybox sh consoletty0 consolettyS0,115200n8 kgdbocttyS0,115200 kdbon kdb_breakin1 # initrd /initrd-2.6.10-kdb.img[rootlocalhost linux-2.6.10]#make ARCHi386 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 [rootlocalhost linux-2.6.10]#make ARCHi386 install \ CC/opt/gcc-3.4.6/bin/gcc -m32 \ LD/opt/gcc-3.4.6/bin/ld使用