嵌入式Linux設備驅動開發之:實驗內容——test驅動

2021-01-09 電子產品世界

本文引用地址:http://www.eepw.com.cn/article/257106.htm1.實驗目的

該實驗是編寫最簡單的字符驅動程序,這裡的設備也就是一段內存,實現簡單的讀寫功能,並列出常用格式的Makefile以及驅動的加載和卸載腳本。讀者可以熟悉字符設備驅動的整個編寫流程。

2.實驗內容

該實驗要求實現對虛擬設備(一段內存)的打開、關閉、讀寫的操作,並要通過編寫測試程序來測試虛擬設備及其驅動運行是否正常。

3.實驗步驟

(1)編寫代碼。

這個簡單的驅動程序的原始碼如下所示:

/*test_drv.c*/

#includelinux/module.h>

#includelinux/init.h>

#includelinux/fs.h>

#includelinux/kernel.h>

#includelinux/slab.h>

#includelinux/types.h>

#includelinux/errno.h>

#includelinux/cdev.h>

#includeasm/uaccess.h>

#defineTEST_DEVICE_NAMEtest_dev

#defineBUFF_SZ1024

/*全局變量*/

staticstructcdevtest_dev;

unsignedintmajor=0;

staticchar*data=NULL;

/*讀函數*/

staticssize_ttest_read(structfile*file,

char*buf,size_tcount,loff_t*f_pos)

{

intlen;

if(count0)

{

return-EINVAL;

}

len=strlen(data);

count=(len>count)?count:len;

if(copy_to_user(buf,data,count))/*將內核緩衝的數據拷貝到用戶空間*/

{

return-EFAULT;

}

returncount;

}

/*寫函數*/

staticssize_ttest_write(structfile*file,constchar*buffer,

size_tcount,loff_t*f_pos)

{

if(count0)

{

return-EINVAL;

}

memset(data,0,BUFF_SZ);

count=(BUFF_SZ>count)?count:BUFF_SZ;

if(copy_from_user(data,buffer,count))/*將用戶緩衝的數據複製到內核空間*/

{

return-EFAULT;

}

returncount;

}

/*打開函數*/

staticinttest_open(structinode*inode,structfile*file)

{

printk(Thisisopenoperation\n);

/*分配並初始化緩衝區*/

data=(char*)kmalloc(sizeof(char)*BUFF_SZ,GFP_KERNEL);

if(!data)

{

return-ENOMEM;

}

memset(data,0,BUFF_SZ);

return0;

}

/*關閉函數*/

staticinttest_release(structinode*inode,structfile*file)

{

printk(Thisisreleaseoperation\n);

if(data)

{

kfree(data);/*釋放緩衝區*/

data=NULL;/*防止出現野指針*/

}

return0;

}

/*創建、初始化字符設備,並且註冊到系統*/

staticvoidtest_setup_cdev(structcdev*dev,intminor,

structfile_operations*fops)

{

interr,devno=MKDEV(major,minor);

cdev_init(dev,fops);

dev->owner=THIS_MODULE;

dev->ops=fops;

err=cdev_add(dev,devno,1);

if(err)

{

printk(KERN_NOTICEError%daddingtest%d,err,minor);

}

}

相關焦點

  • 嵌入式Linux設備驅動開發之:GPIO驅動程序實例
    在此主要以發光二極體(LED)和蜂鳴器為例,討論GPIO設備的驅動程序。它們的硬體驅動電路的原理圖如圖11.4所示。圖11.4LED(左)和蜂鳴器(右)的驅動電路原理圖在圖11.4中,可知使用S3C2410處理器的通用I/O口GPF4、GPF5、GPF6和GPF7分別直接驅動LEDD12、D11、D10以及D9,而使用GPB0埠驅動蜂鳴器。4個LED分別在對應埠(GPF4~GPF7)為低電平時發亮,而蜂鳴器在GPB0為高電平時發聲。
  • 「正點原子Linux連載」第四十二章新字符設備驅動實驗
    經過前兩章實驗的實戰操作,我們已經掌握了Linux字符設備驅動開發的基本步驟,字符設備驅動開發重點是使用register_chrdev函數註冊字符設備,當不再使用設備的時候就使用unregister_chrdev函數註銷字符設備,驅動模塊加載成功以後還需要手動使用mknod命令創建設備節點。
  • 嵌入式Linux開發環境的搭建之:嵌入式開發環境的搭建
    本文引用地址:http://www.eepw.com.cn/article/257141.htm5.1嵌入式開發環境的搭建5.1.1嵌入式交叉編譯環境的搭建linux作業系統文章專題:linux作業系統詳解(linux不再難懂)交叉編譯的概念在第4章中已經詳細講述過,搭建交叉編譯環境是嵌入式開發的第一步,也是必備的一步。
  • 從串口驅動到Linux驅動模型,想轉Linux的必會!
    另外,依照文件的內容,又大致可以分為:1、純文本文件(ASCII):這是Unix系統中最多的一種文件類型,之所以稱為純文本文件,是因為內容可以直接讀到的數據,例如數字、字母等等。設置文件幾乎都屬於這種文件類型。舉例來說,使用命令「cat ~/.bashrc」就可以看到該文件的內容(cat是將文件內容讀出來)。
  • 數字溫度傳感器DS1621在Linux下的IIC接口驅動設計
    而Linux作為一個原始碼公開、易於裁剪的作業系統,非常適合於嵌入式系統的應用。Linux作業系統下的嵌入式設備驅動,通過IIC總線,實現ARM與外圍模塊間的協同工作,有著廣泛的應用。驅動程序則為應用程式和硬體設備之間提供了操作訪問的接口,使應用程式可以像操作普通文件一樣對硬體設備操作訪問。
  • 程式設計師及嵌入式的一些學習建議
    每學一章節都要通過相關實驗來來驗證你從書上學到的東西,同時提高自己編寫代碼,調試程序的能力。這個過程根據不同學員的基礎不同,大概要花上1 ~ 2個月時間。學完這些課程後,你就有了再現有的嵌入式linux平臺上進行應用程式設計開發的能力,到一些嵌入式軟體公司去,能夠勝任在現有的嵌入式linux平臺上進行上層的應用程式開發工作。
  • Linux基礎命令之:實驗內容及小結
    本文引用地址:http://www.eepw.com.cn/article/257155.htm2.4實驗內容2.4.1在Linux下解壓常見軟體在Linux下安裝一個完整的軟體(嵌入式Linux的必備工具——交叉編譯工具),掌握Linux常見命令
  • 嵌入式Linux的GDB調試環境建立
    嵌入式Linux的GDB調試環境由Host和Target兩部分組成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。
  • 嵌入式Win CE中CAN總線控制器的驅動設計與實現
    嵌入式作業系統(Real-time Embedded OperatingSystem,RTOS或EOS)作為一種實時的、支持嵌入式系統應用的作業系統軟體,成為嵌入式系統(包括硬、軟體系統)極為重要的組成部分,通常包括與硬體相關的底層驅動軟體、系統內核、設備驅動接口、通信協議、圖形界面、標準化瀏覽器Browser等。
  • WinCE5.0的USB Camera流接口驅動開發
    但是由於嵌入式硬體環境的多樣性以及WinCE5.0對USB設備驅動開發只提供了一些底層支持,攝像頭廠商尚未提供WinCE5.0下USB攝像頭的驅動,因此開發出WinCE5.0下USB攝像頭驅動具有實際的意義和價值。本文正是針對這一情況,對WinCE5.0下USB設備驅動開發進行研究,並設計出基於流接口驅動模型的USB攝像頭驅動程序。
  • 【連載】嵌入式Linux開發教程:Linux內核
    Linus當時提交到Minix新聞組的原名並不是Linux,而是Freax,取自「Free」和「Unix」兩個單詞,為「免費的Unix」之意。但當時的管理員並不喜歡「Freax」這個名稱,並以「Linus’s Minix」之意,將Freax放到了一個名為「Linux」的目錄下,之後便一直用Linux這個名稱。
  • 如何在MIPS平臺上使用Yocto設備定製的嵌入式系統Linux
    在這些設備上運行的軟體很有可能是高度定製的針對嵌入式系統的Linux。若要使用OS用作特定的任務,或優化工作流,那麼,最理想的便是運行定製版Linux。 本文將簡要闡述設計師如何使用Yocto開源基礎設備,在MIPS平臺上定製嵌入式Linux發行版——使設計師能聚焦於產品本身,而不是創建定製發行版帶來的複雜性。
  • 基於嵌入式Linux的語音識別系統硬軟體設計
    採用嵌入式語音識別技術使得設備具有功耗低、使用簡便、靈活等優點,擺脫了複雜按鍵和按鈕的困擾,在服務機器人、智能家居及消費電子等領域發揮著重要作用。  2.系統構成與原理  語音識別主要包括兩個階段:訓練階段和識別階段。在訓練或識別過程中,都必須對輸入語音進行預處理和特徵提取。
  • 在VIM中實現對嵌入式軟體的調試
    因此,在VIM中實現對嵌入式軟體的調試,我們便得到了一個高效、穩定的嵌入式Linux的開發環境。 交叉編譯器:arm―linux―gcc3.4.1。 交叉調試器:自編譯GNU gdb6.8。 目標板gdb服務端:自編譯GNU gdbserver6.8。 跨平臺開發工具路徑:~/build-tools/arm―linux,且已經設置好系統路徑變量。 測試代碼及程序路徑:~/test,包含程序代碼test.c及Makefile。
  • 基於嵌入式WinCE的CAN總線控制器驅動設計
    嵌入式作業系統(:Real-time Embedded OperatingSystem,RTOs或EOs)作為一種實時的、支持嵌入式系統應用的作業系統軟體,成為嵌入式系統(包括硬、軟體系統)極為重要的組成部分,通常包括與硬體相關的底層驅動軟體、系統內核、設備驅動接口、通信協議、圖形界面、標準化瀏覽器Browser等。
  • Linux2.6內核驅動移植參考
    作者:晏渭川 隨著Linux2.6的發布,由於2.6內核做了教的改動,各個設備的驅動程序在不同程度上要 進行改寫。為了方便各位Linux愛好者我把自己整理的這分文檔share出來。該文當列舉 了2.6內核同以前版本的絕大多數變化,可惜的是由於時間和精力有限沒有詳細列出各個 函數的用法。
  • 實現了多鍵齊按和重複按鍵的嵌入式系統鍵盤驅動設計
    實現了多鍵齊按和重複按鍵的嵌入式系統鍵盤驅動設計 工程師黃明星 發表於 2018-06-26 10:39:00 1 鍵盤驅動程序的設計 隨著電子信息技術飛速發展,嵌入式系統構成的各種設備得到了廣泛的應用, 嵌入式
  • 嵌入式開發:STM32 FSMC接口驅動TFT-LCD設計
    本文提出了一種能直接驅動數字液晶屏的設計方案,方案先介紹了TFT數字彩屏的工作原理,利用STM32處理器的FSMC接口設計的硬體電路和軟體程序均能對顯示控制晶片進行有效的控制。在實際應用中顯示清晰流暢,並且CPU有足夠的時間來處理用戶程序。該方案能成功應用在電腦橫機的人機界面顯示中,且其硬體電路結構簡單、控制方式靈活、對於其他型號的接口晶片也能提供參考。
  • 從RTOS到Linux的應用移植
    儘管一度曾被認為是不重要的平臺,但今天嵌入式Linux已經成為主流,廣泛應用於消費電子、手持和無線設備、數據聯網以及電信設備等領域。Google公司在2007年11月發布的Android手機作業系統正是基於Linux內核的作業系統,使得Linux在數字行動電話業取得跨越式發展。
  • 嵌入式系統中USB主機控制器的設計
    過去USB僅應用於個人計算機,而在嵌入式系統領域的巨大潛力還沒有開發出來,USB在嵌入式系統中的應用包括 主機控制器是集成主板晶片組的一部分,USB堆棧則包含主板晶片及通用主機控制器接口(UCHI)和開放主機控制器接口(OHCI)驅動程序以及USB驅動程序(usbd.sys),在PC上實現USB需要上述領域的專門技術。 在嵌入式USB系統中,其主要組成部分與PC系統類似,如嵌入式主機控制器晶片、帶OHCI堆棧的實時作業系統(RTOS)以及專用驅動程序。