繼上篇文章uboot分析之loopback介面,我們接著看下關於uboot下usb初始化方面的知識,經過這幾天對zturn開發板uboot的分析,結合網上查閱的資料,大概弄懂了其基本流程,其在uboot階段
主要是加入usb host端驅動和相應裝置端驅動來支援儲存裝置,這樣就 可以將kernel以及檔案系統存放在u盤上,來通過u盤來啟動。
具體來說,做了下列一些操作:
在drivers/usb/host/makefile一行
cobjs-$(config_usb_ehci_fsl) += ehci-fsl.o
即加入與zturn usb host端控制器的驅動drivers/usb/host/ehci-fsl.c。這個驅動檔案的主要工作就是建立乙個對應zturn usb host端控制器的資料結構,設定為host模式和少數一些特性,初始化phy,最後使能該控制器。因此所做的工作非常簡單。
跟其它介面一樣,在u-boot中,usb的支援也是通過放在相應板子上的幾個巨集定義來實現,在include/usb.h定義:
/* everything is aribtrary */
#define usb_altsettingalloc4
#define usb_maxaltsetting128/* hard limit */
#define usb_max_device32
#define usb_maxconfig8
#define usb_maxinte***ces8
#define usb_maxendpoints16
#define usb_maxchildren8/* this is arbitrary */
#define usb_max_hub16
#define usb_cntl_timeout 100 /* 100ms timeout */
具體來說,做了下列一些操作:
在drivers/usb/host/makefile一行
cobjs-$(config_usb_ehci_fsl) += ehci-fsl.o
即加入與zturn usb host端控制器的驅動drivers/usb/host/ehci-fsl.c。這個驅動檔案的主要工作就是建立乙個對應zturn usb host端控制器的資料結構,設定為host模式和少數一些特性,初始化phy,最後使能該控制器。因此所做的工作非常簡單。
usb初始化的呼叫過程:
1. 在u-boot命令列中發
=> usb start
2. usb命令解析器判定(common/cmd_usb.c)是start命令,會呼叫usb_init()函式(common/usb.c)
3. usb_init()會呼叫底層初始化函式usb_lowlevel_init()(drivers/usb/host/ehci-hcd.c)
4. 在usb_lowlevel_init()函式裡,最後會呼叫到具體的host控制器的初始化函式ehci_hcd_init(),這個函式就是放置在對應各種host控制器的初始化檔案的函式。對於zynq處理器中的host控制器,該檔案是drivers/usb/host/ehci-fsl.c。
因此整個呼叫流程為:
usb start命令 ---> usb_init() ---> usb_lowlevel_init() ---> ehci_hcd_init()
uboot分析 uboot啟動核心
u boot啟動核心概述 u boot啟動完成後,最終進入到main loop 迴圈中。若在bootdelay倒計時為0之前,u boot控制台有輸入,則進入命令解析 執行的迴圈 若控制台無輸入,u boot將啟動核心。u boot啟動核心可歸結為以下四個步驟 1 將核心搬移至ddr中 2 校驗核心...
u boot啟動之Makefile結構分析
先進行配置命令 make smdk2410 config在makefile檔案中 smdk2410 config unconfig mkconfig config arm arm920t smdk2410 null s3c24x0因此mkconfig檔案中會傳入如下引數 parameters tar...
Uboot啟動流程分析
uboot是嵌入式系統中最常用的bootloader,這裡我們以s3c2410為例分析一下uboot的啟動流程。首先通過uboot的鏈結檔案,我們可以看到uboot執行是執行的第一段 在start.s中。entry start sections align 4 rodata align 4 data...