I want to
create a filesystem driver to read different type of filesystems(Ext2/3/4,
Reiserfs, XFS, Btrfs...) on Windows with the help of the related codes
in GRUB. I asked it on help-grub with the subject
"How to reuse the the part of codes about file system in grub ?
<http://lists.gnu.org/archive/html/help-grub/2015-08/msg00009.html>"。

Now I have finished with the help of dokany
<https://github.com/dokan-dev/dokany>
(similar to FUSE but works on Windows).You can find the what I have done on
https://github.com/Archstacker/GRUB. The most important file is
grub-mount-win.c
<https://github.com/Archstacker/GRUB/blob/e18c93/util/grub-mount-win.c>
, which implements the interface to dokany.


These are what I have done above the codes above GRUB:

1.Add check for file_name in grub_file_open. It has been fixed in ‘
[PATCH] file: ignore host disk in blocklist check’

2.
Add size and symlink attribute to grub_dirhook_info. Otherwise I must
open each file when readdir, and it
’s very slow.You can test it with grub-mount, when you ‘ls’
 in a directory which has thousands of files(such as /bin), it will
cost a lot of time.

3.Use ‘fs->open’ rather than ‘grub_file_open’.Because the grub_file_open
 must probe for the type of filesystem each time, which will cost a
lot of time and is unnecessary. And it will try to decompress each
file it opened, but I think it
’s not suitable.I think it’
s better to check for whether the filesystem has enabled compress or not.

4.
Add check when store disk cache.You can find it on grub-devel. Because
dokany will start multi thread at the same time, the function
grub_disk_cache_store must check for cache->lock before copy something
to it. Otherwise ,the program may crash because cache->data is set to
zero by other thread before grub_memcpy in grub_disk_cache_store.



But because GRUB is single thread and it use a global variable
grub_errno.When it was called with dokany in multi thread, the
grub_errno will be wrong in some times, which will cause the crash of
the program or the other things unexpected.

I don’
t know how to solve it suitable, so I have set the ThreadCount of
dokany to 1 now. But it will be too slow when open a directory with a
lot of files in it.

You can try what I have done in
https://github.com/Archstacker/GRUB/releases/latest

Do you have good ideas to solve it? And what do you think of this project?
_______________________________________________
Help-grub mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-grub

Reply via email to