RV1126 分割區教學

2023-12-22 12:00:59

一、前言

期初我是想弄一個分割區存放自己的 APP 程式,如果需要更改應用的時候,只需要燒寫獨立的分割區即可,就不需要重新燒寫 rootfs。這是一個簡單的操作,為啥還需要記錄了,因為我在裡面遇到了一些坑,思路走錯了,便折騰了幾天。為啥會有這樣的需求了,一是為了管理方便,二是將應用程式給新手的時候,他們不一定能將應用程式拷貝到開發板中。下面是我使用的一些環境

開發板:RV1126
核心版本:4.19.111
啟動方式:快速啟動

二、分割區實現

  1. 原理
    仔細研究過的朋友便能發現,在 SDK 中是沒有分割區操作的,其原理並不是編譯的時候將 rootfs 分成了多個塊,而是在燒寫的時候,燒寫工具根據分割區資訊分成多個引導塊,如下圖所示:

    在這裡做一個簡單的測試便知道,我們只需要將 demo 分割區的大小更改一下,重新燒寫驗證即可,怎麼更改接著往下看

  2. 分割區規則
    這裡主要是關注 「CMDLINE: mtdparts=rk29xxnand:」 之後的內容,至於 「CMDLINE: mtdparts=rk29xxnand:」 為啥不介紹了,因為我也不知道,我們就當是一個規則約束吧,不然會崩潰的,扯遠了。
    在接著看冒號後面的內容是有規律的,可以知道用逗號隔開後對應的是一個分割區。仔細看一下,便知道規則是「分割區大小@起始地址」,並且下一個分割區的起始地址是上一個分割區的結束地址。

  3. 結論
    到此相信相信小夥伴都會對 RV1126 進行分割區操作了,在來整理一下步奏,如下所示:

    • 首先,需要更改燒寫時的 parameter.txt 分割區檔案,可以對其進行增刪改查

    • 其次,我們需要製作自己的分割區,並燒寫到對應的其實地址即可,分割區的製作就比較簡單了,不知道的可以參考我之前的筆記linux下製作img檔案,製作好 img 檔案後,燒寫即可,;燒寫規則如下圖所示:

    • 最後,對分割區進行掛載,掛載分割區就比較簡單了,可以在開機指令碼中使用 mount 命令進行掛載,也可以在 「 etc/fstab」 檔案中新增對應的掛載資訊即可。

  4. 注意事項

    • 上面降到分割區的規則是 「分割區大小@起始地址」 ,但是會在以為檔案中看到 「-@起始地址」 這樣的形式,其作用是自動獲取剩餘的空間,都是在最後一個分割區中出現,如下圖所示:

      注意: 再次注意,細心的小夥伴會發現,在分割區名後面多了一個 「:grow」 ,沒錯當你使用 - 表示獲取剩餘空間的時候,必須要在分割區名的後面加上 「:grow」 ,否則你開機後,變回發現掛載點不存在。

    • 看到這裡,有的小夥伴就會好奇,怎麼才能檢視對應的掛載點,這裡有兩個辦法,首先可是使用 lsblk 命令進行檢視,但是 lsblk 命令可能在 RV1126 不存在,那還有一個方法,使用 cat /sys/class/block/xxx/uevent 檢視對應的掛載點是那個,如下圖所示:

到此,分割區的操作就算完成了,但是筆記到這裡還沒結束。上面的操作顯然是沒問題的,這樣介紹的目的是讓各位小夥伴深刻理解分割區的操作,不然換一個板子就不會了。後面將繼續介紹怎麼使用 SDK 完成分割區的操作。

三、分割區指令碼

分割區指令碼在 「sdk/device/rockchip/rv1126_rv1109」 目錄下,具體是那個檔案,可以看板級組態檔,這裡就不介紹,不明白的小夥伴,可以看我之前的筆記RV1126 快速啟動

在次開啟對應的分割區檔案,便會發現,這個分割區指令碼和燒寫時的分割區檔案是一樣的,沒錯燒寫檔案中的 parameter.txt 檔案就從這裡直接拷貝過去的,只是名稱不一樣而已。指令碼內容如下圖所示:

四、img 打包

  1. 打包指令碼 mk-image.sh
    在 SDK 中,提供了一個指令碼可以直接將對應的檔案打包成 img 檔案。在 SDK 簡單找了一下,對應的打包檔案是 「sdk/device/rockchip/common/mk-image.sh」,使用規則就很簡單了,接著往下看。

  2. 使用規則

    mk-image.sh <src_dir> <target_image> <fs_type> [size]
    
    • src_dir:是需要打包的檔案路徑及名稱,如「/home/demo」
    • target_image:是需要打包成的檔案路徑及名稱,如:「/home/demo.img」
    • fs_type:檔案型別,如ext2、ext2、ext4
    • size:檔案大小,可以省略
      注意: 如果路徑錯誤便會提示 「mk-image.sh <src_dir> <target_image> <fs_type> [size]」,所以有的小夥伴會發現編譯的時候會提示這個錯誤,多數是因為路徑不存在導致的
  3. 新增到 img 打包指令碼中
    在之前的比中介紹到,SDK 中的 img 打包指令碼是 「mkfirmware.sh」,在 「sdk/device/rockchip/common」 目錄下,具體怎麼新增,在 4.2 中已經介紹了,這裡就不過多講解了。

五、啟動掛載

上面已經完成了分割區和 img 檔案的打包,但是這兩個步奏完成後,燒寫到開發板中是不具備文自動掛載的,每次都需要手動掛載。一開始我們已經介紹到了自動掛載的方式,所以只需要在打包之前更改對應的指令碼檔案即可。

不論是更改 「etc/fstab」 檔案還是對應的啟動指令碼,操作方式都是一樣的,只需要將檔案放到對的目錄下,每次編譯的時候會自動將其打包到 rootfs 中,不瞭解的下夥伴可以看我之間的筆記【Buildroot】工具包使用

到此,我們的真個分割區操作算便完成了,有寫的不好的地方望各位指出,我會積極改進。

參考資料

rv1126 擴充套件rootfs分割區以及增加分割區:https://www.ebaina.com/articles/140000016845