Work in progress in getting GPTPartitionHandle working.
* Tried to use EFI::Header class, but there doesn't seem to be an easy way to actually hit the disk -- which we'll have to do to find out how large the GPT table is. * Initialization of GPT disks is now working which is why I added the disk system add-on to the image. However, there is a caveat, as the backup header and table aren't written yet. * Partitions can be deleted. * Creating partitions does not work yet, but I don't know yet why; in theory it could already work.
This commit is contained in:
parent
ab31389341
commit
9e8d42ac44
build/jam
src/add-ons/disk_systems/gpt
@ -678,7 +678,7 @@ AddFilesToHaikuImage system add-ons Screen\ Savers
|
||||
: $(SYSTEM_ADD_ONS_SCREENSAVERS) ;
|
||||
|
||||
AddFilesToHaikuImage system add-ons disk_systems
|
||||
: <disk_system>intel <disk_system>bfs <disk_system>ntfs ;
|
||||
: <disk_system>intel <disk_system>gpt <disk_system>bfs <disk_system>ntfs ;
|
||||
|
||||
# decorators
|
||||
AddDirectoryToHaikuImage home config add-ons decorators ;
|
||||
|
@ -1,8 +1,4 @@
|
||||
/*
|
||||
* IntelDiskAddOn.rdef
|
||||
*/
|
||||
|
||||
resource app_signature "application/x-vnd.Haiku-IntelDiskAddOn";
|
||||
resource app_signature "application/x-vnd.Haiku-GPTDiskAddOn";
|
||||
|
||||
resource app_version {
|
||||
major = 1,
|
||||
@ -11,5 +7,5 @@ resource app_version {
|
||||
variety = 0,
|
||||
internal = 0,
|
||||
short_info = "1.0.0",
|
||||
long_info = "Haiku Intel disk add-on."
|
||||
long_info = "GUID Partition Table disk add-on."
|
||||
};
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright 2013, Axel Dörfler, axeld@pinc-software.de.
|
||||
* Copyright 2007, Ingo Weinhold, bonefish@users.sf.net.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
@ -13,6 +14,7 @@
|
||||
#include <MutablePartition.h>
|
||||
#include <PartitioningInfo.h>
|
||||
#include <PartitionParameterEditor.h>
|
||||
#include <Path.h>
|
||||
|
||||
#include <AutoDeleter.h>
|
||||
|
||||
@ -43,6 +45,23 @@ GPTPartitionHandle::~GPTPartitionHandle()
|
||||
status_t
|
||||
GPTPartitionHandle::Init()
|
||||
{
|
||||
// TODO: how to get the path of a BMutablePartition?
|
||||
//BPath path;
|
||||
//status_t status = Partition()->GetPath(&path);
|
||||
//if (status != B_OK)
|
||||
//return status;
|
||||
|
||||
//fd = open(path.Path(), O_RDONLY);
|
||||
//if (fd < 0)
|
||||
//return errno;
|
||||
|
||||
//fHeader = new EFI::Header(fd, Partition()->BlockSize(),
|
||||
//Partition()->BlockSize());
|
||||
//status = fHeader->InitCheck();
|
||||
//if (status != B_OK)
|
||||
//return status;
|
||||
|
||||
//close(fd);
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
@ -100,10 +119,12 @@ GPTPartitionHandle::GetNextSupportedType(const BMutablePartition* child,
|
||||
status_t
|
||||
GPTPartitionHandle::GetPartitioningInfo(BPartitioningInfo* info)
|
||||
{
|
||||
// init to the full size (minus the first sector)
|
||||
// init to the full size (minus the GPT table header and entries)
|
||||
off_t size = Partition()->ContentSize();
|
||||
status_t status = info->SetTo(Partition()->BlockSize(),
|
||||
size - Partition()->BlockSize());
|
||||
// TODO: use fHeader
|
||||
size_t headerSize = Partition()->BlockSize() + 16384;
|
||||
status_t status = info->SetTo(Partition()->BlockSize() + headerSize,
|
||||
size - Partition()->BlockSize() - 2 * headerSize);
|
||||
if (status != B_OK)
|
||||
return status;
|
||||
|
||||
@ -141,7 +162,7 @@ status_t
|
||||
GPTPartitionHandle::ValidateCreateChild(off_t* _offset, off_t* _size,
|
||||
const char* typeString, BString* name, const char* parameters)
|
||||
{
|
||||
return B_BAD_VALUE;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
@ -150,7 +171,21 @@ GPTPartitionHandle::CreateChild(off_t offset, off_t size,
|
||||
const char* typeString, const char* name, const char* parameters,
|
||||
BMutablePartition** _child)
|
||||
{
|
||||
return B_BAD_VALUE;
|
||||
// create the child
|
||||
BMutablePartition* partition = Partition();
|
||||
BMutablePartition* child;
|
||||
status_t status = partition->CreateChild(0, typeString, name,
|
||||
parameters, &child);
|
||||
if (status != B_OK)
|
||||
return status;
|
||||
|
||||
// init the child
|
||||
child->SetOffset(offset);
|
||||
child->SetSize(size);
|
||||
child->SetBlockSize(partition->BlockSize());
|
||||
|
||||
*_child = child;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
|
@ -8,6 +8,8 @@
|
||||
|
||||
#include <DiskSystemAddOn.h>
|
||||
|
||||
#include "Header.h"
|
||||
|
||||
|
||||
class GPTPartitionHandle : public BPartitionHandle {
|
||||
public:
|
||||
@ -39,6 +41,9 @@ public:
|
||||
const char* parameters,
|
||||
BMutablePartition** child);
|
||||
virtual status_t DeleteChild(BMutablePartition* child);
|
||||
|
||||
private:
|
||||
EFI::Header* fHeader;
|
||||
};
|
||||
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
SubDir HAIKU_TOP src add-ons disk_systems gpt ;
|
||||
|
||||
UsePrivateHeaders shared storage ;
|
||||
UsePrivateHeaders interface shared storage ;
|
||||
UsePrivateSystemHeaders ;
|
||||
|
||||
SEARCH_SOURCE
|
||||
@ -13,5 +13,10 @@ Addon <disk_system>gpt :
|
||||
GPTDiskAddOn.cpp
|
||||
GPTPartitionHandle.cpp
|
||||
|
||||
# from the kernel partitioning system add-on
|
||||
Header.cpp
|
||||
crc32.cpp
|
||||
utility.cpp
|
||||
|
||||
: be $(TARGET_LIBSUPC++)
|
||||
;
|
||||
|
Loading…
x
Reference in New Issue
Block a user