在虚拟机中调试linux内核源码的方法

it2022-05-05  145

1、修改顶层Makefile中 ARCH = x86 CROSS_COMPILE =

2、默认配置 ls arch/x86/configs/ i386_defconfig x86_64_defconfig make i386_defconfig

3、编译 make zImage make bzImage 区别是编译zImage限制512K以内,bzImage没有限制。 编译完成后生成arch/x86/boot/bzImage (或者zImage)

4、编译内核模块:make modules

5、安装内核模块:make modules_install 这一步执行后系统会将内核模块从内核源码目录拷贝到/lib/modules下, 例如:/lib/modules/2.6.30.4/

6、制作init ramdisk mkinitrd initrd-2.6.30.4 2.6.30.4

ubuntu下命令: mkintramfs 2.6.26 -o /boot/initrd.img

7、安装内核 cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.30.4 cp /lib/modules/initrd-2.6.30.4 /boot/

8、修改grub.conf启动配置 vim /etc/grub.conf 添加下面一段: -------------------------------------------------------------------------------- title MyTestLinux #(此处名称任意) root (hd0,0) kernel /boot/vmlinuz-2.6.30.4 ro root=LABEL=/ rhgb quietselinux=0 initrd /boot/initrd-2.6.30.4 ---------------------------------------------------------------------------------

问题一、启动失败 经过调试,使用下面启动(主要是改root值为根目录挂载的用户UUID): -------------------------------------------------------------------------------- title MyTestLinux root (hd0,0) kernel /vmlinuz-2.6.30.4 ro root=UUID=172770ca-43c4-4496-b55b-14890adc53a2 rhgb quietselinux=0 initrd /initrd-2.6.30.4 ---------------------------------------------------------------------------------

注意: [root@localhost lark]# cat /etc/fstab UUID=172770ca-43c4-4496-b55b-14890adc53a2 / ext4 defaults 1 1 UUID=90d142e7-9468-4e0d-902d-37f76904d672 /boot ext4 defaults 1 2

问题二、启动时提示不支持ext4 重新编译内核,make menuconfig打开ext4支持即可。

问题三、启动后,没有网卡 service network restart 提示: Bringing up interface eth0: Error: No suitable device found: no device found for connection ‘System eth0’. [FAILED]

lspci命令,提示: 02:01.0 Ethernet controller: Advanced Micro Devices, Inc. [AMD] 79c970 [PCnet32 LANCE] (rev 10) 经过分析,进入原来的centos系统, ethtool -i eth0 发现驱动是vmxnet(应该是vmware虚拟机下的网卡驱动的一种); find / -name "*vmxnet*.ko",然后将此ko拷到移植的系统下insmod装载,提示失败: insmod: error inserting 'vmxnet.ko': -1 Invalid module format 原因是因为Makefile种使用的编译内核版本与insmod的版本不一致导致。 在原来的centos系统下,找到vmxnet源码包:/usr/lib/vmware-tools/modules/source/vmxnet.tar 然后再在移植的系统下make,最后insmod vmxnet.ko,成功出现eth0接口,移植成功。

最新回复(0)