iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
佛心分享-SideProject30

門外漢的嵌入式地獄系列 第 20

Day 20 。初入嵌入式開發- tsv 分區大小計算

  • 分享至 

  • xImage
  •  

分區相關計算方式

在 linux 當中列出所有分區的詳細訊息

sudo fdisk -l /dev/mmcblkX

在 uboot 指令

mmc list
mmc part
mmc info
mmc dev 0 
mmc dev 1
part list mmc 0

每個GPT分區必須對齊:

  • 512 位元組(LBA)
  • EMMC擦除群組大小

第一個分割區在 17 KB 之後開始,這是U-Boot中 128 個條目的GPT標頭的預設大小。

在更新區塊裝置中的分割區之前,請透過在 mmc 裝置上 執行U-Boot指令來檢查分割區大小:part list

  part list mmc 0
Part	    Start LBA      	End LBA		   Name
1	       0x00000022	     0x00000221	   "fsbl1"
2	       0x00000222	     0x00000421	   "fsbl2"

名詞定義

  1. LBA(Logical Block Address)
  • LBA 是儲存設備中用來識別特定區塊(block)的數字地址。每個LBA代表設備中的一個固定大小的區塊(例如512 bytes或4 KB)。
  1. Offset(偏移量)
  • Offset 是相對於儲存設備的起始位置的位移量,通常以十六進位表示。它指示從設備的開始位置算起,需要跳過多少個位元組才能到達目標資料的開始位置。

https://ithelp.ithome.com.tw/upload/images/20240813/20146325ssdxS5ZnuS.png

Block Size 是設備的每個區塊的大小(例如512 bytes 或 4 KB)

計算方式

1	       0x00000022	     0x00000221	   "fsbl1"
  1. Start LBA : 0x00000022H = 34 Dec

    起始位元組偏移量 = 34 (LBA) * 512 (位元組/扇區) = 17408 位元組

  2. End LBA : 0x00000221 H= 545 Dec

    結束位元組偏移量 = 221 (LBA) * 512 (位元組/扇區) = 279,040位元組

17Kb * 1024 = 17408 bytes , 由此可見 fsbl1 確實是從 17KB 開始前面還有 boot1 boot2

FSBL1 分區大小計算

LBA數量 =結束LBA−起始LBA+1

  1. 545-34+1=512 → 區塊數量
  2. 一個區塊是512個 bytes , 所以 512 * 512 = 262144 bytes
  3. 262144 bytes / 1024 = 256 kb
2	       0x00000222	     0x00000421	   "fsbl2"
  1. Start LBA:0x00000222(十六進制) = 546(十進制)

    起始位元組偏移量 = 546(LBA) * 512 (位元組/扇區) = 279,552 位元組

  2. End LBA:0x00000421(十六進制) = 1057(十進制)

    結束位元組偏移量 = 1057(LBA) * 512 (位元組/扇區) = 541,184 位元組

FSBL2分區大小計算

LBA數量 =結束LBA−起始LBA+1

  1. 1057 - 546 + 1 = 512 → 區塊數量
  2. 一個區塊是512個 bytes , 所以 512 * 512 = 262144 bytes
  3. 262144 bytes / 1024 = 256 kb

使用 mmc 指令顯示

Partition Map for MMC device 1  --   Partition Type: EFI

Part    Start LBA       End LBA         Name
        Attributes
        Type GUID
        Partition GUID
  1     0x00000400      0x000007ff      "metadata1"
        attrs:  0x0000000000000000
        type:   8a7a84a0-8387-40f6-ab41-a8b9a5a60d23
                (8a7a84a0-8387-40f6-ab41-a8b9a5a60d23)
        guid:   e64a5a45-4510-478c-aa62-2fb5bbd52375
  2     0x00000800      0x00000bff      "metadata2"
        attrs:  0x0000000000000000
        type:   8a7a84a0-8387-40f6-ab41-a8b9a5a60d23
                (8a7a84a0-8387-40f6-ab41-a8b9a5a60d23)
        guid:   7d3cde82-7564-46ef-a165-f25ec2dc8f5a
  3     0x00000c00      0x00002bff      "fip-a"
        attrs:  0x0000000000000000
        type:   19d5df83-11b0-457b-be2c-7559c13142a5
                (19d5df83-11b0-457b-be2c-7559c13142a5)
        guid:   4fd84c93-54ef-463f-a7ef-ae25ff887087
  4     0x00002c00      0x00004bff      "fip-b"
        attrs:  0x0000000000000000
        type:   19d5df83-11b0-457b-be2c-7559c13142a5
                (19d5df83-11b0-457b-be2c-7559c13142a5)
        guid:   09c54952-d5bf-45af-acee-335303766fb3
  5     0x00004c00      0x00004fff      "u-boot-env"
        attrs:  0x0000000000000000
        type:   3de21764-95bd-54bd-a5c3-4abe786f38a8
                (u-boot-env)
        guid:   2a36dc68-e625-492d-a4c5-393922e92530
  6     0x00005000      0x00024fff      "bootfs"
        attrs:  0x0000000000000004
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
                (linux)
        guid:   872497ca-04a3-4dee-8ac7-3c09643364aa
  7     0x00025000      0x000807ff      "vendorfs"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
                (linux)
        guid:   d56e9d66-b6c5-42a3-b47e-8b9bda17ed7f
  8     0x00080800      0x006807ff      "rootfs"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
                (linux)
        guid:   491f6117-415d-4f53-88c9-6e0de54deac6
  9     0x00680800      0x0075fbff      "userfs"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
                (linux)
        guid:   19514f29-4f05-4eae-ac9f-bda6ccbc42bd

linux 中使用 df -h

root@stm32mp1:~# df -h
Filesystem                Size      Used Available Use% Mounted on
devtmpfs                  1.8G         0      1.8G   0% /dev
/dev/disk/by-partuuid/491f6117-415d-4f53-88c9-6e0de54deac6
                          2.8G     50.3M      2.6G   2% /
tmpfs                     1.8G         0      1.8G   0% /dev/shm
tmpfs                   755.5M      8.6M    746.9M   1% /run
tmpfs                     4.0M         0      4.0M   0% /sys/fs/cgroup
tmpfs                     1.8G         0      1.8G   0% /tmp
tmpfs                     1.8G     12.0K      1.8G   0% /var/volatile
tmpfs                   377.8M         0    377.8M   0% /run/user/0

fdisk

https://ithelp.ithome.com.tw/upload/images/20240813/20146325f6PbbAaiUl.png

ls /dev/mmcblk1*

root@stm32mp1:~# ls /dev/mmcblk1*
/dev/mmcblk1       /dev/mmcblk1p3     /dev/mmcblk1p8
/dev/mmcblk1boot0  /dev/mmcblk1p4     /dev/mmcblk1p9
/dev/mmcblk1boot1  /dev/mmcblk1p5     /dev/mmcblk1rpmb
/dev/mmcblk1p1     /dev/mmcblk1p6
/dev/mmcblk1p2     /dev/mmcblk1p7

/dev/mmcblk1 是整個emmc

剩下的對應tsv 表

可以透過這幾種方式來驗證看看分區所設定的大小,是否與掛載後的大小相同。


上一篇
Day 19 。初入嵌入式開發- 燒錄方式
下一篇
Day 21 。初入嵌入式開發- 如何修改 BSP - TF-A 篇
系列文
門外漢的嵌入式地獄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言