一. 前言
世平集團針對 DDR 相關技術整理了一系列博文,下圖為詳細的博文索引架構;筆者希望能夠透過這些博文協助大家更了解如何在 i.MX8 相關平台上使用 DDR,未來筆者也會持續更新此系列的相關博文還懇請支持!而本篇博文會針對 DDR 相關技術索引架構中的【ATU Book-i.MX8 系列-DDR】NXP i.MX8M Mini 之替換為 Samsung 2 GB DDR 方法 ( 下 ) 這篇文章做介紹,本篇博文會對系統程式如何配合 DDR 容量大小修改做敘述接下來讓我們開始進入正題吧!
在上一篇博文 【ATU Book-i.MX8 系列-DDR】NXP i.MX8M Mini 之替換為 Samsung 2 GB DDR 方法 ( 上 ) 中,我們敘述了如何在 NXP 的 i.MX8M Mini 開發板上使用 Samsung 的 2 GB DDR 的方法,並配合其 Datasheet 設置 RPA 文件。而在接下來的這篇博文裡面,將會接續介紹如何依照 2 GB 的容量大小對軟體做修改。以下是本篇博文即將會介紹的內容:
(1) 如何把 Calibration 的結果打包進系統。
(2) 開機後如何透過實驗證明程式修改成功。
(2) 開機後如何透過實驗證明程式修改成功。
a. 系統流程圖
以下圖片為替換 DDR 的流程圖。
由於圖片中提到的「查看 DDR Datasheet」、「配置 RPA 參數」、「透過 DDR Tool 測試參數並壓力測試」以及「產出 "lpddr4_timing.c"」 等部分,已經在 【ATU Book-i.MX8 系列-DDR】NXP i.MX8M Mini 之替換為 Samsung 2 GB DDR 方法 ( 上 ) 這篇博文中介紹過了,所以本篇博文將會針對「把 "lpddr4_timing.c" 打包到 Bootloader 中」做介紹。
二. 針對 2 GB 容量的 DDR 修改軟體設定
本篇博文使用的軟體版本為 L5.4.47_2.2.0,以下將介紹如何把 "lpddr4_timing.c" 打包到 "u-boot-imx"。如果不知道如何產生出 "lpddr4_timing.c" 檔可以參考 【ATU Book-i.MX8 系列-DDR】NXP i.MX8M Mini 之替換為 Samsung 2 GB DDR 方法 ( 上 ) 這篇文章。
a. 重編 u-boot-imx
首先,移動到 "u-boot-imx" 目錄下。
$ cd tmp/work/imx8mmevk-poky-linux/u-boot-imx/1_2020.04-r0/git/
將 "lpddr4_timing.c" 放置到 "board/freescale/imx8mm_evk/" 下將本來的 "lpddr4_timing.c" 取代。
為了確保編譯的檔案是最新的,請更新 "lpddr4_timing.c" 的時間戳記。
$ touch board/freescale/imx8mm_evk/lpddr4_timing.c
編譯 "u-boot-imx"。
$ bitbake u-boot-imx -f -c compile; bitbake u-boot-imx -f -c deploy
編譯完畢後會產生 "u-boot-imx8mmevk.bin" 與 "u-boot-imx8mmevk.bin-sd" 等檔案;而檔案會產出在 "tmp/work/imx8mmevk-poky-linux/u-boot-imx/1_2020.04-r0/deploy-u-boot-imx/" 目錄下。
b. 重編 imx-boot
首先,移動到 "imx-boot" 目錄。
$ cd tmp/work/imx8mmevk-poky-linux/imx-boot/1.0-r0/git/
最後編譯 "imx-boot"。
$ bitbake imx-boot -f -c compile; bitbake imx-boot -f -c deploy
編譯完畢後會產生 "imx-boot" 與 "imx-boot-imx8mmevk-sd.bin-flash_evk";檔案會產出在 "tmp/work/imx8mmevk-poky-linux/imx-boot/1.0-r0/deploy-imx-boot/" 目錄下。
c. 小結
透過以上操作我們了解到如需達成「將 DDR 改為 Samsung 2 GB 」的這個目的,需要修改及重新編譯的地方包含了 "u-boot-imx"、"imx-boot" 等檔案,而後續章節將介紹如何驗證以上修改是否都有正確生效。
三. 驗證是否能開機
a. 燒錄 Bootloader
本篇範例是用 SD Card 開機。所以筆者請先將 SD 卡放進 PC 並且先把 Boot 與 Rootfs Partition unmount。
$ sudo umount /media/user/boot
$ sudo umount /media/user/root
最後透過 "dd" Command 來燒錄 Bootloader。( 這裡的 "dev/sdb" 指的是筆者的 SD Card 位置,這應該根據您電腦的路徑做相對應修改 )
$ sudo dd if=imx-boot-imx8mmevk-sd.bin-flash_evk of=/dev/sdb bs=1k seek=33
b. 開機驗證
把重新燒寫好的 SD Card 放入開發板內並開機之後,可於 U-boot Log 中夠看到 2 GiB 的字眼。
接著開進 Kernel 後,可從 Kernel Log 得知總記憶體大小為 2 GB ( 2060288 K ) 跟 U-boot 的 Log 相呼應。
那 Log 中的 1336092 K 怎麼來的? 可以帶入以下算式。
1336092 K = 總記憶體大小 - reserved - cma-reserved
= 2060288 K - 68836 K - 655360 K
當開進 Rootfs 後下 "free" Command 可以看到記憶體大小為 1994396 K。
那 1994396 K 怎麼來的? 可以帶入以下算式。
那 1994396 K 怎麼來的? 可以帶入以下算式。
1994396 K = used + free + buff/cache
= 202400 K + 1761444 K + 30552 K
此外我們可以透過 "free" 命令找到未使用的記憶體空間。由下圖可得知系統的可用空間還有 1.7 GB 左右。
$ free
最後可以透過 "memtester" 程式驗證記憶體讀寫是否正常。( 請讀者自行把 "memtester" 程式 Copy 到系統中 )
$ ./memtester 1700M
這裡的 1700M 是指要測試的記憶體大小;為了確保在做記憶體測試時系統能正常運作,輸入的數值不能超過 "free" 的大小,並且預留至少約 60MB 的空間給系統。
"memtester" 命令會不斷的對記憶體做壓力測試,下圖中的 Loop 那行指的就是測試次數它會不斷的累加。
四. 結語
本篇博文示範了如何在 i.MX8M Mini 平台上成功的使用 Samsung 2 GB 顆粒開機,主要是先將 DDR 的參數配置填入 RPA 文件,最後重新編譯軟體並且重新燒錄後就可以在 i.MX8M Mini 平台上正常開機了。本篇博文也透過壓力測試結果證明了替換 Samsung 2 GB 顆粒後在使用上沒有問題。未來讀者們若是有替換 DDR 顆粒的需求將可以直接套用本博文的方法,之後筆者也會持續撰寫 「如何在 i.MX8M Mini 平台上使用不同容量的 DDR 顆粒的文章」 再請拭目以待。若是讀者們在配置 DDR 參數或修改程式的過程中有遇到任何問題,也歡迎隨時與世平集團討論。
五. 參考文件
評論