0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Rockchip rk3588 U-Boot詳解 (二)

jf_30051736 ? 來源:jf_30051736 ? 作者:jf_30051736 ? 2023-06-13 10:49 ? 次閱讀

Rockchip rk3588 U-Boot詳解 (二)

1.1 DM

DM (Driver Model) 是 U-Boot 標準的 device-driver 開發(fā)模型,跟 kernel 的 device-driver 模型?常類似。

v2017版本也遵循 DM 框架開發(fā)各功能模塊。建議讀者先閱讀DM?檔,了解DM架構原理和實現(xiàn)。

README:

/doc/driver-model/README.txt

Terminology
-----------
Uclass - a group of devices which operate in the same way. A uclass provides
a way of accessing individual devices within the group, but always
using the same interface. For example a GPIO uclass provides
operations for get/set value. An I2C uclass may have 10 I2C ports,
4 with one driver, and 6 with another.
Driver - some code which talks to a peripheral and presents a higher-level
interface to it.
Device - an instance of a driver, tied to a particular port or peripheral.

簡要概括:

  • uclass: 設備驅動模型
  • driver:驅動
  • device:設備

核心代碼:

./driver/core

1.2 Security

U-Boot在ARM TrustZone的安全體系中屬于Non-Secure World, 無法直接訪問任何安全的資源(如:安全memory、安全otp、efuse...),需要借助trust間接訪問。RK平臺上U-boot的CPU運行模式:

32位平臺:Non-Secure PL2
64位平臺:EL2(Always be Non-Secure)

1.3 Boot-order

RK平臺根據前級Loader代碼是否開源,目前有兩套啟動方式:

// 前級loader鼻淵
BOOTROM = > ddr bin = > Miniloader = > TRUST = > U-Boot = > KERNEL
// 前級loader開源
BOOTROM = > TPL(Tiny Program Loader) = > SPL(Secondary Program Loader) = > TRUST = > U-Boot = > KERNEL

TPL相當于ddr bin,SPL相當于miniloader。TPL + SPL 的組合實現(xiàn)了跟RK閉源ddr.bin+miniloader一致的功能,可相互替換。

1.4 Driver-probe

U-boot雖然引入了device-device開發(fā)模型,但初始化階段不會像kernel那樣自動發(fā)起已注冊device-driver的probe。driver的probe必須由用戶主動調用發(fā)起。接口如下

int uclass_get_device(enum uclass_id id, int index, struct udevice **devp);
int uclass_get_device_by_name(enum uclass_id id, const char *name,
struct udevice **devp);
int uclass_get_device_by_seq(enum uclass_id id, int seq, struct udevice **devp);
int uclass_get_device_by_of_offset(enum uclass_id id, int node, struct udevice
**devp);
int uclass_get_device_by_ofnode(enum uclass_id id, ofnode node, struct udevice
**devp);
int uclass_get_device_by_phandle_id(enum uclass_id id,
int phandle_id, struct udevice **devp);
int uclass_get_device_by_phandle(enum uclass_id id,
struct udevice *parent, struct udevice **devp);
int uclass_get_device_by_driver(enum uclass_id id,
const struct driver *drv, struct udevice **devp);
int uclass_get_device_tail(struct udevice *dev, int ret, struct udevice **devp);
......

上述接口的核心調用

1.5 Shell

U-Boot的Shell叫CLI(cmdline line interface),即命令行模式,用戶可以根據自己需求自定義CMD,CMD除了通過Shell調用,還能通過run_command()和run_command_list()以代碼的形式調用

int run_command(const char *cmd, int flag)
int run_command_list(const char *cmd, int len, int flag)

1.6 Boot-Command

U-Boot最終通過CONFIG_BOOTCOMMAND定義的啟動命令引導kernel。在執(zhí)行CONFIG_BOOTCMD之前還會執(zhí)行CONFIG_PREBOOT預啟動命令,通常這個命令定義為空

1.7 TPL/SPL/U-Boot-proper

U-Boot通過使用不同的編譯條件可以用同一套代碼獲取三種不同功能的Loader:TPL/SPL/U-Boot-proper

  • TPL: 運行在sram中,負責完成ddr初始化;
  • SPL:運行在ddr中,負責完成系統(tǒng)的lowlevel初始化,后級固件加載(trust.img和uboot.img)
  • U-Boot proper: 運行在ddr中,即我們通常所說的 U-Boot,它負責引導kernel;

啟動流程:

BOOTROM => TPL(ddr bin) => SPL(miniloader) => TRUST => U-BOOT => KERNEL

1.8 Build-Output

U-Boot編譯成功后會在根目錄下生成一些重要文件(支持TPL/SPL編譯時才有TPL/SPL的生成文件)

// U-Boot階段
./u-boot.map //MAP表文件
./u-boot.sym //SYMBOL表文件
./u-boot //ELF文件,類同內核的vmlinux(重要?。?span>

// SPL階段
./spl/u-boot-spl.map //MAP表文件
./spl/u-boot-spl.sym //SYMBOL表文件
./spl/u-boot-spl // ELF文件,類同內核的vmlinux(重要)
./spl/u-boot-spl.dtb //spl自己的dtb文件
./spl/u-boot-spl.bin //可執(zhí)行二進制文件,會被打包成loader用于燒寫

// TPL階段
./tpl/u-boot-tpl.map // MAP表文件
./tpl/u-boot-tpl.sym // SYMBOL表文件
./tpl/u-boot-tpl //ELF文件,類同內核的vmlinux(重要?。?span>
./tpl/u-boot-tpl.dtb //tpl自己的dtb文件
./tpl/u-boot-tpl.bin // 可執(zhí)行二進制文件,會被打包成loader用于燒寫

1.9 Environment-Variables

ENV(Environment-Variables)是U-Boot支持的一種全局數(shù)據管理和傳遞方式,原理是構建一張HASH映射表,把用戶的數(shù)據以“鍵值-數(shù)據”作為表項進行管理。

EVN通常用于定義平臺配置參數(shù):固件加載地址,網絡配置(ipaddr、serverip)、bootcmd、bootargs等,用戶可以在命令行下使用printenv命令打印出來

  • ??可選擇是否把ENV數(shù)據保存到本地存儲上
  • ENV數(shù)據僅限于U-Boot使?,?法直接傳遞給內核、內核也?法直接解析
  • ??層可以通過U-Boot提供的fw_printenv?具訪問ENV數(shù)據

RK 平臺上 ENV 數(shù)據的存儲地址和?小定義如下(單位:字節(jié)):

if ARCH_ROCKCHIP
config ENV_OFFSET
hex
depends on !ENV_IS_IN_UBI
depends on !ENV_IS_NOWHERE
default 0x3f8000
help
Offset from the start of the device (or partition)
config ENV_SIZE
hex
default 0x8000
help
Size of the environment storage area
endif

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Rockchip
    +關注

    關注

    0

    文章

    72

    瀏覽量

    18516
  • RK3588
    +關注

    關注

    6

    文章

    303

    瀏覽量

    4148
收藏 人收藏

    評論

    相關推薦

    瑞芯微RK3588開發(fā)板RK3588 EVB和RK3588S EVB解讀

    瑞芯微RK3588開發(fā)板RK3588 EVB和RK3588S EVB解讀 瑞芯微旗艦芯RK3588系列開發(fā)板受到廣大開發(fā)者伙伴的關注和問詢。針對相關的開發(fā)板功能、操作指南等問題,我們一
    的頭像 發(fā)表于 09-22 15:54 ?1.7w次閱讀
    瑞芯微<b class='flag-5'>RK3588</b>開發(fā)板<b class='flag-5'>RK3588</b> EVB和<b class='flag-5'>RK3588</b>S EVB解讀

    Rockchip rk3588 U-Boot詳解(一)

    ,很慶幸,有很多現(xiàn)成的 bootloader 軟件可以使用,比如 U-Boot、vivi、RedBoot 等等,其中以 U-Boot 使用最為廣泛。
    的頭像 發(fā)表于 06-13 09:08 ?3791次閱讀
    <b class='flag-5'>Rockchip</b> <b class='flag-5'>rk3588</b> <b class='flag-5'>U-Boot</b><b class='flag-5'>詳解</b>(一)

    有什么方法可以去修改RK3588默認的串口波特率嗎

    通過以下代碼進行修改:uboot下的相關設置:u-boot/configs/rk3588_defconfigCONFIG_BAUDRATE=1500000kernel下dts的相關設置
    發(fā)表于 09-09 17:49

    通過以下代碼修改RK3588的默認串口波特率

    通過以下代碼進行修改:uboot下的相關設置:u-boot/configs/rk3588_defconfigCONFIG_BAUDRATE=1500000kernel下dts的相關設置
    發(fā)表于 09-20 16:58

    如何在rk3588j上使用uboot命令行測試pwm驅動呢?

    我想在rk3588j上使用uboot命令行測試pwm驅動,在u-boot/cmd/下添加了pwm.c,然后在rk3588_defconfig中添加CONFIG_CMD_PWM=y,在u-boo
    發(fā)表于 01-31 17:28

    Banana Pi BPI-W3 RK3588開發(fā)板基本使用文檔

    auto_run_script.service 以及它的腳本。 一、SDK 開發(fā) 本節(jié)向用戶介紹如何對 RK3588 Linux SDK 進行開發(fā),包括 u-boot 開發(fā)、Linux 內核開發(fā)、buildroot 根文件系統(tǒng)
    發(fā)表于 11-02 12:33

    fireflyFace-RK3399主板U-Boot模式啟動

    RK U-Boot 基于開源的 U-Boot 進行開發(fā),工作模式有啟動加載模式和下載模式。
    的頭像 發(fā)表于 12-04 08:52 ?4466次閱讀
    fireflyFace-<b class='flag-5'>RK</b>3399主板<b class='flag-5'>U-Boot</b>模式啟動

    【LGA封裝RK3588核心板】基于RK3588,小而強大的ArmSom-W3 CORE BOARD

    Armsom-RK3588 LGA Core board 是一款基于Rockchip RK3588芯片平臺,采用LGA(506pin)封裝設計的一款極小尺寸的RK3588核心板。
    的頭像 發(fā)表于 07-03 16:08 ?1812次閱讀
    【LGA封裝<b class='flag-5'>RK3588</b>核心板】基于<b class='flag-5'>RK3588</b>,小而強大的ArmSom-W3 CORE BOARD

    rk3588rk3588s的區(qū)別

    rk3588rk3588s的區(qū)別 Rockchip是一家專業(yè)的半導體公司,成立于2001年,總部位于中國深圳,主要從事集成電路的設計、開發(fā)和銷售。他們的熱門產品RK3588
    的頭像 發(fā)表于 08-15 16:44 ?1.4w次閱讀

    rk3588rk3399的區(qū)別

    rk3588rk3399的區(qū)別 Rockchip是一家位于中國深圳的芯片設計公司,已經發(fā)布了一系列的處理器芯片。其中,Rockchip RK358
    的頭像 發(fā)表于 08-15 16:44 ?3320次閱讀

    RK3588RK3066哪個好?

    RK3588RK3066哪個好? Rockchip是一家中國的半導體公司,專注于提供高性能低成本的芯片解決方案。在Rockchip的產品線中,RK
    的頭像 發(fā)表于 08-15 16:44 ?1171次閱讀

    RK35883588s的區(qū)別

    RK35883588s的區(qū)別 Rockchip RK3588RK3588s是兩種功能強大且廣受歡迎的片上系統(tǒng)(SoC)解決方案,用于一系
    的頭像 發(fā)表于 08-15 17:03 ?2.3w次閱讀

    rk3588是什么類型的芯片?

    rk3588是什么類型的芯片? RK3588是一款高性能的處理器芯片,屬于Rockchip(瑞芯微電子)推出的第四代芯片產品。作為Rockchip旗下最頂級的處理器芯片,
    的頭像 發(fā)表于 08-15 17:04 ?6128次閱讀

    rk3588參數(shù)詳解 rk3588芯片參數(shù)

    rk3588參數(shù)詳解 rk3588芯片參數(shù) Rockchip官方已經推出了全新一代的高端芯片RK3588,作為旗艦芯片,其蘊含的高性能與先進
    的頭像 發(fā)表于 08-21 17:16 ?3.5w次閱讀

    rk3588是armv8嗎?rk3588硬件資料

    rk3588是armv8嗎?rk3588 硬件資料 RK3588是一款高性能處理器,是Rockchip公司推出的最新芯片。本文將詳細介紹RK3588
    的頭像 發(fā)表于 08-21 17:32 ?3373次閱讀