<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 2.5.?內核符號表 我們已經看到 insmod 如何對應共用的內核符號來解決未定義的符號. 表中包含了全局內核項的地址 -- 函數和變量 -- 需要來完成模塊化的驅動. 當加載一個模塊, 如何由模塊輸出的符號成為內核符號表的一部分. 通常情況下, 一個模塊完成它自己的功能不需要輸出如何符號. 你需要輸出符號, 但是, 在任何別的模塊能得益于使用它們的時候. 新的模塊可以用你的模塊輸出的符號, 你可以堆疊新的模塊在其他模塊之上. 模塊堆疊在主流內核源碼中也實現了: msdos 文件系統依賴 fat 模塊輸出的符號, 某一個輸入 USB 設備模塊堆疊在 usbcore 和輸入模塊之上. 模塊堆疊在復雜的工程中有用處. 如果一個新的抽象以驅動程序的形式實現, 它可能提供一個特定硬件實現的插入點. 例如, video-for-linux 系列驅動分成一個通用模塊, 輸出了由特定硬件的低層設備驅動使用的符號. 根據你的設置, 你加載通用的視頻模塊和你的已安裝硬件對應的特定模塊. 對并口的支持和眾多可連接設備以同樣的方式處理, 如同 USB 內核子系統. 在并口子系統的堆疊在圖 [并口驅動模塊的堆疊](# "圖?2.2.?并口驅動模塊的堆疊") 中顯示; 箭頭顯示了模塊和內核編程接口間的通訊. **圖?2.2.?并口驅動模塊的堆疊** ![并口驅動模塊的堆疊](https://box.kancloud.cn/2015-09-02_55e6d9e70461a.png) 當使用堆疊的模塊時, 熟悉 modprobe 工具是有幫助的. 如我們前面講的, modprobe 函數很多地方與 insmod 相同, 但是它也加載任何你要加載的模塊需要的其他模塊. 所以, 一個 modprobe 命令有時可能代替幾次使用 insmod( 盡管你從當前目錄下加載你自己模塊仍將需要 insmod, 因為 modprobe 只查找標準的已安裝模塊目錄 ). 使用堆疊來劃分模塊成不同層, 這有助于通過簡化每一層來縮短開發時間. 這同我們在第 1 章討論的區分機制和策略是類似的. linux 內核頭文件提供了方便來管理你的符號的可見性, 因此減少了命名空間的污染( 將與在內核別處已定義的符號沖突的名子填入命名空間), 并促使了正確的信息隱藏. 如果你的模塊需要輸出符號給其他模塊使用, 應當使用下面的宏定義: ~~~ EXPORT_SYMBOL(name); EXPORT_SYMBOL_GPL(name); ~~~ 上面宏定義的任一個使得給定的符號在模塊外可用. _GPL 版本的宏定義只能使符號對 GPL 許可的模塊可用. 符號必須在模塊文件的全局部分輸出, 在任何函數之外, 因為宏定義擴展成一個特殊用途的并被期望是全局存取的變量的聲明. 這個變量存儲于模塊的一個特殊的可執行部分( 一個 "ELF 段" ), 內核用這個部分在加載時找到模塊輸出的變量. ( 感興趣的讀者可以看 <linux/module.h> 獲知詳情, 盡管并不需要這些細節使東西動起來. )
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看