Kernel compile error
I had compiled a kernel and when I boot up it shows the folling message, could anyone advice what's wrong with it.
MP-BIOS bug: 8254 timer not connected to IO-APIC audit (1122643422.130:0): initialised can't register device seq specify port kernel panic - not syncing: VFS: Unable to move fs on unknown-block (0,0) I am a newbie so please advise if more information is needed. I am running Ubuntu 5.04. I have downloaded the kernel 2.6.12.3 from www.kernel,org (not sure if it is the right one). Hardware is as follows: AMD Athlon 64 2800+ 768MB of RAM nForce 3 chipset with LAN Sapphire Radeon 9550 Soundblaster Live! Value 2 IDE, 1 SATA and 2 optical drives Thanks. :) |
> kernel panic - not syncing: VFS: Unable to move fs on unknown-block (0,0)
I am not sure about the other errors, but this might be a problem of wrong partition number being given at the mount time. The /dev/xxx which is given at the Grub should contain the rootfs. For this, you will have to loginto a pre existing installation and check which partition has been mounted as / what you can do is, run 'fdisk -l' and see the various partitions ...again here there would be no indication for a rootfs. After selecting the parition, change the grub entry to root=/dev/xxx where xxx is your device. ALTERNATIVELY, in case you know you partition, just press e on grub prompt and change the parition. If this works, it would be great, else it seems some other kernel geek would have to help you out (coincidentaly even I am a newbie) Shrey |
Hi,
Thanks fro your inputs. I have my whole Ubuntu installed on hda1. The GRUB entry is a copy and paste duplicate from a default and working option with just the kernel name changed, the the new kernel is sitting right next to the original kernel at the same folder. And the fact that GRUB found and loaded the kernel make me thinks that it has nothing to do with GRUB at all. New kernel entry title Ubuntu, kernel 2.6.12.3 Customised root (hd0,0) kernel /boot/vmlinuz-2.6.12.3-customised root=/dev/hda1 ro console=tty0 quiet splash initrd /boot/initrd.img savedefault boot Default and working kernel entry title Ubuntu, kernel 2.6.10-5-amd64-k8 root (hd0,0) kernel /boot/vmlinuz-2.6.10-5-amd64-k8 root=/dev/hda1 ro console=tty0 quiet splash initrd /boot/initrd.img-2.6.10-5-amd64-k8 savedefault boot |
Shrey,
You made me took a second look on the GRUB menu.lst and I realised there is something wrong. Thanks. Any kind soul could tell me what is the initrd entry for? |
I think I have found the culprit for this message:
kernel panic - not syncing: VFS: Unable to move fs on unknown-block (0,0) I removed the initrd line for the working GRUB entry and it shows the same message. I guess you are right Shrey. It is not pointing at the right place. Where should I point for my new kernel? I have made some modification to the kernel, the above error message is replaced the following error message that keeps flooding the screen: modprobe: FATAL: Could not load/lib/modules/2.6.12.3/modules dep: no such file When I hit Ctrl-C, it halted after saying this: The device node /dev/hda1 for the root filesystem is missing, incorrect, or there is no entry for the root filesystem listed in /etc/fstab The system is also unable to create a temporary node in /dev/sda to use as a work around. Someone please save me from this mess. |
Hi NavyBlue,
It seems that you are pointing to a wrong initrd. Firstly 'initrd' or initialized Ramdisk is supposedly the life of a starting kernel having lots of drivers which could not be packed into the kernel (modules to be precise). So this is really necessary until and unless the kernel has been compiled with all the necessary drivers inbuilt (rare and bad chance). Secondly, you need to get your files for kernel and initrd right. I mean GRUB should know the correct files. What you can do is, start afresh. here we go (see, I might be wrong in perceiving the answer, cause even I am new . but procedure below works for me): > First step is compile your kernel [which you have done] > 2. create initrd (if you are NOT doing 'make install') >> if above is the case, initrd is made by cmd : mkinitrd <where to create , generally it is /boot/<any file name>> <kernel version> >> Here kernel version is supposed to be a directory which has to appear in /lib/modules/<kernel version> . This is the kernel which you are trying to compile. This would appear in case you have done 'make modules_install' [OK, please do check with 2.6 compiling - I am new for it] >3. reboot >4. At GRUB, select the kernel, and press e/c [which ever you like] [if pressing c, pen the commands down] >5. In case it is c, first set root by >> root (hd0,0) <-- here hd0 is the first disk, 0 is the first partition which is also called hda1 -- counting starts from 0. Tabs also works here which will give you the complete disk image (with partitions) >6. then you chose the kernel (again tabs works showing the path of the kernel file like in bash - ofcourse root should be the true fs only then .. this would also provide you a check whether the root fs is right) >> kernel /boot/<kernel image name> >7. similarly select initrd >> initrd /boot/<initrd file> >8. finally >> boot If all's fine till now, you should have your kernel up and running. Hope this text helps cause this is something that even I had to suffer while compiling-booting my first kernel. All the best, Shrey >7. |
Hi Shrey,
I really appreciate your helpfulness. :) However I met some problem here, on the step 1 that you mentioned, here is what I typed and what the system says: root@PC:/boot # mkinitrd -o /root/initrd.img 2.6.12.3 /bin/bash: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory I have also tried "mkinitrd -o /root/initrd.img lib/modules/2.6.12.3", but it says the same thing. What should I do? Thanks again. :) |
hi NavyBlue,
>>> root@PC:/boot # mkinitrd -o /root/initrd.img 2.6.12.3 I am not sure whether this command is right. Because I just cross-checked the man page for mkinitrd, and there seems to be no option with 'o'. Anyways, this is what I tried and it worked fine. > [root@shrey]#mkinitrd /boot/initrd-2.6.9.img 2.6.9 where 2.6.9 is my kernel., And I am placing my image file in /boot as initrd-2.6.9. What I perceive of the errors that you got, is : that mkinitrd is trying to search an object file because you have used a -o option in front of it. Remove that and use this syntax instead mkinitrd <path where you wan the initrd, generally in /boot by any name> <kernel version which should be same as that in /lib/modules, just the version number.> Hopefully this should work. Cheers, Shrey |
Hi Shrey,
I typed in the followings and this is what the system says: Code:
root@PC:/boot # mkinitrd /root/initrd.img 2.6.12.3 kernel panic - not syncing: VFS: Unable to move fs on unknown-block (3,1) What's happening? :scratch: |
This is what my machine is printing for mkinitrd
Code:
root@shrey#]$ /sbin/mkinitrd --help Also, on doubt /root/initrd.img , why are you trying to put it in /root .. though I am not sure whether this would create any problem, but still, keep you login-account away from booting process. <- this is just a suggestion. Code:
kernel panic - not syncing: VFS: Unable to move fs on unknown-block (3,1) I fear, you will have to tinker a bit with the mkinitrd command, and the initrd image. From all I can say is, that your initrd is failing for sure. Do cross-check whether you have a directory named after the kernel you are trying to reboot - in /lib/modules/. Also, there is one more option for booting your kernel. You will have to re-compile the kernel with NO drivers as modules. set all the required drivers as 'Inbuilt'. this way you won't even require initrd image. OK, this way the kernel image would be quite large, but hey, you have enough RAM. For this, you will have to go through the comlete menuconfig process and deselect all the unnecessary studd, and select all required drivers to be compiled with the kernel. Again, by the above way, you would be able to boot successfully, but this means bypassing the initrd image problem, NOT solving it in case you are keen to do that. All the best, Shrey |
By the way, would there be theoretical or practical performace difference between:
- default kernel vs self compiled kernel - functions compiling into the kernel vs compiled as module If I were to update mkinitrd to the latest version could Synaptic or apt-get command do the job? I have been checking update almost everyday lately and there is not prompt to this update. If I were to leave out the initrd thingie, should I just leave out the initrd line in the /boot/grub/menu.lst? Actually I don't meant to save the initrd file into the /root directory, it was actally a typo error and I meant to put it in the /boot directory with the rest of the initrd files. |
did u copy the System.map to the /boot
just give it a try... iam not sure.. |
I don't use initrd or ramdisk at all. I have compiled all the necessary stuff such as support for the file system of your /boot and /, and then I have the other drivers as modules (sound, usb, other file systems etc). My kernel is 1 MB, and the total system is something like 4 MB.
There certainly can be differences between a default kernel and a custom one. In your own kernel you only add support for what you really need whereas default kernels are compiled so that almost everything you throw at it should work. You can also compile your own kernel optimized for your specific processor whereas default kernels are usually compiled for i586 (or even i386) |
Quote:
|
Quote:
Another intention of doing it is actually to enable the ATI 3D driver. I read somewhere that the Ubuntu default 3D driver does not work with nVidia 2 chipset. Mine is nVidia 3, and I am not sure if the same thing will happen. |
All times are GMT -5. The time now is 04:28 PM. |