<address id="pbhjb"><nobr id="pbhjb"><menuitem id="pbhjb"></menuitem></nobr></address>

    <address id="pbhjb"></address>

      <address id="pbhjb"><listing id="pbhjb"><meter id="pbhjb"></meter></listing></address>

      侵權投訴

      深度解析Linux網絡路徑及sk_buff struct 數據結構

      39度創意研究所 ? 2020-10-22 15:04 ? 次閱讀

      理解 Linux 網絡棧(1):Linux 網絡協議棧簡單總結

      本系列文章總結 Linux 網絡棧,包括:

      (1)Linux 網絡協議棧總結

      (2)非虛擬化Linux環境中的網絡分段卸載技術 GSO/TSO/UFO/LRO/GRO

      (3)QEMU/KVM + VxLAN 環境下的 Segmentation Offloading 技術(發送端)

      (4)QEMU/KVM + VxLAN 環境下的 Segmentation Offloading 技術(接收端)

      1. Linux 網絡路徑

      1.1 發送端

      1.1.1 應用層

      (1) Socket

      應用層的各種網絡應用程序基本上都是通過 Linux Socket 編程接口來和內核空間的網絡協議棧通信的。Linux Socket 是從 BSD Socket 發展而來的,它是 Linux 操作系統的重要組成部分之一,它是網絡應用程序的基礎。從層次上來說,它位于應用層,是操作系統為應用程序員提供的 API,通過它,應用程序可以訪問傳輸層協議。

      socket 位于傳輸層協議之上,屏蔽了不同網絡協議之間的差異

      socket 是網絡編程的入口,它提供了大量的系統調用,構成了網絡程序的主體

      在Linux系統中,socket 屬于文件系統的一部分,網絡通信可以被看作是對文件的讀取,使得我們對網絡的控制和對文件的控制一樣方便。

      (2) 應用層處理流程

      網絡應用調用Socket APIsocket (int family, int type, int protocol)創建一個 socket,該調用最終會調用 Linux system callsocket() ,并最終調用 Linux Kernel 的 sock_create() 方法。該方法返回被創建好了的那個 socket 的 file descriptor。對于每一個 userspace 網絡應用創建的 socket,在內核中都有一個對應的 struct socket和 struct sock。其中,struct sock 有三個隊列(queue),分別是rx , tx 和 err,在sock 結構被初始化的時候,這些緩沖隊列也被初始化完成;在收據收發過程中,每個 queue 中保存要發送或者接受的每個 packet 對應的 Linux 網絡棧 sk_buffer 數據結構的實例 skb。

      對于 TCP socket 來說,應用調用 connect()API ,使得客戶端和服務器端通過該 socket 建立一個虛擬連接。在此過程中,TCP 協議棧通過三次握手會建立 TCP 連接。默認地,該 API 會等到 TCP 握手完成連接建立后才返回。在建立連接的過程中的一個重要步驟是,確定雙方使用的 Maxium Segemet Size (MSS)。因為 UDP 是面向無連接的協議,因此它是不需要該步驟的。

      應用調用 Linux Socket 的 send 或者 write API 來發出一個 message 給接收端

      sock_sendmsg 被調用,它使用 socket descriptor 獲取 sock struct,創建 message header 和 socket control message

      _sock_sendmsg 被調用,根據 socket 的協議類型,調用相應協議的發送函數。

      對于 TCP ,調用 tcp_sendmsg 函數。

      對于 UDP 來說,userspace 應用可以調用 send()/sendto()/sendmsg() 三個 system call 中的任意一個來發送 UDP message,它們最終都會調用內核中的 udp_sendmsg() 函數。

      1.1.2 傳輸層

      傳輸層的最終目的是向它的用戶提供高效的、可靠的和成本有效的數據傳輸服務,主要功能包括 (1)構造 TCP segment (2)計算 checksum (3)發送回復(ACK)包 (4)滑動窗口(sliding windown)等保證可靠性的操作。TCP 協議棧的大致處理過程如下圖所示:

      TCP 棧簡要過程:

      tcp_sendmsg 函數會首先檢查已經建立的 TCP connection 的狀態,然后獲取該連接的 MSS,開始 segement 發送流程。

      構造 TCP 段的 playload:它在內核空間中創建該 packet 的 sk_buffer 數據結構的實例 skb,從 userspace buffer 中拷貝 packet 的數據到 skb 的 buffer。

      構造 TCP header。

      計算 TCP 校驗和(checksum)和 順序號 (sequence number)。

      TCP 校驗和是一個端到端的校驗和,由發送端計算,然后由接收端驗證。其目的是為了發現TCP首部和數據在發送端到接收端之間發生的任何改動。如果接收方檢測到校驗和有差錯,則TCP段會被直接丟棄。TCP校驗和覆蓋 TCP 首部和 TCP 數據。

      TCP的校驗和是必需的

      發到 IP 層處理:調用 IP handler 句柄 ip_queue_xmit,將 skb 傳入 IP 處理流程。

      UDP 棧簡要過程:

      UDP 將 message 封裝成 UDP 數據報

      調用 ip_append_data() 方法將 packet 送到 IP 層進行處理。

      1.1.3 IP 網絡層 - 添加header 和 checksum,路由處理,IP fragmentation

      網絡層的任務就是選擇合適的網間路由和交換結點, 確保數據及時傳送。網絡層將數據鏈路層提供的幀組成數據包,包中封裝有網絡層包頭,其中含有邏輯地址信息- -源站點和目的站點地址的網絡地址。其主要任務包括 (1)路由處理,即選擇下一跳 (2)添加 IP header(3)計算 IP header checksum,用于檢測 IP 報文頭部在傳播過程中是否出錯 (4)可能的話,進行 IP 分片(5)處理完畢,獲取下一跳的 MAC 地址,設置鏈路層報文頭,然后轉入鏈路層處理。

      IP 頭:

      IP 棧基本處理過程如下圖所示:

      首先,ip_queue_xmit(skb)會檢查skb->dst路由信息。如果沒有,比如套接字的第一個包,就使用ip_route_output()選擇一個路由。

      接著,填充IP包的各個字段,比如版本、包頭長度、TOS等。

      中間的一些分片等,可參閱相關文檔。基本思想是,當報文的長度大于mtu,gso的長度不為0就會調用 ip_fragment 進行分片,否則就會調用ip_finish_output2把數據發送出去。ip_fragment 函數中,會檢查 IP_DF 標志位,如果待分片IP數據包禁止分片,則調用icmp_send()向發送方發送一個原因為需要分片而設置了不分片標志的目的不可達ICMP報文,并丟棄報文,即設置IP狀態為分片失敗,釋放skb,返回消息過長錯誤碼。

      接下來就用 ip_finish_ouput2 設置鏈路層報文頭了。如果,鏈路層報頭緩存有(即hh不為空),那就拷貝到skb里。如果沒,那么就調用neigh_resolve_output,使用 ARP 獲取。

      1.1.4 數據鏈路層

      功能上,在物理層提供比特流服務的基礎上,建立相鄰結點之間的數據鏈路,通過差錯控制提供數據幀(Frame)在信道上無差錯的傳輸,并進行各電路上的動作系列。數據鏈路層在不可靠的物理介質上提供可靠的傳輸。該層的作用包括:物理地址尋址、數據的成幀、流量控制、數據的檢錯、重發等。在這一層,數據的單位稱為幀(frame)。數據鏈路層協議的代表包括:SDLC、HDLC、PPP、STP、幀中繼等。

      實現上,Linux 提供了一個 Network device 的抽象層,其實現在 linux/net/core/dev.c。具體的物理網絡設備在設備驅動中(driver.c)需要實現其中的虛函數。Network Device 抽象層調用具體網絡設備的函數。

      1.1.5 物理層 - 物理層封裝和發送

      物理層在收到發送請求之后,通過 DMA 將該主存中的數據拷貝至內部RAM(buffer)之中。在數據拷貝中,同時加入符合以太網協議的相關header,IFG、前導符和CRC。對于以太網網絡,物理層發送采用CSMA/CD,即在發送過程中偵聽鏈路沖突。

      一旦網卡完成報文發送,將產生中斷通知CPU,然后驅動層中的中斷處理程序就可以刪除保存的 skb 了。

      1.1.6 簡單總結

      (來源)

      1.2 接收端

      1.2.1 物理層和數據鏈路層

      簡要過程:

      一個 package 到達機器的物理網絡適配器,當它接收到數據幀時,就會觸發一個中斷,并將通過 DMA 傳送到位于 linux kernel 內存中的 rx_ring。

      終端處理程序經過簡單處理后,發出一個軟中斷(NET_RX_SOFTIRQ),通知內核接收到新的數據幀。

      內核 2.5 中引入一組新的 API 來處理接收的數據幀,即 NAPI。所以,驅動有兩種方式通知內核:(1) 通過以前的函數netif_rx;(2)通過NAPI機制。該中斷處理程序調用 Network device的 netif_rx_schedule 函數,進入軟中斷處理流程,再調用 net_rx_action 函數。

      該函數關閉中斷,獲取每個 Network device 的 rx_ring 中的所有 package,最終 pacakage 從 rx_ring 中被刪除,進入 netif _receive_skb 處理流程。

      netif_receive_skb 是鏈路層接收數據報的最后一站。它根據注冊在全局數組 ptype_all 和 ptype_base 里的網絡層數據報類型,把數據報遞交給不同的網絡層協議的接收函數(INET域中主要是ip_rcv和arp_rcv)。該函數主要就是調用第三層協議的接收函數處理該skb包,進入第三層網絡層處理。

      1.2.2 網絡層

      IP 層的入口函數在 ip_rcv 函數。該函數首先會做包括 package checksum 在內的各種檢查,如果需要的話會做 IP defragment(將多個分片合并),然后 packet 調用已經注冊的 Pre-routing netfilter hook ,完成后最終到達 ip_rcv_finish 函數。

      ip_rcv_finish 函數會調用 ip_router_input 函數,進入路由處理環節。它首先會調用 ip_route_input 來更新路由,然后查找 route,決定該 package 將會被發到本機還是會被轉發還是丟棄:

      如果是發到本機的話,調用 ip_local_deliver 函數,可能會做 de-fragment(合并多個 IP packet),然后調用 ip_local_deliver 函數。該函數根據 package 的下一個處理層的 protocal number,調用下一層接口,包括 tcp_v4_rcv (TCP), udp_rcv (UDP),icmp_rcv (ICMP),igmp_rcv(IGMP)。對于 TCP 來說,函數 tcp_v4_rcv 函數會被調用,從而處理流程進入 TCP 棧。

      如果需要轉發 (forward),則進入轉發流程。該流程需要處理 TTL,再調用 dst_input 函數。該函數會 (1)處理 Netfilter Hook (2)執行 IP fragmentation (3)調用dev_queue_xmit,進入鏈路層處理流程。

      1.2.3 傳輸層 (TCP/UDP)

      傳輸層 TCP 處理入口在 tcp_v4_rcv 函數(位于 linux/net/ipv4/tcp ipv4.c 文件中),它會做 TCP header 檢查等處理。

      調用 _tcp_v4_lookup,查找該 package 的 open socket。如果找不到,該 package 會被丟棄。接下來檢查 socket 和 connection 的狀態。

      如果socket 和 connection 一切正常,調用 tcp_prequeue 使 package 從內核進入 user space,放進 socket 的 receive queue。然后 socket 會被喚醒,調用 system call,并最終調用 tcp_recvmsg 函數去從 socket recieve queue 中獲取 segment。

      1.2.4 接收端 - 應用層

      每當用戶應用調用 read 或者 recvfrom 時,該調用會被映射為/net/socket.c 中的 sys_recv 系統調用,并被轉化為 sys_recvfrom 調用,然后調用 sock_recgmsg 函數。

      對于 INET 類型的 socket,/net/ipv4/af inet.c 中的inet_recvmsg 方法會被調用,它會調用相關協議的數據接收方法。

      對 TCP 來說,調用 tcp_recvmsg。該函數從 socket buffer 中拷貝數據到 user buffer。

      對 UDP 來說,從 user space 中可以調用三個 system call recv()/recvfrom()/recvmsg() 中的任意一個來接收 UDP package,這些系統調用最終都會調用內核中的 udp_recvmsg 方法。

      1.2.5 報文接收過程簡單總結

      2. Linux sk_buff struct 數據結構和隊列(Queue)

      2.1 sk_buff

      (本章節摘選自http://amsekharkernel.blogspot.com/2014/08/what-is-skb-in-linux-kernel-what-are.html)

      2.1.1 sk_buff 是什么

      當網絡包被內核處理時,底層協議的數據被傳送更高層,當數據傳送時過程反過來。由不同協議產生的數據(包括頭和負載)不斷往下層傳遞直到它們最終被發送。因為這些操作的速度對于網絡層的表現至關重要,內核使用一個特定的結構叫 sk_buff,其定義文件在skbuffer.h。Socket buffer被用來在網絡實現層交換數據而不用拷貝來或去數據包 –這顯著獲得速度收益。

      sk_buff 是 Linux 網絡的一個核心數據結構,其定義文件在skbuffer.h。

      socket kernel buffer (skb) 是 Linux 內核網絡棧(L2 到 L4)處理網絡包(packets)所使用的 buffer,它的類型是 sk_buffer。簡單來說,一個 skb 表示 Linux 網絡棧中的一個 packet;TCP 分段和 IP 分組生產的多個 skb 被一個 skb list 形式來保存。

      struct sock 有三個 skb 隊列(sk_buffer queue),分別是rx , tx 和 err。

      它的主要結構成員:

      struct sk_buff {
          /* These two members must be first. */ # packet 可以存在于 list 或者 queue 中,這兩個成員用于鏈表處理
          struct sk_buff        *next;
          struct sk_buff        *prev;
          struct sk_buff_head    *list; #該 packet 所在的 list
       ...
          struct sock        *sk;      #跟該 skb 相關聯的 socket
          struct timeval        stamp; # packet 發送或者接收的時間,主要用于 packet sniffers
          struct net_device    *dev;  #這三個成員跟蹤該 packet 相關的 devices,比如接收它的設備等
          struct net_device    *input_dev;
          struct net_device    *real_dev;
      
          union {                  #指向各協議層 header 結構
              struct tcphdr    *th;
              struct udphdr    *uh;
              struct icmphdr    *icmph;
              struct igmphdr    *igmph;
              struct iphdr    *ipiph;
              struct ipv6hdr    *ipv6h;
              unsigned char    *raw;
          } h;
      
          union {
              struct iphdr    *iph;
              struct ipv6hdr    *ipv6h;
              struct arphdr    *arph;
              unsigned char    *raw;
          } nh;
      
          union {
              unsigned char    *raw;
          } mac;
      
          struct  dst_entry    *dst; #指向該 packet 的路由目的結構,告訴我們它會被如何路由到目的地
          char            cb[40];    # SKB control block,用于各協議層保存私有信息,比如 TCP 的順序號和幀的重發狀態
          unsigned int        len, #packet 的長度
                      data_len,
                      mac_len,       # MAC header 長度
                      csum;          # packet 的 checksum,用于計算保存在 protocol header 中的校驗和。發送時,當 checksum offloading 時,不設置;接收時,可以由device計算
      
          unsigned char        local_df, #用于 IPV4 在已經做了分片的情況下的再分片,比如 IPSEC 情況下。
                      cloned:1, #在 skb 被 cloned 時設置,此時,skb 各成員是自己的,但是數據是shared的
                      nohdr:1,  #用于支持 TSO
                      pkt_type, #packet 類型
                      ip_summed; # 網卡能支持的校驗和計算的類型,NONE 表示不支持,HW 表示支持,
      
          __u32            priority; #用于 QoS
          unsigned short        protocol, # 接收 packet 的協議
                      security;

      2.1.2 skb 的主要操作

      (1)分配skb = alloc_skb(len, GFP_KERNEL)

      (2)添加 payload(skb_put(skb, user_data_len))

      (3)使用skb->push 添加 protocol header,或者 skb->pull 刪除 header

      2.2 Linux 網絡棧使用的驅動隊列 (driver queue)

      (本章節摘選自Queueing in the Linux Network StackbyDan Siemon)

      2.2.1 隊列

      在 IP 棧和 NIC 驅動之間,存在一個 driver queue (驅動隊列)。典型地,它被實現為 FIFO ring buffer,簡單地可以認為它是固定大小的。這個隊列不包含 packet data,相反,它只是保存 socket kernel buffer (skb)的指針,而 skb 的使用如上節所述是貫穿內核網絡棧處理過程的始終的。

      該隊列的輸入時 IP 棧處理完畢的 packets。這些packets 要么是本機的應用產生的,要么是進入本機又要被路由出去的。被 IP 棧加入隊列的 packets 會被網絡設備驅動(hardware driver)取出并且通過一個數據通道(data bus)發到 NIC 硬件設備并傳輸出去。

      在不使用 TSO/GSO 的情況下,IP 棧發到該隊列的 packets 的長度必須小于 MTU。

      2.2.2 skb 大小 - 默認最大大小為 NIC MTU

      絕大多數的網卡都有一個固定的最大傳輸單元(maximum transmission unit, MTU)屬性,它是該網絡設備能夠傳輸的最大幀(frame)的大小。對以太網來說,默認值為 1500 bytes,但是有些以太網絡可以支持巨幀(jumbo frame),最大能到 9000 bytes。在 IP 網絡棧內,MTU 表示能發給 NIC 的最大 packet 的大小。比如,如果一個應用向一個 TCP socket 寫入了 2000 bytes 數據,那么 IP 棧需要創建兩個 IP packets 來保持每個 packet 的大小等于或者小于 1500 bytes。可見,對于大數據傳輸,相對較小的 MTU 會導致產生大量的小網絡包(small packets)并被傳入 driver queue。這成為 IP 分片 (IP fragmentation)。

      下圖表示 payload 為 1500 bytes 的 IP 包,在 MTU 為 1000 和 600 時候的分片情況:

      備注:

      以上資料是從網絡上獲取的各種資料整理而來

      這一塊本身就比較復雜,而且不同的 linux 內核的版本之間也有差異,文中的內容還需要進一步加工,錯誤在所難免。

      編輯:hfy

      收藏 人收藏
      分享:

      評論

      相關推薦

      Linux 新手必掌握技能

      嵌入式對于我們這些初學者來講應該比較糾結吧,因為嵌入式的學習過程是一個困難的過程,對于剛入門者來講更是這樣。那么在Linux...
      發表于 09-27 14:29 ? 0次 閱讀
      Linux 新手必掌握技能

      單片機、Cortex-M與Linux和嵌入式有什么區別

      單片機、Cortex-M、Linux它們和嵌入式有什么區別? 跑 Linux 操作系統需要什么處理器....
      的頭像 硬件攻城獅 發表于 09-26 09:59 ? 89次 閱讀

      Linux下的AVR單片機開發不看肯定后悔

      Linux下的AVR單片機開發不看肯定后悔
      發表于 09-26 07:51 ? 0次 閱讀

      華為歐拉系統免費嗎

      華為歐拉系統是免費的。華為歐拉系統是華為公司針對企業級Linux服務器操作系統自研開發的,可以覆蓋到....
      的頭像 lhl545545 發表于 09-24 17:44 ? 1361次 閱讀

      華為歐拉系統下載安裝教程

      華為歐拉系統是一款具備高安全性、高可擴展性的企業級Linux操作系統平臺,能夠滿足客戶從傳統IT基礎....
      的頭像 lhl545545 發表于 09-24 17:14 ? 4652次 閱讀

      華為歐拉系統怎么樣

      根據華為公司的官方消息公布,華為將在25日發布全新openEuler歐拉操作系統。華為歐拉系統跟華為....
      的頭像 lhl545545 發表于 09-24 16:29 ? 1671次 閱讀

      如何使用NMT和pmap來解決JVM的資源泄漏問題

      編者按:筆者使用 JDK 自帶的內存跟蹤工具 NMT 和 Linux 自帶的 pmap 解決了一個非....
      的頭像 openEuler 發表于 09-24 16:00 ? 151次 閱讀
      如何使用NMT和pmap來解決JVM的資源泄漏問題

      Linux下Apache性能分析總結

      Linux下Apache性能分析總結(深圳核達中遠通電源技術有限公司地址)-該文檔為Linux下Ap....
      發表于 09-24 14:53 ? 10次 閱讀
      Linux下Apache性能分析總結

      華為將推出openEuler歐拉操作系統 華為歐拉操作系統發布時間曝光

      根據媒體的報道消息稱,華為近日將會正式推出openEuler歐拉操作系統。據悉,華為公司此前就已經發....
      的頭像 lhl545545 發表于 09-24 10:33 ? 937次 閱讀

      【干貨】簡述Linux如何應用在嵌入式單片機上

      大多數功能更強大的緊湊型單片機(SBC)都運行一種流行的Linux發行版,專門用于這些嵌入式板。盡管沒有針對嵌入式應用程序的...
      發表于 09-24 09:48 ? 101次 閱讀

      高效學習Linux內核——內核模塊編譯

      本文主要講解什么是Linux內核,以及通過多張圖片展示Linux內核的作用、功能及基本編程方法,以便于讀者能快速理解什么是Linux...
      發表于 09-24 09:11 ? 0次 閱讀

      Cadence發布Helium Virtual和Hybrid Studio平臺,加速移動、汽車及超大規模系統開發

      全新Helium Virtual和Hybrid Studio是Cadence驗證全流程的組成部分,該....
      發表于 09-23 14:30 ? 853次 閱讀

      嵌入式linux直流電機驅動程序的設計

      嵌入式linux直流電機驅動程序的設計(深圳核達中遠通電源技術股份有限公司怎么樣)-3.1?安裝Re....
      發表于 09-23 13:44 ? 17次 閱讀
      嵌入式linux直流電機驅動程序的設計

      跑Linux操作系統需要什么處理器

      單片機、Cortex-M、Linux它們和嵌入式有什么區別? 跑 Linux 操作系統需要什么處理器....
      的頭像 硬件攻城獅 發表于 09-23 11:10 ? 763次 閱讀

      手把手教你在舊手機上搭建一臺備份服務器

      本文將向你展示如何使用 UrBackup 和 Linux Deploy在一臺 Android 舊手機....
      的頭像 凡億PCB 發表于 09-23 10:26 ? 2041次 閱讀
      手把手教你在舊手機上搭建一臺備份服務器

      可搭建私人網盤的在線文件瀏覽器

      【導語】:可搭建私人網盤的在線文件瀏覽器。 簡介 filebrowser 提供指定目錄下的文件管理界....
      的頭像 Linux愛好者 發表于 09-23 09:32 ? 124次 閱讀

      怎么安裝適用于Linux *的OpenVINO?工具包的英特爾?發布版?

      怎么安裝適用于Linux *的OpenVINO?工具包的英特爾?發布版?...
      發表于 09-23 08:33 ? 0次 閱讀

      ACM程序設計常用算法與數據結構參考

      ACM程序設計常用算法與數據結構參考(核達中遠通電源技術有限公司招聘電話)-如今的程序設計已不再是個....
      發表于 09-22 18:02 ? 12次 閱讀
      ACM程序設計常用算法與數據結構參考

      香蕉派 BPI-M2 Pro單板計算機,采用Amlogic S905X3 四核A55 64位處理器設計

      Banana Pi BPI-M2 Pro是比派科技于2021年推出的一款單板機計算機。它采用Amlogic S905X3四核Cortex-A55 (2.0 XX...
      發表于 09-18 17:28 ? 0次 閱讀
      香蕉派 BPI-M2 Pro單板計算機,采用Amlogic S905X3 四核A55 64位處理器設計

      【嵌入式資料精選合集】嵌入式工程師資料免費分享

      學習就是要不斷的吸納知識,在研發過程中,經常會遇到一些問題,這種發現問題并解決問題的過程就是進步。為什么選擇學習嵌入式?...
      發表于 09-18 16:42 ? 1511次 閱讀
      【嵌入式資料精選合集】嵌入式工程師資料免費分享

      在linux下安裝Apache+Php+Mysql

      在linux下安裝Apache+Php+Mysql(數字電源技術及其應用)-文檔為在linux下安裝....
      發表于 09-18 16:09 ? 26次 閱讀
      在linux下安裝Apache+Php+Mysql

      STM32MP157 Linux系統移植開發篇13:Linux內核5寸觸摸屏驅動移植

      本文章為《STM32MP157 Linux系統移植開發篇》系列中的一篇,筆者使用的開發平臺為華清遠見FS-MP1A開發板(STM32M...
      發表于 09-18 11:50 ? 101次 閱讀

      深入探究Linux系統噪音統計(osnoise tracer)

      在Linux系統中作為一個普通線程是非常苦逼的。不僅NMI 、硬中斷、軟中斷可以打斷它,甚至其它普通....
      的頭像 Linux閱碼場 發表于 09-18 10:53 ? 249次 閱讀
      深入探究Linux系統噪音統計(osnoise tracer)

      學習嵌入式linux為什么推薦stm32mp157開發板?

      stm32mp157是ST推出的一款雙A7+M4多核異構處理器,既可以學習linux,又可以學習stm32單片機開發,還可以拓展物聯網、人工智能...
      發表于 09-18 10:08 ? 202次 閱讀

      Python主要有哪幾大應用領域

      Python是什么?Python的特點是什么? Python有哪些應用領域? ...
      發表于 09-18 06:19 ? 0次 閱讀

      開發板上玩GTA,RISC-V多項移植項目成功運作中

      開發板上玩GTA ,RISC-V 多項移植項目成功運作中 ? RISC-V近期再度掀起了不小的熱度,....
      的頭像 E4Life 發表于 09-15 09:47 ? 1990次 閱讀
      開發板上玩GTA,RISC-V多項移植項目成功運作中

      Linux系統中圖形顯示方案

      Linux系統中圖形顯示方案 ? 1 FBDEV Framebuffer device 社區參與度不....
      的頭像 Linux愛好者 發表于 09-14 10:43 ? 240次 閱讀
      Linux系統中圖形顯示方案

      「含源碼」關于NXP IMX8 Mini的圖形開發指南(GPU)案例分享!

      NXP IMX8圖形開發指南(GPU) 基于Graphical Demo,支持OpenGL、Open....
      的頭像 黃工 發表于 09-10 18:13 ? 46次 閱讀
      「含源碼」關于NXP IMX8 Mini的圖形開發指南(GPU)案例分享!

      在Windows系統中安裝WSL子系統

      在上一篇文章中,我們主要聊了一下:在 Windows 系統中,安裝 WSL 子系統。 文章在此:WS....
      的頭像 Linux閱碼場 發表于 09-09 11:33 ? 304次 閱讀
      在Windows系統中安裝WSL子系統

      嵌入式Linux應用程序開發標準教程電子版

      共計12章,有需要剩下部分的私信我哦~免費分享
      發表于 09-09 09:29 ? 28次 閱讀

      如何使用頂級的Linux手機

      未來取代安卓或 iOS 的可能是 Linux 手機,但如今,有哪些選擇可以嘗試一下呢? 雖然安卓是基....
      的頭像 Linux愛好者 發表于 09-09 09:26 ? 1439次 閱讀

      最為精簡的一個Linux Fork炸彈解析

      轉自:http://blog.saymagic.cn/2015/03/25/fork-bomb.ht....
      的頭像 Linux愛好者 發表于 09-07 16:12 ? 148次 閱讀

      在Linux中如何使用shell批量修改文件名

      1、通過sed替換 [root@node01 wolf]# find / -type f -name....
      的頭像 馬哥Linux運維 發表于 09-07 16:06 ? 193次 閱讀

      如何使用uptimed來監視Linux系統

      大家好,我是良許。 作為一名合格的 Linux 運維人員,監視系統的正常運行時間可以說是一門基本功了....
      的頭像 Linux閱碼場 發表于 09-07 15:00 ? 200次 閱讀
      如何使用uptimed來監視Linux系統

      Linux問題分析與性能優化

      文章來源于:https://mp.weixin.qq.com/s/d1NLXGp7teOgskuss....
      的頭像 張真 發表于 09-06 19:01 ? 103次 閱讀
      Linux問題分析與性能優化

      Ubuntu權威指南電子版資源下載

      Ubuntu權威指南電子版資源下載
      發表于 09-06 15:13 ? 27次 閱讀

      Linux ptp4l程序實現PTP邊界時鐘和普通時鐘

      精確時間協議(PTP)是用于在網絡中進行時鐘同步的協議。當與硬件支持結合使用時, PTP 能夠達到亞....
      的頭像 廣州虹科電子科技有限公司 發表于 09-05 11:27 ? 559次 閱讀

      NVIDIA DRIVE OS 5.2.6 Linux SDK發布 為加速計算和AI而設計

      NVIDIA DRIVE OS 5.2.6 Linux SDK現已在NVIDIA DRIVE開發者網....
      的頭像 NVIDIA英偉達企業解決方案 發表于 09-03 15:03 ? 3131次 閱讀

      【含案例源碼】IMX8基于FlexSPI、PCIe與FPGA的高速通信開發詳解!

      前 言本文主要介紹i.MX 8M Mini基于FlexSPI、PCIe與FPGA的高速通信案例。本文....
      的頭像 黃工 發表于 09-02 17:29 ? 208次 閱讀
      【含案例源碼】IMX8基于FlexSPI、PCIe與FPGA的高速通信開發詳解!

      Linux系統編程中的文件描述符調用

      文件描述符 進程每打開一個文件的時候,會獲得該文件的文件描述符,而后續的讀寫操作都把文件描述符作為參....
      的頭像 C語言編程學習基地 發表于 09-02 09:50 ? 187次 閱讀
      Linux系統編程中的文件描述符調用

      Linux服務器被入侵導致凍結的過程

      來自:看雪論壇,作者:Hefe https://bbs.pediy.com/thread-22516....
      的頭像 Linux愛好者 發表于 09-01 16:11 ? 1314次 閱讀

      從零開始搭建Kubernetes集群步驟

      雖然網上有大量從零搭建 K8S 的文章,但大都針對老版本,若直接照搬去安裝最新的 1.20 版本會遇....
      的頭像 Linux愛好者 發表于 09-01 14:33 ? 647次 閱讀
      從零開始搭建Kubernetes集群步驟

      查看Linux服務器性能參數指標教程

      一個基于 Linux 操作系統的服務器運行的同時,也會表征出各種各樣參數信息。通常來說運維人員、系統....
      的頭像 Linux愛好者 發表于 09-01 14:25 ? 225次 閱讀
      查看Linux服務器性能參數指標教程

      Linux內核文件Cache機制

      Linux內核文件Cache機制(開關電源技術與設計 第二版)-Linux內核文件Cache機制....
      發表于 08-31 16:34 ? 26次 閱讀
      Linux內核文件Cache機制

      安裝xp win7 mac linux多系統

      安裝xp win7 mac linux多系統(電源技術審稿嚴不嚴)-安裝xp、win7、mac、li....
      發表于 08-31 16:25 ? 29次 閱讀
      安裝xp win7 mac linux多系統

      Linux下Apache服務器的安裝和配置

      Linux下Apache服務器的安裝和配置(現代電源技術的發展概況)-Linux下Apache服務器....
      發表于 08-31 16:22 ? 28次 閱讀
      Linux下Apache服務器的安裝和配置

      Linux的apache

      Linux的apache(ups電源技術轉讓)-Linux的apache,有需要的可以參考!
      發表于 08-31 16:17 ? 20次 閱讀
      Linux的apache

      遠程桌面協議是如何工作的 常用的協議有幾種

      遠程桌面協議(RDP)是一個多通道(multi-channel)的協議,讓使用者(所在計算機稱為用戶....
      的頭像 Les 發表于 08-31 14:37 ? 1017次 閱讀

      并行程序設計中最重要的鎖-RCU鎖

      hi,大家好,今天給大家分享并行程序設計中最重要的鎖-RCU鎖,RCU鎖本質是用空間換時間,是對讀寫....
      的頭像 開關電源芯片 發表于 08-27 14:25 ? 323次 閱讀

      Linux進程間通信趣味介紹

      ??? 月黑風高夜,突然聽得咣當一聲,Web服務器的目錄下冒出了兩個文件,弄出了不小的聲響。這兩個家....
      的頭像 深圳東裕光大 發表于 08-27 10:28 ? 1248次 閱讀

      嵌入式Linux工程師的職業方向是什么

      很多學習嵌入式的新人、工程師,在學習到半途中,總會感覺到迷茫,不知道自己從哪方面入手、進階,也不知道....
      的頭像 硬件攻城獅 發表于 08-25 16:55 ? 438次 閱讀

      用來獲取linux系統信息的shell腳本

      一、腳本 今天主要分享一個shell腳本,用來獲取linux系統CPU、內存、磁盤IO等信息。 #!....
      的頭像 RTThread物聯網操作系統 發表于 08-25 16:00 ? 1901次 閱讀

      OpenCV中的Python實現

      OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Window....
      的頭像 人工智能 發表于 08-25 15:55 ? 225次 閱讀

      人工智能正在改變物流自動化的方式,將為勞動密集型產業帶來革新

      將人工智能引入物流自動化將大大增強人工智能的影響力。人工智能可以減少常見的半技能任務(如對產品進行分....
      發表于 08-25 14:49 ? 986次 閱讀

      鳥哥的Linux私房菜基礎學習篇電子版下載

      鳥哥的Linux私房菜基礎學習篇電子版下載
      發表于 08-23 16:14 ? 85次 閱讀

      18個用來監控網絡使用情況的Linux命令行工具

      導讀本文介紹了一些可以用來監控網絡使用情況的Linux命令行工具。這些工具可以監控通過網絡接口傳輸的....
      的頭像 開關電源芯片 發表于 08-23 09:56 ? 212次 閱讀
      18個用來監控網絡使用情況的Linux命令行工具

      如何在Android舊手機上搭建一臺備份服務器

      原作者:Hannah Lee 譯者:彎月 本文將向你展示如何使用 UrBackup 和 Linux ....
      的頭像 開關電源芯片 發表于 08-23 09:40 ? 251次 閱讀

      linux查看端口被進程占用的方法 Linux與windows的區別

      Linux的全稱為GNU/Linux,是一種免費使用和自由傳播的類UNIX操作系統,其內核由林納斯·....
      的頭像 Les 發表于 08-22 14:23 ? 436次 閱讀

      Cluster Server R2集群服務器

      查看ClusterServerR2集群服務器規格書,可了解更多內容
      發表于 08-20 16:27 ? 2次 閱讀

      Core-3399Pro-JD4六核高性能AI核心板

      查看Core-3399Pro-JD4六核高性能AI核心板規格書,可了解更多內容
      發表于 08-20 16:27 ? 15次 閱讀

      AM4379 AM437x ARM Cortex-A9 微處理器 (MPU)

      TI AM437x高性能處理器基于ARM Cortex-A9內核。 這些處理器通過3D圖形加速得到增強,可實現豐富的圖形用戶界面,還配備了協處理器,用于進行確定性實時處理(包括EtherCAT,PROFIBUS,EnDat等工業通信協議)。該器件支持高級操作系統(HLOS)。基于Linux的® 可從TI免費獲取。其它HLOS可從TI的設計網絡和生態系統合作伙伴處獲取。 這些器件支持對采用較低性能ARM內核的系統升級,并提供更新外設,包括QSPI-NOR和LPDDR2等存儲器選項。 這些處理器包含功能方框圖中顯示的子系統,并且后跟相應的“說明”中添加了更多信息說明。 處理器子系統基于ARM Cortex-A9內核,PowerVR SGX™圖形加速器子系統提供3D圖形加速功能以支持顯示和高級用戶界面。 可編程實時單元子系統和工業通信子系統(PRU-ICSS與ARM內核分離,允許單獨操作和計時,以實現更高的效率和靈活性.PRU-ICSS支持更多外設接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太網Powerlink,Sercos,EnDat等...
      發表于 09-25 11:51 ? 346次 閱讀
      AM4379 AM437x ARM Cortex-A9 微處理器 (MPU)
      暖暖视频在线观看日本