日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Linux內核中經常可見container_of的身影,它在實際驅動的編寫中也是廣泛應用。

container_of原理

作用:通過結構體的某個成員變量地址找到該結構體的首地址

定義如下:

/**
 * container_of - cast a member of a structure out to the containing structure
 * @ptr:    the pointer to the member.
 * @type:   the type of the container struct this is embedded in.
 * @member: the name of the member within the struct.
 *
 */
#define container_of(ptr, type, member) ({          \
    const typeof( ((type *)0)->member ) *__mptr = (ptr); \
    (type *)( (char *)__mptr - offsetof(type,member) );})

登錄后復制

    ptr:結構體成員變量的指針
    type:結構體類型
    member:結構體成員變量的名字

    換句話說,叫:已知結構體type的成員member的地址ptr,求解結構體type的起始地址

    計算公式為:type的起始地址 = ptrsize (size為member的大小)

    以一幅圖說明ptrtypemember的關系:

      原理簡述:

      container_of的妙處就在于0作為成員變量member的基址

      其中定義了一個中間變量__mptr,"__"代表內部使用,“m”代表middle

      #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

      登錄后復制

      typeof( ((type *)0)->member )是獲取member的類型,__mptr = (ptr)判斷ptrmember是否為同一類型,offsetof計算成員member的大小size

      驅動中的實際例子

      例如內核的pwm驅動,通過成員變量chip,找到結構體bcm2835_pwm

      struct bcm2835_pwm {
       struct pwm_chip chip;
       struct device *dev;
       void __iomem *base;
       struct clk *clk;
      };
      
      static inline struct bcm2835_pwm *to_bcm2835_pwm(struct pwm_chip *chip_ptr)
      {
       return container_of(chip_ptr, struct bcm2835_pwm, chip);
      }

      登錄后復制

      使用container_of通常都會定義一個函數,并且命名為to_xxx或者to_find_xxx,代表要找xxx這個結構體,傳參則傳入成員變量指針,另外函數也會聲明為inline

以上就是Linux內核基礎篇——container_of原理和實際應用的詳細內容,更多請關注www.92cms.cn其它相關文章!

分享到:
標簽:Linux 內核 原理 基礎 實際應用
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定