• 八方資訊網歡迎您!
    八方資訊網>商訊>正文

    Android編寫簡單的驅動程序并且將其編譯到內核中!

    2021-01-25 07:57:46 來源: 閱讀:-

    通過之前的一篇文章,我們了解了 Android中的Binder機制和遠程服務調用 在這篇文章中主要介紹了Android中的應用在調用一些系統服務的時候的原理,那么接下來就繼續來介紹一下如何通過編譯Android源碼來手動添加一個系統服務,讓編譯之后的Android系統中存在我們的這個服務,每個應用都可以調用。但是本文得先介紹一下如何編寫一個簡單的驅動程序,先介紹了驅動程序,然后在通過JNI讓framework層訪問這個驅動程序,在通過注冊服務來封裝這個功能,最后在把這個服務添加到系統中,實現上層應用通過訪問這個服務來操作驅動,當然你必須要掌握和了解 :

    Android中如何編譯源碼(可以去http://www.wjdiankong.cn 中找到這篇文章)

    如果沒有編譯過Android源碼的話,下面的內容將會看的很吃力的。

    聲明:本文內容參考羅升陽的書籍:《Android系統源代碼情景分析》 如果想了解更詳細的內容建議購買此書,大神的博客地址:http://blog.csdn.net/luoshengyang

    一、編寫內核驅動程序

    這里不會介紹內核驅動小程序內容,因為沒什么好說的,就是Linux系統api,然后在了解一下驅動的概念即可。這里主要介紹操作步驟,關于代碼后面我會給出下載地址,感興趣的同學可以自己詳細看一下。

    第一步:進入源碼內核目錄創建驅動程序目錄

    cd kernel/drivers

    在這個目錄中,我們新建一個我們自己的驅動目錄freg:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    看到這個目錄中有很多系統的驅動程序。然后就在這個freg目錄中編寫驅動程序:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    這里的freg.c就是驅動程序,這里,我們不會為真實的硬件設備編寫內核驅動程序。為了方便描述為Android系統編寫內核驅動程序的過程,我們使用一個虛擬的硬件設備,這個設備只有一個4字節的寄存器,它可讀可寫。

    第二步:配置驅動程序編譯信息

    在freg目錄中新增Kconfig和Makefile兩個文件,其中Kconfig是在編譯前執行配置命令make menuconfig時用到的:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    而Makefile是執行編譯命令make是用到的:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    第三步:將驅動程序到系統配置中

    上面配置完了驅動程序自身的編譯信息,如果想把這個驅動程序編譯到內核中,還需要配置內核信息,修改arch/arm/Kconfig和drivers/kconfig兩個文件,在menu "Device Drivers"和endmenu之間添加一行:

    source "drivers/hello/Kconfig"

    Android編寫簡單的驅動程序并且將其編譯到內核中

    Android編寫簡單的驅動程序并且將其編譯到內核中

    這樣,執行make menuconfig時,就可以配置hello模塊的編譯選項了。修改drivers/Makefile文件,添加一行:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    第四步:編譯內核驅動

    在內核目錄下運行命令:make menuconfig

    Android編寫簡單的驅動程序并且將其編譯到內核中

    "Device Drivers" => "First Android Drivers"選項,設置為y:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    這樣就編譯驅動程序成功了,下面就開始編譯內核源碼

    第五步:啟動模擬器檢查驅動程序

    到源碼的根目錄中,運行命令:

    emulator -kernel ./kernel/common/arch/arm/boot/zImage &

    Android編寫簡單的驅動程序并且將其編譯到內核中

    有的同學可能會遇到這個錯誤,不過沒關系,咋們在運行一下腳本文件:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    如果運行成功的話,就可以看到模擬器了:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    這時候,我們使用adb shell命令查看驅動程序的功能:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    首先驅動程序肯定是存放在/dev目錄中的,如果要進行操作驅動程序,需要到/proc目錄中找到指定驅動程序,然后可以使用echo命令寫入數據,cat命令讀取數據。

    到這里,我們就成功的編寫了虛擬驅動程序,并且編譯到內核中,通過命令訪問也是測試通過了。這里采用的是系統提供的方法和驅動程序進行交互,也就是通過proc文件系統和devfs文件系統的方法。

    二、編寫內核驅動訪問程序

    有了上面的驅動程序內容,下面為了更好的方便操作這個驅動,我們可以在編寫一個簡單的C語言來直接訪問這個驅動,而操作驅動的方法也很簡單,使用open方法即可。

    第一步:建立系統程序目錄

    進入/external/目錄,新建一個freg程序目錄:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    第二步:編寫操作驅動程序

    這里的代碼比較簡單,在main函數中直接使用open打開驅動,然后就可以直接讀寫操作了

    Android編寫簡單的驅動程序并且將其編譯到內核中

    第三步:建立編譯腳本,然后編譯程序

    在程序的同一目錄下,創建編譯腳本:Android.mk文件

    Android編寫簡單的驅動程序并且將其編譯到內核中

    參照如何單獨編譯Android源代碼中的模塊一文,使用mmm命令進行編譯:

    mmm ./external/freg

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

    重新打包Android系統文件system.img:

    make snod

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

    第四步:運行模擬器

    運行模擬器的命令上面已經介紹了,這里就不在演示了,運行成功之后,就可以使用/system/bin/hello可執行程序來訪問Linux內核驅動程序:

    Android編寫簡單的驅動程序并且將其編譯到內核中

    系統命令都是存放在/system/bin目錄下的,我們可以看到找到我們編譯的讀取驅動的系統命令程序freg,然后可以運行這個程序進行驅動的讀寫操作了。到此就完成了使用C程序來操作驅動了。

    項目案例代碼:

    http://download.csdn.net/detail/jiangwei0910410003/9642364

    三、總結

    本文介紹了如何通過編譯Android內核源碼,來手動的編寫一個簡單的虛擬驅動程序,然后在寫一個簡單的C程序訪問這個驅動,后續將會介紹如何在Framework層通過JNI來訪問這個驅動。

    手機看文章有點費勁,可以進入網頁版:http://www.wjdiankong.cn

    關注微信公眾號:編碼美麗 (微信號:jiangwei0910410003)

    Android編寫簡單的驅動程序并且將其編譯到內核中

    本文為企業推廣,本網站不做任何建議,僅提供參考,作為信息展示!

    推薦閱讀:益陽在線

    網友評論
    請登錄后進行評論| 0條評論

    請文明發言,還可以輸入140

    您的評論已經發表成功,請等候審核

    小提示:您要為您發表的言論后果負責,請各位遵守法紀注意語言文明

    回到首頁 回到頂部
    八方資訊網 關于我們| 聯系我們| 招聘信息| XML地圖| 網站地圖TXT
    免責聲明:八方資訊網所有文字、圖片、視頻、音頻等資料均來自互聯網,不代表本站贊同其觀點,本站亦不為其版權負責。相關作品的原創性、文中陳述文字以及內容數據龐雜本站無法一一核實,如果您發現本網站上有侵犯您的合法權益的內容,請聯系我們,本網站將立即予以刪除!
    Copyright © 2012-2019 http://www.quan28.cn, All rights reserved.
    主站蜘蛛池模板: 国产精品无码免费专区午夜| 88国产精品无码一区二区三区| 国产麻豆一精品一AV一免费| 日韩精品成人一区二区三区| 一夲道无码人妻精品一区二区| 久久国产精品99久久久久久老狼| 亚洲精品无码专区久久同性男| 日本精品一区二区三区在线观看| 亚洲欧美激情精品一区二区| 国产精品VIDEOSSEX久久发布| 国产色婷婷五月精品综合在线 | 牛牛在线精品观看免费正| 国产综合精品女在线观看| 无码人妻精品一区二| www夜片内射视频日韩精品成人 | 国产精品亚洲精品日韩已满| 亚欧洲精品在线视频免费观看 | 国产午夜精品一区理论片| 四虎成人精品无码| 久久久久人妻一区精品果冻| 337P亚洲精品色噜噜| 国产成人A人亚洲精品无码| 日韩精品乱码AV一区二区| 久久无码精品一区二区三区| 北岛玲日韩精品一区二区三区| 99精品视频在线观看re| 无码人妻精品一区二区三18禁| 久久er国产精品免费观看8| 777久久精品一区二区三区无码| 91精品国产福利尤物| 亚洲AV无码成人精品区天堂| 日本免费精品一区二区三区| 国产欧美在线观看精品一区二区 | 中文精品人人永久免费| 精品中文高清欧美| 国产精品久久久99| 91麻豆精品国产91久久久久久 | 99久久精品国产高清一区二区| 久久精品国产亚洲AV无码娇色| 熟妇无码乱子成人精品| 亚洲级αV无码毛片久久精品|