freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

第11章嵌入式linux設備驅動開發(fā)-文庫吧在線文庫

2025-03-03 17:43上一頁面

下一頁面
  

【正文】 ? 實驗內容 —— test驅動 設備驅動概述 設備驅動簡介及驅動模塊 ? 操作系統(tǒng)是通過各種驅動程序來駕馭硬件設備的,它為用戶屏蔽了各種各樣的設備,驅動硬件是操作系統(tǒng)最基本的功能,并且提供統(tǒng)一的操作方式。 ? lsmod列出當前系統(tǒng)中加載的模塊,其中左邊第一列是模塊名,第二列是該模塊大小,第三列則是使用該模塊的對象數目。塊設備也是通過文件節(jié)點來訪問,它不僅可以提供隨機訪問,而且可以容納文件系統(tǒng)(例如硬盤、閃存等)。高字節(jié)為主設備號,底字節(jié)為次設備號。如果該設備驅動程序控制的設備不存在也不影響系統(tǒng)的運行,那么此時的設備驅動程序只是多占用了一點系統(tǒng)內存罷了。 unsigned int (*poll) (struct file *, struct poll_table_struct *)。 int (*check_media_change) (kdev_t dev)。 /* 文件標志,如 O_RDONLY、 O_NONBLOCK和 O_SYNC */ unsigned short f_count。 早期版本的字符設備注冊( 2) 設備號相關函數( 1) ? 在 ,用 dev_t類型來描述設備號( dev_t是32位數值類型,其中高 12位表示主設備號,低 20位表示次設備號)。最后調用 cdev_add()函數將設備號與 struct cdev結構進行關聯并向內核正式報告新設備的注冊,這樣新設備可以被用起來了!。由于設備在使用時通常會打開多次,也可以由不同的進程所使用,所以若有一進程想要刪除該設備,則必須保證其他設備沒有使用該設備。 ? 在最后一次釋放設備操作時關閉設備。其中,以字節(jié)為單位分配內存的函數有 kmalloc(),注意的是,kmalloc()函數返回的是物理地址,而 malloc()等返回的是線性虛擬地址,因此在驅動程序中不能使用 malloc()函數。 printk()還可以定義打印消息的優(yōu)先級。其中最常用的有端口配置寄存器( GPACON ~ GPHCON)和端口數據寄存器( GPADAT ~ GPHDAT)。然后通過對端口數據寄存器的寫操作,實現對每個 GPIO設備的控制(發(fā)亮或發(fā)聲)。系統(tǒng)中使用緩沖區(qū)與訪問請求的優(yōu)化管理(合并與重新排序)來提高系統(tǒng)性能。 /* 主設備號 */ int first_minor。 /* 指向驅動程序私有數據 */ sector_t capacity。 int (*media_changed) (struct gendisk *)。 其中參數 major為要注冊的塊設備的主設備號,如果其值等于 0,則系統(tǒng)動態(tài)分配并返回主設備號。參數 lock為自旋鎖,用于控制對所分配的隊列的訪問。對塊設備的讀寫操作被封裝到了每一個請求中。 中斷編程接口( 2) ? 其中 irq是要申請的硬件中斷號。慢速處理程序只屏蔽正在處理的中斷。按鍵硬件驅動原理圖如圖 117所示。此時要使用 KSCAN端口組,同時將 4個EINT端口配置為通用輸入端口(而不是中斷端口)。因此驅動程序中必須要解決去除抖動所產生的毛刺信號的問題。 ? 2.實驗內容 該實驗要求實現對虛擬設備(一段內存)的打開、關閉、讀寫的操作,并要通過編寫測試程序來測試虛擬設備及其驅動運行是否正常。 to exit):quit The read string is from kernel:quit $ ./test_drv_unload $ dmesg|tail –n 10 …… The major of the test device is 250 /* 當加載模塊時打印 */ This is open operation /* 當打開設備時打印 */ This is release operation /* 關閉設備時打印 */ Test device uninstalled /* 當卸載設備時打印 */ 思考與練習 ? 根據書上的提示,將本章中所述的按鍵驅動程序進行進一步的改進,并在開發(fā)板上進行測試。 to exit):Hello, everybody! The read string is from kernel:Hello, everybody! /* 從內核讀取的數據 */ Input some words to kernel(enter 39。make /* 驅動程序的編譯 */ $ insmod /* 加載 gpio驅動 */ $ cat /proc/devices /* 通過這個命令可以查到 gpio設備的主設備號 */ $ mknod /dev/gpio c 251 0 /* 假設主設備號為 251, 創(chuàng)建設備文件節(jié)點 */ 然后編譯并運行驅動測試程序。若發(fā)現在KSCAN1為低電平時(其他端口輸出均為高電平), GPF2( EINT2管腳的輸入端口)變?yōu)榈碗娖剑瑒t可以斷定按鍵K8被按住了。因此可以通過查看產生了哪個中斷,來確定在矩陣的哪一行中發(fā)生了按鍵操作(按住或釋放)。一般設置為這個設備的 device結構本身或者 NULL。設備 id就是在調用 request_irq()時傳遞給系統(tǒng)的參數 dev_id。中斷實現了硬件設備按需獲得處理器關注的機制,與查詢方式相比可以大大節(jié)省 CPU資源的開銷。 在完成對 gendisk的分配和初始化之后,調用 add_disk()函數向系統(tǒng)注冊塊設備。 其參數必須與注冊函數中的參數相同。 }。 int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long)。 /* 塊設備名稱,在 /proc/partions中顯示 */ struct hd_struct **part。 用 戶 調 用模 塊 i n i t _ m o d u l e ( ) c l e a n u p _ m o d u l e ( )內 核注 冊 設 備卸 載 設 備設 備 功 能 i n s m o d r m m o d請 求 處 理重要數據結構( 1) ? 每個塊設備物理實體由一個 gendisk結構體來表示,每個 gendisk可以支持多個分區(qū)。 塊設備驅動編程 塊設備驅動 ? 塊設備通常指一些需要以塊(如 512字節(jié))的方式寫入的設備,如 IDE硬盤、 SCSI硬盤、光驅等。 LED和蜂鳴器驅動電路 可知使用 S3C2410處理器的通用 I/O口 GPFGPF GPF6和 GPF7分別直接驅動 LED D1D1 D10以及 D9,而使用 GPB0端口驅動蜂鳴器。讀者可以通過“ ls”查看 /proc文件系統(tǒng)的內容。 ? get_free_page():獲得一個或幾個連續(xù)頁面。在這里要使用 copy_to_user()或copy
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1