當前位置:首頁 » 編程軟體 » vxworks腳本

vxworks腳本

發布時間: 2023-06-11 07:40:37

㈠ 如何調bcm 晶元sdk初始化

SDK初始化前,需要對SDK的架構有所了解,具體如下圖;可以看出SDK的代碼結構是一個層次化分明的架構,這里對各層的作用和詳細工作機制不闡述了,具體可以參見SDK的介紹文檔。

SDK代碼的結構圖

SDK根據上述架構,BCM模式啟動的時候進行的初始化包括以下幾個步驟:

1. 根據操作系統(linux、vxworks或unix等)不同調用sal_core_init()和sal_appl_init()兩個函數的對應版本,分別對Core SAL和Appl SAL兩部分進行初始化;linux系統下的sal_core_init()函數的主要工作時調用了函數sal_dpc_init()創建DPC(Deferred Procere Call)的信號量和線程;sal_appl_init()函數的linux版本則直接返回,沒有做任何工作;這兩個函數雖然意義很大,但是值得我們研究的內容不多。

2. 然後調用sal_thread_create創建一個運行BCM模式的線程,並調用diag_shell()函數完成對BCM模式的數據進行初始化、命令行進行注冊、設備探測和掛載、晶元初始化、客戶命令注冊、重啟動和BCM模式退出等操作,主要通過調用diag_init()函數、sysconf_init()函數、diag_rc_set()函數、sysconf_probe()函數、sysconf_attach()函數、bcm_init()函數、custom_cmd()和sal_reboot()等函數實現,下面詳細介紹下該函數的執行流程;

a. diag_init()調用cmdlist_init()函數、init_symtab()函數、sal_srand()函數、gvar_init()函數和sh_bg_init()函數等來完成命令行注冊、晶元的寄存器和表項軟體數據內存分配、隨機數種子獲取、全局變數初始化和所有設備可執行任務的內存分配(最多10條)和記錄等工作;

b. sysconf_init()函數除了初始化管理介面的調式函數外還調用soc_cm_init()函數來完成SOC的配置的管理介面的初始化;

c. sysconf_probe()函數調用bde_create()函數和sysconf_chip_override()函數完成探測已經掛載的設備並建立對應的配置管理項,包括為每個設備的分配id等工作;

d. 然後對每個unit調用sysconf_attach()函數來對soc_cm_device_init ()初始的管理介面的設備掛載一些中斷處理函數,注冊PCI讀寫函數等,用管理介面的結構體的指針函數成員形式保存,以便可以刪除和添加這些處理函數,並調用soc_cm_device_init()函數通過在裡面再調用soc_attach()函數來對每一個unit建立並初始化晶元的soc_control_t structure信息及對其訪問的互斥體;soc_attach()函數調用soc_feature_init函數、soc_intr_disable()函、soc_cmic_uc_msg_start函數、soc_info_config()函數(這個函數下面會繼續調用)、soc_dcb_unit_init()函數和soc_counter_verify()函數分別進行支持特性賦值、關閉中斷、開啟對設備的CMIC的UC信息、soc信息初始化、CPU收發包緩存DCB初始化和各種counter寄存器軟體記錄特定初始化,並對SOC_CONTROL(unit)和SOC_PERSIST(unit)兩個保存晶元設備信息的結構體一些成員進行賦值;

e. 調用diag_rc_set()函數來設置對每個晶元初始化配置的腳本文件名稱和熱啟動的初始化配置腳本名稱,如果沒有指定全部用默認的配置;然後解析腳本中的配置項,運用腳本進行配置初始化(包括MMU的配置);

f. 然後對每個晶元調用bcm_init()函數開始晶元的初始化工作,其首先調用bcm_attach()函數對BCM_CONTROL(unit)信息的部分成員進行賦值,包括設備類型、設備名稱和unit號等;然後調用_bcm_api_xlate_port_init()函數建立lport和bcm port的映射關系;並調用晶元各功能模塊的初始化函數(trident是bcm_esw_init ()函數)來對各模塊進行初始化;

g. 然後調用custom_cmd()函數載入BCM模式下用戶配置的命令載入進去;

h. 這樣整個SDK就初始化完畢,BCM模式就會提示BCM>等來等待用戶輸入命令;然後進入一個死循環一直調用sh_process()函數解析用戶配置的命令,然後調用對應的SDK介面下發到驅動;

i. 如果用戶輸入退出命令,會調用sh_exit函數來處理,包括可選的是否回收已經分配的資源等任務;

j. 如果用戶輸入重啟的命令則調用sal_reboot()函數linux版本是通過exit(0)實現。

另外,SDK為上層的初始化提供了調用介面system_init()函數對BCM交換晶元進行初始化,這部分是咱們應該重點關注的部分,當然該介面在BCM模式下用init命令也是可以被調用到的。下面詳細講解下:

a. 首先調用soc_reset_init()函數,ESW晶元里這個函數調用soc_do_init()函數來完事情;soc_do_init()函數會根據是否是重啟動設備進行的配置不一樣;

(1) 如果是熱啟動的設備則先調用soc_dma_abort()關閉所有DMA並調用soc_linkscan_config()函數設置CMIC(CPU Management InterfaceController)查詢埠link狀態,如果設置項為空則表示關閉埠link狀態掃描;然後如果是初始化soc有失敗標記的話調用soc_dma_abort()函數、soc_counter_stop()函數、soc_mem_scan_stop函數、soc_i2c_detach()函數和soc_l2x_stop()函數(有些其他晶元還調用soc_cmic_uc_msg_stop函數等)分別禁止所有的中斷、禁止計數行為、禁止內存掃描動作、釋放I2C
驅動內存、結束L2X(應該是用於mac地址學習和老化對CPU進行中斷通知)相關線程和停止等;然後調用soc_info_config()函數來初始化晶元埠的各種信息,包括晶元型號、各種類型埠的點陣圖、晶元稱號、mod數目、埠數目、hg口的位置、堆疊口位置、CPU口隊列數目、用於時間同步埠數目、埠最大支持速率、meter pools、入埠QOS支持的隊列數目等信息,另外對trident晶元支持QOS三級調度,所以還會調用soc_trident_num_cosq_init()對各個埠支持的隊列數做特殊初始化,最後調用soc_esw_dport_init()函數對User
to physical port map的映射及對user port的逆映射;總之soc_reset_init()函數偏重於對晶元信息、埠屬性和QOS隊列屬性等初始化;然後調用soc_feature_init()函數和soc_dcb_unit_init()函數完成晶元特性支持添加和CPU收發包緩存DCB的初始化工作;然後調用soc_dma_attach()函數和soc_dma_init()函數對中斷進行重新初始化,然後對通過PCI設置CMIC_CONFIG使能高級的DMA模式,包括Scatter/gather,
reload, annaligned transfers(這里具體含義不太明白),然後開啟一些中斷;然後是對MAC_CTRL寄存器讀寫配置一些MAC層的收發使能;然後是設置MAC表項、MPLS表項、vlan和egress vlan、 L3表項的一些hash沖突的級別,接著使能MAC地址學習和老化通知、 重新獲取L3轉發表項的長度和表項大小信息即可完成整個熱啟動的過程;

(2) 在不是熱啟動的情況下,會首先調用調用soc_info_config()函數、soc_feature_init()函數和soc_dcb_unit_init()函數來完成信么MMU、晶元特性支持和DCB初始化工作;然後調用soc_endian_config() 函數和soc_pci_burst_enable()函數來完成硬體大小端和支持PCI讀寫突發情形的使能;然後是調用soc_reset()函數來完成對晶元的一些配置,包括埠的phy配置和mac配置(比如寄存器有XLPORT_XMAC_CONTROL),及還會調用相應晶元的soc_reset_bcm56840_a0()函數完成對CPU口和出入方向屬性的一些配置,如CMIC_XGXS1_PLL_CONTROL_*、CMIC_MISC_CONTROL、CMIC_SOFT_RESET_REG、ING_CONFIG_2、EGR_CONFIG_2、ING_Q_BEGIN和EGR_Q_BEGIN等寄存器;然後和熱啟動一樣,通過PCI設置CMIC_CONFIG使能高級的DMA模式,對MAC_CTRL寄存器讀寫配置一些MAC層的收發使能就退出了soc_do_init()函數;

b. 然後調用soc_misc_init()函數對晶元的初始化信息進行核實判斷,最終根據函數指針調用晶元相應的函數,trident調用的則是_soc_trident_misc_init()函數;_soc_trident_misc_init()函數首先_soc_trident_ser_init()函數對IFP、EFP、VFP和UDF等tcam表項的表項大小、起始地址等信息進行軟體獲取並記錄,然後調用_soc_trident_clear_all_memory函數對CPU_COS_MAP_ONLY、FP_GLOBAL_MASK_TCAM、FP_GM_FIELDS、FP_TCAM、FP_UDF_TCAM、L2_USER_ENTRY_ONLY、L3_DEFIP_128_ONLY、L3_DEFIP_ONLY、L3_TUNNEL、MY_STATION_TCAM_ENTRY_ONLY、VFP_TCAM、VLAN_SUBNET_ONLY、EFP_TCAM、FP_GLOBAL_MASK_TCAM_Xm、FP_GLOBAL_MASK_TCAM_Ym、L3_ECMP_XM、L3_ECMP_YM、EGR_IPMC_CFG2、EGR_VLAN_CONTROL_1、_XLPORT_MIB_RESET等表項進行清空;然後_soc_trident_misc_init()函數繼續對CPU_PBM、CPU_PBM_2m、ISBS_PORT_TO_PIPE_MAPPINGm、EGR_ING_PORTm、XLPORT_CONFIGr、XLPORT_MODE_REG、IARB_MAIN_TDMm、EGR_PERQ_XMT_COUNTERS_BASE_ADDR、MISCCONFIG、ING_BYPASS_CTRL、EGR_BYPASS_CTRL、EGR_ENABLE、EPC_LINK_BMAP、ING_CONFIG_64、EGR_CONFIG_1、EGR_VLAN_CONTROL_1、ING_EN_EFILTER_BITMAP、SW2_FP_DST_ACTION_CONTROL、RTAG7_FLOW_BASED_HASH、RTAG7_HASH_ECMP、CMIC_I2C_STAT、CMIC_RATE_ADJUST_I2C、CMIC_RATE_ADJUST_INT_MDIO等寄存器或表項進行初始化賦值操作,並調用_trident_lep_init對埠進行點燈操作,還調用_soc_trident_fcoe_config_init對晶元的FCOE功能進行初始化;

c. 然後調用soc_mmu_init()函數對MMU進行初始化,和soc_misc_init()函數一樣,也是根據不同的晶元掛載不同的函數指針,這里會調用_soc_trident_mmu_init()函數對trident晶元的MMU進行初始化;包括GH、PG、SSP、SP、Port Min、PORT_MAX_SHARED_CELL、Queue Min等的劃分,MMU port到phy port的映,及MCQ_CONFIG、OP_THR_CONFIG、OP_VOQ_PORT_CONFIG、OVQ_DROP_THRESHOLD0、OVQ_DROP_THRESHOLD_RESET_LIMIT、OVQ_FLOWCONTROL_THRESHOLD、OVQ_MCQ_CREDITS、MCQ_FIFO_BASE_REG、PORT_PAUSE_ENABLE0_64、INPUT_PORT_RX_ENABLE0_64、S3_CONFIG、S2_CONFIG、S2_S3_ROUTING等voq和Qos相關功能的MMU相關寄存器初始化;

d. 然後調用soc_l2x_start函數開啟對MAC地址學習和老化的信息通知功能,主要是創建一個線程;

e. 然後調用bcm_init()函數對晶元進一步初始化,實際對trident晶元調用的是bcm_esw_init()函數,該函數再調用_bcm_esw_init()函數,該函數主要的是分別調用bcm_esw_linkscan_enable_set()函數、_bcm_moles_init()函數和bcm_esw_rcpu_init()函數,來實現關閉埠狀態掃描、初始化晶元各個模塊、初始化RCPU機制的主控模塊:然後_bcm_esw_init()函數調用_bcm_esw_switch_init()函數來實現對CPU隊列的初始化和對晶元的一些特殊控制信息,主要是通過調用bcm_esw_switch_rcpu_encap_priority_map_set()函數和bcm_esw_switch_control_set()函數來設置的。其中的_bcm_moles_init()函數調用晶元轉發流程的各個模塊的初始化函數,具體如下圖:

此處內容較多但是非常重要,希望感興趣的同學能查看對應代碼實際學習下相關內容,只提一點,bcm_esw_l2_init函數會調用_bcm_l2_bp_init函數對l2_user_etry表項設置BPDU報文上CPU的規則;

f. 然後對unit的每個埠調用bcm_port_stp_set()函數、bcm_port_autoneg_set()函數和bcm_stat_clear()函數分別設置埠的STP的狀態為轉發、是否自動協商和清楚埠統計;

g. 然後調用bcm_linkscan_enable_set函數來定期查詢埠的link狀態;

h. 部分晶元還會調用bcm_linkscan_register注冊trunk口的link狀態查詢回調函數;

㈡ labview 主要用來干嗎的啊

石鑫華視覺網-軟體工程方法在LabVIEW中的應用.pdf,免費下載

鏈接:https://pan..com/s/1Vwck1GcdbjuI8zEhGly77g

提取碼:fwy1

本書介紹的技術非常易於理解。如果學會,那麼我們認為每個人都能夠成功運用其中之一二。我們的目的是通過易於理解和可應用的方式向大家介紹和解釋使用LabVIEW進行軟體設計的概念。許多技術和方法學都拘泥於計算機科學理論,從而忘記了設計的初衷,我們卻一直關注設計並希望能夠說明某些計算機科學理論。

㈢ jcp asp bsp什麼意思

1、JCP(Java Community Process) 是一個開放的國際組織,主要由Java開發者以及被授權者組成,職能是發展和更新。
2、ASP是動態伺服器頁面(Active Server Page)的英文縮寫。[1] 是微慶雹軟公司開發的代替CGI腳本程序的一種應用,它可以與資料庫和其它程序進行交互,是一種簡單、方便的編程工具。ASP的網頁文喚返件的格式是 .asp。現在常用於各種動態網站中。
3、板級支持包(BSP)是介於主板硬體和操作系統中驅動層程序之間的一層,一般認為它屬於操作系統一部分,主要是實現對操作系統的支持,為上層的驅動程序提供訪問硬體設備寄存器的函數包,使之能夠更好的運和差飢行於硬體主板。

㈣ 嵌入式開發如何入門

嵌入式開發主要有兩種,像STM32、飛思卡爾等系列單片機屬於無操作系統的,直接對寄存器或者利用庫函數操作的,這種學習來難度相對小一些,就業前景也不錯。

還有一些像ARM9,或者CortexA8、A9系列的可以運行Linux或者安卓操作系統的嵌入式軟體系統開發,由於需要學習的內容較多,學習時間較長,那麼學習起來就有一定的難度,工資也相對高一些。

課程內容主要包括:

①C,Java核心編程:c語言核心編程,Java核心編程;

②Linux核心操作與演算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;

③核心操作與演算法:Linux系統編程,Linux網路編程核心技術,UI編程,Java核心編程,安卓核心技術;

④ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;

⑤大型項目實踐:每期安排各類型真實的項目,詳細可以找我要資料。

互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。

想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。

祝你學有所成,望採納。

熱點內容
h板電影種子ftp 發布:2025-02-11 09:06:10 瀏覽:738
c語言數據類型定義 發布:2025-02-11 09:00:38 瀏覽:237
一個小時如何選擇伺服器 發布:2025-02-11 08:58:14 瀏覽:442
網易我的世界伺服器推薦國服 發布:2025-02-11 08:56:34 瀏覽:241
電視父母鎖屏密碼應該會是什麼 發布:2025-02-11 08:36:42 瀏覽:892
梅花適合用哪些植物進行配置 發布:2025-02-11 08:30:54 瀏覽:252
安卓手機如何像蘋果一樣彈窗 發布:2025-02-11 08:26:33 瀏覽:912
壓縮文件掃碼 發布:2025-02-11 08:20:55 瀏覽:258
小米5安卓70怎麼分屏 發布:2025-02-11 08:00:58 瀏覽:140
訪問二維碼 發布:2025-02-11 08:00:11 瀏覽:883