樹莓派核心驅動編寫 新增與呼叫

2021-10-14 17:08:58 字數 3749 閱讀 4382

各種裝置以檔案的形式存放在/dev目錄,稱裝置檔案。

主裝置號,次裝置號

主裝置號:不同的裝置(硬碟,led)

次裝置號:同一類的多個裝置(led1,led2)

管理所有裝置的驅動

1.新增(驅動插入鍊錶順序由裝置號檢索)

編寫驅動,載入到核心

裝置名,裝置號,裝置驅動函式:操作暫存器來驅動i/o

2.查詢 呼叫

呼叫驅動程式,使用者應用去open

1.找乙個裝置驅動框架

用的是drivers下的bsr.c 檔案
2.在上面框架基礎上修改

#include

#include

#include

#include

#include

#include

#include

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 ssize_t pin4_write

(struct file *file,

const

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

static ssize_t pin4_read

(struct file *file,

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

static

intpin4_open

(struct inode * inode,

struct file * filp)

//在核心原始碼查詢struct file_operations看結構體成員,新增用到的函式

static

const

struct file_operations pin4_fops =

;static

int __init pin4_init

(void

)//驅動入口

static

void __exit pin4_exit

(void

)module_init

(pin4_init)

;//入口,是個巨集

module_exit

(pin4_exit)

;module_license

("gpl v2");

//module_author("sonny rao ");

3.生成裝置

可以在**中實現,也可以手動實現

在**中生成裝置:

pin4_class =

class_create

(this_module,

"myfirstdemo");

//**自動生成裝置

pin4_class_dev =

device_create

(pin4_class,

null

,devno,

null

,module_name)

;//建立裝置檔案

在樹莓派dev下輸入:sudo mknod 裝置名 裝置型別 主裝置號 次裝置號

例如:sudo mknod pin4 c 8

1

#include

#include

#include

#include

intmain()

else

fd =

write

(fd,

'1',1)

;close

(fd)

;return0;

}

1.把驅動**放到char目錄下(drivers資料夾下任意乙個資料夾都可以放,修改那個資料夾下的makefile)

xw@ubuntu:

~/xiaowei/system/linux-rpi-

4.14

.y/drivers/

char$ pwd

/home/xw/xiaowei/system/linux-rpi-

4.14

.y/drivers/

char

xw@ubuntu:

~/xiaowei/system/linux-rpi-

4.14

.y/drivers/

char$ cp /mnt/hgfs/gongxian/pin4/pin4driver2.c .

2.修改 makefile ,把驅動檔案新增進去(編譯成模組obj-m)

3.編譯

驅動:回到linux-rpi-4.14.y目錄

輸入命令編譯:arch=arm cross_compile=arm-linux-gnueabihf- kernel=kernel7 make modules

生成 cc drivers/

char

/pin4driver2.mod.o

ld [m] drivers/

char

/pin4driver2.ko

應用**:把c檔案cp過來,編譯

cp /mnt/hgfs/gongxian/pin4/pin4text.c .

arm-linux-gnueabihf-gcc pin4text.c -o pin4test

1.把2個檔案拷貝到樹莓派

scp drivers/

char

/pin4driver2.ko pi@*

*樹莓派ip位址**:

/home/pi

scp pin4text pi@*

*樹莓派ip位址**:

/home/pi

2.載入核心驅動

sudo insmod pin4driver2.ko

dev目錄下生成pin4驅動

3.執行應用程式,檢視核心列印資料

執行開啟open會失敗,原因是因為沒許可權。

給裝置驅動檔案設定所有使用者都可訪問的許可權:sudo chmod 666

/dev/pin4

執行:.

/pin4text

檢視核心列印:dmesg

dmesg |grep pin4

4.刪除驅動

列出驅動模組:lsmod

刪除驅動模組:rmmod 驅動模組名(lsmod出來的模組名)

師承上官可程式設計 —— 陳立臣

關於樹莓派核心編譯和驅動編寫 1

一周前入手了一塊樹莓派,算上配件總共307,按照論壇的方法燒好sd卡,啟動,那麼接下來就要開始折騰了。鑑於本人是乙個新手驅動的事實,於是著手開始在pi上寫驅動。那麼按照驅動的基礎知識,編寫linux驅動,必然是先要有相同版本的的核心原始碼。uname a看了一下,3.18.5的核心,在github上...

樹莓派核心驅動編寫 控制GPIO的輸出

匯流排位址,實體地址,虛擬位址 參考博文 位址概念 樹莓派 1.bcm2835 樹莓派3b cpu型號,是arm cotexa53架構 2440 2410 cpu型號 是arm9架構 2.樹莓派是32位系統,1g 記憶體,只能識別949m 3.匯流排位址4g,實體地址1g,虛擬位址4g 1.晶元目錄...

樹莓派 Linux 核心驅動編譯

寫好驅動 pin4module.c include include include include include include include include static struct class pin4 class 建立乙個類 static struct device pin4 class...