iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
佛心分享-SideProject30

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

Day 21 。初入嵌入式開發- 如何修改 BSP - TF-A 篇

  • 分享至 

  • xImage
  •  

前言

前面有說明過 TF-A 的用途,其實就是在 ARM 架構啟動階段的第一個環節,那我們需要修改那些部分呢?
我們要先想一想 TF-A 階段我們需要做哪些事情, 會需要用到 I2C SPI ETH1 嗎?
假如不會使用到,那在這階段可以先不用去做沒關係!

例如某些板子上可能會用到 Power Manager IC (PMIC) , 那他可能是透過 I2C 通訊的,而 PMIC 負責輸出各路電壓,這時我們就需要在 TF-A 階段當中去修改設備樹。另外一個可能會需要修改的就是 DDR,因為在各個階段都會去使用到DDR , 而TF-A 階段會去負責 init DDR,這時我們就要去注意的大小是否與開發板上一致。

https://ithelp.ithome.com.tw/upload/images/20240815/20146325mVS4lypmug.png

如何下載 TF-A Source code?

這邊使用 stm32mp1 為範例說明,透過 yocto 我們可以很方便地將 src 給 download 下來。

  1. 使用 devtool 來下載 src code
devtool modify tf-a-stm32mp
# 下載後檔案會在 build/workspace/source 資料夾底下

https://ithelp.ithome.com.tw/upload/images/20240815/20146325aBI5tcdmck.png

  1. 找到dts的位置
    下載下來後檔案會存在 build/workspace/source 底下 , 找到當中的 fdts 資料夾 , 當中會存放許多關於 TF-A 所會需要用到的設備樹。

這邊已修改DDR為範例,在ST 官方的 BSP 當中 DDR 預設是 , 那我的開發板查了一下型號是 MT41K128M16JT-125:K , 他是一個 2G 的 DDR。 所以我們就比需要去修改這部分的大小。

我們用的檔案是 stm32mp157-ev1.dts , 在當中引用了 另外一個 dtsi 檔案 如下圖 , 我們因為自己的板子改為 1GB DDR 所以需要來修改這個檔案

https://ithelp.ithome.com.tw/upload/images/20240815/20146325LhPcwmSDir.png

找到所引用的檔案 開頭有一段在定義 DDR 的大小,這就是我們需要修改的地方

https://ithelp.ithome.com.tw/upload/images/20240815/20146325EBdDnDsEZb.png

在 ST 官方當中使用的是 1G 的 DDR , 那我們使用的是 2G 就需要修改這部分。

這邊的檔案名稱為什麼是 2x4Gb , 因為這個Gb 是 Gigabits 不是 Gigabytes (GB) , 4 Gb 轉換為Bytes是 0.5 GB。因此,2x4Gb 指的是兩個 4 Gb 的模組,共計 8 Gb,或者 1 GB。

將這一行

#define DDR_MEM_SIZE	0x40000000

修改為

#define DDR_MEM_SIZE 0x80000000

接著回到 stm32mp157=ev1.dts 當中修改設備樹當中的 memory,如下:
這一段的 reg 說明的是 <起點在哪裡 長度多長(大小)>

memory@c0000000 {
		device_type = "memory";
		reg = <0xC0000000 0x40000000>; 
	};

所以我們要將這部分修改為如下

memory@c0000000 {
		device_type = "memory";
		reg = <0xC0000000 0x80000000>; 
	};

這樣才可以正確的匹配到我們的開發板上的 DDR。其餘部分也可以依照相同方式去注意設備樹是否有需要修改的地方。

修改後的儲存與編譯

當我們修改完檔案後,我們可以將它存成 Patch,下一次去拉 src 時,yocto 就會自動地將Patch給打上。
作法如下

  1. 我們先cd 到 tf-a 的目錄
cd workspace/sources/tf-a-stm32mp/
  1. 透過 git 將儲存的內容新增,可以先使用 diff 與 status 查看
git diff

https://ithelp.ithome.com.tw/upload/images/20240815/20146325x9mSgbuRaV.png
這邊我新增了一個註解做為測試

git status

https://ithelp.ithome.com.tw/upload/images/20240815/20146325y9JSBGYLGj.png
這個指令可以查看我們修改了那些檔案。

git add . && git commit -m "看你要打什麼說明,會變成patch檔名喔"

https://ithelp.ithome.com.tw/upload/images/20240815/2014632550kDH3kGXS.png

  1. 透過 devtool 儲存成 patch
    我們上面先透過 git 將檔案給 commit 了,接下來就可以透過 devtool 來做成patch
    但這時我們要先建立一個 Layer 用來存放 patch,作法如下
bitbake-layers create-layer ../layers/meta-custom-layer

https://ithelp.ithome.com.tw/upload/images/20240815/20146325o7mkNTmRDM.png

可以到 layers 底下查看
https://ithelp.ithome.com.tw/upload/images/20240815/20146325k36qmhSymu.png
https://ithelp.ithome.com.tw/upload/images/20240815/20146325RU0hF7dJwJ.png
接著我們就可以透過指令來做 patch拉

cd workspace/sources/tf-a-stm32mp/
devtool finish tf-a-stm32mp /home/ubuntu0000/stm32mp/layers/meta-custom-layer/

這個步驟會將我們的 patch 給做出來並放到後面的路徑,同時他會將我們所下載的 tf-a source code 給清掉。

https://ithelp.ithome.com.tw/upload/images/20240815/20146325zpYoB2aLvd.png

https://ithelp.ithome.com.tw/upload/images/20240815/20146325XprA5KFEXj.png

  1. 最後一步就是將我們剛剛所建立的 layer 給新增到 bblayers.conf 當中編譯拉
bitbake-layers add-layer ../layers/meta-custom-layer/

https://ithelp.ithome.com.tw/upload/images/20240815/20146325u0fgP6iLoA.png

bitbake-layers show-layers

https://ithelp.ithome.com.tw/upload/images/20240815/20146325prYPRTPc2F.png

bitbake core-image-minimal

上一篇
Day 20 。初入嵌入式開發- tsv 分區大小計算
下一篇
Day 22 。初入嵌入式開發- 如何修改 BSP - Optee 篇
系列文
門外漢的嵌入式地獄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言