<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 9.5.?快速參考 本章介紹下列與硬件管理相關的符號: ~~~ #include <linux/kernel.h> void barrier(void) ~~~ 這個"軟件"內存屏蔽要求編譯器對待所有內存是跨這個指令而非易失的. ~~~ #include <asm/system.h> void rmb(void); void read_barrier_depends(void); void wmb(void); void mb(void); ~~~ 硬件內存屏障. 它們請求 CPU(和編譯器)來檢查所有的跨這個指令的內存讀, 寫, 或都有. ~~~ #include <asm/io.h> unsigned inb(unsigned port); void outb(unsigned char byte, unsigned port); unsigned inw(unsigned port); void outw(unsigned short word, unsigned port); unsigned inl(unsigned port); void outl(unsigned doubleword, unsigned port); ~~~ 用來讀和寫 I/O 端口的函數. 它們還可以被用戶空間程序調用, 如果它們有正當的權限來存取端口. ~~~ unsigned inb_p(unsigned port); ~~~ 如果在一次 I/O 操作后需要一個小延時, 你可以使用在前一項中介紹的這些函數的 6 個暫停對應部分; 這些暫停函數有以 _p 結尾的名子. ~~~ void insb(unsigned port, void *addr, unsigned long count); void outsb(unsigned port, void *addr, unsigned long count); void insw(unsigned port, void *addr, unsigned long count); void outsw(unsigned port, void *addr, unsigned long count); void insl(unsigned port, void *addr, unsigned long count); void outsl(unsigned port, void *addr, unsigned long count); ~~~ 這些"字串函數"被優化為傳送數據從一個輸入端口到一個內存區, 或者其他的方式. 這些傳送通過讀或寫到同一端口 count 次來完成. ~~~ #include <linux/ioport.h> struct resource *request_region(unsigned long start, unsigned long len, char *name); void release_region(unsigned long start, unsigned long len); int check_region(unsigned long start, unsigned long len); ~~~ I/O 端口的資源分配器. 這個檢查函數成功返回 0 并且在錯誤時小于 0. ~~~ struct resource *request_mem_region(unsigned long start, unsigned long len, char *name); void release_mem_region(unsigned long start, unsigned long len); int check_mem_region(unsigned long start, unsigned long len); ~~~ 為內存區處理資源分配的函數 ~~~ #include <asm/io.h> void *ioremap(unsigned long phys_addr, unsigned long size); void *ioremap_nocache(unsigned long phys_addr, unsigned long size); void iounmap(void *virt_addr); ~~~ ioremap 重映射一個物理地址范圍到處理器的虛擬地址空間, 使它對內核可用. iounmap 釋放映射當不再需要它時. ~~~ #include <asm/io.h> unsigned int ioread8(void *addr); unsigned int ioread16(void *addr); unsigned int ioread32(void *addr); void iowrite8(u8 value, void *addr); void iowrite16(u16 value, void *addr); void iowrite32(u32 value, void *addr); ~~~ 用來使用 I/O 內存的存取者函數. ~~~ void ioread8_rep(void *addr, void *buf, unsigned long count); void ioread16_rep(void *addr, void *buf, unsigned long count); void ioread32_rep(void *addr, void *buf, unsigned long count); void iowrite8_rep(void *addr, const void *buf, unsigned long count); void iowrite16_rep(void *addr, const void *buf, unsigned long count); void iowrite32_rep(void *addr, const void *buf, unsigned long count); ~~~ I/O 內存原語的"重復"版本. ~~~ unsigned readb(address); unsigned readw(address); unsigned readl(address); void writeb(unsigned value, address); void writew(unsigned value, address); void writel(unsigned value, address); memset_io(address, value, count); memcpy_fromio(dest, source, nbytes); memcpy_toio(dest, source, nbytes); ~~~ 舊的, 類型不安全的存取 I/O 內存的函數. ~~~ void *ioport_map(unsigned long port, unsigned int count); void ioport_unmap(void *addr); ~~~ 一個想對待 I/O 端口如同它們是 I/O 內存的驅動作者, 可以傳遞它們的端口給 ioport_map. 這個映射應當在不需要的時候恢復( 使用 ioport_unmap )
                  <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>

                              哎呀哎呀视频在线观看