免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
在Ubuntu上為Android系統(tǒng)內(nèi)置C可執(zhí)行程序測試Linux內(nèi)核驅(qū)動程序

在前一篇文章中,我們介紹了如何在Ubuntu上為Android系統(tǒng)編寫Linux內(nèi)核驅(qū)動程序。在這個名為hello的Linux內(nèi)核驅(qū)動程序中,創(chuàng)建三個不同的文件節(jié)點(diǎn)來供用戶空間訪問,分別是傳統(tǒng)的設(shè)備文件/dev/hello、proc系統(tǒng)文件/proc/hello和devfs系統(tǒng)屬性文件/sys/class/hello/hello/val。進(jìn)一步,還通過cat命令來直接訪問/proc/hello和/sys/class/hello/hello/val文件來,以驗(yàn)證驅(qū)動程序的正確性。在這一篇文章里,我們將通過自己編寫的C可執(zhí)行程序來訪問設(shè)備文件/dev/hello??赡茏x者會覺得奇怪,怎么能在Android系統(tǒng)中用C語言來編寫應(yīng)用程序呢?Android系統(tǒng)上的應(yīng)用程序不都是Java應(yīng)用程序嗎?其實(shí)是可以的,讀者不妨用adb shell命令連上Android模擬器,在/system/bin目錄下可以看到很多C可執(zhí)行程序,如cat命令。今天,我們就來學(xué)習(xí)一下怎么在Android系統(tǒng)中添加用C語言編寫的可執(zhí)行程序吧。

      一. 參照在Ubuntu上為Android系統(tǒng)編寫Linux內(nèi)核驅(qū)動程序一文,準(zhǔn)備好Linux驅(qū)動程序。使用Android模擬器加載包含這個Linux驅(qū)動程序的內(nèi)核文件,并且使用adb shell命令連接上模擬,驗(yàn)證在/dev目錄中存在設(shè)備文件hello。

      二. 進(jìn)入到Android源代碼工程的external目錄,創(chuàng)建hello目錄:

      USER-NAME@MACHINE-NAME:~/Android$ cd external

      USER-NAME@MACHINE-NAME:~/Android/external$ mkdir hello

      三. 在hello目錄中新建hello.c文件:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <fcntl.h>  
  4. #define DEVICE_NAME "/dev/hello"  
  5. int main(int argc, char** argv)  
  6. {  
  7.     int fd = -1;  
  8.     int val = 0;  
  9.     fd = open(DEVICE_NAME, O_RDWR);  
  10.     if(fd == -1) {  
  11.         printf("Failed to open device %s.\n", DEVICE_NAME);  
  12.         return -1;  
  13.     }  
  14.       
  15.     printf("Read original value:\n");  
  16.     read(fd, &val, sizeof(val));  
  17.     printf("%d.\n\n", val);  
  18.     val = 5;  
  19.     printf("Write value %d to %s.\n\n", val, DEVICE_NAME);  
  20.         write(fd, &val, sizeof(val));  
  21.       
  22.     printf("Read the value again:\n");  
  23.         read(fd, &val, sizeof(val));  
  24.         printf("%d.\n\n", val);  
  25.     close(fd);  
  26.     return 0;  
  27. }  

      這個程序的作用中,打開/dev/hello文件,然后先讀出/dev/hello文件中的值,接著寫入值5到/dev/hello中去,最后再次讀出/dev/hello文件中的值,看看是否是我們剛才寫入的值5。從/dev/hello文件讀寫的值實(shí)際上就是我們虛擬的硬件的寄存器val的值。

      四. 在hello目錄中新建Android.mk文件:

      LOCAL_PATH := $(call my-dir)

      include $(CLEAR_VARS)

      LOCAL_MODULE_TAGS := optional

      LOCAL_MODULE := hello

      LOCAL_SRC_FILES := $(call all-subdir-c-files)

      include $(BUILD_EXECUTABLE)

      注意,BUILD_EXECUTABLE表示我們要編譯的是可執(zhí)行程序。 

      五. 參照如何單獨(dú)編譯Android源代碼中的模塊一文,使用mmm命令進(jìn)行編譯:

      USER-NAME@MACHINE-NAME:~/Android$ mmm ./external/hello

      編譯成功后,就可以在out/target/product/gerneric/system/bin目錄下,看到可執(zhí)行文件hello了。

      六. 重新打包Android系統(tǒng)文件system.img:

      USER-NAME@MACHINE-NAME:~/Android$ make snod

      這樣,重新打包后的system.img文件就包含剛才編譯好的hello可執(zhí)行文件了。

      七. 運(yùn)行模擬器,使用/system/bin/hello可執(zhí)行程序來訪問Linux內(nèi)核驅(qū)動程序:

      USER-NAME@MACHINE-NAME:~/Android$ emulator -kernel ./kernel/common/arch/arm/boot/zImage &

      USER-NAME@MACHINE-NAME:~/Android$ adb shell

      root@android:/ # cd system/bin

      root@android:/system/bin # ./hello

      Read the original value:

      0.

      Write value 5 to /dev/hello.

      Read the value again:

      5.

      看到這個結(jié)果,就說我們編寫的C可執(zhí)行程序可以訪問我們編寫的Linux內(nèi)核驅(qū)動程序了。

      介紹完了如何使用C語言編寫的可執(zhí)行程序來訪問我們的Linux內(nèi)核驅(qū)動程序,讀者可能會問,能不能在Android的Application Frameworks提供Java接口來訪問Linux內(nèi)核驅(qū)動程序呢?可以的,接下來的幾篇文章中,我們將介紹如何在Android的Application Frameworks中,增加Java接口來訪問Linux內(nèi)核驅(qū)動程序,敬請期待。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
在Ubuntu上為Android系統(tǒng)編寫Linux內(nèi)核驅(qū)動程序
在Ubuntu上為Android增加硬件抽象層(HAL)模塊訪問Linux內(nèi)核驅(qū)動程序
ldd3筆記基礎(chǔ)知識
Android 開發(fā)之---- 底層驅(qū)動開發(fā)(一)
MTK Android添加驅(qū)動模塊
Android4.4圖像顯示之gralloc驅(qū)動分析
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服