在 spl 和 u-boot中 使用保留內存

平臺:TI am5728
u-boot:201801

項目需要在spl中顯示logo,其中就需要分配framebuffer,如果framebuffer較小,一般可以直接用芯片的OCMC_RAM做framebuffer,我的芯片上的OCMC_RAM2OCMC_RAM3 的2M內存足夠顯示較小的圖片。

當然,2M往往是不夠的用的(比如使用bmp格式的image),這時候就需要在DDR中分配framebuffer了,下面分配一個10MB的framebuffer爲例:

在u-boot的board_init_f 中會調用 setup_dest_addr函數 設置重定位地址
setup_dest_addr
common/board_f.c中:

gd->ram_size最終會保存到內核設備樹的memory節點中,修改gd->ram_size會改變內核使用的的DDR大小!
關於內存的初始化可以看這裏:linux kernel內存初始化過程

因爲logo在內核階段也要顯示,所以這裏直接在gd->ram_size上修改。修改的時候如果CONFIG_SYS_MEM_TOP_HIDE沒有用,直接定義這個宏在DDR頂端保留一段內存(當然也可以自己定義一個宏):

由於logo是在spl中開始顯示的,所以在spl中也需要設置,在spl的board_init_r函數中調用reserve_mmu函數,
reserve_mmucommon/spl/spl.c中:

加上setup_dest_addr中使用的CONFIG_SYS_MEM_TOP_HIDE即可。

在內核中如果要操作spl/uboot 中使用的framebuffer,需要在u-boot的 board_init_f => dram_init_banksize中加一個dram的bank:

並在設備樹中分配把這段內存分配爲保留內存即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章