ezio_worklog/YuYan's Uboot 簡易筆記

YuYan’s Uboot 簡易筆記

uboot command example

U-Boot# mii info
PHY 0x01: OUI = 0x80017, Model = 0x09, Rev = 0x00, 100baseT, FDX
PHY 0x03: OUI = 0x80017, Model = 0x09, Rev = 0x00,  10baseT, HDX

U-Boot# mii dump 1 0
0.     (3100)                 -- PHY control register --
  (8000:0000) 0.15    =     0    reset
  (4000:0000) 0.14    =     0    loopback
  (2040:2000) 0. 6,13 =   b01    speed selection = 100 Mbps
  (1000:1000) 0.12    =     1    A/N enable
  (0800:0000) 0.11    =     0    power-down
  (0400:0000) 0.10    =     0    isolate
  (0200:0000) 0. 9    =     0    restart A/N
  (0100:0100) 0. 8    =     1    duplex = full
  (0080:0000) 0. 7    =     0    collision test enable
  (003f:0000) 0. 5- 0 =     0    (reserved)


U-Boot# mii dump 1 1
1.     (786d)                 -- PHY status register --
  (8000:0000) 1.15    =     0    100BASE-T4 able
  (4000:4000) 1.14    =     1    100BASE-X  full duplex able
  (2000:2000) 1.13    =     1    100BASE-X  half duplex able
  (1000:1000) 1.12    =     1    10 Mbps    full duplex able
  (0800:0800) 1.11    =     1    10 Mbps    half duplex able
  (0400:0000) 1.10    =     0    100BASE-T2 full duplex able
  (0200:0000) 1. 9    =     0    100BASE-T2 half duplex able
  (0100:0000) 1. 8    =     0    extended status
  (0080:0000) 1. 7    =     0    (reserved)
  (0040:0040) 1. 6    =     1    MF preamble suppression
  (0020:0020) 1. 5    =     1    A/N complete
  (0010:0000) 1. 4    =     0    remote fault
  (0008:0008) 1. 3    =     1    A/N able
  (0004:0004) 1. 2    =     1    link status
  (0002:0000) 1. 1    =     0    jabber detect
  (0001:0001) 1. 0    =     1    extended capabilities


U-Boot# mii dump 1 3
3.     (5c90)                 -- PHY ID 2 register --
  (fc00:5c00) 3.15-10 =    23    OUI portion
  (03f0:0090) 3. 9- 4 =     9    manufacturer part number
  (000f:0000) 3. 3- 0 =     0    manufacturer rev. number

雜項

  • 8P8C,也稱RJ45,是乙太網路使用雙絞線連接時常用的一種連接器插頭。
  • 1 個 phy 配 1 個 RJ45,所以板子上有 2 個 RJ45,所以在 uboot 使用 mii info 要能夠找到 2 個 phy。
  • phy 上面會有自己所謂的 ID ,稱做 phy id ,會用於 MDIO/MDC 配對時用
  • QSGMII 是一種接線法,連接 4 個 phy,負責交換 data,最大 5G(4 個 phy 加起來)
  • SGMII 是一種接憲法 搭配 1 個 phy, 負責交換 data,最大 1.25G

XXXXX_driver.c
build .ko 檔


// 這是一個標準的phy範例格式
static struct phy_driver dp83640_driver = {
        .phy_id         = DP83640_PHY_ID,
        .phy_id_mask    = 0xfffffff0,
        .name           = "NatSemi DP83640",
        /* PHY_BASIC_FEATURES */
        .probe          = dp83640_probe,
        .remove         = dp83640_remove,
        .soft_reset     = dp83640_soft_reset,
        .config_init    = dp83640_config_init,
        .ack_interrupt  = dp83640_ack_interrupt,
        .config_intr    = dp83640_config_intr,
        .ts_info        = dp83640_ts_info,
        .hwtstamp       = dp83640_hwtstamp,
        .rxtstamp       = dp83640_rxtstamp,
        .txtstamp       = dp83640_txtstamp,
};

lua + C

  • Lua 是一種輕量語言,它的官方版本只包括一個精簡的核心和最基本的庫。這使得 Lua 體積小、啟動速度快。它用 ANSI C 語言編寫並以原始碼形式開放,編譯後僅僅一百餘 K,可以很方便的嵌入別的程式裡。和許多「大而全」的語言不一樣,網路通訊、圖形介面等都沒有預設提供。但是 Lua 可以很容易地被擴充:由宿主語言(通常是 C 或 C++)提供這些功能,Lua 可以使用它們,就像是本來就內建的功能一樣。事實上,現在已經有很多成熟的擴充模組可供選用。

標題Re: [問題] 請問有在用 Lua 的大大們...

C 與 Lua 會結合,就是因為沒有十全十美的程式語言
C 的優點是執行效率高,缺點是寫起來麻煩又不安全(undefined behavior)
Lua 跑起來雖然慢,但寫起來簡單,開發速度快

我們要截長補短,所以並沒有一定要讓誰呼叫誰比較好的規則,而是看需求:

* 程式規格固定、需要高效率、或是要呼叫底層函式的部份用 C 寫
* 規格時常變動,需要快速做出來驗證效果的,用 Lua 來寫
* 想要更高的彈性,因此設計 plug-in 系統,更適合用 Lua

比如說你想做個爬網頁的程式,那麼開 socket 的部份自然得用 C 寫
但是網頁抓下來後你可能想做各式各樣的動作,像是存圖片、掃瞄關鍵字等等
這部份用 Lua 寫就可以很靈活的變化,這種情況是 Lua 呼叫 C

又比如說許多遊戲引擎使用 C++ 來實作運算吃重的核心
但是會在特定位置呼叫外部的 Lua script
這麼一來就可以用 Lua 快速實做出不同玩法的遊戲
等到玩法確定後,再把需要效能改善的部份用 C++ 重寫
如果全部都用 C++ 開發,那麼開發時程是會大幅拉長的

另一個 Lua 的優勢是它的 runtime 很小,只依賴 standard c library
只要環境能跑 C 就可以把 Lua runtime 編起來跑
在 C 程式中包進一個 Lua interpreter 比起 python / ruby 是簡單許多的
而且正因為 Lua standard library 功能非常陽春
當你想要設計 plug-in 系統時,會比較容易去禁止 plug-in 做壞事
反正它真需要什麼底層功能,你再給它對應的 library 即可

沒有人規定給 C 呼叫的 function 一定要跑得和 C 一樣快
選擇適當的工具去滿足開發需求,這才是程式設計師的專業所在

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.243.240
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1484745230.A.918.html
推 Neisseria: 感謝大大說明,現在比較有概念了 01/18 21:34
推 CoNsTaR: 對C來講,或許包給Lua做事的部分可以在函式名稱上有區別 01/19 03:54
→ CoNsTaR: 沒有人規定給C呼叫的函式一定要和C一樣快 01/19 03:54
→ CoNsTaR: 但是當你的系統裡面存在越來越多這種和表面上看起來有一 01/19 03:54
→ CoNsTaR: 點點不一樣的東西 01/19 03:54
→ CoNsTaR: 我想累積下來一定也不是什麼好事吧~ 01/19 03:54
→ hichcock: 這篇寫的很棒ㄚ~ 01/19 09:02
→ hichcock: 重點在於 C + Lua 可以把效能 + 彈性的效果最大化 01/19 09:17
推 shadow0326: 推 01/19 10:51
推 eye5002003: 補個優點,lua語法簡單,有機會開放讓非程式人員修改 01/22 22:46
→ alex70266: 重點是彈性阿,C call lua script 包 C module很常用

  目錄