Android深度探索(卷1)HAL與驅動開發第六章總結

操作系統是通過各種驅動程序賴家與硬件設備的,它為用戶屏蔽了各種各樣的設備,驅動硬件是操作系統最基本的功能,并且提供統一的操作方式。設備驅動程序是操作系統最基本的組成部分之一,在Linux內核源程序中也占有60%以上,因此熟悉驅動的編寫很重要。

Linux系統將每一個驅動都映射成一個文件。這些文件稱為設備文件或驅動文件,都存在/dev目錄中。這樣,在應用程序看來,硬件設備只是一個設備文件,應用程序可以像操作普通文件一樣對硬件設備進行操作,從而大大方便了對設備的處理。

編寫驅動程序的步驟:

(1)建立Linux的驅動骨架(裝載和卸載Linux驅動)任何類型的程序都有一個基本結構,linux驅動程序也不例外。Linux內核在使用驅動時首先需要裝載驅動。在裝載過程中也需要進行一些初始化的工作。

(2)注冊和注銷設備文件

任何一個linux驅動都需要一個設備文件,否則應用程序將無法與驅動程序交互。

(3)指定與驅動相關的信息

驅動程序是自描述的。

(4)指定回調函數

一個驅動程序并不一定要指定所有的回調函數。

(5)編寫業務邏輯

(6)編寫Makefile文件

(7)編寫Linux驅動程序

(8)安裝和卸載Linux驅動

1.準備工作

建立存放Linux驅動程序的目錄

建立驅動源代碼文件

編寫一個makefile文件

2.?編寫linux驅動程序的骨架(初始化和退出驅動)

安裝linux驅動

查看word_count是否成功安裝

卸載linux驅動

查看由驅動輸出的日志信息

3.?指定與驅動相關的信息

模塊作者,模塊描述,模塊別稱,開源協議

4.?注冊和注銷設備文件

5.指定回調函數

6.實現統計單詞數的算法

7.編譯、安裝、卸載linux驅動程序

測試linux驅動

使用ubuntu?linux測試

在android模擬器上通過原聲(native)C程序測試

使用android?NDK測試

使用java代碼直接操作設備文件測試

使用S3C6410開發板測試

將驅動編譯進linux內核進行測試

使用eclipse開發和測試linux驅動

1.建立c工程

2.建立c源代碼文件連接

3.設置include路徑

4.編譯linux驅動

在eclipse中測試linux驅動

1.導入test_word_count.c文件

2.設置include路徑

3.建立targe

4.build工程

5.運行測試程序

需要注意的是,用戶空間與內核空間完成同樣或類似的功能的函數,宏等資源的名稱并不一定相同,有的名稱類似如:malloc和kmalloc?,有的不同如:atoi和simple_strol?等?
http://home.cnblogs.com/u/zivjeli/

轉載于:https://www.cnblogs.com/qian950609/p/5574017.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287397.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287397.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287397.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

es mysql 同步插件_[es和數據庫怎么同步]mysql與elasticsearch實時同步常用插件及優缺點對比(ES與關系型數據庫同步)...

目前mysql與elasticsearch常用的同步機制大多是基于插件實現的,常用的插件包括:elasticsearch-jdbc,elasticsearch-river-MySQL,go-mysql-elasticsearch,logstash-input-jdbc。本文對四種插件的優缺點進行了圖表對比。|序號|插件名稱|地址|——:————…

linux上怎么快速刪除一個目錄?

使用rm -rf命令轉載于:https://www.cnblogs.com/dyh-air/p/7726611.html

關于是否在C#中加入不可空引用類型的爭論

來自微軟的Mads Togersen在近期所提出的一條提議,即在C#語言中加入對不可空引用類型的支持在.NET社區中引起了熱烈的爭論。人們對此提議的反應大相徑庭,既有人對此表示贊賞,也不乏傾向于保持現狀的意見。\\在Reddit上,這條提議引起…

Andorid之提示java.lang.RuntimeException: Unable to start service net.gotev.uploadservice.UploadService@

1 問題 用android-upload-service上傳一個文件提示錯誤如下 04-15 17:46:33.245 24932 24932 E AndroidRuntime: Process: com.appsinnova.android.keepshare, PID: 24932 04-15 17:46:33.245 24932 24932 E AndroidRuntime: java.lang.RuntimeException: Unable to start se…

使用 VS Code + Markdown 編寫 PDF 文檔

1背景介紹 作為一個技術人員,基本都需要編寫技術相關文檔,而且大部分技術人員都應該掌握 Markdown 這個技能,使用 Markdown 來編寫并生成 PDF 文檔將會是一個不錯的體驗,以下就介紹下如何使用 VS Code Markdown 來編寫 PDF…

《看聊天記錄都學不會C語言?太菜了吧》(6)編程很難嗎?差一點就學不會了呢!

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我,若你是真心學習可以送你書籍,指導你學習,給予你目標方向的學習路線,無套路,博客為證。 本系列文章將會以通俗易懂的對話方式進行教學,對話中將涵蓋…

【ArcGIS風暴】氣象臺站氣溫(降水)矢量數據插值成柵格氣溫(降水)空間數據

關于文本格式的氣象數據生成Shapefile矢量數據的過程,可以參照文章《ArcGIS 10.2導入Excel數據X、Y坐標(經緯度、平面坐標),生成Shapefile點數據圖層》。本文在前面生成的具有氣溫和降水屬性的氣象臺站矢量數據的基礎上,通過柵格插值,柵格裁剪等過程生成空間分布的氣溫和…

時間差幾天 php,計算和當前時間差多少天

我們有時在做網站時會碰到比較特別的需求,一條信息顯示是幾天和幾天后的或者一個月前的,上次做一個APP時就碰到了這周情況,留下當時用的代碼以便以后用時不需要東奔西走。PHP代碼:function calcTime($time){$now time(); //當前時…

Android studio之導入新庫提示Add library ‘Gradle*****@aar‘ to classpath

1 問題 as導入第三方庫在依賴的基類build.gradle里面添加如下 implementation com.truizlop.sectionedrecyclerview:library:1.2.0 提示錯誤如下 2 原因 implementation 單層引用,只引用當前aar包層, api 多層引用,引用當前aar包層&#…

Windows 查看端口占用

查看 Windows 端口占用情況 在 Windows 命令行窗口下執行一下命令 查看所有端口占用情況netstat -ano 查看特定端口的占用情況netstat -aon|findstr "8080" 查看PID對應的進程tasklist|findstr "2212" 實例 博主碰到的是8080端口被占用了,如下圖…

Android quot;QR二維碼掃描quot;

支持燈 掃描結果 支持 抄、分享、瀏覽打開(超鏈接) 自己主動保存掃描記錄 劃刪除 和源代碼 git: http://git.oschina.net/892642257/QRCode csdn(0分): http://download.csdn.net/detail/onlyonecoder/7713589 版權聲明:本文博主原創文章。博…

ASP.NET Core中的依賴注入(4): 構造函數的選擇與服務生命周期管理

ServiceProvider最終提供的服務實例都是根據對應的ServiceDescriptor創建的,對于一個具體的ServiceDescriptor對象來說,如果它的ImplementationInstance和ImplementationFactory屬性均為Null,那么ServiceProvider最終會利用其ImplementationT…

C# WPF布局控件LayoutControl介紹

Dev學習地址文檔地址 :https://docs.devexpress.com/wpf:https://docs.devexpress.com/WPF/7875/wpf-controlswinform:https://docs.devexpress.com/WindowsForms/7874/winforms-controlsasp.NET: https://docs.devexpress.com/AspNet/7873/a…

《看聊天記錄都學不會C語言?太菜了吧》(7)下一篇文章告訴你牛郎是誰

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我,若你是真心學習可以送你書籍,指導你學習,給予你目標方向的學習路線,無套路,博客為證。 本系列文章將會以通俗易懂的對話方式進行教學,對話中將涵蓋…

【遙感物候】30年物候始期空間分布特征(平均值)和變化趨勢分析(Slope 一元線性回歸分析)

問題分析:本文的數據為經過預處理和計算得到的30年(1983-2012年)物候參數始期遙感數據,共計30期影像,現在需要逐像元計算整個物候始期的空間分布特征(平均值)和變化趨勢分析(Slope 一元線性回歸分析)。最終的效果(左圖為分布特征,右圖為變化趨勢): 一、方法原理 …

Android之CheckBox進行代碼設置setChecked(true)會觸發setOnCheckedChangeListener事件

1 問題 我們對CheckBox設置了setOnCheckedChangeListener監聽,代碼里面對CheckBox單獨代碼進行設置勾選(setChecked(true))的時候,會觸發OnCheckedChangeListener事件 2 解決辦法 用buttonView.isPressed()解決,這樣就只有手動點擊CheckBox…

密碼技術

要理解SSL就必須理解密碼系統、消息摘要函數(單向或散列函數)和數字簽名,這些技術是許多文獻所討論的主題(比如[AC96),提供了保密性、完整性和認證的基礎。 密碼系統 假設Alice想給她的銀行發一個消息以劃轉資金,并希望這個消息是保密的&…

deb php7 fileinfo,linux安裝php7.2擴展fileinfo

最簡便的方法是使用pecl安裝php的擴展,方便快捷,這里使用的是源碼編譯安裝php擴展項目 中上傳圖片遇到的問題:明顯是fileinfo不被支持,沒有安裝fileinfo。接下來開始安裝因為我的linux服務器里比較干凈,所以之前的php源…

Android之提示java.lang.RuntimeException: Parcel: unable to marshal value Image問題

1 問題 使用Intent攜帶數據(putExtra)跳轉activity,提示如下錯誤 04-18 22:42:49.664 16194 16194 E AndroidRuntime: Process: com.appsinnova.android.keepshare, PID: 16194 04-18 22:42:49.664 16194 16194 E AndroidRuntime: java.lang.RuntimeException: Parcel: unabl…

使用keepalived實現雙機熱備

2019獨角獸企業重金招聘Python工程師標準>>> 通常說的雙機熱備是指兩臺機器都在運行,但并不是兩臺機器都同時在提供服務。當提供服務的一臺出現故障的時候,另外一臺會馬上自動接管并且提供服務,而且切換的時間非常短。下面來以kee…