4
votes

I am working with QEMU 1.1.0, emulating Versatile Express board with ARM Cortex-A9. I have managed to launch simple "Hello World" example following this instructions:

http://balau82.wordpress.com/2012/03/31/compile-linux-kernel-3-2-for-arm-and-emulate-with-qemu/

but now I want to create filesystem by myself.

I decided to use buildroot, version 2012.05. and I've configured it to create toolchain, kernel and filesystem image for ARM Cortex-A9 target.

Kernel is of version 3.3.7 and for the filesystem I've selected to be cpio, non-compressed. The initrd argument in call to qemu-system-arm is pointing to

/output/images/rootfs.cpio

When I launch QEMU kernel boots, but then I get this message:

Initializing random number generator... done.

Starting network...

can't open /dev/ttyS0: No such device or address

can't open /dev/ttyS0: No such device or address

can't open /dev/ttyS0: No such device or address

...

All I can do is to terminate QEMU.

I have checked the contents of rootfs.cpio like this:

cpio -t < rootfs.cpio

and saw that there is /dev/ttyS0.

Have I missed something in configuring the filesystem? Or should I use filesystem in

/output/target

to somehow create device(s) there (Buildroot does not do that), and then rebuild the filesystem?

I'm new to Buildroot, so any hint or suggestion is more than welcome.

1

1 Answers

1
votes

Extract rootfs and type ls -all /dev/ttyS0 and check it's major and minor number. Because if your major number is not the required one then it will not invoke respective kernel functionality and in that case it will only be a junk character device.

Also can you post the whole log file (copy all those dmesg and post those somewhere and give link here.)

And if you are sure that /dev/ttyS0 is there then do the following steps :

  • extract(unpack using cpio) rootfs

  • find out which init file kernel is using as parent process. If you are lucky then it would be lying in root directory. named init or initrc

  • open init file in your favorite editor.
  • starting few lines of your init would be like

    ::respawn:/sbin/getty -L 38400 tty1
    ::respawn:/sbin/getty -L 38400 tty2
    ::respawn:/sbin/getty -L 38400 tty3
    ::respawn:/sbin/getty -L 38400 tty4

  • add ::respawn:/sbin/ls -all /dev and save the file. (We have added list command to see what is there inside /dev directory)

  • reboot your system and check the dmesg. See if /dev/ttyS0 is really missing ?