顯示具有 MAC 標籤的文章。 顯示所有文章
顯示具有 MAC 標籤的文章。 顯示所有文章

2021年12月29日 星期三

Applying Your Linux Skills to macOS: Terminal BASH and Common Commands

 This article is part two in a series about using Linux skills when working in a mac operating system. Check out the other articles in the series:

As you now know from my introductory article, macOS is a flavor of UNIX, similar to Linux. But unlike Linux, macOS does not support virtual terminals by default. Instead, you can use the Terminal app (/Applications/Utilities/Terminal) to obtain a command line terminal and BASH shell.

Alternatively, you can type >console as the username at the macOS login prompt (no password needed) to obtain a login prompt that allows you to log directly into a command line terminal and obtain a BASH shell.

After you obtain a BASH shell, you can run many of the same commands you’ve become accustomed to on Linux. It’s also important to note that the same syntax rules that you used on Linux apply to BASH on macOS:

  • All commands are case sensitive.
  • Regular options (-h) and POSIX options (--help) are listed for most commands.
  • The manual pages (man who) and the info pages (info who) list most command documentation. The help command displays BASH function help (help echo).
  • Commands may be chained using semicolons (date; who).
  • The Standard Output of one command may be sent to the Standard Input of another command using a pipe ( | ) symbol (ps aux | less).
  • The Standard Output and Standard Error of a command may be redirected to a file (ls –l /Users > usersfile 2> errorfile).
  • Single quotes protect all special shell characters, double quotes protect most shell characters (variables are one exception), backquotes perform command substitution (echo The date is `date`) and backslash protects the next character (echo You owe \$4.50).
  • The ~ metacharacter represents the user’s home directories.
  • Tab completes commands and file paths.
  • Ctrl+C cancels a command by sending a SIGINT kill signal to the foreground process.
  • Wildcard metacharacters may be used with commands, and regular expressions may be used within text utilities.
  • BASH control structures and functions may be used to create BASH shell scripts.

NOTE: If you wish to perform system administration as the root user, you must first enable the root user using the Directory Utility app (in /System/Library/CoreServices/Applications). Once you open this app, simply select Change Root Password from the Edit menu.

Common macOS Commands

Below are some common macOS commands, organized by general function. Bookmark this page so you can refer back to it often. Although most options to these commands are identical between Linux and macOS, be sure to view the manual page for commands that you will use in the future.

System Documentation Commands in macOS

  • man Displays/searches the manual page database
  • apropos Searches the manual page database by keyword
  • info Displays/searches the info page database
  • help Displays help on BASH functions

File Management Commands in macOS

  • pwd Displays the current directory
  • cd Changes the current directory
  • ls Lists files
  • file Displays file type
  • locate Finds files using a predefined database
  • which Searches the PATH variable for files
  • find Finds files on the filesystem based on certain criteria
  • cp Copies files and directories
  • mv Moves/renames files and directories
  • rm Removes files and directories
  • rmdir Removes empty directories
  • mkdir Creates empty directories
  • ln Creates hard links; the –s option is used to create symbolic links
  • chown Changes ownership for files and directories
  • chgrp Changes group ownership for files and directories
  • chmod Changes the permissions (mode) on files and directories
  • umask Changes the UMASK variable used to determine default permissions

Text Tools in macOS

  • cat Views (concatenates) the contents of text files to the terminal screen
  • more Views the contents of text files page by page
  • less Views the contents of text files page by page with advanced text features
  • head Displays the beginning of a text file
  • tail Displays the end of a text file
  • sort Sorts lines in text files
  • wc Counts the number of lines, words and characters in a text file
  • grep Searches text files for regular expressions
  • egrep Searches text files for regular expressions (including extended ones)
  • sed Edits text files using search-and-replace functions
  • awk Edits and formats text using predefined functions
  • ·vi (vim) The vi text editor (common to all UNIX systems)
  • emacs The GNU Emacs text editor
  • ·nano A small easy-to-use text editor based on the UNIX pico editor

Filesystem Administration in macOS

  • mount Mounts a filesystem to a mount point directory – alternatively, you can use the mount_filesystem commands (where filesystem is the name of an appropriate filesystem) – see man mount for details.
  • umount Unmounts a filesystem from a mount point directory
  • pdisk May be used to create Apple disk partitions
  • newfs_type Creates a new filesystem on a device (type = apfs, hfs, udf, exfat, msdos)
  • fuser Determines the users accessing a certain file, directory or terminal
  • df Displays disk free space by filesystem
  • du Displays disk free space by directory
  • quota Displays quotas for a certain user
  • edquota Edits user quotas
  • repquota Displays a report on quotas by user
  • quotacheck Updates quota limits on the filesystem

Disk quotas are configured differently in macOS. In Linux, you enable quotas using the appropriate option in /etc/fstab. However, /etc/fstab is not available in macOS. Instead, you must create two files in the root of the filesystem that you wish to enable quotas on (.quota.ops.user and .quota.ops.group).

Shutdown and System State in macOS

  • shutdown Shuts down or reboots the system at a specified time
  • halt Shuts down the system immediately
  • reboot Reboots the system immediately

Compression, Backup and Software in macOS

  • compress Compresses files using a Lempel-Ziv algorithm
  • gzip Compresses files using a standard Lempel-Ziv algorithm
  • bzip2 Compresses files using a block-sorting algorithm
  • tar Used to create small tar archives and tarballs
  • cpio Used to create full filesystem backups using a variety of options
  • make Manages software compiling using gcc and Makefile settings
  • gcc The GNU C compiler used to compile software

BASH Management in macOS

As in Linux, macOS stores its variables in environment files. The /etc/profile and /etc/bashrc files are used by default on the system. Each user can also create their own ~/.bash_profile and ~/.bashrc files. In addition, ~/.bash_logout may be used to perform tasks at shell exit. Here are more BASH management commands for macOS.

  • set Displays all variables in your shell
  • env Displays exported variables in your shell
  • alias Creates special alias variables
  • unalias Removes special alias variables
  • export Creates and exports variables
  • ulimit Sets BASH limits for users (e.g., maximum number of user processes)

Process Management in macOS

  • ps Displays system and user processes (supports BSD-style options only)
  • top Displays top processes and system statistics
  • kill Sends kill signals to processes by process identification number (PID)
  • killall Sends kill signals to processes by name
  • jobs Displays background processes
  • fg Moves a background process to the foreground
  • bg Moves a foreground process to the background
  • nice Changes the priority of a process as it is started
  • renice Changes the priority of a running process
  • at Schedules commands to run at a later time
  • atq Views at jobs
  • atrm Removes an at job
  • crontab Edits user cron tables (used to repetitively schedule commands)

User and Group Administration in macOS

User and group administration differs slightly in macOS from Linux. There are no useradd or userdel commands. Instead, you must use the System Preferences utility to create user accounts properly. User information is stored in a directory database under the /var/db directory. The /etc/shadow file does not exist and the /etc/passwd and /etc/group files exist only to provide information to apps.

  • whoami Displays the current user name
  • who am i Displays your username and computer information
  • groups Displays the current user’s group memberships
  • id Prints the User ID (UID) and Group IDs (GIDs) for the current user
  • chfn Changes the user description used by the finger command
  • finger Displays user description information
  • chsh Changes the shell for a user account
  • passwd Changes the password for the current user (the root user may change other user's passwords by specifying the username as an argument)
  • who Displays who is on the system
  • w Displays who is on the system and what they are doing

Common Unix Printing System (CUPS) Printing in macOS

  • lp Prints a file (lpr is supported for BSD compatibility)
  • lpstat Views print jobs and printer status (lpq and lpc are supported for BSD
  • compatibility)
  • cancel Removes a print job from the print queue (lprm is supported for BSD
  • compatibility)
  • cupsaccept Allows jobs to enter a print queue
  • cupsreject Prevents jobs from entering a print queue
  • cupsenable Allows jobs to be sent to the printer from the print queue
  • cupsdisable Prevents jobs from leaving the print queue

Network- and Security-Related Commands in macOS

Network devices have different names in macOS. The first ethernet adapter is called en0 (typically wired ethernet), and the second is called en1 (typically wireless ethernet). Ensure that you use System Preferences to change any network parameters, as they are not stored in text files as they are on Linux systems. For example, the /etc/resolv.conf file still exists in macOS and lists DNS servers configured in System Preferences, but it is not used by the system – it is merely there in case an app queries it. The only network-related file that is used actively and may be edited is /etc/hosts (for local host name resolution). Here are more network- and security-related commands in macOS.

  • ifconfig Displays and configures TCP/IP network interfaces
  • ping Tests connectivity between hosts
  • whois Queries domain name registration information
  • arp Views and manages the address resolution protocol (ARP) cache
  • netstat Views TCP/IP network statistics and the routing table
  • route Manages the TCP/IP routing table
  • traceroute Traces an IP packet across routers
  • hostname Sets the system host name
  • host Resolves host names to IP addresses and vice versa
  • nslookup Resolves host names to IP addresses and vice versa
  • dig Resolves host names to IP addresses and vice versa
  • su Switches your user account to another account
  • sudo Performs tasks as another user via entries in the /etc/sudoers file
  • last Displays a detailed list of previous user logins
  • tcpdump Captures packets on a network interface

System and Miscellaneous Commands in macOS

  • date Displays the current date and time
  • exit Exits out of the shell (logout)
  • echo argument Displays the argument to the terminal screen
  • clear Clears the screen
  • uname option Displays system information specified by the option–a specifies all information
  • uptime Lists system statistics and uptime
  • cal Lists the calendar for the current month
  • banner Prints an ASCII banner
  • iostat Displays input/output (I/O) statistics for the system

Now you’ve got the macOS basics down, and you know the common commands. In the next installment, I’ll be discussing apps. Stay tuned!

Round out your IT skillset with CompTIA Linux+.

資料來源:https://www.comptia.org/blog/applying-your-linux-skills-to-macos-terminal-bash-and-common-commands

2021年5月12日 星期三

在沒有Mac的情況下為iOS開發Flutter應用

每當我們在Windows機器上的Flutter上開發應用程序時,我們總是想知道,“如果在iPhone上運行該應用程序,它將看起來如何?”。正如我們大多數人都知道的那樣,要為iOS開發應用程序,我們需要Mac,一些像我這樣的跨平台移動應用程序開發人員買不起Mac。那麼在這種情況下我們該怎麼辦?好吧,我有一個解決方案給您。本文將幫助您在沒有Mac的情況下為iOS運行Flutter應用!!!


是的!的確是。只需按照以下步驟。

步驟1:首先訪問Flutlab.io,您將看到類似於此的界面

Flutlab用戶界面

步驟2:在Flutlab.io上創建您的帳戶,然後使用您的帳戶登錄,以便您可以上載項目。

Flutlab登錄

第3步:轉到您的個人資料,然後單擊導航欄上的Upload Zip按鈕以上傳您的項目。確保給您的項目起一個合適的名字。(*注意:請確保將您的項目文件夾壓縮為zip格式,以上傳文件)

上載郵遞區號

第4步:上傳後,選擇您的項目,然後將看到文本編輯器,您可以在其中進行一些最終更改,這是可選的。

步驟5:現在,單擊下圖所示的首選項選項,然後從下拉菜單中選擇ios-debug作為構建目標體系結構,然後關閉首選項選項卡。

首選項

目標建立

步驟6:選擇目標構建體系結構之後,就該構建項目了。單擊“生成項目”按鈕,然後等待項目生成。直到您可以喝杯咖啡!

建立項目

步驟7:是!!!現在我們的構建就可以運行了!構建完成後,您將看到“下載iOS模擬器捆綁包”選項。單擊鏈接,它將下載捆綁軟件。

下載包

我們快到了!!!現在,我們需要一個模擬器來運行此構建。現在我們如何在沒有Mac的情況下運行模擬器?


別擔心,我讓你被覆蓋。

第8步:現在要獲得免費的iPhone模擬器,請訪問Appetize.ioAppetize.io幫助用戶在您的瀏覽器上運行本機應用程序。

步驟9:現在,我們要做的就是上傳我們的構建,這是一個孩子的遊戲。只需單擊“上傳”按鈕即可上傳您的構建。

步驟10:在新頁面上,單擊“選擇文件”按鈕並上傳您的構建文件,這將再次花費一些時間。然後,在下面提交您的電子郵件地址,因為該網站將向您發送指向要運行的模擬器的鏈接。

開胃

步驟11:最後一步是打開您的電子郵件,您將收到來自Appetize.io的郵件。單擊鏈接,您將看到一個iPhone模擬器。只需單擊“點擊播放”,即可開始!!!您只是在沒有Mac的情況下為iOS製作了應用程序!

iOS應用程式

是時候慶祝了!!!


這是我在Dev.to上的第一篇文章,因此,如果您對我的改進有任何想法或建議,請在評論部分中分享。下次見^-^ 


資料來源: https://dev.to/real_rijin/developing-flutter-apps-for-ios-without-a-mac-2g1m

2020年10月28日 星期三

Ethernet(以太網)之 詳解 MAC、MII、PHY

 

結構

  從硬件的角度看,以太網接口電路主要由MAC(Media Access Control)控制器和物理層接口PHY(Physical Layer,PHY)兩大部分構成。如下圖所示



  但是,在實際的設計中,以上三部分並不一定獨立分開的。由於,PHY整合了大量模擬硬件,而MAC是典型的全數字器件。考慮到芯片面積及模擬/數字混合架構的原因,通常,將MAC集成進微控制器而將PHY留在片外。更靈活、密度更高的芯片技術已經可以實現MAC和PHY的單芯片整合。可分為下列幾種類型:

  • CPU集成MAC與PHY。目前來說並不多見

  • CPU集成MAC,PHY採用獨立芯片。比較常見

  • CPU不集成MAC與PHY,MAC與PHY採用集成芯片。比較常見

  MAC及PHY工作在OSI七層模型的數據鏈路層和物理層。具體如下



  IEEE802.3標准文檔下載地址:https://ieeexplore.ieee.org/browse/standards/get-program/page/。它分為很多個section。


標准文檔賊長,沒有全部看過,大概第一部分是10Mb/s以太網(其中有關於MAC的規範),第二部分是100BASE-T 100Mb/s基帶網絡介紹,第三部分是1000 Mb/s基帶網絡介紹,第四部分是10 Gb/s基帶網絡介紹。但是,並不是說每部分都是獨立的

什麼是MAC

  MAC(Media Access Control)即媒體訪問控制子層協議。該部分有兩個概念:MAC可以是一個硬件控制器及MAC通信以協議該協議位於OSI七層協議中數據鏈路層的下半部分,主要負責控制與連接物理層的物理介質。MAC硬件大約就是下面的樣子了:



  在發送數據的時候,MAC協議可以事先判斷是否可以發送數據,如果可以發送將給數據加上一些控制信息,最終將數據以及控制信息以規定的格式發送到物理層;在接收數據的時候,MAC協議首先判斷輸入的信息並是否發生傳輸錯誤,如果沒有錯誤,則去掉控制信息發送至LLC(邏輯鏈路控制)層。該層協議是以太網MAC由IEEE-802. 3以太網標准定義。最新的MAC同時支持10Mbps和100Mbps兩種速率。
  以太網數據鏈路層其實包含MAC(介質訪問控制)子層和LLC(邏輯鏈路控制)子層。一塊以太網卡MAC芯片的作用不但要實現MAC子層和LLC子層的功能,還要提供符合規範的PCI界面以實現和主機的數據交換。
  MAC從PCI總線收到IP數據包(或者其他網絡層協議的數據包)後,將之拆分並重新打包成最大1518Byte、最小64Byte的幀。這個幀裡麵包括了目標MAC地址、自己的源MAC地址和數據包裡面的協議類型(比如IP數據包的類型用80表示,最後還有一個DWORD(4Byte)的CRC碼。
  可是目標的MAC地址是哪裡來的呢?這牽扯到一個ARP協議(介乎於網絡層和數據鏈路層的一個協議)。第一次傳送某個目的IP地址的數據的時候,先會發出一個ARP包,其MAC的目標地址是廣播地址,裡面說到:“誰是xxx.xxx.xxx.xxx這個IP地址的主人? ”因為是廣播包,所有這個局域網的主機都收到了這個ARP請求。收到請求的主機將這個IP地址和自己的相比較,如果不相同就不予理會,如果相同就發出ARP響應包。這個IP地址的主機收到這個ARP請求包後回复的ARP響應裡說到:“我是這個IP地址的主人”。這個包裡面就包括了他的MAC地址。以後的給這個IP地址的幀的目標MAC地址就被確定了。(其它的協議如IPX/SPX也有相應的協議完成這些操作)
  IP地址和MAC地址之間的關聯關係保存在主機系統裡面,叫做ARP表。由驅動程序和操作系統完成。在Microsoft的系統裡面可以用arp-a的命令查看ARP表。收到數據幀的時候也是一樣,做完CRC校驗以後,如果沒有CRC效驗錯誤,就把幀頭去掉,把數據包拿出來通過標準的接口傳遞給驅動和上層的協議棧。最終正確的達到我們的應用程序。



什麼是MII

  MII(Media Independent Interface)即媒體獨立接口,MII接口是MAC與PHY連接的標準接口。它是IEEE-802.3定義的以太網行業標準。MII接口提供了MAC與PHY之間、PHY與STA(Station Management)之間的互聯技術,該接口支持10Mb/s與100Mb/s的數據傳輸速率,數據傳輸的位寬為4位。"媒體獨立"表明在不對MAC硬件重新設計或替換的情況下,任何類型的PHY設備都可以正常工作。802.3協議最多支持32個PHY,但有一定的限制:要符合協議要求的connector特性。MII接口如下圖所示:



  提到MII,就有可能涉及到RS,PLS,STA等名詞術語,下面講一下他們之間對應的關係。
  所謂RS即Reconciliation sublayer,它的主要功能主要是提供一種MII和MAC/PLS之間的信號映射機制。它們(RS與MII)之間的關係如下圖:


MII的Management Interface是與STA(Station Management)相連的。

關於本節,具體可參考IEEE以太網標準802.3的22.3 Signal timing characteristics節,其中包含時鐘信號等更詳細內容。

MII接口主要包括四個部分。一是從MAC層到PHY層的發送數據接口,二是從PHY層到MAC層的接收數據接口,三是從PHY層到MAC層的狀態指示信號,四是MAC層和PHY層之間傳送控制和狀態信息的MDIO接口。



MII包括一個數據接口,以及一個MAC和PHY之間的管理接口:

  • 數據接口:包括分別用於發送器和接收器的兩條獨立信道。每條信道都有自己的數據、時鐘和控制信號。MII數據接口總共需要16個信號,包括
  • TX_ER(transmit coding error): TX_ER同步於TX_CLK,在數據傳輸過程中,如果TX_ER有效超過一個時鐘週期,並且此時TX_EN是有效的,則數據通道中傳輸的數據是無效的,沒用的。注:當TX_ER有效並不影響工作在10Mb/s的PHY或者TX_EN無效時的數據傳輸。在MII接口的連線中,如果TX_ER信號線沒有用到,必須將它下拉接地。
  • TXD<3:0>(transmit data): TXD由RS驅動,同步於TX_CLK,在TX_CLK的時鐘週期內,並且TX_EN有效,TXD上的數據被PHY接收,否則TXD的數據對PHY沒有任何影響。
  • TX_EN:發送使能。TX_EN由Reconciliation子層根據TX_CLK上升沿同步進行轉換,時序如圖22-16所示。
  • TX_CLK(transmit clock): TX_CLK (Transmit Clock)是一個連續的時鐘信號(即係統啟動,該信號就一直存在),它是TX_EN, TXD, and TX_ER(信號方向為從RS到PHY)的參考時鐘, TX_CLK由PHY驅動TX_CLK的時鐘頻率是數據傳輸速率的25%,偏差±100ppm。例如,100Mb/s模式下,TX_CLK時鐘頻率為25MHz,佔空比在35%至65%之間。
  • COL(collision detected): COL不需要同步於參考時鐘。The behavior of the COL signal is unspecified when the duplex mode bit0.8 inthe control register is set to a logic one(自動協商禁止,人工設為全雙工模式), or when the Auto-Negotiation process selects a full duplex mode of operation。即半雙工模式信號有效,全雙工模式信號無效。
  • RXD<3:0>(receive data): RXD由RS驅動,同步於RX_CLK,在RX_CLK的時鐘週期內,並且RX_DV有效,RXD上的數據被RS接收,否則RXD的數據對RS沒有任何影響。While RX_DV is de-asserted, the PHY may provide a False Carrier indication by asserting the RX_ER signal while driving the value <1110> onto RXD<3:0>。
  • RX_ER(receive error): RX_ER同步於RX_CLK,其在RX通道中的作用類似於TX_ER對於TX通道數據傳輸的影響。
  • RX_CLK:它與TX_CLK具有相同的要求,所不同的是它是RX_DV, RXD, and RX_ER(信號方向是從PHY到RS)的參考時鐘。RX_CLK同樣是由PHY驅動,PHY可能從接收到的數據中提取時鐘RX_CLK,也有可能從一個名義上的參考時鐘(eg, the TX_CLK reference)來驅動RX_CLK。
  • CRS(carrier sense): CRS不需要同步於參考時鐘,只要通道存在發送或者接收過程,CRS就需要有效。The behavior of the CRS signal is unspecified when the duplex mode bit0.8 inthe control register is set to a logic one(自動協商禁止,人工設為全雙工模式), or when the Auto-Negotiation process selects a full duplex mode of operation,即半雙工模式信號有效,全雙工模式信號無效。
  • RX_DV(Receive Data Valid): RXD_DV同步於RX_CLK,被PHY驅動,它的作用如同於發送通道中的TX_EN,不同的是在時序上稍有一點差別:為了讓數據能夠成功被RS接收,要求RXD_DV有效的時間必須覆蓋整個FRAME的過程,即starting no later than the Start Frame Delimiter (SFD) and excluding any End-of-Frame delimiter。
    MII以4位半字節方式傳送數據雙向傳輸,時鐘速率25MHz。其工作速率可達100Mb/s。
  • MII管理接口:是個雙信號接口,通過管理接口,MAC就能監視和控制PHY。其管理是使用SMI(Serial Management Interface)總線通過讀寫PHY的寄存器來完成的。一個是時鐘信號(***MDC (management data clock)***)。另一個是數據信號(***MDIO (management data input/output)***)。
  • MDC:由站管理實體向PHY提供,作為在MDIO信號上傳送信息的定時參考。MDC是一種非週期性的信號,沒有最高或最低時間。無論TX_CLK和RX_CLK的標稱週期如何,MDC的最小高低時間應為160 ns,MDC的最小周期為400 ns。
  • MDIO:是PHY和STA之間的雙向信號。它用於在PHY和STA之間傳輸控制信息和狀態。控制信息由STA同步地針對MDC驅動並且由PHY同步地採樣。狀態信息由PHY針對MDC同步驅動並由STA同步採樣。

  PHY裡面的部分寄存器是IEEE定義的,這樣PHY把自己的目前的狀態反映到寄存器裡面,MAC通過SMI總線不斷的讀取PHY的狀態寄存器以得知目前PHY的狀態。例如連接速度、雙工的能力等。當然也可以通過SMI設置PHY的寄存器達到控制的目的。例如流控的打開關閉、自協商模式還是強制模式等。不論是物理連接的MII總線和SMI總線還是PHY的狀態寄存器和控制寄存器都是由IEEE的規範的。因此不同公司的MAC和PHY一樣可以協調工作。當然為了配合不同公司的PHY的自己特有的一些功能,驅動需要做相應的修改。
  MII支持10Mbps和100Mbps的操作,一個接口由14根線組成,它的支持還是比較靈活的。但是有一個缺點是因為它一個端口用的信號線太多,如果一個8端口的交換機要用到112根線,16端口就要用到224根線,到32端口的話就要用到448根線。一般按照這個接口做交換機是不太現實的。所以現代的交換機的製作都會用到其它的一些從MII簡化出來的標準,比如RMII、SMII、GMII等。

RMII(Reduced Media Independant Interface)

  簡化媒體獨立接口是標準的以太網接口之一,比MII有更少的I/O傳輸。RMII口是用兩根線來傳輸數據的,MII口是用4根線來傳輸數據的,GMII是用8根線來傳輸數據的。MII/RMII只是一種接口,對於10Mbps線速,MII的時鐘速率是2.5MHz就可以了,RMII則需要5MHz;對於100Mbps線速,MII需要的時鐘速率是25MHz,RMII則是50MHz。
  MII/RMII用於傳輸以太網包,在MII/RMII接口是4/2bit的,在以太網的PHY裡需要做串並轉換,編解碼等才能在雙絞線和光纖上進行傳輸,其幀格式遵循IEEE 802.3(10M)/IEEE 802.3u(100M)/IEEE 802.1q(VLAN)。以太網幀的格式為:前導符+開始位+目的mac地址+源mac地址+類型/長度+數據+padding(optional)+32bitCRC。如果有vlan,則要在類型/長度後面加上2個字節的vlan tag,其中12bit來表示vlan id,另外4bit表示數據的優先級!

GMII(Gigabit MII)

  GMII是千兆網的MII接口,這個也有相應的RGMII接口,表示簡化了的GMII接口。
  GMII採用8位接口數據,工作時鐘125MHz,因此傳輸速率可達1000Mbps。同時兼容MII所規定的10/100 Mbps工作方式。GMII接口數據結構符合IEEE以太網標準,該接口定義見IEEE 802.3-2000。

  • 發送器:在千兆速率下,向PHY提供GTXCLK信號、TXD、TXEN、TXER信號與此時鐘信號同步。否則在10/100Mbps速率下,PHY提供TXCLK時鐘信號,其它信號與此信號同步。其工作頻率為25MHz(100M網絡)或2.5MHz(10M網絡)。
  • GTXCLK——吉比特TX…信號的時鐘信號(125MHz)
  • TXCLK——10/100Mbps信號時鐘
  • TXD[7…0]——被發送數據
  • TXEN——發送器使能信號
  • TXER——發送器錯誤(用於破壞一個數據包)
  • 接收器:
  • RXCLK——接收時鐘信號(從收到的數據中提取,因此與GTXCLK無關聯)
  • RXD[7…0]——接收數據
  • RXDV——接收數據有效指示
  • RXER——接收數據出錯指示
  • COL——衝突檢測(僅用於半雙工狀態)
  • 管理配置:管理配置接口控制PHY的特性。該接口有32個寄存器地址,每個地址16位。其中前16個已經在“IEEE 802.3,2000-22.2.4 Management Functions”中規定了用途,其餘的則由各器件自己指定。
  • MDC——配置接口時鐘
  • MDIO——配置接口I/O

什麼是PHY

  PHY((Physical Layer,PHY))是IEEE802.3中定義的一個標準模塊,STA(station management entity,管理實體,一般為MAC或CPU)通過SMI(Serial Manage Interface)對PHY的行為、狀態進行管理和控制,而具體管理和控制動作是通過讀寫PHY內部的寄存器實現的。一個PHY的基本結構如下圖:



  PHY是物理接口收發器,它實現OSI模型的物理層。IEEE-802.3標准定義了以太網PHY。包括MII/GMII(介質獨立接口)子層、PCS(物理編碼子層)、PMA(物理介質附加)子層、PMD(物理介質相關)子層、MDI子層。它符合IEEE-802.3k中用於10BaseT(第14條)和100BaseTX(第24條和第25條)的規範。

PHY寄存器在IEEE802.3標準的22.2.4 Management functions節有介紹,但不涉及所有的寄存器,個別寄存器需要到其它章節中看,當然,文檔裡面也提到該在哪裡找到哪個寄存器。

PHY寄存器

  PHY寄存器的地址空間為5位,從0到31最多可以定義32個寄存器(隨著芯片功能不斷增加,很多PHY芯片採用分頁技術來擴展地址空間以定義更多的寄存器),IEEE802.3定義了地址為0-15這16個寄存器的功能,地址16-31的寄存器留給芯片製造商自由定義,如下表所示。


(1)官方介紹請參考IEEE802.3標準的22.2.4 Management functions節。
(2)上圖的B和E表示了,在特定接口下,寄存器是基本的還是擴展的。例如:MII接口下只有0和1寄存器是基本的,其它的是擴展的。注意:所為擴展是指留給IEEE以後的擴展特性用,不是給PHY廠商的擴展,PHY廠商自定義的只能是16~31號寄存器
(3)在IEEE標准文檔及某些PHY手冊中,某寄存器的比特(bit)用X.y表示,如0.15表示第0寄存器的第15位。

Control Register (Register 0)

  寄存器0是PHY控制寄存器,通過Control Register可以對PHY的主要工作狀態進行設置。應該保證控制寄存器每個位的默認值,以便在沒有管理干預的情況下,上電或複位時PHY的初始狀態為正常操作狀態。Control Register的每一位完成的功能見下。


  • Reset:通過將位0.15設置為邏輯1來完成複位PHY。該操作應將狀態和控制寄存器設置為其默認狀態。因此,此操作可能會改變PHY的內部狀態以及與PHY關聯的物理鏈路的狀態。復位過程中Bit15保持為1,復位完成之後該位應該自動清零。在復位過程完成之前,PHY不需要接受對控制寄存器的寫入操作,並且在復位過程完成之前寫入0.15以外的控制寄存器位可能不起作用。復位過程應在0.15位設置的0.5 s內完成。

(1)一般要改變端口的工作模式(如速率、雙工、流控或協商信息等)時,在設置完相應位置的寄存器之後,需要通過Reset位複位PHY來使配置生效。
(2)該比特位的默認值為0。

  • Loopback:當位0.14被設置為邏輯1時,PHY應置於環回操作模式。當位0.14置位時,PHY接收電路應與網絡介質隔離,並且MII或GMII處的TX_EN斷言不應導致網絡介質上的數據傳輸。當位0.14置位時,PHY應接受來自MII或GMII發送數據路徑的數據,並將其返回給MII或GMII接收數據路徑,以響應TX_EN的斷言。當位0.14置位時,從斷言TX_EN到斷言RX_DV的延遲應小於512 BT。當位0.14置位時,除非設置了位0.7,否則COL信號應始終保持無效,在這種情況下,COL信號的行為應如22.2.4.1.9所述。清0.14位為零允許正常操作。
      Loopback是一個調試以及故障診斷中常用的功能,Bit14置1之後,PHY和外部MDI的連接在邏輯上將被斷開,從MAC經過MII/GMII(也可能是其他的MAC/PHY接口)發送過來的數據將不會被發送到MDI上,而是在PHY內部(一般在PCS)回環到本端口的MII/GMII接收通道上,通過Loopback功能可以檢查MII/GMII以及PHY接口部分是否工作正常,對於端口不通的情況可用於故障定位。

(1)需要注意的是,很多時候PHY設置Loopback後端口可能就Link down了,MAC無法向該端口發幀,這時就需要通過設置端口Force Link up才能使用Loopback功能。
(2)該比特位的默認值為0。

  • Speed Selection: ***Bit13和Bit6兩位聯合實現***對端口的速率控制功能。鏈接速度可以通過自動協商過程或手動速度選擇來選擇。通過將位0.12清零來禁用自動協商時,允許手動速度選擇。
  • 當禁用自動協商並將位0.6清除為邏輯0時,將位0.13設置為邏輯1將PHY配置為100 Mb / s操作,並將位0.13清除為邏輯0將PHY配置為10 Mb / s操作。
  • 當禁用自動協商並將位0.6設置為邏輯1時,將位0.13清零為邏輯0會選擇1000 Mb / s的操作。將位0.6和0.13設置為邏輯1的組合保留用於未來的標準化。
  • 當使能自動協商時,可以讀取或寫入位0.6和0.13,但位0.6和位0.13的狀態對鏈路配置沒有影響,位0.6和位0.13不需要反映當它被讀取時鏈接。

  如果PHY通過比特1.15:9和比特15.15:12報告它不能工作在所有速度時,則比特0.6和0.13的值應該與PHY可以操作的速度相對應。並且任何試圖將該位設置為無效的操作均將被忽略。

(1)對Speed Selection的修改設置,往往需要復位端口才能配置生效。因此在設置該位置的時候需要檢查自動協商的設置並通過Bit15復位端口。
(2)位0.6和0.13的默認值是根據位1.15:9和15.15:12所指示的PHY可以操作的***最高數據速率***的編碼組合。

  • Auto-Negotiation Enable:自動協商過程應通過將位0.12設置為邏輯1來啟用。如果位0.12設置為邏輯1,則位0.13、0.8和0.6不應對鏈路配置和除了自動協商協議規定之外的站操作產生影響。如果將位0.12清零為邏輯0,則無論鏈路配置和自動協商過程的先前狀態如何,位0.13、0.8和0.6都將確定鏈路配置。
      如果PHY通過位1.3報告它缺乏執行自動協商的能力,則PHY應在位0.12返回零值。如果PHY通過位1.3報告它缺乏執行自動協商的能力,則位0.12應該始終寫為0,並且任何嘗試將1寫入位0.12都應該被忽略。

必須注意的是,對於1000BASE-T接口,自動協商必須打開。

  • Power Down:通過將位0.11設置為邏輯1,可以將PHY置於低功耗狀態。清0.11位為零允許正常操作。PHY在掉電狀態下的具體行為是特定實現的。處於掉電狀態時,PHY應響應管理事務。在轉換到掉電狀態期間和處於掉電狀態期間,PHY不應在MII或GMII上產生寄生信號。
      當位0.11或位0.10被設置為邏輯1時,PHY不需要滿足RX_CLK和TX_CLK信號功能要求。在位0.11和0.10清零後,PHY應在0.5 s內滿足22.2.2中定義的RX_CLK和TX_CLK信號功能要求。

(1)Power Down模式一般在軟件shut down端口的時候使用,需要注意的是端口從Power Down模式恢復,需要復位端口以保證端口可靠的連接。
(2)該位的默認值為0。

  • Isolate:通過將位0.10設置為邏輯1,PHY可能被迫將其數據路徑與MII或GMII電隔離。清零位0.10允許正常操作。當PHY與MII或GMII隔離時,它不會響應TXD數據包和TX_EN,TX_ER、GTX_CLK的輸入。並且它的TX_CLK,RX_CLK,RX_DV,RX_ER,RXD數據包、COL和CRS輸出均應為高阻態。當PHY與MII或GMII隔離時,它將響應管理事務(MDC/MDIO接口的信號)。

(1)IEEE802.3沒有對Isolate時MDI接口的狀態進行規範,此時MDI端可能還在正常運行。Isolate在實際應用中並沒有用到。
(2)由於目前很多百兆的PHY芯片其MAC接口主流的都是SMII/S3MII,8個端口的接口是相互關聯的,一個端口設置Isolate可能會影響其他端口的正常使用,因此在使用中註意不要隨意更改bit10的狀態。

  • Restart Auto-Negotiation:如果PHY通過位1.3報告它缺乏執行自動協商的能力,或者如果自動協商被禁用,則PHY應在位0.9返回零值。如果PHY通過位1.3報告它缺乏執行自動協商的能力,或者如果禁用了自動協商,則應將位0.9始終寫為0,並且任何嘗試將1寫入位0.9應被忽略。
      Bit9置1將重新啟動端口的自動協商進程,當然前提是Auto-Negotiation Enable是使能的。

一般在修改端口的自動協商能力信息之後通過Bit9置1重新啟動自動協商來使端口按照新的配置建立link。

  • Duplex Mode:可以通過自動協商過程或手動雙面選擇來選擇雙工模式。通過將位0.12清零來禁用自動協商時,允許手動雙面選擇。
  • 當禁用自動協商時,將位0.8設置為邏輯1將PHY配置為全雙工操作,並將位0.8清零以將邏輯0配置為用於半雙工操作的PHY。
  • 當啟用自動協商時,可以讀取或寫入位0.8,但位0.8的狀態對鏈路配置沒有影響。

  如果PHY通過位1.15:9和15.15:12報告它只能在一個雙工模式下工作,則位0.8的值應該與PHY可以工作的模式相對應,並且任何嘗試改變將該位0.8修改為無效指的操作應被忽略。

對Duplex Mode的修改配置也需要復位端口才能生效。

  • Collision Test:衝突信號(COL)測試開關。在需要對COL信號進行測試時,可以通過Bit7置1,這時PHY將輸出一個COL脈衝以供測試。實際測試操作中也可以將端口配置為半雙工狀態,通過發幀衝突來測試COL信號,因此該配置實用價值不大。
  • Unidirectional enable:如果PHY通過比特1.7報告它不具備編碼和傳輸來自媒體獨立接口的數據的能力,而不管PHY是否確定已建立有效鏈路,則PHY應在比特0.5中返回零值,並且任何嘗試寫一個到位0.5應該被忽略。

Status register

  寄存器1是PHY狀態寄存器,主要包含PHY的狀態信息,大多數bit的值都是由芯片廠家確定的,每一個bit的功能在表3種已有詳細說明。



寄存器中各位的詳細說明如下:

  • 100BASE-T4 ability:當讀為邏輯1時,位1.15指示PHY有能力使用100BASE-T4信令規範執行鏈路發送和接收。當讀為邏輯0時,位1.15表示PHY缺乏使用100BASE-T4信令規範執行鏈路發送和接收的能力。
  • 100BASE-X full duplex ability:當讀為邏輯1時,位1.14指示PHY有能力使用100BASE-X信令規範執行全雙工鏈路傳輸和接收。當作為邏輯0讀取時,bit1.14表示PHY缺乏使用100BASE-X信令規範執行全雙工鏈路傳輸和接收的能力。
  • 100BASE-X half duplex ability:當讀為邏輯1時,位1.13指示PHY有能力使用100BASE-X信令規範執行半雙工鏈路傳輸和接收。當讀為邏輯0時,位1.13指示PHY缺乏使用100BASE-X信令規範執行半雙工鏈路傳輸和接收的能力。
  • 其他同類型的值意義基本與上面幾個相同:指示PHY所具有的工作模式能力,不再一一說明。
  • Unidirectional ability:當讀為邏輯1時,位1.7指示PHY具有編碼和傳輸來自媒體獨立接口的數據的能力,而不管PHY是否確定已建立有效鏈路。當讀為邏輯0時,位1.7指示PHY只有在PHY確定已建立有效鏈路時才能從媒體獨立接口傳輸數據。
  • MF preamble suppression ability:當讀為邏輯1時,位1.6指示PHY能夠接受管理幀,而不管它們是否在22.2.4.5.2中描述的前導碼模式之前。當讀為邏輯0時,位1.6指示PHY不能接受管理幀,除非它們之前是22.2.4.5.2中描述的前導碼模式。
  • Auto-Negotiation Complete:當讀為邏輯1時,位1.5指示自動協商過程已完成,並且由自動協商協議(條款28或條款37)實施的擴展寄存器的內容是有效的。當讀為邏輯0時,位1.5指示自動協商過程尚未完成,並且擴展寄存器的內容由自動協商協議的當前狀態定義,或者為手動配置寫入。如果自動協商通過清除位0.12禁用,則PHY應在位1.5返回零值。如果PHY缺乏執行自動協商的能力,它還應在位1.5返回零值。

在調試以及異常故障處理時,可以通過該位寄存器的狀態判斷AN是否成功,從而進一步的檢查AN相關的設置是否正確,或者芯片的AN功能是否正常等。

  • Remote Fault:當讀為邏輯1時,位1.4表示檢測到遠程故障狀態。故障類型以及故障檢測的標準和方法是PHY特定的。遠程故障位必須使用鎖存功能來實現,以便發生遠程故障將導致遠程故障位置位,並保持置位狀態直至被​​ 清除。每當通過管理接口讀取寄存器1時,遠程故障位應清零,並且還應通過PHY復位清零。
      遠端錯誤指示位。Bit4=1代表連接對端(Link Partner)出錯,至於出錯的具體類型以及錯誤檢測機制在規範中並沒有定義,由PHY的製造商自由發揮,一般的廠商都會在其他的寄存器(Register16-31由廠商自行定義)指示比較詳細的錯誤類型。在與端口相關的故障查證中,Remote Fault是一個重要的指示信息,通過互聯雙方的Remote Fault信息(可能要加上其他的具體錯誤指示),可以幫助定位故障原因。
  • Auto-Negotiation ability:當讀為邏輯1時,位1.3指示PHY有能力執行自動協商。當讀為邏輯0時,位1.3指示PHY缺乏執行自動協商的能力。
  • Link Status:當讀為邏輯1時,位1.2指示PHY已經確定已建立有效鏈路。當作為邏輯0讀取時,位1.2指示該鏈接無效。確定鏈路有效性的標準是PHY特定的。鏈路狀態位應該使用鎖存功能來實現,以便發生鏈路故障情況將導致鏈路狀態位清零並保持清零,直到通過管理接口讀取。此狀態指示旨在支持在30.5.1.1.4,aMediaAvailable中定義的管理屬性。
      實際應用中一般都是通過Bit2來判斷端口的狀態。而且,一般的MAC芯片也是通過輪詢PHY的這個寄存器值來判斷端口的Link狀態的(這個過程可能有不同的名稱,比如BCM叫做Link Scan,而Marvell叫做PHY Polling。)如前所述,在AN Enable的情況下,Link Status的信息只有在Auto-Negotiation Complete指示已經完成的情況下才是正確可靠的,否則有可能出錯。
  • Jabber Detect:當作為邏輯1讀取時,位1.1指示已經檢測到爆音條件。此狀態指示旨在支持30.5.1.1.6中定義的管理屬性,aJabber和30.5.1.3.1 nJabber中定義的MAU通知。檢測Jabber條件的標準是PHY特定的。Jabber檢測位應該使用鎖存功能來實現,以便發生Jabber條件將導致Jabber檢測位置位,並保持置位狀態直至被​​ 清除。每次通過管理接口讀取寄存器1時,Jabber檢測位應清零,並且還應通過PHY復位清零。
      IEEE802.3對Jabber的解釋是“A condition wherein a station transmits for a period of time longer than the maximum permissible packet length, usually due to a fault condition”。這一位指示的是Link Partner發送的時間超過了規定的最大長度。值得注意的是,Jabber Detect只有在10BASE-T模式下才有意義,100和1000M模式是沒有定義Jabber這一功能的。

PHY Identifier Register

  寄存器2和3存放PHY芯片的型號代碼,寄存器2(PHY ID1)為高16位,而寄存器3(PHY ID2)為低16位。由芯片製造商自行定義,實際應用中軟件通過讀取這兩個寄存器的內容可以識別PHY的型號和版本。
  PHY標識符應由由IEEE分配給PHY製造商的組織唯一標識符(OUI)的(只需要使用第3至第24位,共22位),加上6位製造商的型號以及4位製造商的修訂版編號組成。PHY標識符旨在提供足夠的信息來支持30.1.2中所要求的oResourceTypeID對象。
  OUI的第三位分配給位2.15,OUI的第四位分配給位2.14,依此類推。位2.0包含OUI的第十八位。位3.15包含OUI的第十九位,位3.10包含OUI的第二十四位。位3.9包含製造商型號的MSB。位3.4包含製造商型號的LSB。位3.3包含製造商版本號的MSB,位3.0包含製造商版本號的LSB。具體如下圖所示:


Auto-Negotiation Advertisement Register (Register 4) (R/W)

  寄存器4是自動協商的能力通告寄存器,在AN Enable的前提下(見寄存器0),端口根據該寄存器的相關配置將自動協商信息通過FLP在MDI上進行通告。當AN配置為Disable狀態的時候,寄存器4的配置將不起作用,端口的工作模式由控制寄存器中的配置決定。
  該寄存器包含PHY的通告能力,它們將在自動協商期間傳送給其鏈接夥伴。基本頁的位定義在IEEE標準的28.2.1.2中定義。上電時,在自動協商開始之前,該寄存器應具有以下默認配置:

  • Selector Field (4.4:0):被設置為適當的代碼,如IEEE標準的附件28A中所規定。
  • Reserved(4.14):被設置為邏輯0。
  • Technology Ability Field(4.11:5): 根據MII狀態寄存器(寄存器1)(1.15:11)中設置的值或等效值設置另見28.2.1.2.3和附件28D。

Link codeword encoding(基本鏈路碼字)

  在FLP Burst內傳輸的基本鏈路代碼字(基本頁面)應該傳達如圖28-7所示的編碼。自動協商功能可以使用下一頁功能支持其他頁面。下一頁交換中使用的鏈接代碼字的編碼在28.2.3.4中定義。在FLP Burst中,D0應該是第一個傳輸的位。


Next Page function

  下一頁功能使用標準的自動協商仲裁機制來允許交換任意的數據。數據由可選的下一頁信息攜帶,其遵循用於基本鏈接碼字的傳輸和確認過程。定義了四種類型的下一頁編碼:消息頁面,未格式化頁面,擴展消息頁面和擴展的未格式化頁面。
  關於該部分,具體見IEEE標準的28.2.3.4 Next Page function
  在IEEE標準中,Auto-Negotiation Advertisement Register中的各部分全部是在獨立章節中進行介紹的。具體如下:

  • Selector Field:選擇器字段(S [4:0])是一個5位寬的字段,編碼32個可能的消息。鏈路碼字中的選擇器字段S [4:0]應用於識別自動協商發送的消息的類型。下表列出了可能發送的消息的類型。隨著新消息的發展,該表格將相應更新。


    未指定的組合保留供將來使用。不會傳輸選擇器字段的預留組合。***我們所接觸的以太網PHY遵從IEEE802.3規範,Selector Field=0001,該區域不可隨意更改(很多PHY將此區域設計為只讀寄存器,以免被修改)***。
  • Technology Ability Field:技術能力字段(A [6:0])是一個7位寬的字段,其中包含指示選擇器字段值特定的支持技術的信息。這些位被映射到各個技術,以便能夠針對單個選擇器字段值並行通告能力。附錄28B.2和附件28D描述了IEEE 802.3選擇器的技術能力字段編碼。鏈接代碼字中可能會公佈多種技術。設備應支持其宣傳的技術的數據服務能力。

  • Extended Next Page:擴展下一頁(XNP)被編碼在基本鏈路碼字的位D12中。擴展下一頁位指示本地設備在設置為邏輯1時支持擴展下一頁的傳輸,並指示本地設備在設置為邏輯0時不支持擴展下一頁。Extended Next Page的使用與協商的數據速率,媒體或鏈接技術是正交的。擴展下一頁位按照28.2.3.4中的擴展下一頁功能規範使用。
  • Next Page:無論選擇器字段值還是鏈接碼字編碼,下一頁(NP)都在D15位編碼。支持附加鏈接碼字編碼的傳輸和接收是可選的。如果不支持Next Page功能,NP位應始終設置為邏輯0。如果設備實現下一頁功能並希望進行下一頁交換,則應將NP位設置為邏輯1。設備可以實現下一頁功能,並通過將NP位設置為邏輯0來選擇不參與下一頁交換。下一頁功能在28.2.3.4中定義。
  • Remote Fault:遠程故障(RF)編碼在基本鏈路碼字的位D13中。默認值是邏輯零。遠程故障位為傳輸簡單的故障信息提供了一種標準的傳輸機制。當自動協商通告寄存器(寄存器4)中的RF位設置為邏輯1時,發送的基本鏈路碼字中的RF位被設置為邏輯1。當接收到的基本鏈路代碼字中的RF位被設置為邏輯1時,如果存在MII管理功能,則MII狀態寄存器(寄存器1)中的遠程故障位將被設置為邏輯1。

Auto-Negotiation Link Partner ability register (Register 5) (RO)

  寄存器5保存的是本端PHY接收到的對端PHY所通告的端口能力,寄存器5的結構和寄存器4基本一致。

Auto-Negotiation Expansion Register (Register 6) (RO)

  寄存器6保存了PHY自動協商過程的異常信息。從這個寄存其中我們可以獲取到Link Partner子否支持自動協商以及自動協商下一頁有沒有收到的信息。


Auto-Negotiation Next Page transmit register (Register 7) (R/W)

  自動協商下一頁發送寄存器包含在支持下一頁功能時要發送的下一頁鏈接碼字。(見表28-6)內容在28.2.3.4中定義。上電時,該寄存器應包含默認值2001H,該值表示消息代碼設置為Null消息的消息頁面。該值可以由設備希望傳輸的任何有效的下一頁消息代碼替換。寫入該寄存器應將mr_next_page_loaded設置為true。


Auto-Negotiation Link Partner Received Next Page register (Register 8) (RO)


未完待續。

附件

參考文檔

  • IEEE Standard for Ethernet
  • 網絡

資料來源: https://blog.csdn.net/ZCShouCSDN/article/details/80090802