版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、嵌入式應(yīng)用程序設(shè)計嵌入式應(yīng)用程序設(shè)計 第八章 嵌入式Linux設(shè)備驅(qū)動編程 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 知識點回顧 TCP/IP模型 套接字 TCP 套接字編程 UDP 套接字編程 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 設(shè)備驅(qū)動的基本概念 Linux內(nèi)核與驅(qū)動的關(guān)系 Linux內(nèi)核模塊結(jié)構(gòu) 內(nèi)核模塊命令 本次課內(nèi)容本次課內(nèi)容 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 1.設(shè)備驅(qū)動概念 是處理和操作硬件控制器的軟件。驅(qū)動程序是內(nèi)核 的一部分,是操作系統(tǒng)內(nèi)核與硬件設(shè)備的直接接口, 驅(qū)動程序屏蔽了硬件的細節(jié),完成以下功能: 對設(shè)備初始化和釋放; 對設(shè)備進行管理,包括實時參數(shù)設(shè)置,以及提供
2、對設(shè)備的 操作接口; 讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)或者回送應(yīng)用程序請 求的數(shù)據(jù); 檢測和處理設(shè)備出現(xiàn)的錯誤。 8.1 設(shè)備驅(qū)動編程基礎(chǔ)設(shè)備驅(qū)動 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 2.Linux系統(tǒng)的設(shè)備分類 字符設(shè)備通常指以字節(jié)為單位順序讀寫的 設(shè)備, 如并口設(shè)備、虛擬控制臺等。 塊設(shè)備通常指以塊為單位隨機讀寫的設(shè)備, 如IDE硬盤、SCSI硬盤、光驅(qū)等。 網(wǎng)絡(luò)設(shè)備通常是指通過網(wǎng)絡(luò)能夠與其他主 機進行數(shù)據(jù)通信的設(shè)備,如網(wǎng)卡等。 8.1 設(shè)備驅(qū)動編程基礎(chǔ)設(shè)備驅(qū)動 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 舉例:linux設(shè)備識別 在linux中任何設(shè)備都是文件。所有設(shè)備的設(shè)備文 件節(jié)點都
3、在/dev目錄下。 #:ls al /dev 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 3.設(shè)備驅(qū)動程序的特點 內(nèi)核代碼 內(nèi)核接口 內(nèi)核機制和服務(wù) 可裝載 可設(shè)置 動態(tài)性 8.1 設(shè)備驅(qū)動編程基礎(chǔ)設(shè)備驅(qū)動 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 4.設(shè)備驅(qū)動程序與整個軟硬件系統(tǒng)的關(guān)系 8.1 設(shè)備驅(qū)動編程基礎(chǔ)設(shè)備驅(qū)動 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 1.Linux的內(nèi)核模塊 Linux內(nèi)核采用可加載內(nèi)核模塊化設(shè)計 (Loadable Kernel Module,LKM) 內(nèi)核模塊:是一些可以讓操作系統(tǒng)內(nèi)核在需要時 載入和執(zhí)行的代碼。是一種目標對象文件,通常 由一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)組成。 內(nèi)
4、核的一個模塊可以以兩種方式被編譯和加載。 直接編譯進Linux內(nèi)核,隨同Linux啟動時加載; 編譯成一個可加載和刪除的模塊。 8.1 設(shè)備驅(qū)動編程基礎(chǔ)內(nèi)核模塊編程 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 8.1 設(shè)備驅(qū)動編程基礎(chǔ)內(nèi)核模塊編程 C語言程序 Linux內(nèi)核模塊 運行 用戶空間 內(nèi)核空間 入口 main() module_init()指定; 出口 main() module_exit()指定; 編譯 gcc c Makefile 連接 ld insmod 運行 直接運行 insmod 調(diào)試 gdb kdbug, kdb, kgdb等 2.Linux內(nèi)核模塊與應(yīng)用程序的區(qū)別 濱州學(xué)院
5、計算機科學(xué)技術(shù)系 吳殿紅 教育 8.1 設(shè)備驅(qū)動編程基礎(chǔ)內(nèi)核模塊編程 3.內(nèi)核模塊相關(guān)命令 insmod module.o Load the module 注意,只有超級用戶才能使用這個命令 rmmod module Unload the module lsmod List all modules loaded into the kernel 這個命令和cat /proc/modules等價 modprobe -r Load the module specified and modules it depends 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 舉例:模塊相關(guān)命令 lsmod insmo
6、d hello.o rmmod hello modprobe /lib/modules/linux版本號/modules.dep /etc/modprobe.conf modeproble r hello 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 最簡單的內(nèi)核模塊例子 #include #include #include MODULE_LICENSE(GPL); static int _init hello_init(void) printk(“Hello kernel.n); return 0; static void _exit hello_exit(void) printk(“bye by
7、e.n); module_init(hello_init); module_exit(hello_exit); 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 生成makefile文件 Makefile文件 obj-m := hello.o all: make -C /usr/src/linux-2.4.20/ M=$(shell pwd) modules clean: make -C /usr/src/linux-2.4.20/ M=$(shell pwd) modules clean 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 編譯裝載過程 $ ls hello.c Makefile $ make m
8、ake -C /usr/src/linux-2.4.20/ M=/wu/char_8 modules $ ls hello.c hello.mod.c hello.mode.o hello.o make.log Makefile modules.order $ sudo insmod hello.o $ dmesg | tail -1 Hello kernel $ lsmod | grep hello hello 1216 0 $ sudo rmmod hello $ dmesg | tail -1 bye bye.濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 不需要編寫Makefile的方法 gc
9、c編譯后加上-DMODULE -DLINUX 參數(shù) 例如:gcc -DMODULE -DLINUX -I /usr/src/linux-2.4.20/include -c -o hello.o hello.c 注意:-I選項跟著Linux內(nèi)核源代碼中Include目錄 的路徑。 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 4.內(nèi)核模塊的程序結(jié)構(gòu) 一個Linux內(nèi)核模塊主要由以下幾個部分組成。 模塊加載函數(shù)(必須) 模塊卸載函數(shù)(必須) 模塊許可證聲明(必須) 模塊參數(shù)(可選) 模塊導(dǎo)出符號(可選) 模塊作者等信息聲明(可選) 8.1 設(shè)備驅(qū)動編程基礎(chǔ)內(nèi)核模塊編程 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅
10、教育 static int _init initialization_function(void) /* 初始化代碼 */ module_init(initialization_function); 模塊加載函數(shù) 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 static void _exit cleanup_function(void) /* 釋放代碼 */ module_exit(cleanup_function); 模塊卸載函數(shù) 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 module_param(參數(shù)名,參數(shù)類型,參數(shù)讀/寫權(quán)限訪 問許可掩碼)宏為模塊聲明一個參數(shù) 支持的參數(shù)類型 byte, s
11、hort, ushort, int, uint, long, ulong, bool, charp,invbool array (module_param_array(name, type, nump, perm) 例如: static char *str_param = Linux Module Program; static int num_param = 4000; module_param(num_param, int, S_IRUGO); module_param(str_param, charp, S_IRUGO); 參數(shù)在模塊加載時傳遞 #insmod hello.o test=
12、2 模塊參數(shù) 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 導(dǎo)出符號 EXPORT_SYMBOL(符號名); EXPORT_SYMBOL_GPL(符號名); 模塊聲明與描述模塊聲明與描述 MODULE_AUTHOR(author); MODULE_DESCRIPTION(description); MODULE_VERSION(version_string); MODULE_DEVICE_TABLE(table_info); MODULE_ALIAS(alternate_name); 導(dǎo)出符號與模塊聲明與描述 濱州學(xué)院計算機科學(xué)技術(shù)系 吳殿紅 教育 #include #include #includ
13、e static char *whom = world; static int howmany = 1; module_param(howmany, int, 0444); module_param(whom, charp, S_IRUGO); static int _init hello_init(void) int i; for (i = 0; i howmany; i+) printk( “(%d) Hello, %sn”, i, whom); return 0; static void _exit hello_exit(void) printk(Goodbye worldn); MODULE_LICENSE(GPL); MODULE_DESCRIPTION(“A simple module program”); MODULE_VERSION(“V1.0”); MODULE_AUTHOR(“wdh); module
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人電車租車合同范本
- 公司民間借款合同范本
- 辦公裝修協(xié)議合同范例
- 公路養(yǎng)護補充協(xié)議合同范本
- 二手車銷售中心合同范本
- 健身俱樂部就業(yè)合同范本
- 勞務(wù)薪酬合同范例
- 2025年度家庭寵物養(yǎng)護保姆服務(wù)合同
- 公司如資金合同范本
- 兼職勞務(wù)合同范本乙方
- 現(xiàn)金盤點表完整版
- 病例展示(皮膚科)
- GB/T 39750-2021光伏發(fā)電系統(tǒng)直流電弧保護技術(shù)要求
- 教科版五年級科學(xué)下冊【全冊全套】課件
- 糖尿病運動指導(dǎo)課件
- 完整版金屬學(xué)與熱處理課件
- T∕CSTM 00640-2022 烤爐用耐高溫粉末涂料
- 304不銹鋼管材質(zhì)證明書
- 民用機場不停航施工安全管理措施
- 港口集裝箱物流系統(tǒng)建模與仿真技術(shù)研究-教學(xué)平臺課件
- 新教科版2022年五年級科學(xué)下冊第2單元《船的研究》全部PPT課件(共7節(jié))
評論
0/150
提交評論