grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re: `disk` level IO: how it works?


From: Oleg Strikov
Subject: Re: Re: `disk` level IO: how it works?
Date: Wed, 23 Jan 2008 06:17:38 +0000

>> Good day!
>> I'm trying to look into grub low-level disk IO.
>> I've started exploration with my own  low-level FS block reader, but it
>> works too strange:
>>
>> /* I know that such code is incorrect due to low-level FS operations but i'm
>> trying to understand some principals of low level IO :) */
>>
>> file = grub_file_open (FILE);
>> fs_data = (struct grub_ext2_data *) file->data;
>> disk = fs_data->disk;
>>
>> fsize = grub_file_size(file);
>> block_num = (fsize >> LOG2_BLOCK_SIZE (fs_data));
>> if (((grub_off_t) block_num << LOG2_BLOCK_SIZE (fs_data)) != fsize)
>>     block_num++;
>>
>> log2_blksz = LOG2_EXT2_BLOCK_SIZE (fs_data);
>>
>> blocks = grub_malloc (sizeof (int) * block_num);
>>
>> fshelp_node = &fs_data->diropen;
>>
>> for (i = 0; i < block_num; i++)
>>   {
>>     blocks[i] = grub_ext2_read_block_wrapper (fshelp_node, i);
>>   }
>>
>> grub_disk_read(fs_data->disk,
>>   \
>>            grub_le_to_cpu32 (blocks[i]) << log2_blksz,               \
>>            0,
>>                                                                     \
>>            sizeof (struct my_entry),
>>          \
>>            (char *) entry);
>>
>> grub_ext2_read_block_wrapper its my exported wrapper from ext2.c that calls
>> original grub_ext2_read_block with the same parameters.

>I find this very confusing.  Could you rephrase your >question to make it more
>specific?  Like, what are you trying to do or which function >you don't
>understand.

>> Problem: I have extended partition with two logical (hd0,5) & (hd0,6)
>> If I place FILE on (hd0,5) (at the begining of my physical disk) - all is OK
>> If I place FILE on (hd0,6) i get `out of partition` at grub_disk_read.

>Did you check if debug options give you anything useful? > Try "set debug=disk",
and maybe also "set debug=fs".

>What's the size of your disk, and your partitions?

>> P.S. I'm right that `disk` represents one partition (logical or primary),
>> not a group?

>I think grub_disk_t can either be a partition or a disk.

>--
>Robert Millan

Thanks Robert, I'll try to find my fault with debug option

reply via email to

[Prev in Thread] Current Thread [Next in Thread]