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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                在本節中,我們將通過編寫一個C可執行程序來驗證驅動程序freg所提供的dev文件系統接口的正確性,這是通過調用read和write函數讀寫設備文件/dev/freg的內容來實現的。對于Android應用程序開發者來說,可能會覺得奇怪,怎么能在Android系統中編寫C語言程序呢?其實在Android源代碼工程環境中,不僅可以用C/C++語言來開發可執行程序,還可以開發動態鏈接庫,即so文件。使用adb工具命令連接上Android模擬器之后,進入到/system/bin或者/system/lib目錄中,就可以看到很多可執行程序或者動態鏈接庫文件。在接下來的2.3小節中,我們為虛擬硬件設備freg所編寫的硬件抽象層模塊接口其實就是一個動態鏈接庫文件。 在Android源代碼工程環境中開發的C可執行程序源文件一般保存在external目錄中,因此,我們進入到external目錄中,并且創建一個freg目錄,用來保存我們將要開發的C可執行程序源文件。它的目錄結構如下: ~~~ ~/Android ----external ----freg ----freg.c ----Android.mk ~~~ 這個C應用程序只有一個源文件 freg.c和一個編譯腳本文件Android.mk。下面我們就詳細分析這兩個文件的內容。 **freg.c** ~~~ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #define FREG_DEVICE_NAME "/dev/freg" int main(int argc, char** argv) { int fd = -1; int val = 0; fd = open(FREG_DEVICE_NAME, O_RDWR); if(fd == -1) { printf("Failed to open device %s.\n", FREG_DEVICE_NAME); return -1; } printf("Read original value:\n"); read(fd, &val, sizeof(val)); printf("%d.\n\n", val); val = 5; printf("Write value %d to %s.\n\n", val, FREG_DEVICE_NAME); write(fd, &val, sizeof(val)); printf("Read the value again:\n"); read(fd, &val, sizeof(val)); printf("%d.\n\n", val); close(fd); return 0 } ~~~ 第11行通過調用open函數,并且以讀寫方式打開設備文件/dev/freg;接著第18行調用read函數讀取它的內容,即讀取虛擬硬件設備freg的寄存器val的內容,并且將它的內容打印出來。第23行調用write函數將一個整數5寫入到虛擬硬件設備freg的寄存器val中;接著第26行和第27行再調用read和print函數將這個整數5讀取并且打印出來。假設虛擬硬件設備freg的寄存器val是第一次被訪問,那么如果一切正常的話,兩次打印出來的內容就應該分別為0和5。 **Android.mk** ~~~ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE := freg LOCAL_SRC_FILES := $(call all-subdir-c-files) include $(BUILD_EXECUTABLE) ~~~ 這是源文件freg.c的編譯腳本文件,它與使用Java語言開發的Android應用程序的編譯腳本的不同之處在于include命令后面所帶的參數。對于C可執行程序來說,它的編譯腳本中的include命令后面跟的參數的值為$(BUILD_EXECUTABLE),表示當前要編譯的是一個可執行應用程序模塊,并且將編譯結果保存在out/target/product/gerneric/system/bin目錄中。 準備好這兩個文件之后,我們就可以通過mmm和make snod命令來編譯和打包這個C可執行程序了。 ~~~ USER@MACHINE:~/Android$ mmm ./external/freg/ USER@MACHINE:~/Android$ make snod ~~~ 編譯成功后,就可以在out/target/product/gerneric/system/bin目錄下看到一個freg文件;而當打包成功后,這個文件就會包含在out/target/product/gerneric目錄下的Android系統鏡像文件system.img中。 最后,我們就可以使用編譯和打包后得到的system.img文件啟動Android模擬器,然后使用adb工具連接上它,并且進入到/system/bin目錄中,執行里面的freg文件來驗證驅動程序freg的dev文件系統訪問接口的正確性。 ~~~ USER@MACHINE: ~/Android$ emulator -kernel kernel/goldfish/arch/arm/boot/zImage & USER@MACHINE: ~/Android$ adb shell root@android:/ # cd system/bin root@android:/system/bin # ./freg Read original value: 0. Write value 5 to /dev/freg. Read the value again: 5. ~~~ 如果能夠看到上面的輸出,就說明驅動程序freg所提供的dev文件系統訪問接口是正確的。 接下來,我們繼續介紹如何為虛擬硬件設備freg編寫硬件抽象層模塊接口。
                  <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>

                              哎呀哎呀视频在线观看