Are two partition manager for two primary partitions needed or not?

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Are two partition manager for two primary partitions needed or not?

ソリューションへジャンプ
865件の閲覧回数
Fabi
Contributor III

Hi community,

for the partition manager I need some clarification. I've two primary partitions onto one SD card. To access both partitions, I've to setup two partition manager.  Here's the code snipped that works:

// Install partition manager over SD card driver, acquire full disk space

result = _io_part_mgr_install ( hdCard, "pm:", 0 );

         // error handling omitted here...

// Open partition manager

hdCardPart1 = fopen ( "pm:", NULL );

         // error handling omitted here...

// Validate partition 1

param = 1;

result = _io_ioctl ( hdCardPart1, IO_IOCTL_VAL_PART, &param );

if ( result == MQX_OK )

{

    // Install MFS over partition 1

    result = _io_mfs_install ( hdCardPart1, "c:", param );

             // error handling omitted here...

}

// Open file system

hd_1 = fopen ( "c:", NULL );

result = ferror ( hd_1 );

         // error handling omitted here...

// Open partition manager

hdCardPart2 = fopen ( "pm:", NULL );

         // error handling omitted here...

// Validate partition 2

param = 2;

result = _io_ioctl ( hdCardPart2, IO_IOCTL_VAL_PART, &param );

if ( result == MQX_OK )

{

    // Install MFS over partition 2

    result = _io_mfs_install ( hdCardPart2, "d:", param );

             // error handling omitted here...

}

hd_2 = fopen ( "d:", NULL );

result = ferror ( hd_2 );

         // error handling omitted here...

My question is, why two partition managers (hdCardPart1 and hdCardPart2) are needed?

That is to say, the following code snipped doesn't work:

// some code omitted here...

result = _io_mfs_install ( hdCardPart1, "c:", param );

// some code omitted here...

result = _io_mfs_install ( hdCardPart1, "d:", param ); // re-use the first partition manager for second partition -> not working

I use MQX 4.0.2.2 on MK60DN512.

TY

ラベル(1)
タグ(1)
0 件の賞賛
返信
1 解決策
562件の閲覧回数
RadekS
NXP Employee
NXP Employee

It is that way, because this is correct way.

You can have file system

  1. directly on disk
  2. indirectly on partition.

In second case, file system has to be installed on partition and file system doesn’t care what is below partition. Parameter partition_num will be removed in next MFS version (released probably in MQX 4.2 package).


Have a great day,
RadekS

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

元の投稿で解決策を見る

0 件の賞賛
返信
3 返答(返信)
563件の閲覧回数
RadekS
NXP Employee
NXP Employee

It is that way, because this is correct way.

You can have file system

  1. directly on disk
  2. indirectly on partition.

In second case, file system has to be installed on partition and file system doesn’t care what is below partition. Parameter partition_num will be removed in next MFS version (released probably in MQX 4.2 package).


Have a great day,
RadekS

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 件の賞賛
返信
562件の閲覧回数
Fabi
Contributor III

Fine. Would it be better to distinguish the string identifier? In other words, should

hdCardPart1 = fopen ( "pm1:", NULL );

hdCardPart2 = fopen ( "pm2:", NULL );

be used instead of

hdCardPart1 = fopen ( "pm:", NULL );

hdCardPart2 = fopen ( "pm:", NULL );

or doesn't matter?

0 件の賞賛
返信
562件の閲覧回数
RadekS
NXP Employee
NXP Employee

In fact, you have two correct options how to select appropriate partition:

  1. Select partition by string identifier
  2. Select partition subsequently by ioctl command

a)

// Install partition manager over SD card driver, acquire full disk space

result = _io_part_mgr_install ( hdCard, "pm:", 0 );

hdCardPart1 = fopen ( "pm:1", NULL );

hdCardPart2 = fopen ( "pm:2", NULL );

//pm:0 is whole device; pm:1, pm:2, pm:3, pm:4 are partitions

b)

// Install partition manager over SD card driver, acquire full disk space

result = _io_part_mgr_install ( hdCard, "pm:", 0 );

hdCardPart1 = fopen ( "pm:", NULL );

partition_number = 1;

error_code = ioctl(hdCardPart1, IO_IOCTL_SEL_PART, &partition_number);

hdCardPart2 = fopen ( "pm:", NULL );

partition_number = 2;

error_code = ioctl(hdCardPart2, IO_IOCTL_SEL_PART, &partition_number);

// partition_number=0 is whole device, 1, 2, 3, 4 are partitions

I hope it helps you.

0 件の賞賛
返信