樹莓派驅動框架

2021-10-19 02:52:36 字數 2916 閱讀 7072

#include

//file_operations宣告

#include

//module_init module_exit宣告

#include

//__init __exit 巨集定義宣告

#include

//class devise宣告

#include

//copy_from_user 的標頭檔案

#include

//裝置號 dev_t 型別宣告

#include

//ioremap iounmap的標頭檔案

static

struct class* pin4_class;

static

struct device* pin4_class_dev;

static dev_t devno;

//裝置號

static

int major =

231;

//主裝置號

static

int minor =0;

//次裝置號

static

char

* module_name =

"pin4"

;//模組名

static

intpin4_open

(struct inode* inode,

struct file* file)

static

intpin4_read

(struct file* file,

char __user* buf, size_t count, loff_t* ppos)

static ssize_t pin4_write

(struct file* file,

const

char __user* buf, size_t count, loff_t* ppos)

static

struct file_operations pin4_fops =

;int __init pin4_drv_init

(void

)//實際驅動入口

void __exit pin4_drv_exit

(void

)module_init

(pin4_drv_init)

;//入口,核心載入該驅動的時候,這個巨集會被呼叫

module_exit

(pin4_drv_exit)

;module_license

("gpl v2");

//宣告gpl規範

檔名:pin4driver.c!!!編譯前先將pin4driver.c拷貝到核心原始碼linux-rpi-4.14.y/drivers/char下,並修改makefile(1)進入核心原始碼中linux-rpi-4.14.y/drivers/char路徑,修改makefile

cd /***/***/linux-rpi-4.14.y/drivers/char

vi makefile

(2)加入以下控制代碼:

(3)編譯:!!在/linux-rpi-4.14.y路徑下編譯

arch=arm cross_compile=arm-linux-gnueabihf- kernel=kernel7 make modules
linux-rpi-4.14.y/drivers/char路徑生成了.ko檔案:

(1)將底層驅動檔案和交叉編譯好的上層驅動檔案或c檔案(在樹莓派編譯)拷貝到樹莓派(此處步驟不作說明)

(2)載入(pin4)核心驅動:

sudo insmod pin4driver.ko
拓展:刪除(pin4)核心驅動:sudo rmmod pin4driver可檢視 dev 底下是否生成了 pin4 裝置驅動,並檢視裝置號:

或檢視驅動:

(3)讓所有使用者都可以讀寫/dev/pin4,(否則上層驅動檔案無法讀寫/dev/pin4):

sudo

chmod 666 /dev/pin4

(4)執行編譯 / 交叉編譯好的上層驅動檔案(5)檢視核心啟動資訊:

dmesg

樹莓派驅動框架

檔名為pin4driver.c include file operations宣告 include module init module exit宣告 include init exit 巨集定義宣告 include class devise宣告 include copy from user 的標頭...

基於樹莓派的Linux字元裝置驅動框架

include file operations宣告 include module init module exit宣告 include init exit 巨集定義宣告 include class devise宣告 include copy from user 的標頭檔案 include 裝置號 d...

樹莓派字元驅動模板

include file operations宣告 include module init module exit宣告 include init exit巨集定義宣告 include class device宣告 include copy from user的標頭檔案 include 裝置號 dev...