qemu -boot d -cdrom /dev/cd0 on FreeBSD is not good

Norikatsu Shigemura nork at FreeBSD.org
Mon Nov 15 09:48:36 PST 2004


	I tried to install Windows XP SP2 on qemu over FreeBSD 6-current
	like following command, but failed.

	# qemu -boot d -cdrom /dev/cd0 windows.img

	Because find_image_format on qemu/block.c is failed.  This
	problem can be confirmed like following program.
- - - - - - - - - - - - - - - - - - - - - - - -
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main(void)
{
	char buf[2048];
	int fd = open("/dev/cd0", O_RDONLY);
	if(  read(fd, buf, sizeof(buf)) < 0  )  {	/* no problem */
		perror("[1] read error.");
	}
	if(  read(fd, buf, sizeof(buf) / 2) < 0  )  {	/* problem */
		perror("[2] read error.");
	}
}
- - - - - - - - - - - - - - - - - - - - - - - -

	Adhoc-ly, I changed "buf" size to 2048. and confirmed this
	problem was fixed.
- - - - - - - - - - - - - - - - - - - - - - - -
static BlockDriver *find_image_format(const char *filename)
{
    int fd, ret, score, score_max;
    BlockDriver *drv1, *drv;
    uint8_t buf[1024];					=> buf[2048]
(snip)
    ret = read(fd, buf, sizeof(buf));
    if (ret < 0) {
        close(fd);
        return NULL;
    }
(snip)
- - - - - - - - - - - - - - - - - - - - - - - -
Obtained from:	qemu-0.6.1

	I think magic number 2048 is sector size, but I don't know
	how to get valid read size.  Anyone, do you have any idea?


More information about the freebsd-hackers mailing list